From: Piotr Dabrowski Date: Wed, 2 Oct 2013 08:18:58 +0000 (+0200) Subject: application sources from tizen_2.2 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=5a6aa2af25a18e5692fa99723fa51d53a75497c5;hp=20dddaaf4886aef1e80ead956fa67aecf76c2f8a;p=apps%2Fweb%2Fsample%2FSensorBall.git application sources from tizen_2.2 Change-Id: I3f370188c4dbdc9060b609cb788b3b56b37d5526 --- diff --git a/description.xml b/description.xml new file mode 100755 index 0000000..dca773e --- /dev/null +++ b/description.xml @@ -0,0 +1,10 @@ + + + + SensorBall + 1.0.0 + sensorball-snapshot.png + + A sample application demonstrating the tizen device API usage. + + diff --git a/description.xsl b/description.xsl new file mode 100755 index 0000000..bb92b88 --- /dev/null +++ b/description.xsl @@ -0,0 +1,97 @@ + + + + + + + + + + + + + + + + + + + +
+ + + +
+ Type: JavaScript +

+ +

+
+ + + + + +
+ + +
+ +
diff --git a/project/.project b/project/.project new file mode 100644 index 0000000..7f6d88c --- /dev/null +++ b/project/.project @@ -0,0 +1,57 @@ + + + SensorBall + + + + + + org.eclipse.wst.common.project.facet.core.builder + + + + + org.eclipse.wst.jsdt.core.javascriptValidator + + + + + json.validation.builder + + + + + org.tizen.web.jslint.nature.JSLintBuilder + + + + + org.tizen.web.css.nature.CSSBuilder + + + + + org.eclipse.wst.validation.validationbuilder + + + + + org.tizen.web.project.builder.WebBuilder + + + usedLibraryType + WebUIFramework + + + + + + json.validation.nature + org.tizen.web.jslint.nature.JSLintNature + org.tizen.web.css.nature.CSSNature + org.eclipse.wst.jsdt.core.jsNature + org.eclipse.wst.common.project.facet.core.nature + org.eclipse.wst.common.modulecore.ModuleCoreNature + org.tizen.web.project.builder.WebNature + + diff --git a/project/AUTHORS b/project/AUTHORS new file mode 100644 index 0000000..16a09fc --- /dev/null +++ b/project/AUTHORS @@ -0,0 +1,7 @@ +Tomasz Lukawski +Pawel Sierszen +Piotr Wronski +Artur Kobylinski +Aniela Rudy-Gawecka +Tomasz Paciorek +Dariusz Paziewski diff --git a/project/LICENSE.Flora b/project/LICENSE.Flora new file mode 100644 index 0000000..4a0af40 --- /dev/null +++ b/project/LICENSE.Flora @@ -0,0 +1,206 @@ +Flora License + +Version 1.1, April, 2013 + +http://floralicense.org/license/ + +TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + +1. Definitions. + +"License" shall mean the terms and conditions for use, reproduction, +and distribution as defined by Sections 1 through 9 of this document. + +"Licensor" shall mean the copyright owner or entity authorized by +the copyright owner that is granting the License. + +"Legal Entity" shall mean the union of the acting entity and +all other entities that control, are controlled by, or are +under common control with that entity. For the purposes of +this definition, "control" means (i) the power, direct or indirect, +to cause the direction or management of such entity, +whether by contract or otherwise, or (ii) ownership of fifty percent (50%) +or more of the outstanding shares, or (iii) beneficial ownership of +such entity. + +"You" (or "Your") shall mean an individual or Legal Entity +exercising permissions granted by this License. + +"Source" form shall mean the preferred form for making modifications, +including but not limited to software source code, documentation source, +and configuration files. + +"Object" form shall mean any form resulting from mechanical +transformation or translation of a Source form, including but +not limited to compiled object code, generated documentation, +and conversions to other media types. + +"Work" shall mean the work of authorship, whether in Source or Object form, +made available under the License, as indicated by a copyright notice +that is included in or attached to the work (an example is provided +in the Appendix below). + +"Derivative Works" shall mean any work, whether in Source or Object form, +that is based on (or derived from) the Work and for which the editorial +revisions, annotations, elaborations, or other modifications represent, +as a whole, an original work of authorship. For the purposes of this License, +Derivative Works shall not include works that remain separable from, +or merely link (or bind by name) to the interfaces of, the Work and +Derivative Works thereof. + +"Contribution" shall mean any work of authorship, including the original +version of the Work and any modifications or additions to that Work or +Derivative Works thereof, that is intentionally submitted to Licensor +for inclusion in the Work by the copyright owner or by an individual or +Legal Entity authorized to submit on behalf of the copyright owner. +For the purposes of this definition, "submitted" means any form of +electronic, verbal, or written communication sent to the Licensor or +its representatives, including but not limited to communication on +electronic mailing lists, source code control systems, and issue +tracking systems that are managed by, or on behalf of, the Licensor +for the purpose of discussing and improving the Work, but excluding +communication that is conspicuously marked or otherwise designated +in writing by the copyright owner as "Not a Contribution." + +"Contributor" shall mean Licensor and any individual or Legal Entity +on behalf of whom a Contribution has been received by Licensor and +subsequently incorporated within the Work. + +"Tizen Certified Platform" shall mean a software platform that complies +with the standards set forth in the Tizen Compliance Specification +and passes the Tizen Compliance Tests as defined from time to time +by the Tizen Technical Steering Group and certified by the Tizen +Association or its designated agent. + +2. Grant of Copyright License. Subject to the terms and conditions of +this License, each Contributor hereby grants to You a perpetual, +worldwide, non-exclusive, no-charge, royalty-free, irrevocable +copyright license to reproduce, prepare Derivative Works of, +publicly display, publicly perform, sublicense, and distribute the +Work and such Derivative Works in Source or Object form. + +3. Grant of Patent License. Subject to the terms and conditions of +this License, each Contributor hereby grants to You a perpetual, +worldwide, non-exclusive, no-charge, royalty-free, irrevocable +(except as stated in this section) patent license to make, have made, +use, offer to sell, sell, import, and otherwise transfer the Work +solely as incorporated into a Tizen Certified Platform, where such +license applies only to those patent claims licensable by such +Contributor that are necessarily infringed by their Contribution(s) +alone or by combination of their Contribution(s) with the Work solely +as incorporated into a Tizen Certified Platform to which such +Contribution(s) was submitted. If You institute patent litigation +against any entity (including a cross-claim or counterclaim +in a lawsuit) alleging that the Work or a Contribution incorporated +within the Work constitutes direct or contributory patent infringement, +then any patent licenses granted to You under this License for that +Work shall terminate as of the date such litigation is filed. + +4. Redistribution. You may reproduce and distribute copies of the +Work or Derivative Works thereof pursuant to the copyright license +above, in any medium, with or without modifications, and in Source or +Object form, provided that You meet the following conditions: + + 1. You must give any other recipients of the Work or Derivative Works + a copy of this License; and + 2. You must cause any modified files to carry prominent notices stating + that You changed the files; and + 3. You must retain, in the Source form of any Derivative Works that + You distribute, all copyright, patent, trademark, and attribution + notices from the Source form of the Work, excluding those notices + that do not pertain to any part of the Derivative Works; and + 4. If the Work includes a "NOTICE" text file as part of its distribution, + then any Derivative Works that You distribute must include a readable + copy of the attribution notices contained within such NOTICE file, + excluding those notices that do not pertain to any part of + the Derivative Works, in at least one of the following places: + within a NOTICE text file distributed as part of the Derivative Works; + within the Source form or documentation, if provided along with the + Derivative Works; or, within a display generated by the Derivative Works, + if and wherever such third-party notices normally appear. + The contents of the NOTICE file are for informational purposes only + and do not modify the License. You may add Your own attribution notices + within Derivative Works that You distribute, alongside or as an addendum + to the NOTICE text from the Work, provided that such additional attribution + notices cannot be construed as modifying the License. You may add Your own + copyright statement to Your modifications and may provide additional or + different license terms and conditions for use, reproduction, or + distribution of Your modifications, or for any such Derivative Works + as a whole, provided Your use, reproduction, and distribution of + the Work otherwise complies with the conditions stated in this License + and your own copyright statement or terms and conditions do not conflict + the conditions stated in the License including section 3. + +5. Submission of Contributions. Unless You explicitly state otherwise, +any Contribution intentionally submitted for inclusion in the Work +by You to the Licensor shall be under the terms and conditions of +this License, without any additional terms or conditions. +Notwithstanding the above, nothing herein shall supersede or modify +the terms of any separate license agreement you may have executed +with Licensor regarding such Contributions. + +6. Trademarks. This License does not grant permission to use the trade +names, trademarks, service marks, or product names of the Licensor, +except as required for reasonable and customary use in describing the +origin of the Work and reproducing the content of the NOTICE file. + +7. Disclaimer of Warranty. Unless required by applicable law or +agreed to in writing, Licensor provides the Work (and each +Contributor provides its Contributions) on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or +implied, including, without limitation, any warranties or conditions +of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A +PARTICULAR PURPOSE. You are solely responsible for determining the +appropriateness of using or redistributing the Work and assume any +risks associated with Your exercise of permissions under this License. + +8. Limitation of Liability. In no event and under no legal theory, +whether in tort (including negligence), contract, or otherwise, +unless required by applicable law (such as deliberate and grossly +negligent acts) or agreed to in writing, shall any Contributor be +liable to You for damages, including any direct, indirect, special, +incidental, or consequential damages of any character arising as a +result of this License or out of the use or inability to use the +Work (including but not limited to damages for loss of goodwill, +work stoppage, computer failure or malfunction, or any and all +other commercial damages or losses), even if such Contributor +has been advised of the possibility of such damages. + +9. Accepting Warranty or Additional Liability. While redistributing +the Work or Derivative Works thereof, You may choose to offer, +and charge a fee for, acceptance of support, warranty, indemnity, +or other liability obligations and/or rights consistent with this +License. However, in accepting such obligations, You may act only +on Your own behalf and on Your sole responsibility, not on behalf +of any other Contributor, and only if You agree to indemnify, +defend, and hold each Contributor harmless for any liability +incurred by, or claims asserted against, such Contributor by reason +of your accepting any such warranty or additional liability. + +END OF TERMS AND CONDITIONS + +APPENDIX: How to apply the Flora License to your work + +To apply the Flora License to your work, attach the following +boilerplate notice, with the fields enclosed by brackets "[]" +replaced with your own identifying information. (Don't include +the brackets!) The text should be enclosed in the appropriate +comment syntax for the file format. We also recommend that a +file or class name and description of purpose be included on the +same "printed page" as the copyright notice for easier +identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + Licensed under the Flora License, Version 1.1 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://floralicense.org/license/ + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + diff --git a/project/NOTICE b/project/NOTICE new file mode 100644 index 0000000..092bc04 --- /dev/null +++ b/project/NOTICE @@ -0,0 +1,4 @@ +Copyright (c) 2013 Samsung Electronics Co., Ltd. All rights reserved. +Except as noted, this software is licensed under Flora License, Version 1.1 +Please, see the LICENSE.Flora file for Flora License, Version 1.1 terms and conditions. + diff --git a/project/config.xml b/project/config.xml new file mode 100644 index 0000000..6ba265a --- /dev/null +++ b/project/config.xml @@ -0,0 +1,10 @@ + + + + + + Sensor Ball + + + + diff --git a/project/css/style.css b/project/css/style.css new file mode 100644 index 0000000..9146e9b --- /dev/null +++ b/project/css/style.css @@ -0,0 +1,52 @@ +html, body { + margin: 0px; + padding: 0px; +} + +body { + overflow: hidden; +} + +.ui-content{ + background-size: 100%; +} + +.background1 { + background-image: url('../images/background1.jpg'); +} + +.background2 { + background-image: url('../images/background2.jpg'); +} + +.background3 { + background-image: url('../images/background3.jpg'); + background-color: #000; + overflow: hidden; +} + +.ball { + position: absolute; + left: 0px; + top: 0px; + width: 86px; + height: 86px; +} + +.sun { + position: absolute; + width: 86px; + height: 86px; + left: 0px; + top: 0px; + z-index:50; +} + +#main { + width: 100%; + height: 100%; +} + +.ui-tabbar-margin-back { + margin-right:0 !important; +} diff --git a/project/icon.png b/project/icon.png new file mode 100644 index 0000000..5934757 Binary files /dev/null and b/project/icon.png differ diff --git a/project/images/background1.jpg b/project/images/background1.jpg new file mode 100644 index 0000000..691b581 Binary files /dev/null and b/project/images/background1.jpg differ diff --git a/project/images/background1.png b/project/images/background1.png new file mode 100644 index 0000000..aa234d3 Binary files /dev/null and b/project/images/background1.png differ diff --git a/project/images/background2.jpg b/project/images/background2.jpg new file mode 100644 index 0000000..dd4fa6b Binary files /dev/null and b/project/images/background2.jpg differ diff --git a/project/images/background2.png b/project/images/background2.png new file mode 100644 index 0000000..4dddfc1 Binary files /dev/null and b/project/images/background2.png differ diff --git a/project/images/background3.jpg b/project/images/background3.jpg new file mode 100644 index 0000000..1348b1d Binary files /dev/null and b/project/images/background3.jpg differ diff --git a/project/images/background3.png b/project/images/background3.png new file mode 100644 index 0000000..45a5c59 Binary files /dev/null and b/project/images/background3.png differ diff --git a/project/images/ball1.png b/project/images/ball1.png new file mode 100755 index 0000000..d5113c0 Binary files /dev/null and b/project/images/ball1.png differ diff --git a/project/images/balloon.png b/project/images/balloon.png new file mode 100755 index 0000000..d371669 Binary files /dev/null and b/project/images/balloon.png differ diff --git a/project/images/earth.png b/project/images/earth.png new file mode 100755 index 0000000..0cd0d5b Binary files /dev/null and b/project/images/earth.png differ diff --git a/project/images/face.png b/project/images/face.png new file mode 100644 index 0000000..7bdd43c Binary files /dev/null and b/project/images/face.png differ diff --git a/project/images/sun.png b/project/images/sun.png new file mode 100755 index 0000000..5b737f6 Binary files /dev/null and b/project/images/sun.png differ diff --git a/project/index.html b/project/index.html new file mode 100644 index 0000000..56db864 --- /dev/null +++ b/project/index.html @@ -0,0 +1,45 @@ + + + + + + +Sensor ball + + + + + + + +
+
+

