Added underwater-drawables

Added photo mode and Dev-Options are now in a dialog on the start screen
Both will only be shown if IS_DEVELOPER in the GameActivity is true
This commit is contained in:
julian 2018-09-07 14:12:11 +02:00
parent 17971cd781
commit bef0697630
39 changed files with 1415 additions and 117 deletions

3
.gitignore vendored
View File

@ -1,5 +1,6 @@
.gradle
/app/*.apk
*.apk
output.json
/local.properties
/.idea/workspace.xml
/.idea/libraries

Binary file not shown.

View File

@ -0,0 +1,999 @@
<!--
~ Created by Julian Mutter on 9/6/18 11:29 PM
~ Copyright (c) 2018. All rights reserved.
~ Last modified 7/10/18 4:00 PM
~
-->
<levelPack id="3">
<world>UNDERWATER</world>
<levels class="java.util.ArrayList">
<level packId="1" id="1" goalX="16.896702" startSpeed="0.4" endSpeed="0.4" terrainEdge="-0.6" ceilingEdge="1.0">
<terrainTiles class="java.util.ArrayList">
<tileData x="1.0707483" width="8.141497"/>
<tileData x="13.59593" width="15.954868"/>
</terrainTiles>
<ceilingTiles class="java.util.ArrayList">
<tileData x="6.948351" width="19.896702"/>
</ceilingTiles>
<obstacles class="java.util.ArrayList">
<obstacleData floating="false" moving="false" deadly="false" leftEdge="12.006709" rightEdge="12.506709" height="0.318" y="-0.44100004">
<moveComponent length="0.0" rotation="0.0" startOffset="0.0" direction="0.0" speed="0.0" hasPlayerXSpeed="false" triggerDistance="0.0"/>
</obstacleData>
</obstacles>
<stars class="java.util.ArrayList">
<positionData x="5.3666835" y="0.7866664"/>
<positionData x="12.263359" y="-0.0266667"/>
<positionData x="16.58005" y="0.77999955"/>
</stars>
<energy x="12.2500305" y="-0.45333368"/>
</level>
<level packId="1" id="2" goalX="24.896633" startSpeed="0.4" endSpeed="0.4" terrainEdge="-0.6" ceilingEdge="1.0">
<terrainTiles class="java.util.ArrayList">
<tileData x="2.9376845" width="11.875369"/>
<tileData x="14.498707" width="3.6946783"/>
<tileData x="20.47237" width="7.2766476"/>
</terrainTiles>
<ceilingTiles class="java.util.ArrayList">
<tileData x="6.436699" width="18.873398"/>
</ceilingTiles>
<obstacles class="java.util.ArrayList">
<obstacleData floating="false" moving="false" deadly="false" leftEdge="2.3533306" rightEdge="5.3533306" height="0.331" y="-0.43450004">
<moveComponent length="0.0" rotation="0.0" startOffset="0.0" direction="0.0" speed="0.0" hasPlayerXSpeed="false" triggerDistance="0.0"/>
</obstacleData>
<obstacleData floating="false" moving="false" deadly="false" leftEdge="5.385499" rightEdge="7.3344994" height="0.675" y="-0.26250002">
<moveComponent length="0.0" rotation="0.0" startOffset="0.0" direction="0.0" speed="0.0" hasPlayerXSpeed="false" triggerDistance="0.0"/>
</obstacleData>
<obstacleData floating="false" moving="false" deadly="false" leftEdge="8.472842" rightEdge="8.833842" height="0.93" y="-0.13500002">
<moveComponent length="0.0" rotation="0.0" startOffset="0.0" direction="0.0" speed="0.0" hasPlayerXSpeed="false" triggerDistance="0.0"/>
</obstacleData>
<obstacleData floating="false" moving="false" deadly="false" leftEdge="7.432005" rightEdge="8.368005" height="0.637" y="-0.2815">
<moveComponent length="0.0" rotation="0.0" startOffset="0.0" direction="0.0" speed="0.0" hasPlayerXSpeed="false" triggerDistance="0.0"/>
</obstacleData>
<obstacleData floating="true" moving="false" deadly="false" leftEdge="9.223393" rightEdge="12.223393" height="0.127" y="-0.93333316">
<moveComponent length="0.0" rotation="0.0" startOffset="0.0" direction="0.0" speed="0.0" hasPlayerXSpeed="false" triggerDistance="0.0"/>
</obstacleData>
<obstacleData floating="false" moving="false" deadly="false" leftEdge="20.803354" rightEdge="21.303354" height="0.344" y="-0.42800003">
<moveComponent length="0.0" rotation="0.0" startOffset="0.0" direction="0.0" speed="0.0" hasPlayerXSpeed="false" triggerDistance="0.0"/>
</obstacleData>
<obstacleData floating="false" moving="false" deadly="false" leftEdge="21.356472" rightEdge="22.063473" height="0.293" y="-0.45350003">
<moveComponent length="0.0" rotation="0.0" startOffset="0.0" direction="0.0" speed="0.0" hasPlayerXSpeed="false" triggerDistance="0.0"/>
</obstacleData>
<obstacleData floating="false" moving="false" deadly="false" leftEdge="22.082802" rightEdge="22.923801" height="0.242" y="-0.47900003">
<moveComponent length="0.0" rotation="0.0" startOffset="0.0" direction="0.0" speed="0.0" hasPlayerXSpeed="false" triggerDistance="0.0"/>
</obstacleData>
<obstacleData floating="false" moving="false" deadly="false" leftEdge="22.960283" rightEdge="24.106283" height="0.178" y="-0.51100004">
<moveComponent length="0.0" rotation="0.0" startOffset="0.0" direction="0.0" speed="0.0" hasPlayerXSpeed="false" triggerDistance="0.0"/>
</obstacleData>
<obstacleData floating="false" moving="false" deadly="false" leftEdge="1.6883316" rightEdge="2.3383317" height="0.344" y="-0.42800003">
<moveComponent length="0.0" rotation="0.0" startOffset="0.0" direction="0.0" speed="0.0" hasPlayerXSpeed="false" triggerDistance="0.0"/>
</obstacleData>
</obstacles>
<stars class="java.util.ArrayList">
<positionData x="5.236675" y="-0.10000009"/>
<positionData x="12.510035" y="-0.87999964"/>
<positionData x="24.493294" y="0.44000027"/>
</stars>
<energy x="9.043368" y="-0.8999996"/>
</level>
<level packId="1" id="3" goalX="23.086607" startSpeed="0.4" endSpeed="0.4" terrainEdge="-0.6" ceilingEdge="1.0">
<terrainTiles class="java.util.ArrayList">
<tileData x="-0.27333355" width="5.453333"/>
<tileData x="10.081098" width="5.255528"/>
<tileData x="16.997944" width="0.2801571"/>
<tileData x="24.067627" width="8.61121"/>
</terrainTiles>
<ceilingTiles class="java.util.ArrayList">
<tileData x="10.0433035" width="26.086607"/>
</ceilingTiles>
<obstacles class="java.util.ArrayList">
<obstacleData floating="true" moving="false" deadly="false" leftEdge="2.5106652" rightEdge="3.5426652" height="0.5" y="-0.9066665">
<moveComponent length="0.0" rotation="0.0" startOffset="0.0" direction="0.0" speed="0.0" hasPlayerXSpeed="false" triggerDistance="0.0"/>
</obstacleData>
<obstacleData floating="true" moving="false" deadly="false" leftEdge="3.6169972" rightEdge="4.7829976" height="0.5" y="-0.9799999">
<moveComponent length="0.0" rotation="0.0" startOffset="0.0" direction="0.0" speed="0.0" hasPlayerXSpeed="false" triggerDistance="0.0"/>
</obstacleData>
<obstacleData floating="true" moving="false" deadly="false" leftEdge="4.875505" rightEdge="5.9645047" height="0.5" y="-1.0799999">
<moveComponent length="0.0" rotation="0.0" startOffset="0.0" direction="0.0" speed="0.0" hasPlayerXSpeed="false" triggerDistance="0.0"/>
</obstacleData>
<obstacleData floating="true" moving="false" deadly="false" leftEdge="6.0315022" rightEdge="7.3885026" height="0.5" y="-0.76666665">
<moveComponent length="0.0" rotation="0.0" startOffset="0.0" direction="0.0" speed="0.0" hasPlayerXSpeed="false" triggerDistance="0.0"/>
</obstacleData>
<obstacleData floating="false" moving="false" deadly="false" leftEdge="9.111534" rightEdge="11.288534" height="0.331" y="-0.43450004">
<moveComponent length="0.0" rotation="0.0" startOffset="0.0" direction="0.0" speed="0.0" hasPlayerXSpeed="false" triggerDistance="0.0"/>
</obstacleData>
<obstacleData floating="false" moving="false" deadly="false" leftEdge="11.36054" rightEdge="12.65954" height="0.306" y="-0.44700003">
<moveComponent length="0.0" rotation="0.0" startOffset="0.0" direction="0.0" speed="0.0" hasPlayerXSpeed="false" triggerDistance="0.0"/>
</obstacleData>
<obstacleData floating="true" moving="false" deadly="false" leftEdge="12.702217" rightEdge="15.511217" height="0.166" y="-0.07333332">
<moveComponent length="0.0" rotation="0.0" startOffset="0.0" direction="0.0" speed="0.0" hasPlayerXSpeed="false" triggerDistance="0.0"/>
</obstacleData>
<obstacleData floating="true" moving="false" deadly="false" leftEdge="15.80538" rightEdge="18.04138" height="0.255" y="0.23999992">
<moveComponent length="0.0" rotation="0.0" startOffset="0.0" direction="0.0" speed="0.0" hasPlayerXSpeed="false" triggerDistance="0.0"/>
</obstacleData>
<obstacleData floating="true" moving="false" deadly="false" leftEdge="18.1972" rightEdge="18.6562" height="0.229" y="0.1666667">
<moveComponent length="0.0" rotation="0.0" startOffset="0.0" direction="0.0" speed="0.0" hasPlayerXSpeed="false" triggerDistance="0.0"/>
</obstacleData>
<obstacleData floating="true" moving="false" deadly="false" leftEdge="18.85002" rightEdge="19.35002" height="0.242" y="0.0066666286">
<moveComponent length="0.0" rotation="0.0" startOffset="0.0" direction="0.0" speed="0.0" hasPlayerXSpeed="false" triggerDistance="0.0"/>
</obstacleData>
<obstacleData floating="true" moving="false" deadly="false" leftEdge="20.457834" rightEdge="20.648836" height="1.108" y="0.35999984">
<moveComponent length="0.0" rotation="0.0" startOffset="0.0" direction="0.0" speed="0.0" hasPlayerXSpeed="false" triggerDistance="0.0"/>
</obstacleData>
<obstacleData floating="true" moving="false" deadly="false" leftEdge="21.934309" rightEdge="22.39231" height="0.293" y="-0.41999975">
<moveComponent length="0.0" rotation="0.0" startOffset="0.0" direction="0.0" speed="0.0" hasPlayerXSpeed="false" triggerDistance="0.0"/>
</obstacleData>
</obstacles>
<stars class="java.util.ArrayList">
<positionData x="4.8966684" y="-0.0933331"/>
<positionData x="12.523364" y="-0.09333331"/>
<positionData x="21.58995" y="0.3733334"/>
</stars>
<energy x="17.006697" y="-0.41333315"/>
</level>
<level packId="1" id="4" goalX="23.089874" startSpeed="0.4" endSpeed="0.4" terrainEdge="-0.6" ceilingEdge="1.0">
<terrainTiles class="java.util.ArrayList">
<tileData x="-0.22666693" width="5.546666"/>
<tileData x="5.158922" width="4.104512"/>
<tileData x="8.653435" width="0.0625"/>
<tileData x="9.939764" width="0.062160492"/>
<tileData x="12.282529" width="3.813364"/>
<tileData x="16.469452" width="3.730483"/>
<tileData x="21.016407" width="2.355425"/>
<tileData x="25.081146" width="4.9240704"/>
</terrainTiles>
<ceilingTiles class="java.util.ArrayList">
<tileData x="10.044937" width="26.089874"/>
</ceilingTiles>
<obstacles class="java.util.ArrayList">
<obstacleData floating="false" moving="false" deadly="false" leftEdge="6.166328" rightEdge="7.1603284" height="0.293" y="-0.45350003">
<moveComponent length="0.0" rotation="0.0" startOffset="0.0" direction="0.0" speed="0.0" hasPlayerXSpeed="false" triggerDistance="0.0"/>
</obstacleData>
<obstacleData floating="true" moving="false" deadly="false" leftEdge="16.929998" rightEdge="19.069998" height="0.217" y="0.28666654">
<moveComponent length="0.0" rotation="0.0" startOffset="0.0" direction="0.0" speed="0.0" hasPlayerXSpeed="false" triggerDistance="0.0"/>
</obstacleData>
<obstacleData floating="true" moving="false" deadly="false" leftEdge="7.203003" rightEdge="8.6170025" height="0.127" y="-0.41333312">
<moveComponent length="0.0" rotation="0.0" startOffset="0.0" direction="0.0" speed="0.0" hasPlayerXSpeed="false" triggerDistance="0.0"/>
</obstacleData>
<obstacleData floating="true" moving="false" deadly="false" leftEdge="8.687184" rightEdge="9.986184" height="0.153" y="-0.47333324">
<moveComponent length="0.0" rotation="0.0" startOffset="0.0" direction="0.0" speed="0.0" hasPlayerXSpeed="false" triggerDistance="0.0"/>
</obstacleData>
<obstacleData floating="false" moving="false" deadly="false" leftEdge="10.379863" rightEdge="11.0868635" height="0.5" y="-0.35000002">
<moveComponent length="0.0" rotation="0.0" startOffset="0.0" direction="0.0" speed="0.0" hasPlayerXSpeed="false" triggerDistance="0.0"/>
</obstacleData>
<obstacleData floating="true" moving="false" deadly="false" leftEdge="14.776228" rightEdge="15.617228" height="0.344" y="-0.0066666957">
<moveComponent length="0.0" rotation="0.0" startOffset="0.0" direction="0.0" speed="0.0" hasPlayerXSpeed="false" triggerDistance="0.0"/>
</obstacleData>
<obstacleData floating="true" moving="false" deadly="false" leftEdge="15.643713" rightEdge="16.809713" height="0.293" y="-0.050000057">
<moveComponent length="0.0" rotation="0.0" startOffset="0.0" direction="0.0" speed="0.0" hasPlayerXSpeed="false" triggerDistance="0.0"/>
</obstacleData>
<obstacleData floating="false" moving="false" deadly="false" leftEdge="17.627857" rightEdge="18.258858" height="0.318" y="-0.44100004">
<moveComponent length="0.0" rotation="0.0" startOffset="0.0" direction="0.0" speed="0.0" hasPlayerXSpeed="false" triggerDistance="0.0"/>
</obstacleData>
<obstacleData floating="true" moving="false" deadly="false" leftEdge="18.325031" rightEdge="19.83503" height="0.166" y="-0.41999984">
<moveComponent length="0.0" rotation="0.0" startOffset="0.0" direction="0.0" speed="0.0" hasPlayerXSpeed="false" triggerDistance="0.0"/>
</obstacleData>
</obstacles>
<stars class="java.util.ArrayList">
<positionData x="2.8000035" y="-0.77999914"/>
<positionData x="11.210031" y="-0.47333312"/>
<positionData x="16.21668" y="0.34666675"/>
</stars>
<energy x="19.086668" y="-0.81333315"/>
</level>
<level packId="1" id="5" goalX="23.896725" startSpeed="0.4" endSpeed="0.4" terrainEdge="-0.6" ceilingEdge="1.0">
<terrainTiles class="java.util.ArrayList">
<tileData x="1.6130004" width="9.226001"/>
<tileData x="12.257368" width="10.486735"/>
<tileData x="20.768412" width="4.751354"/>
<tileData x="25.874727" width="4.7972755"/>
</terrainTiles>
<ceilingTiles class="java.util.ArrayList">
<tileData x="10.448362" width="26.896725"/>
</ceilingTiles>
<obstacles class="java.util.ArrayList">
<obstacleData floating="false" moving="false" deadly="false" leftEdge="3.2166634" rightEdge="6.2166634" height="0.293" y="-0.45350003">
<moveComponent length="0.0" rotation="0.0" startOffset="0.0" direction="0.0" speed="0.0" hasPlayerXSpeed="false" triggerDistance="0.0"/>
</obstacleData>
<obstacleData floating="false" moving="false" deadly="false" leftEdge="14.9867525" rightEdge="15.406753" height="0.535" y="-0.3325">
<moveComponent length="0.0" rotation="0.0" startOffset="0.0" direction="0.0" speed="0.0" hasPlayerXSpeed="false" triggerDistance="0.0"/>
</obstacleData>
<obstacleData floating="false" moving="false" deadly="false" leftEdge="15.435268" rightEdge="17.498268" height="0.484" y="-0.35800004">
<moveComponent length="0.0" rotation="0.0" startOffset="0.0" direction="0.0" speed="0.0" hasPlayerXSpeed="false" triggerDistance="0.0"/>
</obstacleData>
<obstacleData floating="false" moving="false" deadly="false" leftEdge="23.488386" rightEdge="24.138388" height="0.331" y="-0.43450004">
<moveComponent length="0.0" rotation="0.0" startOffset="0.0" direction="0.0" speed="0.0" hasPlayerXSpeed="false" triggerDistance="0.0"/>
</obstacleData>
<obstacleData floating="false" moving="false" deadly="false" leftEdge="12.025399" rightEdge="14.681399" height="0.204" y="-0.49800003">
<moveComponent length="0.0" rotation="0.0" startOffset="0.0" direction="0.0" speed="0.0" hasPlayerXSpeed="false" triggerDistance="0.0"/>
</obstacleData>
</obstacles>
<stars class="java.util.ArrayList">
<positionData x="6.626662" y="-0.5666664"/>
<positionData x="14.833428" y="-0.4399998"/>
<positionData x="17.97675" y="-0.5133334"/>
</stars>
<energy x="16.436743" y="-0.37333328"/>
</level>
<level packId="1" id="6" goalX="16.046711" startSpeed="0.45" endSpeed="0.45" terrainEdge="-0.6" ceilingEdge="1.0">
<terrainTiles class="java.util.ArrayList">
<tileData x="2.367918" width="10.735836"/>
<tileData x="11.69644" width="5.9712067"/>
<tileData x="17.74903" width="5.2619705"/>
</terrainTiles>
<ceilingTiles class="java.util.ArrayList">
<tileData x="6.5233555" width="19.046711"/>
</ceilingTiles>
<obstacles class="java.util.ArrayList">
<obstacleData floating="false" moving="false" deadly="false" leftEdge="2.5633323" rightEdge="2.9833324" height="0.866" y="-0.16700003">
<moveComponent length="0.252" rotation="360.0" startOffset="0.0" direction="1.0" speed="0.0" hasPlayerXSpeed="false" triggerDistance="0.0"/>
</obstacleData>
<obstacleData floating="false" moving="false" deadly="false" leftEdge="12.6995325" rightEdge="13.100532" height="0.42" y="-0.39000005">
<moveComponent length="0.0" rotation="0.0" startOffset="0.0" direction="0.0" speed="0.0" hasPlayerXSpeed="false" triggerDistance="0.0"/>
</obstacleData>
<obstacleData floating="false" moving="false" deadly="false" leftEdge="13.132866" rightEdge="13.533865" height="0.611" y="-0.29450002">
<moveComponent length="0.0" rotation="0.0" startOffset="0.0" direction="0.0" speed="0.0" hasPlayerXSpeed="false" triggerDistance="0.0"/>
</obstacleData>
<obstacleData floating="false" moving="false" deadly="false" leftEdge="13.566537" rightEdge="14.693538" height="0.344" y="-0.42800003">
<moveComponent length="0.0" rotation="0.0" startOffset="0.0" direction="0.0" speed="0.0" hasPlayerXSpeed="false" triggerDistance="0.0"/>
</obstacleData>
</obstacles>
<stars class="java.util.ArrayList">
<positionData x="2.7666643" y="0.8799996"/>
<positionData x="8.200006" y="0.8999994"/>
<positionData x="12.566701" y="-0.4666665"/>
</stars>
<energy x="13.326665" y="-0.40666687"/>
</level>
<level packId="1" id="7" goalX="25.46672" startSpeed="0.45" endSpeed="0.45" terrainEdge="-0.6" ceilingEdge="1.0">
<terrainTiles class="java.util.ArrayList">
<tileData x="3.9377189" width="13.875438"/>
<tileData x="13.12245" width="2.5020256"/>
<tileData x="21.141829" width="3.53685"/>
</terrainTiles>
<ceilingTiles class="java.util.ArrayList">
<tileData x="2.700005" width="11.40001"/>
</ceilingTiles>
<obstacles class="java.util.ArrayList">
<obstacleData floating="false" moving="false" deadly="false" leftEdge="1.656666" rightEdge="1.8566661" height="0.815" y="-0.19250003">
<moveComponent length="0.985" rotation="360.0" startOffset="0.0" direction="0.0" speed="0.0" hasPlayerXSpeed="false" triggerDistance="0.0"/>
</obstacleData>
<obstacleData floating="true" moving="false" deadly="false" leftEdge="1.656666" rightEdge="1.8566661" height="0.943" y="1.0199994">
<moveComponent length="0.0" rotation="0.0" startOffset="0.0" direction="0.0" speed="0.0" hasPlayerXSpeed="false" triggerDistance="0.0"/>
</obstacleData>
<obstacleData floating="false" moving="false" deadly="false" leftEdge="6.196662" rightEdge="6.496662" height="0.815" y="-0.19250003">
<moveComponent length="0.0" rotation="0.0" startOffset="0.0" direction="0.0" speed="0.0" hasPlayerXSpeed="false" triggerDistance="0.0"/>
</obstacleData>
<obstacleData floating="true" moving="false" deadly="false" leftEdge="6.1966624" rightEdge="6.4966626" height="1.019" y="1.0733333">
<moveComponent length="0.0" rotation="0.0" startOffset="0.0" direction="0.0" speed="0.0" hasPlayerXSpeed="false" triggerDistance="0.0"/>
</obstacleData>
<obstacleData floating="true" moving="false" deadly="false" leftEdge="14.446861" rightEdge="17.446861" height="0.5" y="-0.9733329">
<moveComponent length="0.0" rotation="0.0" startOffset="0.0" direction="0.0" speed="0.0" hasPlayerXSpeed="false" triggerDistance="0.0"/>
</obstacleData>
<obstacleData floating="true" moving="false" deadly="false" leftEdge="16.084183" rightEdge="16.676182" height="0.803" y="-0.31999993">
<moveComponent length="0.0" rotation="0.0" startOffset="0.0" direction="0.0" speed="0.0" hasPlayerXSpeed="false" triggerDistance="0.0"/>
</obstacleData>
<obstacleData floating="true" moving="false" deadly="false" leftEdge="16.84681" rightEdge="20.84681" height="0.535" y="-0.31999993">
<moveComponent length="0.0" rotation="0.0" startOffset="0.0" direction="0.0" speed="0.0" hasPlayerXSpeed="false" triggerDistance="0.0"/>
</obstacleData>
<obstacleData floating="true" moving="false" deadly="false" leftEdge="20.380474" rightEdge="21.106476" height="0.752" y="0.31999993">
<moveComponent length="0.0" rotation="0.0" startOffset="0.0" direction="0.0" speed="0.0" hasPlayerXSpeed="false" triggerDistance="0.0"/>
</obstacleData>
<obstacleData floating="true" moving="false" deadly="false" leftEdge="21.138256" rightEdge="23.915257" height="0.395" y="0.3466666">
<moveComponent length="0.0" rotation="0.0" startOffset="0.0" direction="0.0" speed="0.0" hasPlayerXSpeed="false" triggerDistance="0.0"/>
</obstacleData>
</obstacles>
<stars class="java.util.ArrayList">
<positionData x="1.7499983" y="0.41333324"/>
<positionData x="11.090078" y="-0.7799992"/>
<positionData x="15.923547" y="-0.58666646"/>
</stars>
<energy x="21.25009" y="-0.35999992"/>
</level>
<level packId="1" id="8" goalX="29.866714" startSpeed="0.45" endSpeed="0.45" terrainEdge="-0.6" ceilingEdge="1.0">
<terrainTiles class="java.util.ArrayList">
<tileData x="-0.2710843" width="5.4578314"/>
<tileData x="6.677781" width="7.2978992"/>
<tileData x="16.007843" width="10.162209"/>
<tileData x="27.682297" width="4.368828"/>
</terrainTiles>
<ceilingTiles class="java.util.ArrayList">
<tileData x="13.433357" width="32.866714"/>
</ceilingTiles>
<obstacles class="java.util.ArrayList">
<obstacleData floating="false" moving="false" deadly="false" leftEdge="1.444666" rightEdge="1.928666" height="0.229" y="-0.48550004">
<moveComponent length="0.0" rotation="0.0" startOffset="0.0" direction="0.0" speed="0.0" hasPlayerXSpeed="false" triggerDistance="0.0"/>
</obstacleData>
<obstacleData floating="false" moving="false" deadly="false" leftEdge="1.9566658" rightEdge="2.4566658" height="0.573" y="-0.31350002">
<moveComponent length="0.0" rotation="360.0" startOffset="0.0" direction="0.0" speed="0.0" hasPlayerXSpeed="false" triggerDistance="0.0"/>
</obstacleData>
<obstacleData floating="false" moving="false" deadly="false" leftEdge="6.545496" rightEdge="7.2144957" height="0.229" y="-0.48550004">
<moveComponent length="0.0" rotation="0.0" startOffset="0.0" direction="0.0" speed="0.0" hasPlayerXSpeed="false" triggerDistance="0.0"/>
</obstacleData>
<obstacleData floating="true" moving="false" deadly="false" leftEdge="7.368494" rightEdge="8.1714945" height="0.357" y="0.4799998">
<moveComponent length="0.0" rotation="0.0" startOffset="0.0" direction="0.0" speed="0.0" hasPlayerXSpeed="false" triggerDistance="0.0"/>
</obstacleData>
<obstacleData floating="true" moving="false" deadly="false" leftEdge="12.586923" rightEdge="14.019923" height="1.299" y="0.46666646">
<moveComponent length="0.0" rotation="0.0" startOffset="0.0" direction="0.0" speed="0.0" hasPlayerXSpeed="false" triggerDistance="0.0"/>
</obstacleData>
<obstacleData floating="true" moving="false" deadly="false" leftEdge="26.338493" rightEdge="28.421494" height="1.707" y="1.0866663">
<moveComponent length="0.0" rotation="0.0" startOffset="0.0" direction="0.0" speed="0.0" hasPlayerXSpeed="false" triggerDistance="0.0"/>
</obstacleData>
<obstacleData floating="false" moving="false" deadly="false" leftEdge="14.728306" rightEdge="15.225306" height="0.739" y="-0.23050001">
<moveComponent length="0.0" rotation="0.0" startOffset="0.0" direction="0.0" speed="0.0" hasPlayerXSpeed="false" triggerDistance="0.0"/>
</obstacleData>
<obstacleData floating="true" moving="false" deadly="false" leftEdge="16.002789" rightEdge="17.550789" height="1.414" y="0.4333333">
<moveComponent length="0.0" rotation="0.0" startOffset="0.0" direction="0.0" speed="0.0" hasPlayerXSpeed="false" triggerDistance="0.0"/>
</obstacleData>
<obstacleData floating="false" moving="false" deadly="false" leftEdge="19.41175" rightEdge="20.061749" height="0.828" y="-0.18600002">
<moveComponent length="0.0" rotation="0.0" startOffset="0.0" direction="0.0" speed="0.0" hasPlayerXSpeed="false" triggerDistance="0.0"/>
</obstacleData>
<obstacleData floating="true" moving="false" deadly="false" leftEdge="20.082245" rightEdge="21.891243" height="0.255" y="-0.12000001">
<moveComponent length="0.0" rotation="0.0" startOffset="0.0" direction="0.0" speed="0.0" hasPlayerXSpeed="false" triggerDistance="0.0"/>
</obstacleData>
<obstacleData floating="true" moving="false" deadly="false" leftEdge="20.510565" rightEdge="22.249563" height="1.669" y="1.1599997">
<moveComponent length="0.0" rotation="0.0" startOffset="0.0" direction="0.0" speed="0.0" hasPlayerXSpeed="false" triggerDistance="0.0"/>
</obstacleData>
<obstacleData floating="true" moving="false" deadly="false" leftEdge="24.22207" rightEdge="26.018072" height="0.408" y="-0.3333332">
<moveComponent length="0.0" rotation="0.0" startOffset="0.0" direction="0.0" speed="0.0" hasPlayerXSpeed="false" triggerDistance="0.0"/>
</obstacleData>
<obstacleData floating="false" moving="false" deadly="false" leftEdge="29.479826" rightEdge="29.766825" height="0.777" y="-0.21150002">
<moveComponent length="0.0" rotation="0.0" startOffset="0.0" direction="0.0" speed="0.0" hasPlayerXSpeed="false" triggerDistance="0.0"/>
</obstacleData>
<obstacleData floating="true" moving="false" deadly="false" leftEdge="11.354885" rightEdge="12.551886" height="1.185" y="0.4666667">
<moveComponent length="0.0" rotation="0.0" startOffset="0.0" direction="0.0" speed="0.0" hasPlayerXSpeed="false" triggerDistance="0.0"/>
</obstacleData>
<obstacleData floating="true" moving="false" deadly="false" leftEdge="21.92931" rightEdge="22.897308" height="0.242" y="-0.18666664">
<moveComponent length="0.0" rotation="0.0" startOffset="0.0" direction="0.0" speed="0.0" hasPlayerXSpeed="false" triggerDistance="0.0"/>
</obstacleData>
<obstacleData floating="true" moving="false" deadly="false" leftEdge="17.64087" rightEdge="18.685867" height="0.981" y="0.38666672">
<moveComponent length="0.0" rotation="0.0" startOffset="0.0" direction="0.0" speed="0.0" hasPlayerXSpeed="false" triggerDistance="0.0"/>
</obstacleData>
<obstacleData floating="true" moving="false" deadly="false" leftEdge="25.118597" rightEdge="26.214598" height="0.943" y="0.6133333">
<moveComponent length="0.0" rotation="0.0" startOffset="0.0" direction="0.0" speed="0.0" hasPlayerXSpeed="false" triggerDistance="0.0"/>
</obstacleData>
<obstacleData floating="true" moving="false" deadly="false" leftEdge="22.39613" rightEdge="23.517128" height="1.019" y="0.6666665">
<moveComponent length="0.0" rotation="0.0" startOffset="0.0" direction="0.0" speed="0.0" hasPlayerXSpeed="false" triggerDistance="0.0"/>
</obstacleData>
</obstacles>
<stars class="java.util.ArrayList">
<positionData x="2.7733319" y="0.4"/>
<positionData x="6.406662" y="-0.4599995"/>
<positionData x="14.950134" y="0.7333332"/>
</stars>
<energy x="7.7600126" y="0.853333"/>
</level>
<level packId="1" id="9" goalX="29.303371" startSpeed="0.5" endSpeed="0.5" terrainEdge="-0.6" ceilingEdge="1.0">
<terrainTiles class="java.util.ArrayList">
<tileData x="1.2796688" width="8.559338"/>
<tileData x="7.6803446" width="2.7060146"/>
<tileData x="11.774034" width="4.2813644"/>
<tileData x="19.611235" width="3.9450493"/>
<tileData x="26.782978" width="2.1204395"/>
</terrainTiles>
<ceilingTiles class="java.util.ArrayList">
<tileData x="13.151686" width="32.30337"/>
</ceilingTiles>
<obstacles class="java.util.ArrayList">
<obstacleData floating="true" moving="false" deadly="false" leftEdge="1.7464986" rightEdge="3.1734986" height="0.357" y="0.013333336">
<moveComponent length="0.0" rotation="0.0" startOffset="0.0" direction="0.0" speed="0.0" hasPlayerXSpeed="false" triggerDistance="0.0"/>
</obstacleData>
<obstacleData floating="true" moving="false" deadly="false" leftEdge="3.2206645" rightEdge="4.672664" height="0.395" y="-0.02">
<moveComponent length="0.0" rotation="0.0" startOffset="0.0" direction="0.0" speed="0.0" hasPlayerXSpeed="false" triggerDistance="0.0"/>
</obstacleData>
<obstacleData floating="true" moving="false" deadly="false" leftEdge="4.718664" rightEdge="5.814664" height="0.408" y="-0.04666668">
<moveComponent length="0.0" rotation="0.0" startOffset="0.0" direction="0.0" speed="0.0" hasPlayerXSpeed="false" triggerDistance="0.0"/>
</obstacleData>
<obstacleData floating="false" moving="false" deadly="false" leftEdge="7.4900084" rightEdge="7.9900084" height="0.777" y="-0.21150002">
<moveComponent length="0.0" rotation="0.0" startOffset="0.0" direction="0.0" speed="0.0" hasPlayerXSpeed="false" triggerDistance="0.0"/>
</obstacleData>
<obstacleData floating="true" moving="false" deadly="false" leftEdge="8.19402" rightEdge="9.08602" height="0.28" y="-0.18666677">
<moveComponent length="0.0" rotation="0.0" startOffset="0.0" direction="0.0" speed="0.0" hasPlayerXSpeed="false" triggerDistance="0.0"/>
</obstacleData>
<obstacleData floating="true" moving="false" deadly="true" leftEdge="9.110187" rightEdge="9.543187" height="0.306" y="-0.7999998">
<moveComponent length="0.0" rotation="0.0" startOffset="0.0" direction="0.0" speed="0.0" hasPlayerXSpeed="false" triggerDistance="0.0"/>
</obstacleData>
<obstacleData floating="false" moving="false" deadly="true" leftEdge="11.79672" rightEdge="13.65672" height="0.178" y="-0.51100004">
<moveComponent length="0.0" rotation="0.0" startOffset="0.0" direction="0.0" speed="0.0" hasPlayerXSpeed="false" triggerDistance="0.0"/>
</obstacleData>
<obstacleData floating="true" moving="false" deadly="true" leftEdge="11.934204" rightEdge="13.539204" height="0.242" y="-0.21999994">
<moveComponent length="0.0" rotation="0.0" startOffset="0.0" direction="0.0" speed="0.0" hasPlayerXSpeed="false" triggerDistance="0.0"/>
</obstacleData>
<obstacleData floating="true" moving="false" deadly="false" leftEdge="12.033383" rightEdge="14.173383" height="0.153" y="0.04666669">
<moveComponent length="0.0" rotation="0.0" startOffset="0.0" direction="0.0" speed="0.0" hasPlayerXSpeed="false" triggerDistance="0.0"/>
</obstacleData>
<obstacleData floating="true" moving="false" deadly="false" leftEdge="14.457235" rightEdge="17.616236" height="0.153" y="-0.9933327">
<moveComponent length="0.0" rotation="0.0" startOffset="0.0" direction="0.0" speed="0.0" hasPlayerXSpeed="false" triggerDistance="0.0"/>
</obstacleData>
<obstacleData floating="false" moving="false" deadly="false" leftEdge="17.75033" rightEdge="18.616331" height="0.268" y="-0.46600002">
<moveComponent length="0.0" rotation="0.0" startOffset="0.0" direction="0.0" speed="0.0" hasPlayerXSpeed="false" triggerDistance="0.0"/>
</obstacleData>
<obstacleData floating="true" moving="false" deadly="false" leftEdge="18.787207" rightEdge="19.526205" height="0.357" y="0.36000028">
<moveComponent length="0.0" rotation="0.0" startOffset="0.0" direction="0.0" speed="0.0" hasPlayerXSpeed="false" triggerDistance="0.0"/>
</obstacleData>
<obstacleData floating="true" moving="false" deadly="false" leftEdge="22.006622" rightEdge="22.506622" height="0.688" y="-0.17333333">
<moveComponent length="0.0" rotation="0.0" startOffset="0.0" direction="0.0" speed="0.0" hasPlayerXSpeed="false" triggerDistance="0.0"/>
</obstacleData>
<obstacleData floating="true" moving="false" deadly="true" leftEdge="21.777624" rightEdge="24.095625" height="0.204" y="0.74666655">
<moveComponent length="0.0" rotation="0.0" startOffset="0.0" direction="0.0" speed="0.0" hasPlayerXSpeed="false" triggerDistance="0.0"/>
</obstacleData>
<obstacleData floating="false" moving="false" deadly="false" leftEdge="22.960098" rightEdge="25.5331" height="0.191" y="-0.50450003">
<moveComponent length="0.0" rotation="0.0" startOffset="0.0" direction="0.0" speed="0.0" hasPlayerXSpeed="false" triggerDistance="0.0"/>
</obstacleData>
<obstacleData floating="true" moving="false" deadly="false" leftEdge="26.027046" rightEdge="26.766045" height="1.21" y="0.32666665">
<moveComponent length="0.0" rotation="0.0" startOffset="0.0" direction="0.0" speed="0.0" hasPlayerXSpeed="false" triggerDistance="0.0"/>
</obstacleData>
<obstacleData floating="true" moving="false" deadly="false" leftEdge="26.824703" rightEdge="27.461704" height="0.624" y="-0.006666662">
<moveComponent length="0.0" rotation="0.0" startOffset="0.0" direction="0.0" speed="0.0" hasPlayerXSpeed="false" triggerDistance="0.0"/>
</obstacleData>
</obstacles>
<stars class="java.util.ArrayList">
<positionData x="11.493358" y="-0.1333333"/>
<positionData x="19.72999" y="0.38000023"/>
<positionData x="28.236506" y="0.43333316"/>
</stars>
<energy x="5.930004" y="-0.61999977"/>
</level>
<level packId="1" id="10" goalX="26.533382" startSpeed="0.5" endSpeed="0.5" terrainEdge="-0.6" ceilingEdge="1.0">
<terrainTiles class="java.util.ArrayList">
<tileData x="-0.7206669" width="4.558666"/>
<tileData x="5.0614223" width="5.0135136"/>
<tileData x="13.927549" width="7.3247337"/>
<tileData x="23.30357" width="4.995308"/>
</terrainTiles>
<ceilingTiles class="java.util.ArrayList">
<tileData x="11.766691" width="29.533382"/>
</ceilingTiles>
<obstacles class="java.util.ArrayList">
<obstacleData floating="false" moving="false" deadly="false" leftEdge="6.546345" rightEdge="7.5403457" height="0.701" y="-0.24950004">
<moveComponent length="0.0" rotation="0.0" startOffset="0.0" direction="0.0" speed="0.0" hasPlayerXSpeed="false" triggerDistance="0.0"/>
</obstacleData>
<obstacleData floating="true" moving="false" deadly="false" leftEdge="7.590849" rightEdge="8.91585" height="0.191" y="-0.0133334445">
<moveComponent length="0.0" rotation="0.0" startOffset="0.0" direction="0.0" speed="0.0" hasPlayerXSpeed="false" triggerDistance="0.0"/>
</obstacleData>
<obstacleData floating="true" moving="false" deadly="true" leftEdge="8.778351" rightEdge="9.848351" height="0.204" y="-0.653333">
<moveComponent length="0.0" rotation="0.0" startOffset="0.0" direction="0.0" speed="0.0" hasPlayerXSpeed="false" triggerDistance="0.0"/>
</obstacleData>
<obstacleData floating="true" moving="false" deadly="true" leftEdge="8.424836" rightEdge="9.061835" height="0.28" y="-0.37999988">
<moveComponent length="0.0" rotation="0.0" startOffset="0.0" direction="0.0" speed="0.0" hasPlayerXSpeed="false" triggerDistance="0.0"/>
</obstacleData>
<obstacleData floating="true" moving="false" deadly="false" leftEdge="9.246028" rightEdge="10.214028" height="0.191" y="-0.35999992">
<moveComponent length="0.0" rotation="0.0" startOffset="0.0" direction="0.0" speed="0.0" hasPlayerXSpeed="false" triggerDistance="0.0"/>
</obstacleData>
<obstacleData floating="false" moving="false" deadly="false" leftEdge="11.981369" rightEdge="12.745369" height="0.79" y="-0.20500001">
<moveComponent length="0.0" rotation="0.0" startOffset="0.0" direction="0.0" speed="0.0" hasPlayerXSpeed="false" triggerDistance="0.0"/>
</obstacleData>
<obstacleData floating="true" moving="false" deadly="false" leftEdge="12.614697" rightEdge="13.098697" height="0.28" y="0.65333325">
<moveComponent length="0.0" rotation="0.0" startOffset="0.0" direction="0.0" speed="0.0" hasPlayerXSpeed="false" triggerDistance="0.0"/>
</obstacleData>
<obstacleData floating="true" moving="false" deadly="true" leftEdge="13.446696" rightEdge="13.946696" height="0.5" y="0.39999992">
<moveComponent length="0.0" rotation="0.0" startOffset="0.0" direction="0.0" speed="0.0" hasPlayerXSpeed="false" triggerDistance="0.0"/>
</obstacleData>
<obstacleData floating="true" moving="false" deadly="true" leftEdge="14.03569" rightEdge="14.697691" height="0.127" y="-0.21999997">
<moveComponent length="0.0" rotation="0.0" startOffset="0.0" direction="0.0" speed="0.0" hasPlayerXSpeed="false" triggerDistance="0.0"/>
</obstacleData>
<obstacleData floating="true" moving="false" deadly="false" leftEdge="15.036036" rightEdge="15.4440365" height="0.573" y="-0.046666667">
<moveComponent length="0.0" rotation="0.0" startOffset="0.0" direction="0.0" speed="0.0" hasPlayerXSpeed="false" triggerDistance="0.0"/>
</obstacleData>
<obstacleData floating="true" moving="false" deadly="true" leftEdge="15.48188" rightEdge="16.424881" height="0.318" y="0.75999975">
<moveComponent length="0.0" rotation="0.0" startOffset="0.0" direction="0.0" speed="0.0" hasPlayerXSpeed="false" triggerDistance="0.0"/>
</obstacleData>
<obstacleData floating="true" moving="false" deadly="true" leftEdge="14.638042" rightEdge="14.842043" height="0.204" y="0.11333336">
<moveComponent length="0.0" rotation="0.0" startOffset="0.0" direction="0.0" speed="0.0" hasPlayerXSpeed="false" triggerDistance="0.0"/>
</obstacleData>
<obstacleData floating="true" moving="false" deadly="false" leftEdge="14.04621" rightEdge="14.88721" height="0.153" y="0.3800001">
<moveComponent length="0.0" rotation="0.0" startOffset="0.0" direction="0.0" speed="0.0" hasPlayerXSpeed="false" triggerDistance="0.0"/>
</obstacleData>
<obstacleData floating="true" moving="false" deadly="true" leftEdge="13.210184" rightEdge="13.363184" height="0.166" y="0.35333332">
<moveComponent length="0.0" rotation="0.0" startOffset="0.0" direction="0.0" speed="0.0" hasPlayerXSpeed="false" triggerDistance="0.0"/>
</obstacleData>
<obstacleData floating="true" moving="false" deadly="true" leftEdge="15.718043" rightEdge="15.922044" height="0.561" y="0.14000002">
<moveComponent length="0.0" rotation="0.0" startOffset="0.0" direction="0.0" speed="0.0" hasPlayerXSpeed="false" triggerDistance="0.0"/>
</obstacleData>
<obstacleData floating="true" moving="false" deadly="true" leftEdge="16.088207" rightEdge="16.725208" height="0.242" y="0.12666674">
<moveComponent length="0.0" rotation="0.0" startOffset="0.0" direction="0.0" speed="0.0" hasPlayerXSpeed="false" triggerDistance="0.0"/>
</obstacleData>
<obstacleData floating="true" moving="false" deadly="true" leftEdge="16.26588" rightEdge="16.520882" height="0.204" y="-0.21333332">
<moveComponent length="0.0" rotation="0.0" startOffset="0.0" direction="0.0" speed="0.0" hasPlayerXSpeed="false" triggerDistance="0.0"/>
</obstacleData>
<obstacleData floating="false" moving="false" deadly="true" leftEdge="17.437044" rightEdge="17.563044" height="0.815" y="-0.19250003">
<moveComponent length="0.0" rotation="0.0" startOffset="0.0" direction="0.0" speed="0.0" hasPlayerXSpeed="false" triggerDistance="0.0"/>
</obstacleData>
<obstacleData floating="true" moving="false" deadly="true" leftEdge="16.749046" rightEdge="17.411045" height="0.344" y="0.8133331">
<moveComponent length="0.0" rotation="0.0" startOffset="0.0" direction="0.0" speed="0.0" hasPlayerXSpeed="false" triggerDistance="0.0"/>
</obstacleData>
<obstacleData floating="true" moving="false" deadly="true" leftEdge="17.580055" rightEdge="17.860054" height="0.28" y="0.8266663">
<moveComponent length="0.0" rotation="0.0" startOffset="0.0" direction="0.0" speed="0.0" hasPlayerXSpeed="false" triggerDistance="0.0"/>
</obstacleData>
<obstacleData floating="true" moving="false" deadly="true" leftEdge="16.638046" rightEdge="16.842045" height="0.204" y="0.43999958">
<moveComponent length="0.0" rotation="0.0" startOffset="0.0" direction="0.0" speed="0.0" hasPlayerXSpeed="false" triggerDistance="0.0"/>
</obstacleData>
<obstacleData floating="true" moving="false" deadly="false" leftEdge="17.632498" rightEdge="19.7475" height="0.191" y="-0.29333332">
<moveComponent length="0.0" rotation="0.0" startOffset="0.0" direction="0.0" speed="0.0" hasPlayerXSpeed="false" triggerDistance="0.0"/>
</obstacleData>
<obstacleData floating="true" moving="false" deadly="false" leftEdge="19.896004" rightEdge="20.584003" height="0.764" y="-0.71333313">
<moveComponent length="0.0" rotation="0.0" startOffset="0.0" direction="0.0" speed="0.0" hasPlayerXSpeed="false" triggerDistance="0.0"/>
</obstacleData>
<obstacleData floating="false" moving="false" deadly="false" leftEdge="22.281925" rightEdge="25.797924" height="0.51" y="-0.34500003">
<moveComponent length="0.0" rotation="0.0" startOffset="0.0" direction="0.0" speed="0.0" hasPlayerXSpeed="false" triggerDistance="0.0"/>
</obstacleData>
<obstacleData floating="true" moving="false" deadly="false" leftEdge="23.379932" rightEdge="23.879932" height="0.5" y="0.5066667">
<moveComponent length="0.0" rotation="0.0" startOffset="0.0" direction="0.0" speed="0.0" hasPlayerXSpeed="false" triggerDistance="0.0"/>
</obstacleData>
<obstacleData floating="true" moving="false" deadly="false" leftEdge="23.913265" rightEdge="24.413265" height="0.5" y="0.4066666">
<moveComponent length="0.0" rotation="0.0" startOffset="0.0" direction="0.0" speed="0.0" hasPlayerXSpeed="false" triggerDistance="0.0"/>
</obstacleData>
<obstacleData floating="true" moving="false" deadly="true" leftEdge="24.463232" rightEdge="24.963232" height="0.5" y="0.49333322">
<moveComponent length="0.0" rotation="0.0" startOffset="0.0" direction="0.0" speed="0.0" hasPlayerXSpeed="false" triggerDistance="0.0"/>
</obstacleData>
<obstacleData floating="true" moving="false" deadly="true" leftEdge="25.92555" rightEdge="26.30755" height="0.318" y="0.046666645">
<moveComponent length="0.0" rotation="0.0" startOffset="0.0" direction="0.0" speed="0.0" hasPlayerXSpeed="false" triggerDistance="0.0"/>
</obstacleData>
</obstacles>
<stars class="java.util.ArrayList">
<positionData x="10.03671" y="-0.6066664"/>
<positionData x="17.73994" y="-0.020000508"/>
<positionData x="24.156612" y="0.7999998"/>
</stars>
<energy x="15.23337" y="0.41333318"/>
</level>
<level packId="1" id="11" goalX="20.280077" startSpeed="0.5" endSpeed="0.5" terrainEdge="-0.6" ceilingEdge="1.0">
<terrainTiles class="java.util.ArrayList">
<tileData x="-0.65258336" width="4.6948333"/>
<tileData x="9.922609" width="6.6215534"/>
<tileData x="16.612967" width="5.1191597"/>
</terrainTiles>
<ceilingTiles class="java.util.ArrayList">
<tileData x="8.6400385" width="23.280077"/>
</ceilingTiles>
<obstacles class="java.util.ArrayList">
<obstacleData floating="false" moving="false" deadly="false" leftEdge="1.1533332" rightEdge="1.6533332" height="0.318" y="-0.44100004">
<moveComponent length="0.0" rotation="0.0" startOffset="0.0" direction="0.0" speed="0.0" hasPlayerXSpeed="false" triggerDistance="0.0"/>
</obstacleData>
<obstacleData floating="true" moving="false" deadly="false" leftEdge="1.7833321" rightEdge="3.363332" height="0.14" y="-0.62999976">
<moveComponent length="0.0" rotation="0.0" startOffset="0.0" direction="0.0" speed="0.0" hasPlayerXSpeed="false" triggerDistance="0.0"/>
</obstacleData>
<obstacleData floating="true" moving="false" deadly="false" leftEdge="4.586499" rightEdge="6.5734997" height="0.14" y="-0.61999977">
<moveComponent length="0.0" rotation="0.0" startOffset="0.0" direction="0.0" speed="0.0" hasPlayerXSpeed="false" triggerDistance="0.0"/>
</obstacleData>
<obstacleData floating="true" moving="false" deadly="false" leftEdge="6.006334" rightEdge="7.0003343" height="0.318" y="-0.38333333">
<moveComponent length="0.0" rotation="0.0" startOffset="0.0" direction="0.0" speed="0.0" hasPlayerXSpeed="false" triggerDistance="0.0"/>
</obstacleData>
<obstacleData floating="true" moving="false" deadly="false" leftEdge="7.7123547" rightEdge="8.374355" height="0.51" y="0.30333316">
<moveComponent length="0.0" rotation="0.0" startOffset="0.0" direction="0.0" speed="0.0" hasPlayerXSpeed="false" triggerDistance="0.0"/>
</obstacleData>
<obstacleData floating="false" moving="false" deadly="false" leftEdge="10.003368" rightEdge="10.503368" height="0.344" y="-0.42800003">
<moveComponent length="0.0" rotation="0.0" startOffset="0.0" direction="0.0" speed="0.0" hasPlayerXSpeed="false" triggerDistance="0.0"/>
</obstacleData>
<obstacleData floating="true" moving="false" deadly="false" leftEdge="8.442866" rightEdge="9.563867" height="0.459" y="0.2133333">
<moveComponent length="0.0" rotation="0.0" startOffset="0.0" direction="0.0" speed="0.0" hasPlayerXSpeed="false" triggerDistance="0.0"/>
</obstacleData>
<obstacleData floating="false" moving="false" deadly="false" leftEdge="15.1467285" rightEdge="15.6467285" height="0.866" y="-0.16700003">
<moveComponent length="0.0" rotation="0.0" startOffset="0.0" direction="0.0" speed="0.0" hasPlayerXSpeed="false" triggerDistance="0.0"/>
</obstacleData>
<obstacleData floating="false" moving="false" deadly="false" leftEdge="16.991686" rightEdge="18.061686" height="0.331" y="-0.43450004">
<moveComponent length="0.0" rotation="0.0" startOffset="0.0" direction="0.0" speed="0.0" hasPlayerXSpeed="false" triggerDistance="0.0"/>
</obstacleData>
</obstacles>
<stars class="java.util.ArrayList">
<positionData x="3.7466683" y="-0.7266665"/>
<positionData x="10.6633415" y="-0.46666652"/>
<positionData x="16.370014" y="0.35999978"/>
</stars>
<energy x="8.003345" y="0.7533331"/>
</level>
<level packId="1" id="12" goalX="21.213303" startSpeed="0.5" endSpeed="0.5" terrainEdge="-0.6" ceilingEdge="1.0">
<terrainTiles class="java.util.ArrayList">
<tileData x="-0.870167" width="4.259666"/>
<tileData x="2.6370826" width="0.32683325"/>
<tileData x="4.540498" width="1.3219967"/>
<tileData x="7.2049217" width="1.4128513"/>
<tileData x="9.220345" width="1.2900009"/>
<tileData x="14.98237" width="1.5620499"/>
<tileData x="17.566525" width="1.3663254"/>
<tileData x="21.896816" width="5.9462585"/>
</terrainTiles>
<ceilingTiles class="java.util.ArrayList">
<tileData x="9.106651" width="24.213303"/>
</ceilingTiles>
<obstacles class="java.util.ArrayList">
<obstacleData floating="true" moving="false" deadly="false" leftEdge="0.49183273" rightEdge="2.2748327" height="0.35" y="-0.06333337">
<moveComponent length="0.0" rotation="0.0" startOffset="0.0" direction="0.0" speed="0.0" hasPlayerXSpeed="false" triggerDistance="0.0"/>
</obstacleData>
<obstacleData floating="true" moving="false" deadly="true" leftEdge="-0.22816634" rightEdge="0.9948337" height="0.408" y="0.79333305">
<moveComponent length="0.0" rotation="0.0" startOffset="0.0" direction="0.0" speed="0.0" hasPlayerXSpeed="false" triggerDistance="0.0"/>
</obstacleData>
<obstacleData floating="true" moving="false" deadly="true" leftEdge="2.2914987" rightEdge="2.9284987" height="0.35" y="-0.06333345">
<moveComponent length="0.0" rotation="0.0" startOffset="0.0" direction="0.0" speed="0.0" hasPlayerXSpeed="false" triggerDistance="0.0"/>
</obstacleData>
<obstacleData floating="true" moving="false" deadly="false" leftEdge="2.9399977" rightEdge="4.7999973" height="0.35" y="-0.060000002">
<moveComponent length="0.0" rotation="0.0" startOffset="0.0" direction="0.0" speed="0.0" hasPlayerXSpeed="false" triggerDistance="0.0"/>
</obstacleData>
<obstacleData floating="true" moving="false" deadly="true" leftEdge="3.6829991" rightEdge="5.516999" height="0.471" y="0.6733332">
<moveComponent length="0.934" rotation="0.0" startOffset="0.0" direction="0.0" speed="0.0" hasPlayerXSpeed="false" triggerDistance="0.0"/>
</obstacleData>
<obstacleData floating="true" moving="false" deadly="false" leftEdge="6.218662" rightEdge="7.874662" height="0.408" y="-0.07333334">
<moveComponent length="0.0" rotation="0.0" startOffset="0.0" direction="0.0" speed="0.0" hasPlayerXSpeed="false" triggerDistance="0.0"/>
</obstacleData>
<obstacleData floating="true" moving="false" deadly="false" leftEdge="8.508351" rightEdge="9.858352" height="0.369" y="0.08666667">
<moveComponent length="0.0" rotation="0.0" startOffset="0.0" direction="0.0" speed="0.0" hasPlayerXSpeed="false" triggerDistance="0.0"/>
</obstacleData>
<obstacleData floating="true" moving="false" deadly="false" leftEdge="9.916689" rightEdge="10.61669" height="0.3" y="0.0066666864">
<moveComponent length="0.0" rotation="0.0" startOffset="0.0" direction="0.0" speed="0.0" hasPlayerXSpeed="false" triggerDistance="0.0"/>
</obstacleData>
<obstacleData floating="true" moving="false" deadly="false" leftEdge="10.6766815" rightEdge="11.376682" height="0.3" y="-0.08666669">
<moveComponent length="0.0" rotation="0.0" startOffset="0.0" direction="0.0" speed="0.0" hasPlayerXSpeed="false" triggerDistance="0.0"/>
</obstacleData>
<obstacleData floating="true" moving="false" deadly="false" leftEdge="11.430039" rightEdge="12.13004" height="0.3" y="-0.1466667">
<moveComponent length="0.0" rotation="0.0" startOffset="0.0" direction="0.0" speed="0.0" hasPlayerXSpeed="false" triggerDistance="0.0"/>
</obstacleData>
<obstacleData floating="true" moving="false" deadly="true" leftEdge="12.183359" rightEdge="12.88336" height="0.3" y="-0.24000001">
<moveComponent length="0.0" rotation="0.0" startOffset="0.0" direction="0.0" speed="0.0" hasPlayerXSpeed="false" triggerDistance="0.0"/>
</obstacleData>
<obstacleData floating="true" moving="false" deadly="false" leftEdge="12.926704" rightEdge="13.626705" height="0.3" y="-0.31999996">
<moveComponent length="0.0" rotation="0.0" startOffset="0.0" direction="0.0" speed="0.0" hasPlayerXSpeed="false" triggerDistance="0.0"/>
</obstacleData>
<obstacleData floating="true" moving="false" deadly="false" leftEdge="13.700025" rightEdge="14.400025" height="0.3" y="-0.39333323">
<moveComponent length="0.0" rotation="0.0" startOffset="0.0" direction="0.0" speed="0.0" hasPlayerXSpeed="false" triggerDistance="0.0"/>
</obstacleData>
<obstacleData floating="true" moving="false" deadly="true" leftEdge="12.637027" rightEdge="12.943027" height="0.293" y="0.8466664">
<moveComponent length="0.0" rotation="0.0" startOffset="0.0" direction="0.0" speed="0.0" hasPlayerXSpeed="false" triggerDistance="0.0"/>
</obstacleData>
<obstacleData floating="true" moving="false" deadly="true" leftEdge="11.585686" rightEdge="11.967686" height="0.318" y="0.58666646">
<moveComponent length="0.0" rotation="0.0" startOffset="0.0" direction="0.0" speed="0.0" hasPlayerXSpeed="false" triggerDistance="0.0"/>
</obstacleData>
<obstacleData floating="true" moving="false" deadly="true" leftEdge="13.128856" rightEdge="13.357856" height="0.268" y="0.75999963">
<moveComponent length="0.0" rotation="0.0" startOffset="0.0" direction="0.0" speed="0.0" hasPlayerXSpeed="false" triggerDistance="0.0"/>
</obstacleData>
<obstacleData floating="true" moving="false" deadly="true" leftEdge="13.506041" rightEdge="13.91404" height="0.242" y="0.45333314">
<moveComponent length="0.0" rotation="0.0" startOffset="0.0" direction="0.0" speed="0.0" hasPlayerXSpeed="false" triggerDistance="0.0"/>
</obstacleData>
<obstacleData floating="true" moving="false" deadly="true" leftEdge="14.101356" rightEdge="14.305356" height="0.28" y="0.23333333">
<moveComponent length="0.0" rotation="0.0" startOffset="0.0" direction="0.0" speed="0.0" hasPlayerXSpeed="false" triggerDistance="0.0"/>
</obstacleData>
<obstacleData floating="true" moving="false" deadly="true" leftEdge="14.083701" rightEdge="14.389701" height="0.28" y="0.65999985">
<moveComponent length="0.0" rotation="0.0" startOffset="0.0" direction="0.0" speed="0.0" hasPlayerXSpeed="false" triggerDistance="0.0"/>
</obstacleData>
<obstacleData floating="true" moving="false" deadly="true" leftEdge="13.650369" rightEdge="13.956368" height="0.344" y="0.8466665">
<moveComponent length="0.0" rotation="0.0" startOffset="0.0" direction="0.0" speed="0.0" hasPlayerXSpeed="false" triggerDistance="0.0"/>
</obstacleData>
<obstacleData floating="true" moving="false" deadly="true" leftEdge="12.198009" rightEdge="12.402009" height="0.382" y="0.84666634">
<moveComponent length="0.0" rotation="0.0" startOffset="0.0" direction="0.0" speed="0.0" hasPlayerXSpeed="false" triggerDistance="0.0"/>
</obstacleData>
<obstacleData floating="true" moving="false" deadly="true" leftEdge="14.522194" rightEdge="14.751194" height="0.204" y="0.39333314">
<moveComponent length="0.0" rotation="0.0" startOffset="0.0" direction="0.0" speed="0.0" hasPlayerXSpeed="false" triggerDistance="0.0"/>
</obstacleData>
<obstacleData floating="true" moving="false" deadly="true" leftEdge="14.922533" rightEdge="15.177532" height="0.42" y="0.106666714">
<moveComponent length="0.0" rotation="0.0" startOffset="0.0" direction="0.0" speed="0.0" hasPlayerXSpeed="false" triggerDistance="0.0"/>
</obstacleData>
<obstacleData floating="false" moving="false" deadly="true" leftEdge="20.66682" rightEdge="21.09982" height="0.293" y="-0.45350003">
<moveComponent length="0.0" rotation="0.0" startOffset="0.0" direction="0.0" speed="0.0" hasPlayerXSpeed="false" triggerDistance="0.0"/>
</obstacleData>
</obstacles>
<stars class="java.util.ArrayList">
<positionData x="2.5833337" y="0.733333"/>
<positionData x="9.20668" y="-0.39999992"/>
<positionData x="16.356682" y="-0.473333"/>
</stars>
<energy x="2.639999" y="-0.4333331"/>
</level>
<level packId="1" id="13" goalX="27.436647" startSpeed="0.5" endSpeed="0.5" terrainEdge="-0.6" ceilingEdge="1.0">
<terrainTiles class="java.util.ArrayList">
<tileData x="2.0966673" width="0.29999518"/>
<tileData x="9.803359" width="5.1133876"/>
<tileData x="18.849586" width="2.9791203"/>
<tileData x="24.113628" width="1.7189598"/>
</terrainTiles>
<ceilingTiles class="java.util.ArrayList">
<tileData x="12.218324" width="30.436647"/>
</ceilingTiles>
<obstacles class="java.util.ArrayList">
<obstacleData floating="true" moving="false" deadly="false" leftEdge="-2.0633333" rightEdge="1.9366667" height="0.178" y="-1.1066666">
<moveComponent length="0.0" rotation="0.0" startOffset="0.0" direction="0.0" speed="0.0" hasPlayerXSpeed="false" triggerDistance="0.0"/>
</obstacleData>
<obstacleData floating="true" moving="false" deadly="false" leftEdge="2.2566652" rightEdge="6.256665" height="0.166" y="-1.0999998">
<moveComponent length="0.0" rotation="0.0" startOffset="0.0" direction="0.0" speed="0.0" hasPlayerXSpeed="false" triggerDistance="0.0"/>
</obstacleData>
<obstacleData floating="true" moving="false" deadly="false" leftEdge="3.88033" rightEdge="4.7463303" height="0.3" y="-0.8399995">
<moveComponent length="0.0" rotation="0.0" startOffset="0.0" direction="0.0" speed="0.0" hasPlayerXSpeed="false" triggerDistance="0.0"/>
</obstacleData>
<obstacleData floating="true" moving="false" deadly="true" leftEdge="6.9521728" rightEdge="7.181173" height="0.306" y="-0.8133329">
<moveComponent length="0.0" rotation="0.0" startOffset="0.0" direction="0.0" speed="0.0" hasPlayerXSpeed="false" triggerDistance="0.0"/>
</obstacleData>
<obstacleData floating="true" moving="false" deadly="true" leftEdge="6.4571733" rightEdge="6.916173" height="0.242" y="-0.8199997">
<moveComponent length="0.0" rotation="0.0" startOffset="0.0" direction="0.0" speed="0.0" hasPlayerXSpeed="false" triggerDistance="0.0"/>
</obstacleData>
<obstacleData floating="false" moving="false" deadly="false" leftEdge="8.487366" rightEdge="9.659367" height="0.318" y="-0.44100004">
<moveComponent length="0.0" rotation="0.0" startOffset="0.0" direction="0.0" speed="0.0" hasPlayerXSpeed="false" triggerDistance="0.0"/>
</obstacleData>
<obstacleData floating="false" moving="false" deadly="false" leftEdge="9.785368" rightEdge="11.161367" height="0.268" y="-0.46600002">
<moveComponent length="0.0" rotation="0.0" startOffset="0.0" direction="0.0" speed="0.0" hasPlayerXSpeed="false" triggerDistance="0.0"/>
</obstacleData>
<obstacleData floating="false" moving="false" deadly="false" leftEdge="11.4166975" rightEdge="11.9166975" height="1.07" y="-0.065">
<moveComponent length="0.0" rotation="0.0" startOffset="0.0" direction="0.0" speed="0.0" hasPlayerXSpeed="false" triggerDistance="0.0"/>
</obstacleData>
<obstacleData floating="true" moving="false" deadly="false" leftEdge="12.673389" rightEdge="16.67339" height="0.242" y="-1.1399997">
<moveComponent length="0.0" rotation="0.0" startOffset="0.0" direction="0.0" speed="0.0" hasPlayerXSpeed="false" triggerDistance="0.0"/>
</obstacleData>
<obstacleData floating="true" moving="false" deadly="false" leftEdge="15.786028" rightEdge="17.034029" height="0.777" y="-0.5933331">
<moveComponent length="0.0" rotation="0.0" startOffset="0.0" direction="0.0" speed="0.0" hasPlayerXSpeed="false" triggerDistance="0.0"/>
</obstacleData>
<obstacleData floating="true" moving="false" deadly="false" leftEdge="17.236704" rightEdge="20.956705" height="0.331" y="-0.03333334">
<moveComponent length="0.0" rotation="0.0" startOffset="0.0" direction="0.0" speed="0.0" hasPlayerXSpeed="false" triggerDistance="0.0"/>
</obstacleData>
<obstacleData floating="true" moving="false" deadly="false" leftEdge="20.447437" rightEdge="21.492435" height="0.764" y="0.53999984">
<moveComponent length="0.0" rotation="0.0" startOffset="0.0" direction="0.0" speed="0.0" hasPlayerXSpeed="false" triggerDistance="0.0"/>
</obstacleData>
<obstacleData floating="true" moving="false" deadly="false" leftEdge="22.605242" rightEdge="24.541243" height="0.369" y="0.4599999">
<moveComponent length="0.0" rotation="0.0" startOffset="0.0" direction="0.0" speed="0.0" hasPlayerXSpeed="false" triggerDistance="0.0"/>
</obstacleData>
<obstacleData floating="true" moving="false" deadly="true" leftEdge="24.606562" rightEdge="25.306562" height="0.3" y="0.3599999">
<moveComponent length="0.0" rotation="0.0" startOffset="0.0" direction="0.0" speed="0.0" hasPlayerXSpeed="false" triggerDistance="0.0"/>
</obstacleData>
<obstacleData floating="true" moving="false" deadly="true" leftEdge="25.3599" rightEdge="26.0599" height="0.3" y="0.25999996">
<moveComponent length="0.0" rotation="0.0" startOffset="0.0" direction="0.0" speed="0.0" hasPlayerXSpeed="false" triggerDistance="0.0"/>
</obstacleData>
<obstacleData floating="true" moving="false" deadly="false" leftEdge="26.11323" rightEdge="26.81323" height="0.3" y="0.17333333">
<moveComponent length="0.0" rotation="0.0" startOffset="0.0" direction="0.0" speed="0.0" hasPlayerXSpeed="false" triggerDistance="0.0"/>
</obstacleData>
<obstacleData floating="true" moving="false" deadly="true" leftEdge="26.866562" rightEdge="27.566563" height="0.3" y="0.07333334">
<moveComponent length="0.0" rotation="0.0" startOffset="0.0" direction="0.0" speed="0.0" hasPlayerXSpeed="false" triggerDistance="0.0"/>
</obstacleData>
<obstacleData floating="true" moving="false" deadly="true" leftEdge="27.61653" rightEdge="28.31653" height="0.3" y="-0.026666667">
<moveComponent length="0.0" rotation="0.0" startOffset="0.0" direction="0.0" speed="0.0" hasPlayerXSpeed="false" triggerDistance="0.0"/>
</obstacleData>
<obstacleData floating="true" moving="false" deadly="true" leftEdge="28.389854" rightEdge="29.089855" height="0.3" y="-0.10000004">
<moveComponent length="0.0" rotation="0.0" startOffset="0.0" direction="0.0" speed="0.0" hasPlayerXSpeed="false" triggerDistance="0.0"/>
</obstacleData>
<obstacleData floating="true" moving="false" deadly="true" leftEdge="29.1432" rightEdge="29.8432" height="0.3" y="-0.16666679">
<moveComponent length="0.0" rotation="0.0" startOffset="0.0" direction="0.0" speed="0.0" hasPlayerXSpeed="false" triggerDistance="0.0"/>
</obstacleData>
<obstacleData floating="true" moving="false" deadly="true" leftEdge="29.91653" rightEdge="30.616531" height="0.3" y="-0.24000004">
<moveComponent length="0.0" rotation="0.0" startOffset="0.0" direction="0.0" speed="0.0" hasPlayerXSpeed="false" triggerDistance="0.0"/>
</obstacleData>
<obstacleData floating="true" moving="false" deadly="true" leftEdge="30.683195" rightEdge="31.383196" height="0.3" y="-0.30000013">
<moveComponent length="0.0" rotation="0.0" startOffset="0.0" direction="0.0" speed="0.0" hasPlayerXSpeed="false" triggerDistance="0.0"/>
</obstacleData>
</obstacles>
<stars class="java.util.ArrayList">
<positionData x="-0.8933712" y="-0.79333353"/>
<positionData x="12.07002" y="-0.07333334"/>
<positionData x="22.043276" y="0.52"/>
</stars>
<energy x="19.063305" y="-0.43333337"/>
</level>
<level packId="1" id="14" goalX="24.140059" startSpeed="0.5" endSpeed="0.5" terrainEdge="-0.6" ceilingEdge="1.0">
<terrainTiles class="java.util.ArrayList">
<tileData x="0.15000391" width="6.300008"/>
<tileData x="10.3800125" width="4.160015"/>
<tileData x="13.123362" width="0.12668228"/>
<tileData x="14.028546" width="0.48368645"/>
<tileData x="15.038225" width="0.08367157"/>
<tileData x="15.7300625" width="0.10000229"/>
<tileData x="16.444122" width="0.12815475"/>
<tileData x="19.286245" width="2.9220924"/>
<tileData x="25.056282" width="4.593977"/>
</terrainTiles>
<ceilingTiles class="java.util.ArrayList">
<tileData x="10.570029" width="27.140059"/>
</ceilingTiles>
<obstacles class="java.util.ArrayList">
<obstacleData floating="false" moving="false" deadly="false" leftEdge="0.87333286" rightEdge="1.8733329" height="0.3" y="-0.45000002">
<moveComponent length="0.0" rotation="0.0" startOffset="0.0" direction="0.0" speed="0.0" hasPlayerXSpeed="false" triggerDistance="0.0"/>
</obstacleData>
<obstacleData floating="false" moving="false" deadly="false" leftEdge="2.0199993" rightEdge="3.0199993" height="0.968" y="-0.11600003">
<moveComponent length="0.0" rotation="0.0" startOffset="0.0" direction="0.0" speed="0.0" hasPlayerXSpeed="false" triggerDistance="0.0"/>
</obstacleData>
<obstacleData floating="true" moving="false" deadly="false" leftEdge="3.159998" rightEdge="4.159998" height="0.395" y="0.046666667">
<moveComponent length="0.0" rotation="0.0" startOffset="0.0" direction="0.0" speed="0.0" hasPlayerXSpeed="false" triggerDistance="0.0"/>
</obstacleData>
<obstacleData floating="true" moving="false" deadly="false" leftEdge="4.3066645" rightEdge="5.3066645" height="0.548" y="0.24666667">
<moveComponent length="0.0" rotation="0.0" startOffset="0.0" direction="0.0" speed="0.0" hasPlayerXSpeed="false" triggerDistance="0.0"/>
</obstacleData>
<obstacleData floating="true" moving="false" deadly="false" leftEdge="5.5466657" rightEdge="6.5466657" height="0.5" y="-0.0066667013">
<moveComponent length="0.0" rotation="0.0" startOffset="0.0" direction="0.0" speed="0.0" hasPlayerXSpeed="false" triggerDistance="0.0"/>
</obstacleData>
<obstacleData floating="true" moving="false" deadly="false" leftEdge="6.7466707" rightEdge="7.7466707" height="0.561" y="0.66666645">
<moveComponent length="0.0" rotation="0.0" startOffset="0.0" direction="0.0" speed="0.0" hasPlayerXSpeed="false" triggerDistance="0.0"/>
</obstacleData>
<obstacleData floating="true" moving="false" deadly="true" leftEdge="7.77701" rightEdge="8.08301" height="0.331" y="0.43333316">
<moveComponent length="0.0" rotation="0.0" startOffset="0.0" direction="0.0" speed="0.0" hasPlayerXSpeed="false" triggerDistance="0.0"/>
</obstacleData>
<obstacleData floating="true" moving="false" deadly="true" leftEdge="7.6111684" rightEdge="7.9421687" height="0.357" y="-0.04">
<moveComponent length="0.0" rotation="0.0" startOffset="0.0" direction="0.0" speed="0.0" hasPlayerXSpeed="false" triggerDistance="0.0"/>
</obstacleData>
<obstacleData floating="true" moving="false" deadly="false" leftEdge="8.783334" rightEdge="9.063334" height="0.306" y="0.39999986">
<moveComponent length="0.0" rotation="0.0" startOffset="0.0" direction="0.0" speed="0.0" hasPlayerXSpeed="false" triggerDistance="0.0"/>
</obstacleData>
<obstacleData floating="true" moving="false" deadly="true" leftEdge="7.929989" rightEdge="8.20999" height="0.357" y="-0.65333307">
<moveComponent length="0.0" rotation="0.0" startOffset="0.0" direction="0.0" speed="0.0" hasPlayerXSpeed="false" triggerDistance="0.0"/>
</obstacleData>
<obstacleData floating="true" moving="false" deadly="true" leftEdge="8.964518" rightEdge="9.295517" height="0.217" y="0.013333346">
<moveComponent length="0.0" rotation="0.0" startOffset="0.0" direction="0.0" speed="0.0" hasPlayerXSpeed="false" triggerDistance="0.0"/>
</obstacleData>
<obstacleData floating="true" moving="false" deadly="true" leftEdge="9.424855" rightEdge="9.781856" height="0.268" y="0.2">
<moveComponent length="0.0" rotation="0.0" startOffset="0.0" direction="0.0" speed="0.0" hasPlayerXSpeed="false" triggerDistance="0.0"/>
</obstacleData>
<obstacleData floating="false" moving="false" deadly="false" leftEdge="10.323043" rightEdge="11.597043" height="0.344" y="-0.42800003">
<moveComponent length="0.0" rotation="0.0" startOffset="0.0" direction="0.0" speed="0.0" hasPlayerXSpeed="false" triggerDistance="0.0"/>
</obstacleData>
<obstacleData floating="true" moving="false" deadly="true" leftEdge="8.065852" rightEdge="8.320851" height="0.204" y="0.11333329">
<moveComponent length="0.0" rotation="0.0" startOffset="0.0" direction="0.0" speed="0.0" hasPlayerXSpeed="false" triggerDistance="0.0"/>
</obstacleData>
<obstacleData floating="true" moving="false" deadly="true" leftEdge="7.8945045" rightEdge="8.505505" height="0.153" y="-0.3266666">
<moveComponent length="0.0" rotation="0.0" startOffset="0.0" direction="0.0" speed="0.0" hasPlayerXSpeed="false" triggerDistance="0.0"/>
</obstacleData>
<obstacleData floating="true" moving="false" deadly="true" leftEdge="8.158846" rightEdge="8.387846" height="0.242" y="-0.12000004">
<moveComponent length="0.0" rotation="0.0" startOffset="0.0" direction="0.0" speed="0.0" hasPlayerXSpeed="false" triggerDistance="0.0"/>
</obstacleData>
<obstacleData floating="true" moving="false" deadly="true" leftEdge="9.675684" rightEdge="10.057684" height="0.382" y="0.57999986">
<moveComponent length="0.0" rotation="0.0" startOffset="0.0" direction="0.0" speed="0.0" hasPlayerXSpeed="false" triggerDistance="0.0"/>
</obstacleData>
<obstacleData floating="false" moving="false" deadly="false" leftEdge="11.923376" rightEdge="12.423376" height="1.159" y="-0.020500004">
<moveComponent length="0.0" rotation="0.0" startOffset="0.0" direction="0.0" speed="0.0" hasPlayerXSpeed="false" triggerDistance="0.0"/>
</obstacleData>
<obstacleData floating="true" moving="false" deadly="false" leftEdge="12.555355" rightEdge="13.651356" height="0.357" y="-0.34666654">
<moveComponent length="0.0" rotation="0.0" startOffset="0.0" direction="0.0" speed="0.0" hasPlayerXSpeed="false" triggerDistance="0.0"/>
</obstacleData>
<obstacleData floating="false" moving="false" deadly="false" leftEdge="14.736395" rightEdge="16.570395" height="0.293" y="-0.45350003">
<moveComponent length="0.0" rotation="0.0" startOffset="0.0" direction="0.0" speed="0.0" hasPlayerXSpeed="false" triggerDistance="0.0"/>
</obstacleData>
<obstacleData floating="true" moving="false" deadly="false" leftEdge="18.965847" rightEdge="19.500847" height="0.637" y="0.1533334">
<moveComponent length="0.0" rotation="0.0" startOffset="0.0" direction="0.0" speed="0.0" hasPlayerXSpeed="false" triggerDistance="0.0"/>
</obstacleData>
<obstacleData floating="true" moving="false" deadly="false" leftEdge="19.553495" rightEdge="20.266497" height="0.561" y="0.040000007">
<moveComponent length="0.0" rotation="0.0" startOffset="0.0" direction="0.0" speed="0.0" hasPlayerXSpeed="false" triggerDistance="0.0"/>
</obstacleData>
<obstacleData floating="true" moving="false" deadly="false" leftEdge="20.29783" rightEdge="20.90883" height="0.51" y="-0.019999988">
<moveComponent length="0.0" rotation="0.0" startOffset="0.0" direction="0.0" speed="0.0" hasPlayerXSpeed="false" triggerDistance="0.0"/>
</obstacleData>
<obstacleData floating="true" moving="false" deadly="false" leftEdge="21.101616" rightEdge="21.891617" height="0.255" y="0.65999967">
<moveComponent length="0.0" rotation="0.0" startOffset="0.0" direction="0.0" speed="0.0" hasPlayerXSpeed="false" triggerDistance="0.0"/>
</obstacleData>
<obstacleData floating="false" moving="false" deadly="false" leftEdge="23.491608" rightEdge="24.281609" height="0.331" y="-0.43450004">
<moveComponent length="0.0" rotation="0.0" startOffset="0.0" direction="0.0" speed="0.0" hasPlayerXSpeed="false" triggerDistance="0.0"/>
</obstacleData>
<obstacleData floating="true" moving="false" deadly="false" leftEdge="21.969599" rightEdge="23.803598" height="0.255" y="0.5599997">
<moveComponent length="0.0" rotation="0.0" startOffset="0.0" direction="0.0" speed="0.0" hasPlayerXSpeed="false" triggerDistance="0.0"/>
</obstacleData>
</obstacles>
<stars class="java.util.ArrayList">
<positionData x="3.2666624" y="0.83999926"/>
<positionData x="13.483405" y="-0.7733334"/>
<positionData x="20.633293" y="0.43333328"/>
</stars>
<energy x="9.316678" y="0.47999987"/>
</level>
<level packId="1" id="15" goalX="21.456789" startSpeed="0.5" endSpeed="0.5" terrainEdge="-0.6" ceilingEdge="1.0">
<terrainTiles class="java.util.ArrayList">
<tileData x="0.66633177" width="7.3326635"/>
<tileData x="8.204729" width="6.2081304"/>
<tileData x="16.090084" width="3.1304817"/>
<tileData x="19.605875" width="2.0551033"/>
</terrainTiles>
<ceilingTiles class="java.util.ArrayList">
<tileData x="9.228395" width="24.45679"/>
</ceilingTiles>
<obstacles class="java.util.ArrayList">
<obstacleData floating="false" moving="false" deadly="true" leftEdge="1.1148322" rightEdge="1.4718323" height="0.242" y="-0.47900003">
<moveComponent length="0.0" rotation="0.0" startOffset="0.0" direction="0.0" speed="0.0" hasPlayerXSpeed="false" triggerDistance="0.0"/>
</obstacleData>
<obstacleData floating="false" moving="false" deadly="false" leftEdge="3.3556643" rightEdge="3.7376642" height="0.854" y="-0.17300004">
<moveComponent length="0.0" rotation="0.0" startOffset="0.0" direction="0.0" speed="0.0" hasPlayerXSpeed="false" triggerDistance="0.0"/>
</obstacleData>
<obstacleData floating="false" moving="false" deadly="false" leftEdge="8.783709" rightEdge="9.949709" height="0.28" y="-0.46000004">
<moveComponent length="0.0" rotation="0.0" startOffset="0.0" direction="0.0" speed="0.0" hasPlayerXSpeed="false" triggerDistance="0.0"/>
</obstacleData>
<obstacleData floating="true" moving="false" deadly="false" leftEdge="10.403438" rightEdge="11.683438" height="0.752" y="0.07999999">
<moveComponent length="0.0" rotation="0.0" startOffset="0.0" direction="0.0" speed="0.0" hasPlayerXSpeed="false" triggerDistance="0.0"/>
</obstacleData>
<obstacleData floating="true" moving="false" deadly="true" leftEdge="12.896184" rightEdge="13.864184" height="0.408" y="-0.026666658">
<moveComponent length="0.0" rotation="0.0" startOffset="0.0" direction="0.0" speed="0.0" hasPlayerXSpeed="false" triggerDistance="0.0"/>
</obstacleData>
<obstacleData floating="true" moving="false" deadly="false" leftEdge="13.748032" rightEdge="14.799032" height="0.229" y="0.35999987">
<moveComponent length="0.0" rotation="0.0" startOffset="0.0" direction="0.0" speed="0.0" hasPlayerXSpeed="false" triggerDistance="0.0"/>
</obstacleData>
<obstacleData floating="true" moving="false" deadly="true" leftEdge="16.221848" rightEdge="16.871845" height="0.293" y="-0.17999999">
<moveComponent length="0.0" rotation="0.0" startOffset="0.0" direction="0.0" speed="0.0" hasPlayerXSpeed="false" triggerDistance="0.0"/>
</obstacleData>
<obstacleData floating="true" moving="false" deadly="true" leftEdge="17.4613" rightEdge="17.952301" height="0.42" y="0.0066668633">
<moveComponent length="0.0" rotation="0.0" startOffset="0.0" direction="0.0" speed="0.0" hasPlayerXSpeed="false" triggerDistance="0.0"/>
</obstacleData>
<obstacleData floating="false" moving="false" deadly="false" leftEdge="18.583641" rightEdge="20.416641" height="0.357" y="-0.42150003">
<moveComponent length="0.0" rotation="0.0" startOffset="0.0" direction="0.0" speed="0.0" hasPlayerXSpeed="false" triggerDistance="0.0"/>
</obstacleData>
<obstacleData floating="true" moving="false" deadly="true" leftEdge="20.458597" rightEdge="20.8216" height="0.344" y="-0.16">
<moveComponent length="0.0" rotation="0.0" startOffset="0.0" direction="0.0" speed="0.0" hasPlayerXSpeed="false" triggerDistance="0.0"/>
</obstacleData>
<obstacleData floating="true" moving="false" deadly="false" leftEdge="11.73876" rightEdge="12.834761" height="0.624" y="0.053333327">
<moveComponent length="0.0" rotation="0.0" startOffset="0.0" direction="0.0" speed="0.0" hasPlayerXSpeed="false" triggerDistance="0.0"/>
</obstacleData>
</obstacles>
<stars class="java.util.ArrayList">
<positionData x="3.1800041" y="-0.27333292"/>
<positionData x="16.533503" y="-0.47333282"/>
<positionData x="21.103453" y="0.5466664"/>
</stars>
<energy x="11.566686" y="-0.52"/>
</level>
<level packId="1" id="16" goalX="27.61336" startSpeed="0.5" endSpeed="0.5" terrainEdge="-0.6" ceilingEdge="1.0">
<terrainTiles class="java.util.ArrayList">
<tileData x="-0.24166775" width="5.5166645"/>
<tileData x="5.175004" width="4.11668"/>
<tileData x="9.398693" width="3.1306973"/>
<tileData x="13.349711" width="0.74734116"/>
<tileData x="16.175535" width="3.7043037"/>
<tileData x="21.140396" width="1.8694229"/>
<tileData x="25.265484" width="2.8547516"/>
</terrainTiles>
<ceilingTiles class="java.util.ArrayList">
<tileData x="26.850039" width="1.5266457"/>
</ceilingTiles>
<obstacles class="java.util.ArrayList">
<obstacleData floating="true" moving="false" deadly="false" leftEdge="0.64399934" rightEdge="2.3759992" height="0.395" y="0.013333346">
<moveComponent length="0.0" rotation="0.0" startOffset="0.0" direction="0.0" speed="0.0" hasPlayerXSpeed="false" triggerDistance="0.0"/>
</obstacleData>
<obstacleData floating="false" moving="false" deadly="false" leftEdge="16.642021" rightEdge="18.01802" height="0.803" y="-0.19850004">
<moveComponent length="0.0" rotation="0.0" startOffset="0.0" direction="0.0" speed="0.0" hasPlayerXSpeed="false" triggerDistance="0.0"/>
</obstacleData>
<obstacleData floating="true" moving="false" deadly="false" leftEdge="2.3846664" rightEdge="3.1486664" height="0.293" y="0.013333335">
<moveComponent length="0.0" rotation="0.0" startOffset="0.0" direction="0.0" speed="0.0" hasPlayerXSpeed="false" triggerDistance="0.0"/>
</obstacleData>
<obstacleData floating="false" moving="false" deadly="true" leftEdge="3.185498" rightEdge="3.414498" height="0.548" y="-0.32600003">
<moveComponent length="0.0" rotation="0.0" startOffset="0.0" direction="0.0" speed="0.0" hasPlayerXSpeed="false" triggerDistance="0.0"/>
</obstacleData>
<obstacleData floating="true" moving="false" deadly="false" leftEdge="4.6338325" rightEdge="7.2328324" height="0.382" y="0.019999996">
<moveComponent length="0.0" rotation="0.0" startOffset="0.0" direction="0.0" speed="0.0" hasPlayerXSpeed="false" triggerDistance="0.0"/>
</obstacleData>
<obstacleData floating="true" moving="false" deadly="true" leftEdge="6.884506" rightEdge="7.4955063" height="0.713" y="0.6199999">
<moveComponent length="0.0" rotation="0.0" startOffset="0.0" direction="0.0" speed="0.0" hasPlayerXSpeed="false" triggerDistance="0.0"/>
</obstacleData>
<obstacleData floating="true" moving="false" deadly="false" leftEdge="9.321175" rightEdge="11.232174" height="0.408" y="3.259629E-8">
<moveComponent length="0.0" rotation="0.0" startOffset="0.0" direction="0.0" speed="0.0" hasPlayerXSpeed="false" triggerDistance="0.0"/>
</obstacleData>
<obstacleData floating="true" moving="false" deadly="true" leftEdge="10.990374" rightEdge="11.576374" height="0.701" y="0.60666656">
<moveComponent length="0.0" rotation="0.0" startOffset="0.0" direction="0.0" speed="0.0" hasPlayerXSpeed="false" triggerDistance="0.0"/>
</obstacleData>
<obstacleData floating="true" moving="false" deadly="false" leftEdge="11.911054" rightEdge="13.389054" height="0.242" y="-0.19333334">
<moveComponent length="0.0" rotation="0.0" startOffset="0.0" direction="0.0" speed="0.0" hasPlayerXSpeed="false" triggerDistance="0.0"/>
</obstacleData>
<obstacleData floating="true" moving="false" deadly="false" leftEdge="13.19673" rightEdge="13.69673" height="0.306" y="0.12666664">
<moveComponent length="0.0" rotation="0.0" startOffset="0.0" direction="0.0" speed="0.0" hasPlayerXSpeed="false" triggerDistance="0.0"/>
</obstacleData>
<obstacleData floating="true" moving="false" deadly="false" leftEdge="14.659576" rightEdge="15.780577" height="0.28" y="-0.07333337">
<moveComponent length="0.0" rotation="0.0" startOffset="0.0" direction="0.0" speed="0.0" hasPlayerXSpeed="false" triggerDistance="0.0"/>
</obstacleData>
<obstacleData floating="true" moving="true" deadly="true" leftEdge="14.410246" rightEdge="15.123245" height="0.357" y="0.79333305">
<moveComponent length="2.146" rotation="90.471" startOffset="0.328" direction="1.0" speed="0.404" hasPlayerXSpeed="false" triggerDistance="0.0"/>
</obstacleData>
<obstacleData floating="true" moving="false" deadly="false" leftEdge="18.443184" rightEdge="20.150185" height="0.5" y="0.2733334">
<moveComponent length="0.0" rotation="0.0" startOffset="0.0" direction="0.0" speed="0.0" hasPlayerXSpeed="false" triggerDistance="0.0"/>
</obstacleData>
<obstacleData floating="true" moving="true" deadly="true" leftEdge="23.141178" rightEdge="23.47218" height="0.331" y="-0.35333315">
<moveComponent length="2.01" rotation="90.0" startOffset="0.76" direction="1.0" speed="0.601" hasPlayerXSpeed="false" triggerDistance="0.0"/>
</obstacleData>
<obstacleData floating="true" moving="false" deadly="false" leftEdge="20.568808" rightEdge="22.097807" height="0.166" y="-4.656613E-9">
<moveComponent length="0.0" rotation="0.0" startOffset="0.0" direction="0.0" speed="0.0" hasPlayerXSpeed="false" triggerDistance="0.0"/>
</obstacleData>
<obstacleData floating="false" moving="false" deadly="false" leftEdge="24.818256" rightEdge="25.328255" height="0.255" y="-0.47250003">
<moveComponent length="0.0" rotation="0.0" startOffset="0.0" direction="0.0" speed="0.0" hasPlayerXSpeed="false" triggerDistance="0.0"/>
</obstacleData>
<obstacleData floating="true" moving="false" deadly="true" leftEdge="25.717901" rightEdge="26.481901" height="0.306" y="-0.066666685">
<moveComponent length="0.0" rotation="0.0" startOffset="0.0" direction="0.0" speed="0.0" hasPlayerXSpeed="false" triggerDistance="0.0"/>
</obstacleData>
<obstacleData floating="true" moving="false" deadly="true" leftEdge="27.001389" rightEdge="27.358387" height="0.459" y="0.5399998">
<moveComponent length="0.0" rotation="0.0" startOffset="0.0" direction="0.0" speed="0.0" hasPlayerXSpeed="false" triggerDistance="0.0"/>
</obstacleData>
<obstacleData floating="true" moving="false" deadly="true" leftEdge="26.364573" rightEdge="26.848574" height="0.344" y="0.33333334">
<moveComponent length="0.0" rotation="0.0" startOffset="0.0" direction="0.0" speed="0.0" hasPlayerXSpeed="false" triggerDistance="0.0"/>
</obstacleData>
</obstacles>
<stars class="java.util.ArrayList">
<positionData x="2.8266537" y="-0.38666654"/>
<positionData x="13.450049" y="-0.45333323"/>
<positionData x="22.803272" y="-0.34666654"/>
</stars>
<energy x="19.086655" y="-0.40666655"/>
</level>
</levels>
</levelPack>

View File

@ -4,6 +4,8 @@ uniform sampler2D texture;
uniform float alpha;
uniform vec2 texAtlasSize;
uniform float texAtlasIndex;
uniform float hasColor;
uniform vec3 color;
const float clampBorder = 0.005;
@ -20,7 +22,11 @@ void main() {
vec2 texAtlasCoords = getTexCoordsInAtlas(clampedTexCoords, texAtlasIndex);
gl_FragColor = texture2D(texture, texAtlasCoords);
gl_FragColor.a = min(gl_FragColor.a, alpha);
gl_FragColor.rgb = gl_FragColor.rgb / gl_FragColor.a;
if(hasColor == 1.0){
gl_FragColor.rgb = color;
} else {
gl_FragColor.rgb = gl_FragColor.rgb / gl_FragColor.a;
}
}

View File

@ -2,7 +2,7 @@ precision mediump float;
uniform sampler2D texture;
uniform float useCustomColor;
uniform vec4 color;
uniform vec3 color;
uniform float alpha;
uniform float roundValue;
uniform float visibleAmount;
@ -16,11 +16,12 @@ void main() {
if(isInRoundedRange() == 1.0 && isInVisiblePart() == 1.0){
if(useCustomColor == 1.0){
gl_FragColor = color;
gl_FragColor.rgb = color;
gl_FragColor.a = alpha;
} else {
gl_FragColor = texture2D(texture, pass_TexCoords);
gl_FragColor.a = min(gl_FragColor.a, alpha);
}
gl_FragColor.a = min(gl_FragColor.a, alpha);
gl_FragColor.rgb = gl_FragColor.rgb / gl_FragColor.a;
} else {
gl_FragColor = vec4(0.0, 0.0, 0.0, 0.0);

View File

@ -7,6 +7,7 @@
package de.frajul.endlessroll.entities;
import de.frajul.endlessroll.data.Color3f;
import de.frajul.endlessroll.data.Vector;
import de.frajul.endlessroll.entities.collision.geometry.Quad;
import de.frajul.endlessroll.entities.textures.Texture;
@ -25,6 +26,7 @@ public class Entity extends Quad {
private DestroyEffect destroyEffect;
private Vector maxTexSize;
private boolean visible = true;
private Color3f color = null;
public Entity(Texture texture, Vector position, float width, float height) {
super(position, width, height);
@ -125,4 +127,12 @@ public class Entity extends Quad {
public boolean isVisible() {
return visible;
}
public void setColor(Color3f color) {
this.color = color;
}
public Color3f getColor() {
return color;
}
}

View File

@ -15,7 +15,6 @@ import de.frajul.endlessroll.entities.textures.Texture;
public class Gui extends Entity {
protected float roundValue = 0;
protected Color4f color = null;
public Gui(Texture texture, Vector position, float width, float height) {
super(texture, position, width, height);
@ -29,12 +28,4 @@ public class Gui extends Entity {
this.roundValue = roundValue;
}
public Color4f getColor() {
return color;
}
public void setColor(Color4f color) {
this.color = color;
}
}

View File

@ -9,6 +9,7 @@ package de.frajul.endlessroll.entities.guis;
import java.util.concurrent.atomic.AtomicBoolean;
import de.frajul.endlessroll.data.Color3f;
import de.frajul.endlessroll.data.Color4f;
import de.frajul.endlessroll.data.Vector;
import de.frajul.endlessroll.entities.textures.Texture;
@ -20,11 +21,11 @@ import de.frajul.endlessroll.main.game.Game;
public class ToolButton {
private final Color4f LOCKED = new Color4f(0.29f, 0.29f, 0.29f, 0.9f);
private final Color4f ACTIVE_READY = new Color4f(0.25f, 0.89f, 0.17f, 0.9f);
private final Color4f ACTIVE_NOT_READY = new Color4f(0.86f, 0.08f, 0.13f, 0.9f);
private final Color4f INACTIVE_READY = new Color4f(1.0f, 0.95f, 0.0f, 0.9f);
private final Color4f INACTIVE_NOT_READY = new Color4f(0.57f, 0.11f, 0.06f, 0.9f);
private final Color3f LOCKED = new Color3f(0.29f, 0.29f, 0.29f);
private final Color3f ACTIVE_READY = new Color3f(0.25f, 0.89f, 0.17f);
private final Color3f ACTIVE_NOT_READY = new Color3f(0.86f, 0.08f, 0.13f);
private final Color3f INACTIVE_READY = new Color3f(1.0f, 0.95f, 0.0f);
private final Color3f INACTIVE_NOT_READY = new Color3f(0.57f, 0.11f, 0.06f);
private Gui border;
private Gui background;
@ -46,9 +47,11 @@ public class ToolButton {
border = new Gui(texturePack.white, position, width, height);
border.setRoundValue(0.3f);
border.setAlpha(0.9f);
background = new Gui(null, position, height, height);
progressbar = new Progressbar(texturePack.white, position, height, height, 0);
progressbar.setColor(new Color4f(0.4f, 0.4f, 0.4f, 0.6f));
progressbar.setColor(new Color3f(0.4f, 0.4f, 0.4f));
progressbar.setAlpha(0.6f);
progressbar.setRoundValue(1);
progressbar.setProgress(0.6f);
animationLayer = new ToolButtonAnimationLayer(toolButtonLockedTexture, position, height,
@ -117,6 +120,13 @@ public class ToolButton {
}
}
public void setVisible(boolean visible){
border.setVisible(visible);
background.setVisible(visible);
progressbar.setVisible(visible);
animationLayer.setVisible(visible);
}
public void setActive(boolean active) {
this.active.set(active);
}

View File

@ -89,6 +89,12 @@ public class ToolButtonBar {
return list;
}
public void setVisible(boolean visible) {
for (ToolButton button : toolButtons) {
button.setVisible(visible);
}
}
public List<ToolButton> getToolButtons() {
return toolButtons;
}

View File

@ -37,7 +37,8 @@ public enum PlayerShape {
BLUE(R.string.playershape_name_blue, R.string.playershape_description_blue,
R.drawable.playershapes_blue, false, new CollectEnergyTask(20)),
SUN(R.string.playershape_name_sun, R.string.playershape_description_sun,
R.drawable.playershapes_sun, false, new CollectEnergyTask(30));
R.drawable.playershapes_sun, false, new CollectEnergyTask(30)),
RAINBOW(R.string.playershape_name_rainbow, R.string.playershape_description_rainbow, R.drawable.playershapes_rainbow, true, new EmptyTask());
@StringRes
private int nameId;

View File

@ -27,7 +27,8 @@ public enum World {
R.drawable.terrain_c_grass, R.drawable.obstacles_grass,
R.drawable.backgrounds_game_grass),
ICY_MOUNTAINS(R.drawable.world_previews_icymountains, R.drawable.terrain_t_ice,
R.drawable.terrain_c_ice, R.drawable.obstacles_snow, R.drawable.backgrounds_game_snow);
R.drawable.terrain_c_ice, R.drawable.obstacles_snow, R.drawable.backgrounds_game_snow),
UNDERWATER(R.drawable.world_previews_comingsoon, R.drawable.terrain_t_underwater, R.drawable.terrain_c_underwater, R.drawable.obstacles_underwater, R.drawable.backgrounds_game_underwater, R.drawable.background_game_underwater_2, R.drawable.background_game_underwater_3);
// TEST_WORLD_GRASS(R.drawable.world_previews_grasslands, R.drawable.terrain_t_grass,
// R.drawable.terrain_c_grass, R.drawable.juri_obstacles_grass,
// R.drawable.backgrounds_game_grass, R.drawable.juri_background_game_grass_2, R.drawable.juri_background_game_grass_3),

View File

@ -55,6 +55,8 @@ import de.frajul.endlessroll.views.TaskCompletedMessage;
*/
public class GameActivity extends Activity implements ExceptionHandler, User.LvUpListener {
public final static boolean IS_DEVELOPER = false;
private DataStorageHandler dataStorageHandler;
private LevelManager levelManager;
private SoundManager soundManager;

View File

@ -7,6 +7,8 @@
package de.frajul.endlessroll.main.game;
import android.view.View;
import java.util.ArrayList;
import java.util.List;
@ -65,6 +67,7 @@ public class Game extends Rendering<GameScene> {
private Level level;
private List<Integer> collectedStars = new ArrayList<>();
private boolean energyCollected;
private boolean inPhotoMode = false;
public Game(GameHandler handler, GameScreen gameScreen, GameActivity gameActivity, GameRenderer gameRenderer) throws Exception {
super(gameActivity, gameRenderer);
@ -215,6 +218,28 @@ public class Game extends Rendering<GameScene> {
}
}
public void startPhotoMode(boolean showToolBar){
if(!showToolBar)
toolButtonBar.setVisible(false);
viewManager.setShowFps(false);
viewManager.getPlayerProgressView().setVisibility(View.INVISIBLE);
viewManager.getPauseButton().setVisibility(View.INVISIBLE);
inPhotoMode = true;
}
public void endPhotoMode(){
toolButtonBar.setVisible(true);
viewManager.setShowFps(gameActivity.getDataStorageHandler().readIsShowFps());
viewManager.getPlayerProgressView().setVisibility(View.VISIBLE);
viewManager.getPauseButton().setVisibility(View.VISIBLE);
inPhotoMode = false;
viewManager.endShortMenuPhotoMode();
}
public boolean isInPhotoMode() {
return inPhotoMode;
}
public void resetViews() {
viewManager.resetViews();
toolButtonBar.reset(gameActivity.getUser().getToolSlotSettings());

View File

@ -7,8 +7,10 @@
package de.frajul.endlessroll.main.game;
import de.frajul.endlessroll.data.Color3f;
import de.frajul.endlessroll.data.Vector;
import de.frajul.endlessroll.entities.DestroyEffect;
import de.frajul.endlessroll.entities.Entity;
import de.frajul.endlessroll.entities.Goal;
import de.frajul.endlessroll.entities.Obstacle;
import de.frajul.endlessroll.entities.collectables.Energy;
@ -72,6 +74,12 @@ public class GameScene extends Scene {
} else if (enviromentParticles != null) {
enviromentParticles.kill();
}
if(world == World.UNDERWATER){
// colorFilter = new Entity(textures.white, new Vector(),4,3);
// colorFilter.setColor(new Color3f(0, 0, 1));
// colorFilter.setAlpha(0.3f);
}
GameLog.d("Level " + level.getId() + " successfully loaded");
}

View File

@ -61,6 +61,7 @@ public abstract class Scene {
protected final List<Tool> tools = Collections.synchronizedList(new ArrayList<Tool>());
protected Collectables collectables = new Collectables();
protected final List<Gui> guis = Collections.synchronizedList(new ArrayList<Gui>());
protected Entity colorFilter = null;
public Scene(GameActivity gameActivity, TexturePack texturePack, ParticleSystem particleSystem) {
this.gameActivity = gameActivity;
@ -212,6 +213,10 @@ public abstract class Scene {
return textures;
}
public Entity getColorFilter() {
return colorFilter;
}
public ParticleSystem getParticleSystem() {
return particleSystem;
}

View File

@ -64,6 +64,8 @@ public class GameScreen extends GLScreen<RelativeLayout> {
@Override
public void onBackKeyDown() {
if(game.isInPhotoMode())
game.endPhotoMode();
game.tryToPause();
if (isLevelFinished())
game.onGoalMessageKeyBack();

View File

@ -21,6 +21,7 @@ import de.frajul.endlessroll.main.MyGlSurfaceView;
import de.frajul.endlessroll.main.game.StartScene;
import de.frajul.endlessroll.sqlDatabase.MyDatabase;
import de.frajul.endlessroll.views.ConfirmDialog;
import de.frajul.endlessroll.views.DevToolsDialog;
/**
* Created by Julian on 07.07.2016.
@ -28,16 +29,11 @@ import de.frajul.endlessroll.views.ConfirmDialog;
public class StartScreen extends GLScreen<RelativeLayout> implements View.OnClickListener, ConfirmDialog.ConfirmDialogListener {
private final int CALL_ID_CONFIRM_EXIT = 1;
private final int CALL_ID_CONFIRM_FINISH_WORLD = 2;
private StartScreenRendering rendering;
private Button play;
private Button unlockLevels;
private Button gain90EP;
private Button finishFirstWorld;
private Button toGlTestScreen;
private Button showDevToolsDialog;
private DevToolsDialog devToolsDialog;
private ConfirmDialog confirmDialog;
public StartScreen(GameActivity gameActivity, MyGlSurfaceView glSurfaceView) throws Exception {
@ -48,11 +44,10 @@ public class StartScreen extends GLScreen<RelativeLayout> implements View.OnClic
title.setTypeface(typeface);
play = createButton(R.id.startscreen_play, typeface);
play.startAnimation(AnimationUtils.loadAnimation(gameActivity, R.anim.rotate));
unlockLevels = createButton(R.id.startscreen_unlock_levels, typeface);
gain90EP = createButton(R.id.startscreen_gain_90_ep, typeface);
finishFirstWorld = createButton(R.id.startscreen_finish_world_1, typeface);
toGlTestScreen = createButton(R.id.startscreen_to_gl_test_screen, typeface);
showDevToolsDialog = createButton(R.id.startscreen_show_dev_tools_dialog, typeface);
showDevToolsDialog.setVisibility(GameActivity.IS_DEVELOPER ? View.VISIBLE : View.GONE);
devToolsDialog = new DevToolsDialog(gameActivity);
confirmDialog = new ConfirmDialog(gameActivity, this);
rendering = new StartScreenRendering(gameActivity, gameRenderer);
@ -84,20 +79,9 @@ public class StartScreen extends GLScreen<RelativeLayout> implements View.OnClic
if (v.equals(play)) {
gameActivity.flipToScreen(ScreenType.WORLDS);
gameRenderer.setCurrentRendering(null);
} else if (v.equals(gain90EP)) {
gameActivity.getUser().gainEp(90, true);
} else if (v.equals(unlockLevels)) {
gameActivity.getLevelManager().unlockAllLevels();
gameActivity.getLevelManager().unlockAllPacks();
MyDatabase database = gameActivity.getDataStorageHandler().getDatabase();
database.open();
database.writeAllLevelAndPackStatus(gameActivity.getLevelManager());
database.close();
} else if (v.equals(finishFirstWorld)) {
confirmDialog
.show(CALL_ID_CONFIRM_FINISH_WORLD, R.string.confirm_dialog_finish_world_1);
} else if (v.equals(toGlTestScreen))
gameActivity.flipToScreen(ScreenType.GL_TEST);
} if(v.equals(showDevToolsDialog)){
devToolsDialog.show();
}
}
@ -105,19 +89,6 @@ public class StartScreen extends GLScreen<RelativeLayout> implements View.OnClic
public void onConfirmed(int callId) {
if (callId == CALL_ID_CONFIRM_EXIT) {
gameActivity.exitGame();
} else if (callId == CALL_ID_CONFIRM_FINISH_WORLD) {
gameActivity.resetData();
gameActivity.getUser().gainEp(320, false);
gameActivity.getLevelManager().finishFirstPack();
gameActivity.showNewFinishedPlayerShapeTasks();
gameActivity.getTutorialManager().getToolShopTutorial().setFinished(true);
gameActivity.getDataStorageHandler().writeUserData(gameActivity.getUser());
gameActivity.getDataStorageHandler().writeToolShopTutorialFinished(true);
MyDatabase database = gameActivity.getDataStorageHandler().getDatabase();
database.open();
database.writeAllLevelAndPackStatus(gameActivity.getLevelManager());
database.close();
}
}
}

View File

@ -143,6 +143,14 @@ public class GameRenderer implements GLSurfaceView.Renderer {
renderFbo(gl);
//TODO: change mvp matrix for non moving entites / change type of these entities (colorFilter, background)
if(currentRendering.getScene().getColorFilter() != null) {
entityShader.start();
entityShader.loadMVPMatrix(matrixCreator, new Camera());
renderEntity(gl, currentRendering.getScene().getColorFilter());
entityShader.stop();
}
renderGuis(gl, scene.getGuis());
}
}
@ -234,6 +242,7 @@ public class GameRenderer implements GLSurfaceView.Renderer {
gl.glActiveTexture(GL10.GL_TEXTURE0);
gl.glBindTexture(GL10.GL_TEXTURE_2D, entity.getTexture().getId());
entityShader.loadTransformationMatrix(matrixCreator, entity);
entityShader.loadColor(entity.getColor());
entityShader.loadAlpha(entity.getAlpha());
entityShader.loadTextureAtlasInfos(entity.getTexture(), entity.getTextureAtlasIndex());
entityShader.loadTexCoordScaling(entity.calcTexScaleX(), entity.calcTexScaleY());

View File

@ -10,6 +10,8 @@ package de.frajul.endlessroll.rendering.shader;
import android.content.Context;
import android.opengl.GLES20;
import de.frajul.endlessroll.data.Color3f;
import de.frajul.endlessroll.data.Vector;
import de.frajul.endlessroll.entities.Entity;
import de.frajul.endlessroll.entities.textures.Texture;
import de.frajul.endlessroll.main.game.Camera;
@ -26,6 +28,8 @@ public class EntityShader extends ShaderProgram {
private int location_texAtlasSize;
private int location_texAtlasIndex;
private int location_texCoordScaling;
private int location_hasColor;
private int location_color;
public EntityShader(Context context) throws Exception {
super(context, "shader/entityVertexShader.glsl", "shader/entityFragmentShader.glsl");
@ -39,6 +43,8 @@ public class EntityShader extends ShaderProgram {
location_texAtlasSize = super.getUniformLocation("texAtlasSize");
location_texAtlasIndex = super.getUniformLocation("texAtlasIndex");
location_texCoordScaling = super.getUniformLocation("texCoordScaling");
location_hasColor = super.getUniformLocation("hasColor");
location_color = super.getUniformLocation("color");
}
public void loadMVPMatrix(MatrixCreator matrixCreator, Camera camera) {
@ -64,4 +70,10 @@ public class EntityShader extends ShaderProgram {
GLES20.glUniform2f(location_texCoordScaling, scalingX, scalingY);
}
public void loadColor(Color3f color){
GLES20.glUniform1f(location_hasColor, color == null ? 0 : 1);
if(color != null)
GLES20.glUniform3f(location_color, color.getR(), color.getG(), color.getB());
}
}

View File

@ -10,6 +10,7 @@ package de.frajul.endlessroll.rendering.shader;
import android.content.Context;
import android.opengl.GLES20;
import de.frajul.endlessroll.data.Color3f;
import de.frajul.endlessroll.data.Color4f;
import de.frajul.endlessroll.entities.Entity;
import de.frajul.endlessroll.rendering.MatrixCreator;
@ -52,11 +53,10 @@ public class GuiShader extends ShaderProgram {
GLES20.glUniformMatrix4fv(location_transformationMatrix, 1, false, transformationMatrix, 0);
}
public void loadCustomColor(Color4f color) {
public void loadCustomColor(Color3f color) {
GLES20.glUniform1f(location_useCustomColor, color == null ? 0 : 1);
if (color != null)
GLES20.glUniform4f(location_color, color.getR(), color.getG(), color.getB(),
color.getA());
GLES20.glUniform3f(location_color, color.getR(), color.getG(), color.getB());
}
public void loadAlpha(float alpha) {

View File

@ -0,0 +1,106 @@
/*
* Created by Julian Mutter on 9/7/18 12:36 PM
* Copyright (c) 2018. All rights reserved.
* Last modified 7/10/18 3:58 PM
*
*/
package de.frajul.endlessroll.views;
import android.animation.ObjectAnimator;
import android.app.Dialog;
import android.os.Bundle;
import android.support.annotation.IdRes;
import android.view.MotionEvent;
import android.view.View;
import android.view.Window;
import android.view.animation.Animation;
import android.view.animation.AnimationUtils;
import android.view.animation.LinearInterpolator;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.ScrollView;
import android.widget.TextView;
import java.util.concurrent.locks.ReentrantLock;
import de.frajul.endlessroll.R;
import de.frajul.endlessroll.main.GameActivity;
import de.frajul.endlessroll.main.screens.Screen;
import de.frajul.endlessroll.sqlDatabase.MyDatabase;
/**
* Created by Julian on 31.10.2017.
*/
public class DevToolsDialog extends Dialog implements View.OnClickListener, ConfirmDialog.ConfirmDialogListener{
private GameActivity gameActivity;
private Button unlockLevels;
private Button gain90EP;
private Button finishFirstWorld;
private Button toGlTestScreen;
private ConfirmDialog confirmDialog;
public DevToolsDialog(GameActivity gameActivity) {
super(gameActivity);
this.gameActivity = gameActivity;
confirmDialog = new ConfirmDialog(gameActivity, this);
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
requestWindowFeature(Window.FEATURE_NO_TITLE);
setContentView(R.layout.dev_tools_dialog);
unlockLevels = findViewById(R.id.startscreen_unlock_levels);
unlockLevels.setOnClickListener(this);
gain90EP = findViewById(R.id.startscreen_gain_90_ep);
gain90EP.setOnClickListener(this);
finishFirstWorld = findViewById(R.id.startscreen_finish_world_1);
finishFirstWorld.setOnClickListener(this);
toGlTestScreen = findViewById(R.id.startscreen_to_gl_test_screen);
toGlTestScreen.setOnClickListener(this);
}
@Override
public void onClick(View view) {
if (view.equals(gain90EP)) {
gameActivity.getUser().gainEp(90, true);
} else if (view.equals(unlockLevels)) {
gameActivity.getLevelManager().unlockAllLevels();
gameActivity.getLevelManager().unlockAllPacks();
MyDatabase database = gameActivity.getDataStorageHandler().getDatabase();
database.open();
database.writeAllLevelAndPackStatus(gameActivity.getLevelManager());
database.close();
} else if (view.equals(finishFirstWorld)) {
confirmDialog
.show(1, R.string.confirm_dialog_finish_world_1);
} else if (view.equals(toGlTestScreen)) {
super.cancel();
gameActivity.flipToScreen(Screen.ScreenType.GL_TEST);
}
}
@Override
public void onConfirmed(int callId) {
gameActivity.resetData();
gameActivity.getUser().gainEp(320, false);
gameActivity.getLevelManager().finishFirstPack();
gameActivity.showNewFinishedPlayerShapeTasks();
gameActivity.getTutorialManager().getToolShopTutorial().setFinished(true);
gameActivity.getDataStorageHandler().writeUserData(gameActivity.getUser());
gameActivity.getDataStorageHandler().writeToolShopTutorialFinished(true);
MyDatabase database = gameActivity.getDataStorageHandler().getDatabase();
database.open();
database.writeAllLevelAndPackStatus(gameActivity.getLevelManager());
database.close();
super.cancel();
}
}

View File

@ -12,6 +12,9 @@ import android.graphics.Typeface;
import android.view.View;
import android.view.animation.Animation;
import android.view.animation.AnimationUtils;
import android.widget.Button;
import android.widget.CheckBox;
import android.widget.LinearLayout;
import android.widget.TextView;
import java.util.Random;
@ -38,6 +41,10 @@ public class ShortMenu implements View.OnClickListener {
private TextView restartView;
private TextView exitView;
private LinearLayout photoModeLayout;
private CheckBox photoModeShowToolbar;
private Button photoModeActivate;
public ShortMenu(final Game game, GameScreen gameScreen, GameActivity gameActivity, View layout) {
this.game = game;
this.layout = layout;
@ -54,6 +61,12 @@ public class ShortMenu implements View.OnClickListener {
exitView.setTypeface(typeface);
exitView.setOnClickListener(this);
photoModeLayout = layout.findViewById(R.id.shortmenu_photo_mode_panel);
photoModeShowToolbar = photoModeLayout.findViewById(R.id.photo_mode_panel_show_toolbar);
photoModeActivate = photoModeLayout.findViewById(R.id.photo_mode_panel_activate);
photoModeActivate.setOnClickListener(this);
photoModeLayout.setVisibility(GameActivity.IS_DEVELOPER ? View.VISIBLE : View.GONE);
random = new Random();
Context context = game.getContext();
slideLeft = AnimationUtils.loadAnimation(context, R.anim.slide_in_left);
@ -90,6 +103,10 @@ public class ShortMenu implements View.OnClickListener {
view.startAnimation(slideLeft);
}
public void deactivatePhotoMode(){
layout.setVisibility(View.VISIBLE);
}
@Override
public void onClick(View v) {
if (v.equals(continueView)) {
@ -101,6 +118,10 @@ public class ShortMenu implements View.OnClickListener {
} else if (v.equals(exitView)) {
setVisible(false);
game.toLevelsScreen();
} else if(v.equals(photoModeActivate)){
boolean showToolBar = photoModeShowToolbar.isChecked();
layout.setVisibility(View.INVISIBLE);
game.startPhotoMode(showToolBar);
}
}
}

View File

@ -8,6 +8,7 @@
package de.frajul.endlessroll.views;
import android.view.View;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.RelativeLayout;
import android.widget.TextView;
@ -39,6 +40,8 @@ public class ViewManager implements View.OnClickListener {
private GoalMessage goalMessage;
public ShortMenu shortMenu;
private ImageView pauseButton;
private boolean showFps = false;
private List<BombErrorMessage> bombErrorMessages = new ArrayList<>();
@ -62,7 +65,7 @@ public class ViewManager implements View.OnClickListener {
layout.findViewById(R.id.game_goal_message));
}
});
ImageView pauseButton = layout.findViewById(R.id.game_pausebutton);
pauseButton = layout.findViewById(R.id.game_pausebutton);
pauseButton.setOnClickListener(this);
playerProgressView = layout.findViewById(R.id.game_playerprogress);
playerProgressView.setTypeface(gameActivity.getTypeface());
@ -136,6 +139,10 @@ public class ViewManager implements View.OnClickListener {
shortMenu.setVisible(true);
}
public void endShortMenuPhotoMode(){
shortMenu.deactivatePhotoMode();
}
public void hideShortMenu() {
shortMenu.setVisible(false);
}
@ -162,4 +169,11 @@ public class ViewManager implements View.OnClickListener {
this.showFps = showFps;
}
public TextView getPlayerProgressView() {
return playerProgressView;
}
public ImageView getPauseButton() {
return pauseButton;
}
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 26 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 21 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 44 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 60 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 11 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 45 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 45 KiB

View File

@ -0,0 +1,62 @@
<?xml version="1.0" encoding="utf-8"?>
<!--
~ Created by Julian Mutter on 9/7/18 12:27 PM
~ Copyright (c) 2018. All rights reserved.
~ Last modified 9/7/18 12:27 PM
~
-->
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical" android:layout_width="wrap_content"
android:layout_height="wrap_content">
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@color/secondary"
android:padding="5dp"
android:text="@string/dev_tools_dialog_title"
android:textSize="18sp" />
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:padding="15dp"
android:background="@color/primary_dark"
android:orientation="vertical">
<Button
android:id="@+id/startscreen_to_gl_test_screen"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:theme="@style/GameButton"
android:layout_gravity="center_horizontal"
android:layout_marginBottom="5dp"
android:text="@string/dev_tools_dialog_to_gl_test_screen" />
<Button
android:id="@+id/startscreen_unlock_levels"
android:layout_width="wrap_content"
android:layout_gravity="center_horizontal"
android:theme="@style/GameButton"
android:layout_height="wrap_content"
android:layout_marginBottom="5dp"
android:text="@string/dev_tools_dialog_unlock_all_levels" />
<Button
android:id="@+id/startscreen_gain_90_ep"
android:layout_gravity="center_horizontal"
android:layout_width="wrap_content"
android:theme="@style/GameButton"
android:layout_height="wrap_content"
android:layout_marginBottom="5dp"
android:text="@string/dev_tools_dialog_gain_90_ep" />
<Button
android:id="@+id/startscreen_finish_world_1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:theme="@style/GameButton"
android:layout_gravity="center_horizontal"
android:text="@string/dev_tools_dialog_finish_world_1" />
</LinearLayout>
</LinearLayout>

View File

@ -0,0 +1,43 @@
<?xml version="1.0" encoding="utf-8"?><!--
~ Created by Julian Mutter on 9/7/18 12:23 PM
~ Copyright (c) 2018. All rights reserved.
~ Last modified 9/7/18 12:23 PM
~
-->
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="vertical">
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@color/secondary"
android:padding="5dp"
android:text="@string/photo_mode_title"
android:textSize="18sp" />
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@color/primary_dark"
android:orientation="vertical"
android:padding="15dp">
<CheckBox
android:id="@+id/photo_mode_panel_show_toolbar"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"
android:layout_marginBottom="5dp"
android:text="@string/photo_mode_show_toolbar" />
<Button
android:id="@+id/photo_mode_panel_activate"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"
android:text="@string/photo_mode_activate" />
</LinearLayout>
</LinearLayout>

View File

@ -1,5 +1,4 @@
<?xml version="1.0" encoding="utf-8"?>
<!--
<?xml version="1.0" encoding="utf-8"?><!--
~ Created by Julian Mutter on 7/10/18 3:58 PM
~ Copyright (c) 2018. All rights reserved.
~ Last modified 7/10/18 3:54 PM
@ -16,7 +15,7 @@
android:id="@+id/shortmenu_topbar"
layout="@layout/topbar"
android:layout_width="match_parent"
android:layout_height="wrap_content"/>
android:layout_height="wrap_content" />
<RelativeLayout
android:layout_width="match_parent"
@ -35,7 +34,7 @@
android:layout_gravity="center_horizontal"
android:text="@string/short_menu_continue"
android:textColor="@color/secondary"
android:textSize="40sp"/>
android:textSize="40sp" />
<TextView
android:id="@+id/shortmenu_restart"
@ -44,7 +43,7 @@
android:layout_gravity="center_horizontal"
android:text="@string/message_restart"
android:textColor="@color/secondary"
android:textSize="40sp"/>
android:textSize="40sp" />
<TextView
android:id="@+id/shortmenu_exit"
@ -53,9 +52,21 @@
android:layout_gravity="center_horizontal"
android:text="@string/short_menu_exit"
android:textColor="@color/secondary"
android:textSize="40sp"/>
android:textSize="40sp" />
</LinearLayout>
<include
android:id="@+id/shortmenu_photo_mode_panel"
layout="@layout/photo_mode_panel"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentEnd="true"
android:layout_alignParentRight="true"
android:layout_centerVertical="true"
android:layout_marginEnd="10dp"
android:layout_marginRight="10dp" />
</RelativeLayout>
</LinearLayout>

View File

@ -1,5 +1,4 @@
<?xml version="1.0" encoding="utf-8"?>
<!--
<?xml version="1.0" encoding="utf-8"?><!--
~ Created by Julian Mutter on 7/10/18 3:58 PM
~ Copyright (c) 2018. All rights reserved.
~ Last modified 7/10/18 3:54 PM
@ -39,42 +38,14 @@
</RelativeLayout>
<LinearLayout
<Button
android:id="@+id/startscreen_show_dev_tools_dialog"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerVertical="true"
android:orientation="vertical"
android:visibility="gone">
android:layout_alignParentLeft="true"
android:layout_alignParentStart="true"
android:layout_alignParentTop="true"
android:layout_margin="5dp"
android:text="@string/start_screen_show_dev_tools_dialog" />
<Button
android:id="@+id/startscreen_to_gl_test_screen"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_margin="5dp"
android:layout_marginBottom="15dp"
android:text="@string/start_screen_to_gl_test_screen" />
<Button
android:id="@+id/startscreen_unlock_levels"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_margin="5dp"
android:text="@string/start_screen_unlock_all_levels" />
<Button
android:id="@+id/startscreen_gain_90_ep"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_margin="5dp"
android:text="@string/start_screen_gain_90_ep" />
<Button
android:id="@+id/startscreen_finish_world_1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_margin="5dp"
android:layout_marginTop="15dp"
android:text="@string/start_screen_finish_world_1" />
</LinearLayout>
</RelativeLayout>

View File

@ -8,9 +8,9 @@
<resources>
<string-array name="world_names">
<item>World zer0</item>
<item>Grasslands</item>
<item>Icy Mountains</item>
<item>Testcave</item>
<item>Welt Null</item>
<item>Graswelt</item>
<item>Eislandschaft</item>
<item>Unterwasser</item>
</string-array>
</resources>

View File

@ -88,4 +88,6 @@
<string name="playershape_name_blue">Blau</string>
<string name="playershape_description_blue">Warum bin ich blau?</string>
<string name="playershape_description_soccer">Fuß. Ball. Fußball!</string>
<string name="playershape_name_rainbow">Regenbogen</string>
<string name="playershape_description_rainbow">So viele Farben!!!</string>
</resources>

View File

@ -11,6 +11,6 @@
<item>World zer0</item>
<item>Grasslands</item>
<item>Icy Mountains</item>
<item>Testcave</item>
<item>Underwater</item>
</string-array>
</resources>

View File

@ -30,10 +30,7 @@
<string name="short_menu_continue">Continue</string>
<string name="short_menu_exit">Exit</string>
<string name="start_screen_play">Play</string>
<string name="start_screen_unlock_all_levels" translatable="false">Unlock all levels</string>
<string name="start_screen_gain_90_ep" translatable="false">Gain 90 ep</string>
<string name="start_screen_finish_world_1">Finish the first world!</string>
<string name="start_screen_to_gl_test_screen" translatable="false">Test GL Stuff!!!</string>
<string name="start_screen_show_dev_tools_dialog">Show Dev Tools</string>
<string name="topbar_level_placeholder" translatable="false">Level: 24</string>
<string name="topbar_level_format_d" translatable="false">Level: %d</string>
<string name="settings_reset">Reset progress</string>
@ -59,6 +56,7 @@
<string name="playershape_name_wheel">Wheel</string>
<string name="playershape_name_sun">Sun</string>
<string name="playershape_name_blue">Blue</string>
<string name="playershape_name_rainbow">Rainbow</string>
<string name="playershape_name_locked" translatable="false">\?\?\?</string>
<string name="playershape_description_ball" translatable="false">Keep calm and roll on</string>
<string name="playershape_description_clock" translatable="false">Tick tack!</string>
@ -69,7 +67,17 @@
<string name="playershape_description_wheel">A nice car without the... car</string>
<string name="playershape_description_sun">Shine bright like the sun</string>
<string name="playershape_description_blue">Why am I blue?</string>
<string name="playershape_description_rainbow">So colorful!!!</string>
<string name="playershape_description_locked">A new shape for more fun</string>
<string name="photo_mode_title" translatable="false">Photo Mode!</string>
<string name="photo_mode_show_toolbar" translatable="false">Show Toolbar</string>
<string name="photo_mode_activate" translatable="false">Activate</string>
<string name="dev_tools_dialog_title" translatable="false">Developer Tools</string>
<string name="dev_tools_dialog_unlock_all_levels" translatable="false">Unlock all levels</string>
<string name="dev_tools_dialog_gain_90_ep" translatable="false">Gain 90 ep</string>
<string name="dev_tools_dialog_finish_world_1">Finish the first world!</string>
<string name="dev_tools_dialog_to_gl_test_screen" translatable="false">Test GL Stuff!!!</string>
<string name="task_empty">Empty task</string>
<string name="task_collect_stars_progress_format_ddd">Collect %d stars (%d/%d)</string>

View File

@ -13,7 +13,7 @@ buildscript {
google()
}
dependencies {
classpath 'com.android.tools.build:gradle:3.1.3'
classpath 'com.android.tools.build:gradle:3.1.4'
// NOTE: Do not place your application dependencies here; they belong
// in the individual module build.gradle files