Sensor ball

+
+
+
+ +
+
+
+
+ +
+
+
+ + \ No newline at end of file diff --git a/project/js/main.js b/project/js/main.js new file mode 100644 index 0000000..df5b632 --- /dev/null +++ b/project/js/main.js @@ -0,0 +1,532 @@ +/* + * Copyright 2013 Samsung Electronics Co., Ltd + * + * Licensed under the Flora License, Version 1.1 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://floralicense.org/license/ + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +/*global $: false, tizen: false, navigator: false, app: true*/ + +var app = { + sensor: null, + R: 2000.0, // // gravity constant * m * M + + gameWidth: 0, + gameHeight: 0, + ballWidth: 0, + ballHeight: 0, + sunWidth: 0, + sunHeight: 0, + ballX: 0, + ballY: 0, + dX: 0, + dY: 0, + sunX: 0, + sunY: 0, + + backgroundWidth: 0, + backgroundHeight: 0, + backgroundTop: 0, + backgroundLeft: 0, + + resistance: 0.98, // air + friction: 0.90, // bounce + sideFriction: 0.95, + frictionC: 0.002, + repulse: 0.6, + cdd: -0.3, + + timeout: null, + current: 'ball', + event: null, + animationInterval: 40, + + /** + * Draw earth background position + * @param {int} x current x earth position + * @param {int} y current y earth position + */ + earthUpdateBackgroundPosition: function earthUpdateBackgroundPosition(x, y) { + "use strict"; + var rX, rY, + cX, cY, + tX, tY, + bdX, bdY, + br; + + rX = -30.0; + rY = -30.0; + + cX = (this.gameWidth - this.backgroundWidth) / 2; + cY = (this.gameHeight - this.backgroundHeight) / 2; + + tX = cX + (-x * rX); + tY = cY + (y * rY); + + bdX = tX - this.backgroundLeft; + bdY = tY - this.backgroundTop; + + br = 0.2; + + this.backgroundLeft += bdX * br; + this.backgroundTop += bdY * br; + + $('.background').css('background-position', (this.backgroundLeft - 330) + 'px ' + (this.backgroundTop - 330) + 'px'); + }, + + /** + * Draw sun position + * @param {int} x current x earth position + * @param {int} y current y earth position + */ + earthUpdateSunPosition: function earthUpdateSunPosition(x, y) { + "use strict"; + var rX, rY, + cX, cY, + tX, tY, + bdX, bdY, + br; + + rX = -8.0; + rY = -8.0; + + cX = (this.gameWidth - this.sunWidth) / 2; + cY = (this.gameHeight - this.sunHeight) / 2; + + tX = cX + (-x * rX); + tY = cY + (y * rY); + + bdX = tX - this.sunX; + bdY = tY - this.sunY; + + br = 0.2; + + this.sunX += bdX * br; + this.sunY += bdY * br; + + $('#sun').css('left', this.sunX + 'px'); + $('#sun').css('top', this.sunY + 'px'); + $('#sun').show(); + }, + + /** + * Deceleration - used when the earth leaves the Sun's gravitation + */ + deceleration: function deceleration() { + "use strict"; + this.dX *= 0.6; + this.dY *= 0.6; + }, + + /** + * Draw the next animation frame for the 'earth' tab + */ + earthEvents: function earthEvents() { + "use strict"; + + var event, borderTolerance, + x, y, + dXl, dYl, + d, + d2, + ddx, ddy, + ratio; + + event = this.event; + borderTolerance = 30; // when Earth reach a border, then Earth is "moving" + + x = -event.accelerationIncludingGravity.x; + y = -event.accelerationIncludingGravity.y; + + // calculate X and Y distances between the Sun and Earth + dXl = (this.sunX + this.sunWidth / 2 - (this.ballX + (this.ballWidth / 2))); // x distance + dYl = (this.sunY + this.sunHeight / 2 - (this.ballY + (this.ballHeight / 2))); // y distance + + if (Math.abs(dXl) < 1) { + dXl = dXl < 0 ? -1 : 1; // round to 1 * sign + } + if (Math.abs(dYl) < 1) { + dYl = dYl < 0 ? -1 : 1; // round to 1 * sign + } + + // distance squared + d2 = Math.pow(dXl, 2) + Math.pow(dYl, 2); + // distance + d = Math.sqrt(d2); + + // acceleration is proportional to 1/d2 [a=GM/r^2] + // X component is also proportional to dXl / d + ddx = (this.R * dXl) / (d2 * d); + ddy = (this.R * dYl) / (d2 * d); + + // apply acceleration to speed + this.dX += ddx; + this.dY += ddy; + + ratio = Math.sqrt(Math.pow(this.dX, 2) + Math.pow(this.dY, 2)) / 25; // max speed + if (ratio > 1) { // speed limit achieved + this.dX /= ratio; + this.dY /= ratio; + } + + // apply speed to Earth position + this.ballX += this.dX; + this.ballY += this.dY; + + // What do it when the earth leaves gravitation of the Sun?; + if (this.ballX > (this.gameWidth + borderTolerance)) { + this.ballX = -borderTolerance; this.deceleration(); + } + if (this.ballY > (this.gameHeight + borderTolerance)) { + this.ballY = -borderTolerance; this.deceleration(); + } + if (this.ballX < -borderTolerance) { + this.ballX = this.gameWidth + borderTolerance; this.deceleration(); + } + if (this.ballY < -borderTolerance) { + this.ballY = this.gameHeight + borderTolerance; this.deceleration(); + } + + // update Earth position + $('.ball').css('left', this.ballX + 'px'); + $('.ball').css('top', this.ballY + 'px'); + + // relative depth Sun / Earth + if (this.dY > 0) { + $('.ball').css('z-index', 100); + } else { + $('.ball').css('z-index', 20); + } + + this.earthUpdateBackgroundPosition(x, y); + this.earthUpdateSunPosition(x, y); + }, + + /** + * Checks if the ball already was on the edge in the previous step + * + * If so, this is not a 'real' bounce - the ball is just laying on the edge + * Uses globals: ballX, ballY, ballWidth, ballHeight, gameWidth, gameHeight + * + * @return {Object} + */ + shouldVibrateIfHitsEdge: function shouldVibrateIfHitsEdge() { + "use strict"; + var ret = { + x: true, + y: true + }; + + if (this.ballX <= 0) { + ret.x = false; + } else if ((this.ballX + this.ballWidth) >= this.gameWidth) { + ret.x = false; + } + if (this.ballY <= 0) { + ret.y = false; + } else if ((this.ballY + this.ballHeight) >= this.gameHeight) { + ret.y = false; + } + + return ret; + }, + + /** + * Draw the next animation frame for the 'ball' tab + */ + ballEvents: function ballEvents() { + "use strict"; + var event, + x, + y, + stickTop = 0, + stickLeft = 0, + stickBottom = 0, + stickRight = 0, + rX, + rY, + ddx, + ddy, + shouldVibrate = null, + isHittingEdge = null; + + event = this.event; + + x = -event.accelerationIncludingGravity.x; + y = -event.accelerationIncludingGravity.y; + + stickTop = 0; + stickLeft = 0; + stickBottom = 0; + stickRight = 0; + + rX = this.ballX; + rY = this.ballY; + ddx = x * -this.cdd; + ddy = y * this.cdd; + this.dX += ddx; + this.dY += ddy; + this.dX *= this.resistance; + this.dY *= this.resistance; + + shouldVibrate = this.shouldVibrateIfHitsEdge(); + + this.ballX += this.dX; + this.ballY += this.dY; + + if (this.ballX < 0) { + this.ballX = 0; + this.dX = Math.abs(this.dX) * this.friction - this.frictionC; + this.dY *= this.sideFriction; + stickLeft = 1; + } else if ((this.ballX + this.ballWidth) > this.gameWidth) { + this.ballX = this.gameWidth - this.ballWidth; + this.dX = -Math.abs(this.dX) * this.friction + this.frictionC; + this.dY *= this.sideFriction; + stickRight = 1; + if (this.ballX < 0) { + this.ballX = 0; + } + } + + if (this.ballY < 0) { + this.ballY = 0; + this.dY = Math.abs(this.dY) * this.friction - this.frictionC; + this.dX *= this.sideFriction; + stickTop = 1; + } else if ((this.ballY + this.ballHeight) > this.gameHeight) { + this.ballY = this.gameHeight - this.ballHeight; + this.dY = -Math.abs(this.dY) * this.friction + this.frictionC; + this.dX *= this.sideFriction; + stickBottom = 1; + if (this.ballY < 0) { + this.ballY = 0; + } + } + + isHittingEdge = { + x: (stickLeft || stickRight) && Math.abs(this.dX) > 1, + y: (stickTop || stickBottom) && Math.abs(this.dY) > 1 + }; + + // if on the edge and the hitting speed is high enough + if ((shouldVibrate.x && isHittingEdge.x) || (shouldVibrate.y && isHittingEdge.y)) { + if (typeof navigator.webkitVibrate === 'function') { + navigator.webkitVibrate(100); + } else { + navigator.vibrate(100); + } + } + + $('.ball').css('left', this.ballX + 'px'); + $('.ball').css('top', this.ballY + 'px'); + + rX = this.ballX - rX; + rY = this.ballY - rY; + + }, + + /** + * Draw the next animation frame + */ + fun: function fun() { + "use strict"; + if (this.event) { + switch (this.current) { + case 'ball': + this.ballEvents(); + break; + case 'earth': + this.earthEvents(); + break; + case 'baloon': + this.ballEvents(); + break; + default: + console.warn("Incorrect current mode"); + this.ballEvents(); + } + } + + // animation - go to next step; + if (this.timeout !== null) { + clearTimeout(this.timeout); + } + this.timeout = setTimeout(this.fun.bind(this), this.animationInterval); + }, + + /** + * Switch to the 'ball' tab + */ + startBall: function startBall() { + "use strict"; + + $('.ui-content').removeClass('background1 background2 background3').addClass('background1'); + $(':jqmData(role="controlbar")').find('.ui-btn').removeClass('ui-btn-hover-s ui-btn-down-s'); + this.gameHeight = $('.background').outerHeight(); + + this.cdd = -0.3; + this.resistance = 0.98; + this.friction = 0.90; + this.sideFriction = 0.95; + this.frictionC = 0.002; + + this.current = 'ball'; + + $('#sun').remove(); + $('.ball').attr('src', './images/ball1.png'); + $('.ball').css('width', '86px'); + $('.ball').css('height', '86px'); + + $('.background').css('background-position', '0px -90px'); + + this.ballWidth = parseInt($('.ball').css('width'), 10); + this.ballHeight = parseInt($('.ball').css('height'), 10); + }, + + /** + * Switch to the 'sky' tab + */ + startSky: function startSky() { + "use strict"; + $('.ui-content').removeClass('background1 background2 background3').addClass('background2'); + $(':jqmData(role="controlbar")').find('.ui-btn').removeClass('ui-btn-hover-s ui-btn-down-s'); + this.gameHeight = $('.background').outerHeight(); + + this.cdd = 0.05; + this.resistance = 0.90; + this.friction = 0.98; + this.sideFriction = 0.95; + this.frictionC = 0.002; + + this.current = 'baloon'; + + $('#sun').remove(); + $('.ball').attr('src', './images/balloon.png'); + $('.ball').css('width', '100px'); + $('.ball').css('height', '100px'); + + $('.background').css('background-position', '0px -80px'); + + this.ballWidth = parseInt($('.ball').css('width'), 10); + this.ballHeight = parseInt($('.ball').css('height'), 10); + }, + + /** + * Switch to the 'space' tab + */ + startSpace: function startSpace() { + "use strict"; + var backgroundPosition, arrayPos; + + $('.ui-content').removeClass('background1 background2 background3').addClass('background3'); + $(':jqmData(role="controlbar")').find('.ui-btn').removeClass('ui-btn-hover-s ui-btn-down-s'); + + this.gameHeight = $('.background').outerHeight(); + + this.friction = 0.60; // bounce + this.sideFriction = 0.95; + this.frictionC = 0.0; + + this.current = 'earth'; + + $('.ball').attr('src', './images/earth.png'); + $('#main').append(''); + + this.sunX = (this.gameWidth - parseInt($('#sun').css('width'), 10)) / 2; + this.sunY = (this.gameHeight - parseInt($('#sun').css('height'), 10)) / 2; + $('.ball').css('width', '50px'); + $('.ball').css('height', '50px'); + + $('.background').css('background-position', '0px 0px'); + + this.ballWidth = parseInt($('.ball').css('width'), 10); + this.ballHeight = parseInt($('.ball').css('height'), 10); + this.sunWidth = parseInt($('#sun').css('width'), 10); + this.sunHeight = parseInt($('#sun').css('height'), 10); + + backgroundPosition = $('.background').css('background-position'); + + arrayPos = backgroundPosition.split(' '); + this.backgroundTop = parseInt(arrayPos[0], 10); + this.backgroundLeft = parseInt(arrayPos[1], 10); + this.backgroundWidth = parseInt($('.background').css('width'), 10); + this.backgroundHeight = parseInt($('.background').css('height'), 10); + }, + + saveSensorData: function saveSensorData(event) { + "use strict"; + this.event = event; + } +}; + +$(document).ready(function () { + "use strict"; + var img, + contentHeight = screen.availHeight - $('div[data-role="header"]').outerHeight() - $('div[data-role="footer"]').outerHeight(); + + $('div[data-role="content"]').css('height', contentHeight - 33); + app.gameWidth = screen.availWidth; + app.ballWidth = parseInt($('.ball').css('width'), 10); + app.ballHeight = parseInt($('.ball').css('height'), 10); + + window.addEventListener('devicemotion', app.saveSensorData.bind(app), false); + + app.fun(); + + $(window).on('tizenhwkey', function (e) { + if (e.originalEvent.keyName === "back") { + tizen.application.getCurrentApplication().exit(); + } + }); + + $('#btnBall').bind('click', function (event) { + preventSecClick(this); + app.startBall(); + }); + + $('#btnSky').bind('click', function (event) { + preventSecClick(this); + app.startSky(); + }); + + $('#btnSpace').bind('click', function () { + preventSecClick(this); + app.startSpace(); + }); + + function preventSecClick(current) { + $('#sun').remove(); + $("#footerControls li a.ui-disabled").removeClass('ui-disabled'); + $(current).addClass("ui-disabled"); + } + + $('#mainPage').on('pageshow', function () { + app.startBall(); + }); + + document.addEventListener('webkitvisibilitychange', function (event) { + if (document.webkitVisibilityState === 'visible') { + app.fun(); + } + }); + + // Preload backgrounds; + img = $('').hide(); + img.attr('src', 'images/background1.png'); +}); + +$(window).resize(function () { + 'use strict'; + app.gameWidth = screen.availWidth; + app.gameHeight = $('.background').outerHeight(); +}); diff --git a/sensorball-snapshot.png b/sensorball-snapshot.png new file mode 100644 index 0000000..a08c7cb Binary files /dev/null and b/sensorball-snapshot.png differ diff --git a/tizen-app-template.xml b/tizen-app-template.xml new file mode 100755 index 0000000..b74421c --- /dev/null +++ b/tizen-app-template.xml @@ -0,0 +1,12 @@ + + + SensorBall + TIZEN + + description.xml + + + + + + diff --git a/tizen_32.png b/tizen_32.png new file mode 100644 index 0000000..61f35c0 Binary files /dev/null and b/tizen_32.png differ diff --git a/tizen_64.png b/tizen_64.png new file mode 100644 index 0000000..b188083 Binary files /dev/null and b/tizen_64.png differ