From 8c2460444784d79a8f2f308452ea99bb25ea958a Mon Sep 17 00:00:00 2001 From: = <=> Date: Wed, 22 Nov 2017 16:04:46 +0100 Subject: [PATCH] Init der fehlenden Dateien --- .gitignore | 2 + .../frajul/endlessroll/ApplicationTest.java | 13 + .../main/assets/levelpacks/Icy Mountains.xml | 37 ++ app/src/main/assets/particleEffects/stasis.pe | 151 ++++++++ .../main/assets/particleEffects/test_fire.pe | 135 +++++++ .../de/frajul/endlessroll/data/Color.java | 69 ++++ .../data/SynchronizedArrayList.java | 147 ++++++++ .../de/frajul/endlessroll/data/Vector.java | 101 ++++++ .../endlessroll/entities/AnimatedEntity.java | 25 ++ .../endlessroll/entities/Animation.java | 55 +++ .../endlessroll/entities/Background.java | 56 +++ .../endlessroll/entities/DestroyEffect.java | 39 ++ .../frajul/endlessroll/entities/Entity.java | 113 ++++++ .../de/frajul/endlessroll/entities/Goal.java | 16 + .../frajul/endlessroll/entities/Player.java | 130 +++++++ .../frajul/endlessroll/entities/Vertex.java | 44 +++ .../entities/collectables/Energy.java | 17 + .../entities/collectables/Star.java | 21 ++ .../CircleTriangleCollisionDetector.java | 78 ++++ .../entities/collision/CollisionDetector.java | 205 +++++++++++ .../entities/collision/CollisionManager.java | 104 ++++++ .../endlessroll/entities/collision/Edge.java | 5 + .../collisionData/EntityCollisionData.java | 30 ++ .../collisionData/ObstacleCollisionData.java | 23 ++ .../collisionData/PlayerCollisionData.java | 71 ++++ .../collisionData/ToolCollisionData.java | 25 ++ .../entities/collision/geometry/Circle.java | 51 +++ .../entities/collision/geometry/Geometry.java | 17 + .../entities/collision/geometry/Quad.java | 75 ++++ .../entities/collision/geometry/Triangle.java | 61 ++++ .../entities/particles/Particle.java | 111 ++++++ .../entities/particles/ParticleData.java | 70 ++++ .../entities/particles/ParticleEffect.java | 229 ++++++++++++ .../entities/particles/ParticleReader.java | 163 +++++++++ .../entities/particles/ParticleSource.java | 176 +++++++++ .../entities/particles/ParticleSystem.java | 69 ++++ .../particles/attributes/Attribute.java | 33 ++ .../attributes/AttributeValueReader.java | 77 ++++ .../attributes/ParticleAttributeType.java | 55 +++ .../attributes/attributeValues/ImagePath.java | 21 ++ .../attributes/attributeValues/Options.java | 66 ++++ .../ParticleAttributeValue.java | 17 + .../ParticleAttributeValueType.java | 28 ++ .../attributes/attributeValues/Range.java | 82 +++++ .../attributeValues/SpawnShape.java | 38 ++ .../attributes/attributeValues/Timeline.java | 54 +++ .../attributeValues/TimelinePoint.java | 23 ++ .../attributeValues/TimelineRange.java | 31 ++ .../attributeValues/TintTimeline.java | 58 +++ .../attributeValues/TintTimelinePoint.java | 33 ++ .../entities/textures/Texture.java | 36 ++ .../entities/textures/TextureLoader.java | 59 +++ .../entities/textures/TexturePack.java | 45 +++ .../entities/tileLists/Ceiling.java | 12 + .../entities/tileLists/Terrain.java | 12 + .../endlessroll/entities/tileLists/Tile.java | 32 ++ .../entities/tileLists/TileList.java | 79 ++++ .../endlessroll/entities/tools/Bomb.java | 67 ++++ .../endlessroll/entities/tools/Magnet.java | 59 +++ .../endlessroll/entities/tools/Ramp.java | 64 ++++ .../endlessroll/entities/tools/Spring.java | 48 +++ .../endlessroll/entities/tools/Tool.java | 57 +++ .../endlessroll/entities/tools/ToolSlot.java | 42 +++ .../endlessroll/entities/tools/ToolType.java | 194 ++++++++++ .../de/frajul/endlessroll/levels/Gap.java | 22 ++ .../de/frajul/endlessroll/levels/Level.java | 147 ++++++++ .../endlessroll/levels/LevelManager.java | 117 ++++++ .../frajul/endlessroll/levels/LevelPack.java | 120 +++++++ .../endlessroll/levels/MoveComponent.java | 56 +++ .../endlessroll/levels/ObstacleData.java | 93 +++++ .../endlessroll/levels/PositionData.java | 23 ++ .../frajul/endlessroll/levels/TileData.java | 19 + .../endlessroll/levels/worlds/World.java | 80 +++++ .../de/frajul/endlessroll/main/DataSafer.java | 12 + .../endlessroll/main/DataStorageHandler.java | 105 ++++++ .../endlessroll/main/ExceptionHandler.java | 10 + .../frajul/endlessroll/main/GameActivity.java | 292 +++++++++++++++ .../frajul/endlessroll/main/GameHandler.java | 23 ++ .../de/frajul/endlessroll/main/GameLog.java | 44 +++ .../endlessroll/main/MyGlSurfaceView.java | 45 +++ .../frajul/endlessroll/main/game/Camera.java | 45 +++ .../de/frajul/endlessroll/main/game/Game.java | 337 ++++++++++++++++++ .../endlessroll/main/game/GameScene.java | 112 ++++++ .../endlessroll/main/game/GameState.java | 10 + .../frajul/endlessroll/main/game/Scene.java | 191 ++++++++++ .../endlessroll/main/game/StartScene.java | 17 + .../frajul/endlessroll/main/game/Timer.java | 46 +++ .../endlessroll/main/physics/Physics.java | 199 +++++++++++ .../endlessroll/main/screens/GLScreen.java | 21 ++ .../endlessroll/main/screens/GameScreen.java | 88 +++++ .../main/screens/LevelsScreen.java | 80 +++++ .../endlessroll/main/screens/Screen.java | 85 +++++ .../main/screens/ScreenFlipper.java | 54 +++ .../endlessroll/main/screens/StartScreen.java | 87 +++++ .../main/screens/StartScreenRendering.java | 53 +++ .../main/screens/ToolShopScreen.java | 171 +++++++++ .../main/screens/WorldsScreen.java | 61 ++++ .../endlessroll/main/tutorial/BreakPoint.java | 47 +++ .../endlessroll/main/tutorial/Tutorial.java | 72 ++++ .../main/tutorial/TutorialManager.java | 56 +++ .../main/tutorial/TutorialView.java | 85 +++++ .../de/frajul/endlessroll/rendering/Fbo.java | 47 +++ .../de/frajul/endlessroll/rendering/Lock.java | 22 ++ .../endlessroll/rendering/MatrixCreator.java | 50 +++ .../de/frajul/endlessroll/rendering/Quad.java | 49 +++ .../endlessroll/rendering/Rendering.java | 51 +++ .../rendering/renderer/GameRenderer.java | 212 +++++++++++ .../rendering/renderer/ParticleRenderer.java | 106 ++++++ .../rendering/shader/EntityShader.java | 60 ++++ .../rendering/shader/ParticleShader.java | 51 +++ .../rendering/shader/ShaderProgram.java | 89 +++++ .../rendering/shader/SimpleShader.java | 17 + .../rendering/shader/TerrainShader.java | 38 ++ .../de/frajul/endlessroll/sounds/Music.java | 79 ++++ .../endlessroll/sounds/SoundManager.java | 78 ++++ .../sqlDatabase/DatabaseAdapter.java | 88 +++++ .../endlessroll/sqlDatabase/MyDatabase.java | 131 +++++++ .../endlessroll/sqlDatabase/SQLTable.java | 38 ++ .../sqlDatabase/SQLTableColumn.java | 48 +++ .../sqlDatabase/SQLTablePrimaryKeyColumn.java | 21 ++ .../frajul/endlessroll/user/LevelBounty.java | 63 ++++ .../endlessroll/user/LevelUpBounties.java | 63 ++++ .../endlessroll/user/ToolSlotSettings.java | 49 +++ .../java/de/frajul/endlessroll/user/User.java | 146 ++++++++ .../endlessroll/views/BountyMessage.java | 89 +++++ .../frajul/endlessroll/views/Countdown.java | 69 ++++ .../endlessroll/views/GameOverMessage.java | 68 ++++ .../frajul/endlessroll/views/LevelButton.java | 84 +++++ .../endlessroll/views/LevelupMessage.java | 80 +++++ .../frajul/endlessroll/views/ShortMenu.java | 93 +++++ .../frajul/endlessroll/views/ToolButton.java | 126 +++++++ .../endlessroll/views/ToolButtonBar.java | 149 ++++++++ .../endlessroll/views/ToolOfferSlot.java | 101 ++++++ .../de/frajul/endlessroll/views/TopBar.java | 121 +++++++ .../frajul/endlessroll/views/ViewManager.java | 144 ++++++++ .../frajul/endlessroll/views/WorldButton.java | 86 +++++ .../res/drawable/backgrounds_game_cave.png | Bin 0 -> 41157 bytes .../drawable/backgrounds_game_mountains.png | Bin 0 -> 99954 bytes .../res/drawable/backgrounds_menu_grass.png | Bin 0 -> 157133 bytes app/src/main/res/drawable/black.png | Bin 0 -> 109 bytes .../main/res/drawable/guis_arrow_green.png | Bin 0 -> 2873 bytes app/src/main/res/drawable/guis_clock.png | Bin 0 -> 2294 bytes app/src/main/res/drawable/guis_goal.png | Bin 0 -> 278 bytes .../main/res/drawable/guis_magnet_field.png | Bin 0 -> 11219 bytes .../main/res/drawable/guis_pausebutton.png | Bin 0 -> 16121 bytes .../main/res/drawable/guis_playerarrow.png | Bin 0 -> 1249 bytes app/src/main/res/drawable/guis_radius.png | Bin 0 -> 1842 bytes .../res/drawable/guis_settings_disabled.png | Bin 0 -> 3127 bytes .../res/drawable/guis_settings_enabled.png | Bin 0 -> 3631 bytes .../res/drawable/guis_shape_shop_disabled.png | Bin 0 -> 6099 bytes .../res/drawable/guis_shape_shop_enabled.png | Bin 0 -> 6538 bytes app/src/main/res/drawable/guis_sound_off.png | Bin 0 -> 1387 bytes app/src/main/res/drawable/guis_sound_on.png | Bin 0 -> 2855 bytes app/src/main/res/drawable/guis_splitter.png | Bin 0 -> 459 bytes app/src/main/res/drawable/guis_tick.png | Bin 0 -> 7431 bytes .../main/res/drawable/playershapes_ball.png | Bin 0 -> 8922 bytes .../main/res/drawable/playershapes_clock.png | Bin 0 -> 6052 bytes .../main/res/drawable/playershapes_pacman.png | Bin 0 -> 6360 bytes app/src/main/res/drawable/terrain_t_grass.png | Bin 0 -> 35152 bytes app/src/main/res/drawable/tools_bomb.png | Bin 0 -> 135356 bytes .../main/res/drawable/tools_bomb_button.png | Bin 0 -> 39042 bytes .../main/res/drawable/tools_button_empty.png | Bin 0 -> 9734 bytes .../main/res/drawable/tools_button_locked.png | Bin 0 -> 17628 bytes .../res/drawable/tools_button_unlocked.png | Bin 0 -> 17590 bytes app/src/main/res/drawable/tools_magnet.png | Bin 0 -> 46686 bytes .../main/res/drawable/tools_magnet_button.png | Bin 0 -> 17446 bytes .../main/res/drawable/tools_ramp_button.png | Bin 0 -> 48757 bytes app/src/main/res/drawable/tools_spring.png | Bin 0 -> 62208 bytes .../main/res/drawable/tools_spring_button.png | Bin 0 -> 82399 bytes .../res/drawable/world_previews_grass.png | Bin 0 -> 91065 bytes .../drawable/xml_background_bountymessage.xml | 20 ++ .../drawable/xml_background_levelbutton.xml | 14 + .../res/drawable/xml_background_toolslot.xml | 6 + .../drawable/xml_background_worldbutton.xml | 20 ++ .../drawable/xml_layers_toolprogressbar.xml | 21 ++ .../res/drawable/xml_selector_gamebutton.xml | 30 ++ .../main/res/drawable/xml_selector_sound.xml | 10 + .../frajul/particlelab/ApplicationTest.java | 13 + .../de/frajul/particlelab/data/Color.java | 69 ++++ .../de/frajul/particlelab/data/Vector.java | 101 ++++++ .../frajul/particlelab/entities/Entity.java | 80 +++++ .../de/frajul/particlelab/entities/Quad.java | 59 +++ .../entities/particles/Particle.java | 89 +++++ .../entities/particles/ParticleData.java | 59 +++ .../entities/particles/ParticleEffect.java | 218 +++++++++++ .../entities/particles/ParticleReader.java | 164 +++++++++ .../entities/particles/ParticleSource.java | 150 ++++++++ .../entities/particles/ParticleSystem.java | 42 +++ .../particles/attributes/Attribute.java | 33 ++ .../attributes/AttributeValueReader.java | 77 ++++ .../attributes/ParticleAttributeType.java | 55 +++ .../attributes/attributeValues/ImagePath.java | 21 ++ .../attributes/attributeValues/Options.java | 66 ++++ .../ParticleAttributeValue.java | 17 + .../ParticleAttributeValueType.java | 28 ++ .../attributes/attributeValues/Range.java | 82 +++++ .../attributeValues/SpawnShape.java | 38 ++ .../attributes/attributeValues/Timeline.java | 52 +++ .../attributeValues/TimelinePoint.java | 23 ++ .../attributeValues/TimelineRange.java | 34 ++ .../attributeValues/TintTimeline.java | 57 +++ .../attributeValues/TintTimelinePoint.java | 33 ++ .../entities/textures/Texture.java | 44 +++ .../entities/textures/TextureLoader.java | 62 ++++ .../entities/textures/TexturePack.java | 35 ++ .../de/frajul/particlelab/main/GameLog.java | 44 +++ .../frajul/particlelab/main/MainActivity.java | 81 +++++ .../particlelab/main/MyGlSurfaceView.java | 35 ++ .../de/frajul/particlelab/main/Scene.java | 69 ++++ .../particlelab/rendering/GameRenderer.java | 157 ++++++++ .../de/frajul/particlelab/rendering/Lock.java | 22 ++ .../particlelab/rendering/MatrixCreator.java | 49 +++ .../de/frajul/particlelab/rendering/Quad.java | 49 +++ .../particlelab/rendering/Rendering.java | 57 +++ .../particlelab/rendering/ShaderProgram.java | 138 +++++++ .../frajul/particlelab/rendering/Timer.java | 46 +++ 216 files changed, 12756 insertions(+) create mode 100644 app/src/androidTest/java/de/frajul/endlessroll/ApplicationTest.java create mode 100644 app/src/main/assets/levelpacks/Icy Mountains.xml create mode 100644 app/src/main/assets/particleEffects/stasis.pe create mode 100644 app/src/main/assets/particleEffects/test_fire.pe create mode 100644 app/src/main/java/de/frajul/endlessroll/data/Color.java create mode 100644 app/src/main/java/de/frajul/endlessroll/data/SynchronizedArrayList.java create mode 100644 app/src/main/java/de/frajul/endlessroll/data/Vector.java create mode 100644 app/src/main/java/de/frajul/endlessroll/entities/AnimatedEntity.java create mode 100644 app/src/main/java/de/frajul/endlessroll/entities/Animation.java create mode 100644 app/src/main/java/de/frajul/endlessroll/entities/Background.java create mode 100644 app/src/main/java/de/frajul/endlessroll/entities/DestroyEffect.java create mode 100644 app/src/main/java/de/frajul/endlessroll/entities/Entity.java create mode 100644 app/src/main/java/de/frajul/endlessroll/entities/Goal.java create mode 100644 app/src/main/java/de/frajul/endlessroll/entities/Player.java create mode 100644 app/src/main/java/de/frajul/endlessroll/entities/Vertex.java create mode 100644 app/src/main/java/de/frajul/endlessroll/entities/collectables/Energy.java create mode 100644 app/src/main/java/de/frajul/endlessroll/entities/collectables/Star.java create mode 100644 app/src/main/java/de/frajul/endlessroll/entities/collision/CircleTriangleCollisionDetector.java create mode 100644 app/src/main/java/de/frajul/endlessroll/entities/collision/CollisionDetector.java create mode 100644 app/src/main/java/de/frajul/endlessroll/entities/collision/CollisionManager.java create mode 100644 app/src/main/java/de/frajul/endlessroll/entities/collision/Edge.java create mode 100644 app/src/main/java/de/frajul/endlessroll/entities/collision/collisionData/EntityCollisionData.java create mode 100644 app/src/main/java/de/frajul/endlessroll/entities/collision/collisionData/ObstacleCollisionData.java create mode 100644 app/src/main/java/de/frajul/endlessroll/entities/collision/collisionData/PlayerCollisionData.java create mode 100644 app/src/main/java/de/frajul/endlessroll/entities/collision/collisionData/ToolCollisionData.java create mode 100644 app/src/main/java/de/frajul/endlessroll/entities/collision/geometry/Circle.java create mode 100644 app/src/main/java/de/frajul/endlessroll/entities/collision/geometry/Geometry.java create mode 100644 app/src/main/java/de/frajul/endlessroll/entities/collision/geometry/Quad.java create mode 100644 app/src/main/java/de/frajul/endlessroll/entities/collision/geometry/Triangle.java create mode 100644 app/src/main/java/de/frajul/endlessroll/entities/particles/Particle.java create mode 100644 app/src/main/java/de/frajul/endlessroll/entities/particles/ParticleData.java create mode 100644 app/src/main/java/de/frajul/endlessroll/entities/particles/ParticleEffect.java create mode 100644 app/src/main/java/de/frajul/endlessroll/entities/particles/ParticleReader.java create mode 100644 app/src/main/java/de/frajul/endlessroll/entities/particles/ParticleSource.java create mode 100644 app/src/main/java/de/frajul/endlessroll/entities/particles/ParticleSystem.java create mode 100644 app/src/main/java/de/frajul/endlessroll/entities/particles/attributes/Attribute.java create mode 100644 app/src/main/java/de/frajul/endlessroll/entities/particles/attributes/AttributeValueReader.java create mode 100644 app/src/main/java/de/frajul/endlessroll/entities/particles/attributes/ParticleAttributeType.java create mode 100644 app/src/main/java/de/frajul/endlessroll/entities/particles/attributes/attributeValues/ImagePath.java create mode 100644 app/src/main/java/de/frajul/endlessroll/entities/particles/attributes/attributeValues/Options.java create mode 100644 app/src/main/java/de/frajul/endlessroll/entities/particles/attributes/attributeValues/ParticleAttributeValue.java create mode 100644 app/src/main/java/de/frajul/endlessroll/entities/particles/attributes/attributeValues/ParticleAttributeValueType.java create mode 100644 app/src/main/java/de/frajul/endlessroll/entities/particles/attributes/attributeValues/Range.java create mode 100644 app/src/main/java/de/frajul/endlessroll/entities/particles/attributes/attributeValues/SpawnShape.java create mode 100644 app/src/main/java/de/frajul/endlessroll/entities/particles/attributes/attributeValues/Timeline.java create mode 100644 app/src/main/java/de/frajul/endlessroll/entities/particles/attributes/attributeValues/TimelinePoint.java create mode 100644 app/src/main/java/de/frajul/endlessroll/entities/particles/attributes/attributeValues/TimelineRange.java create mode 100644 app/src/main/java/de/frajul/endlessroll/entities/particles/attributes/attributeValues/TintTimeline.java create mode 100644 app/src/main/java/de/frajul/endlessroll/entities/particles/attributes/attributeValues/TintTimelinePoint.java create mode 100644 app/src/main/java/de/frajul/endlessroll/entities/textures/Texture.java create mode 100644 app/src/main/java/de/frajul/endlessroll/entities/textures/TextureLoader.java create mode 100644 app/src/main/java/de/frajul/endlessroll/entities/textures/TexturePack.java create mode 100644 app/src/main/java/de/frajul/endlessroll/entities/tileLists/Ceiling.java create mode 100644 app/src/main/java/de/frajul/endlessroll/entities/tileLists/Terrain.java create mode 100644 app/src/main/java/de/frajul/endlessroll/entities/tileLists/Tile.java create mode 100644 app/src/main/java/de/frajul/endlessroll/entities/tileLists/TileList.java create mode 100644 app/src/main/java/de/frajul/endlessroll/entities/tools/Bomb.java create mode 100644 app/src/main/java/de/frajul/endlessroll/entities/tools/Magnet.java create mode 100644 app/src/main/java/de/frajul/endlessroll/entities/tools/Ramp.java create mode 100644 app/src/main/java/de/frajul/endlessroll/entities/tools/Spring.java create mode 100644 app/src/main/java/de/frajul/endlessroll/entities/tools/Tool.java create mode 100644 app/src/main/java/de/frajul/endlessroll/entities/tools/ToolSlot.java create mode 100644 app/src/main/java/de/frajul/endlessroll/entities/tools/ToolType.java create mode 100644 app/src/main/java/de/frajul/endlessroll/levels/Gap.java create mode 100644 app/src/main/java/de/frajul/endlessroll/levels/Level.java create mode 100644 app/src/main/java/de/frajul/endlessroll/levels/LevelManager.java create mode 100644 app/src/main/java/de/frajul/endlessroll/levels/LevelPack.java create mode 100644 app/src/main/java/de/frajul/endlessroll/levels/MoveComponent.java create mode 100644 app/src/main/java/de/frajul/endlessroll/levels/ObstacleData.java create mode 100644 app/src/main/java/de/frajul/endlessroll/levels/PositionData.java create mode 100644 app/src/main/java/de/frajul/endlessroll/levels/TileData.java create mode 100644 app/src/main/java/de/frajul/endlessroll/levels/worlds/World.java create mode 100644 app/src/main/java/de/frajul/endlessroll/main/DataSafer.java create mode 100644 app/src/main/java/de/frajul/endlessroll/main/DataStorageHandler.java create mode 100644 app/src/main/java/de/frajul/endlessroll/main/ExceptionHandler.java create mode 100644 app/src/main/java/de/frajul/endlessroll/main/GameActivity.java create mode 100644 app/src/main/java/de/frajul/endlessroll/main/GameHandler.java create mode 100644 app/src/main/java/de/frajul/endlessroll/main/GameLog.java create mode 100644 app/src/main/java/de/frajul/endlessroll/main/MyGlSurfaceView.java create mode 100644 app/src/main/java/de/frajul/endlessroll/main/game/Camera.java create mode 100644 app/src/main/java/de/frajul/endlessroll/main/game/Game.java create mode 100644 app/src/main/java/de/frajul/endlessroll/main/game/GameScene.java create mode 100644 app/src/main/java/de/frajul/endlessroll/main/game/GameState.java create mode 100644 app/src/main/java/de/frajul/endlessroll/main/game/Scene.java create mode 100644 app/src/main/java/de/frajul/endlessroll/main/game/StartScene.java create mode 100644 app/src/main/java/de/frajul/endlessroll/main/game/Timer.java create mode 100644 app/src/main/java/de/frajul/endlessroll/main/physics/Physics.java create mode 100644 app/src/main/java/de/frajul/endlessroll/main/screens/GLScreen.java create mode 100644 app/src/main/java/de/frajul/endlessroll/main/screens/GameScreen.java create mode 100644 app/src/main/java/de/frajul/endlessroll/main/screens/LevelsScreen.java create mode 100644 app/src/main/java/de/frajul/endlessroll/main/screens/Screen.java create mode 100644 app/src/main/java/de/frajul/endlessroll/main/screens/ScreenFlipper.java create mode 100644 app/src/main/java/de/frajul/endlessroll/main/screens/StartScreen.java create mode 100644 app/src/main/java/de/frajul/endlessroll/main/screens/StartScreenRendering.java create mode 100644 app/src/main/java/de/frajul/endlessroll/main/screens/ToolShopScreen.java create mode 100644 app/src/main/java/de/frajul/endlessroll/main/screens/WorldsScreen.java create mode 100644 app/src/main/java/de/frajul/endlessroll/main/tutorial/BreakPoint.java create mode 100644 app/src/main/java/de/frajul/endlessroll/main/tutorial/Tutorial.java create mode 100644 app/src/main/java/de/frajul/endlessroll/main/tutorial/TutorialManager.java create mode 100644 app/src/main/java/de/frajul/endlessroll/main/tutorial/TutorialView.java create mode 100644 app/src/main/java/de/frajul/endlessroll/rendering/Fbo.java create mode 100644 app/src/main/java/de/frajul/endlessroll/rendering/Lock.java create mode 100644 app/src/main/java/de/frajul/endlessroll/rendering/MatrixCreator.java create mode 100644 app/src/main/java/de/frajul/endlessroll/rendering/Quad.java create mode 100644 app/src/main/java/de/frajul/endlessroll/rendering/Rendering.java create mode 100644 app/src/main/java/de/frajul/endlessroll/rendering/renderer/GameRenderer.java create mode 100644 app/src/main/java/de/frajul/endlessroll/rendering/renderer/ParticleRenderer.java create mode 100644 app/src/main/java/de/frajul/endlessroll/rendering/shader/EntityShader.java create mode 100644 app/src/main/java/de/frajul/endlessroll/rendering/shader/ParticleShader.java create mode 100644 app/src/main/java/de/frajul/endlessroll/rendering/shader/ShaderProgram.java create mode 100644 app/src/main/java/de/frajul/endlessroll/rendering/shader/SimpleShader.java create mode 100644 app/src/main/java/de/frajul/endlessroll/rendering/shader/TerrainShader.java create mode 100644 app/src/main/java/de/frajul/endlessroll/sounds/Music.java create mode 100644 app/src/main/java/de/frajul/endlessroll/sounds/SoundManager.java create mode 100644 app/src/main/java/de/frajul/endlessroll/sqlDatabase/DatabaseAdapter.java create mode 100644 app/src/main/java/de/frajul/endlessroll/sqlDatabase/MyDatabase.java create mode 100644 app/src/main/java/de/frajul/endlessroll/sqlDatabase/SQLTable.java create mode 100644 app/src/main/java/de/frajul/endlessroll/sqlDatabase/SQLTableColumn.java create mode 100644 app/src/main/java/de/frajul/endlessroll/sqlDatabase/SQLTablePrimaryKeyColumn.java create mode 100644 app/src/main/java/de/frajul/endlessroll/user/LevelBounty.java create mode 100644 app/src/main/java/de/frajul/endlessroll/user/LevelUpBounties.java create mode 100644 app/src/main/java/de/frajul/endlessroll/user/ToolSlotSettings.java create mode 100644 app/src/main/java/de/frajul/endlessroll/user/User.java create mode 100644 app/src/main/java/de/frajul/endlessroll/views/BountyMessage.java create mode 100644 app/src/main/java/de/frajul/endlessroll/views/Countdown.java create mode 100644 app/src/main/java/de/frajul/endlessroll/views/GameOverMessage.java create mode 100644 app/src/main/java/de/frajul/endlessroll/views/LevelButton.java create mode 100644 app/src/main/java/de/frajul/endlessroll/views/LevelupMessage.java create mode 100644 app/src/main/java/de/frajul/endlessroll/views/ShortMenu.java create mode 100644 app/src/main/java/de/frajul/endlessroll/views/ToolButton.java create mode 100644 app/src/main/java/de/frajul/endlessroll/views/ToolButtonBar.java create mode 100644 app/src/main/java/de/frajul/endlessroll/views/ToolOfferSlot.java create mode 100644 app/src/main/java/de/frajul/endlessroll/views/TopBar.java create mode 100644 app/src/main/java/de/frajul/endlessroll/views/ViewManager.java create mode 100644 app/src/main/java/de/frajul/endlessroll/views/WorldButton.java create mode 100644 app/src/main/res/drawable/backgrounds_game_cave.png create mode 100644 app/src/main/res/drawable/backgrounds_game_mountains.png create mode 100644 app/src/main/res/drawable/backgrounds_menu_grass.png create mode 100644 app/src/main/res/drawable/black.png create mode 100644 app/src/main/res/drawable/guis_arrow_green.png create mode 100644 app/src/main/res/drawable/guis_clock.png create mode 100644 app/src/main/res/drawable/guis_goal.png create mode 100644 app/src/main/res/drawable/guis_magnet_field.png create mode 100644 app/src/main/res/drawable/guis_pausebutton.png create mode 100644 app/src/main/res/drawable/guis_playerarrow.png create mode 100644 app/src/main/res/drawable/guis_radius.png create mode 100644 app/src/main/res/drawable/guis_settings_disabled.png create mode 100644 app/src/main/res/drawable/guis_settings_enabled.png create mode 100644 app/src/main/res/drawable/guis_shape_shop_disabled.png create mode 100644 app/src/main/res/drawable/guis_shape_shop_enabled.png create mode 100644 app/src/main/res/drawable/guis_sound_off.png create mode 100644 app/src/main/res/drawable/guis_sound_on.png create mode 100644 app/src/main/res/drawable/guis_splitter.png create mode 100644 app/src/main/res/drawable/guis_tick.png create mode 100644 app/src/main/res/drawable/playershapes_ball.png create mode 100644 app/src/main/res/drawable/playershapes_clock.png create mode 100644 app/src/main/res/drawable/playershapes_pacman.png create mode 100644 app/src/main/res/drawable/terrain_t_grass.png create mode 100644 app/src/main/res/drawable/tools_bomb.png create mode 100644 app/src/main/res/drawable/tools_bomb_button.png create mode 100644 app/src/main/res/drawable/tools_button_empty.png create mode 100644 app/src/main/res/drawable/tools_button_locked.png create mode 100644 app/src/main/res/drawable/tools_button_unlocked.png create mode 100644 app/src/main/res/drawable/tools_magnet.png create mode 100644 app/src/main/res/drawable/tools_magnet_button.png create mode 100644 app/src/main/res/drawable/tools_ramp_button.png create mode 100644 app/src/main/res/drawable/tools_spring.png create mode 100644 app/src/main/res/drawable/tools_spring_button.png create mode 100644 app/src/main/res/drawable/world_previews_grass.png create mode 100644 app/src/main/res/drawable/xml_background_bountymessage.xml create mode 100644 app/src/main/res/drawable/xml_background_levelbutton.xml create mode 100644 app/src/main/res/drawable/xml_background_toolslot.xml create mode 100644 app/src/main/res/drawable/xml_background_worldbutton.xml create mode 100644 app/src/main/res/drawable/xml_layers_toolprogressbar.xml create mode 100644 app/src/main/res/drawable/xml_selector_gamebutton.xml create mode 100644 app/src/main/res/drawable/xml_selector_sound.xml create mode 100644 particlelab/src/androidTest/java/de/frajul/particlelab/ApplicationTest.java create mode 100644 particlelab/src/main/java/de/frajul/particlelab/data/Color.java create mode 100644 particlelab/src/main/java/de/frajul/particlelab/data/Vector.java create mode 100644 particlelab/src/main/java/de/frajul/particlelab/entities/Entity.java create mode 100644 particlelab/src/main/java/de/frajul/particlelab/entities/Quad.java create mode 100644 particlelab/src/main/java/de/frajul/particlelab/entities/particles/Particle.java create mode 100644 particlelab/src/main/java/de/frajul/particlelab/entities/particles/ParticleData.java create mode 100644 particlelab/src/main/java/de/frajul/particlelab/entities/particles/ParticleEffect.java create mode 100644 particlelab/src/main/java/de/frajul/particlelab/entities/particles/ParticleReader.java create mode 100644 particlelab/src/main/java/de/frajul/particlelab/entities/particles/ParticleSource.java create mode 100644 particlelab/src/main/java/de/frajul/particlelab/entities/particles/ParticleSystem.java create mode 100644 particlelab/src/main/java/de/frajul/particlelab/entities/particles/attributes/Attribute.java create mode 100644 particlelab/src/main/java/de/frajul/particlelab/entities/particles/attributes/AttributeValueReader.java create mode 100644 particlelab/src/main/java/de/frajul/particlelab/entities/particles/attributes/ParticleAttributeType.java create mode 100644 particlelab/src/main/java/de/frajul/particlelab/entities/particles/attributes/attributeValues/ImagePath.java create mode 100644 particlelab/src/main/java/de/frajul/particlelab/entities/particles/attributes/attributeValues/Options.java create mode 100644 particlelab/src/main/java/de/frajul/particlelab/entities/particles/attributes/attributeValues/ParticleAttributeValue.java create mode 100644 particlelab/src/main/java/de/frajul/particlelab/entities/particles/attributes/attributeValues/ParticleAttributeValueType.java create mode 100644 particlelab/src/main/java/de/frajul/particlelab/entities/particles/attributes/attributeValues/Range.java create mode 100644 particlelab/src/main/java/de/frajul/particlelab/entities/particles/attributes/attributeValues/SpawnShape.java create mode 100644 particlelab/src/main/java/de/frajul/particlelab/entities/particles/attributes/attributeValues/Timeline.java create mode 100644 particlelab/src/main/java/de/frajul/particlelab/entities/particles/attributes/attributeValues/TimelinePoint.java create mode 100644 particlelab/src/main/java/de/frajul/particlelab/entities/particles/attributes/attributeValues/TimelineRange.java create mode 100644 particlelab/src/main/java/de/frajul/particlelab/entities/particles/attributes/attributeValues/TintTimeline.java create mode 100644 particlelab/src/main/java/de/frajul/particlelab/entities/particles/attributes/attributeValues/TintTimelinePoint.java create mode 100644 particlelab/src/main/java/de/frajul/particlelab/entities/textures/Texture.java create mode 100644 particlelab/src/main/java/de/frajul/particlelab/entities/textures/TextureLoader.java create mode 100644 particlelab/src/main/java/de/frajul/particlelab/entities/textures/TexturePack.java create mode 100644 particlelab/src/main/java/de/frajul/particlelab/main/GameLog.java create mode 100644 particlelab/src/main/java/de/frajul/particlelab/main/MainActivity.java create mode 100644 particlelab/src/main/java/de/frajul/particlelab/main/MyGlSurfaceView.java create mode 100644 particlelab/src/main/java/de/frajul/particlelab/main/Scene.java create mode 100644 particlelab/src/main/java/de/frajul/particlelab/rendering/GameRenderer.java create mode 100644 particlelab/src/main/java/de/frajul/particlelab/rendering/Lock.java create mode 100644 particlelab/src/main/java/de/frajul/particlelab/rendering/MatrixCreator.java create mode 100644 particlelab/src/main/java/de/frajul/particlelab/rendering/Quad.java create mode 100644 particlelab/src/main/java/de/frajul/particlelab/rendering/Rendering.java create mode 100644 particlelab/src/main/java/de/frajul/particlelab/rendering/ShaderProgram.java create mode 100644 particlelab/src/main/java/de/frajul/particlelab/rendering/Timer.java diff --git a/.gitignore b/.gitignore index 9c4de58..b83796c 100644 --- a/.gitignore +++ b/.gitignore @@ -1,7 +1,9 @@ .gradle +/app/*.apk /local.properties /.idea/workspace.xml /.idea/libraries .DS_Store /build /captures +/app/build \ No newline at end of file diff --git a/app/src/androidTest/java/de/frajul/endlessroll/ApplicationTest.java b/app/src/androidTest/java/de/frajul/endlessroll/ApplicationTest.java new file mode 100644 index 0000000..47a2898 --- /dev/null +++ b/app/src/androidTest/java/de/frajul/endlessroll/ApplicationTest.java @@ -0,0 +1,13 @@ +package de.frajul.endlessroll; + +import android.app.Application; +import android.test.ApplicationTestCase; + +/** + * Testing Fundamentals + */ +public class ApplicationTest extends ApplicationTestCase { + public ApplicationTest() { + super(Application.class); + } +} \ No newline at end of file diff --git a/app/src/main/assets/levelpacks/Icy Mountains.xml b/app/src/main/assets/levelpacks/Icy Mountains.xml new file mode 100644 index 0000000..4fdba71 --- /dev/null +++ b/app/src/main/assets/levelpacks/Icy Mountains.xml @@ -0,0 +1,37 @@ + + ICY_MOUNTAINS + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/assets/particleEffects/stasis.pe b/app/src/main/assets/particleEffects/stasis.pe new file mode 100644 index 0000000..d6cf8dc --- /dev/null +++ b/app/src/main/assets/particleEffects/stasis.pe @@ -0,0 +1,151 @@ +Untitled +- Delay - +active: false +- Duration - +lowMin: 1000.0 +lowMax: 1000.0 +- Count - +min: 0 +max: 200 +- Emission - +lowMin: 0.0 +lowMax: 0.0 +highMin: 7.0 +highMax: 7.0 +relative: false +scalingCount: 1 +scaling0: 1.0 +timelineCount: 1 +timeline0: 0.0 +- Life - +lowMin: 0.0 +lowMax: 0.0 +highMin: 1100.0 +highMax: 2000.0 +relative: false +scalingCount: 5 +scaling0: 1.0 +scaling1: 1.0 +scaling2: 1.0 +scaling3: 1.0 +scaling4: 1.0 +timelineCount: 5 +timeline0: 0.0 +timeline1: 0.001 +timeline2: 0.002 +timeline3: 0.003 +timeline4: 1.0 +- Life Offset - +active: false +- X Offset - +active: false +- Y Offset - +active: false +- Spawn Shape - +shape: square +- Spawn Width - +lowMin: 0.0 +lowMax: 0.0 +highMin: 200.0 +highMax: 200.0 +relative: false +scalingCount: 1 +scaling0: 1.0 +timelineCount: 1 +timeline0: 0.0 +- Spawn Height - +lowMin: 0.0 +lowMax: 0.0 +highMin: 200.0 +highMax: 200.0 +relative: false +scalingCount: 1 +scaling0: 1.0 +timelineCount: 1 +timeline0: 0.0 +- Scale - +lowMin: 0.0 +lowMax: 0.0 +highMin: 60.0 +highMax: 30.0 +relative: false +scalingCount: 4 +scaling0: 1.0 +scaling1: 0.64705884 +scaling2: 0.23529412 +scaling3: 0.0 +timelineCount: 4 +timeline0: 0.0 +timeline1: 0.8630137 +timeline2: 0.98630136 +timeline3: 1.0 +- Velocity - +active: true +lowMin: 0.0 +lowMax: 0.0 +highMin: 0.0 +highMax: 60.0 +relative: false +scalingCount: 1 +scaling0: 1.0 +timelineCount: 1 +timeline0: 0.0 +- Angle - +active: true +lowMin: 0.0 +lowMax: 360.0 +highMin: 60.0 +highMax: 120.0 +relative: false +scalingCount: 3 +scaling0: 1.0 +scaling1: 1.0 +scaling2: 1.0 +timelineCount: 3 +timeline0: 0.0 +timeline1: 0.56164384 +timeline2: 0.9931507 +- Rotation - +active: false +- Wind - +active: false +- Gravity - +active: false +- Tint - +colorsCount: 6 +colors0: 0.047058824 +colors1: 1.0 +colors2: 0.93333334 +colors3: 0.3137255 +colors4: 0.047058824 +colors5: 1.0 +timelineCount: 2 +timeline0: 0.0 +timeline1: 1.0 +- Transparency - +lowMin: 0.0 +lowMax: 0.0 +highMin: 1.0 +highMax: 1.0 +relative: false +scalingCount: 5 +scaling0: 0.0 +scaling1: 1.0 +scaling2: 1.0 +scaling3: 0.6666667 +scaling4: 0.0 +timelineCount: 5 +timeline0: 0.0 +timeline1: 0.2 +timeline2: 0.201 +timeline3: 0.9246575 +timeline4: 1.0 +- Options - +attached: false +continuous: true +aligned: false +additive: true +behind: false +premultipliedAlpha: false +- Image Path - +particle.png diff --git a/app/src/main/assets/particleEffects/test_fire.pe b/app/src/main/assets/particleEffects/test_fire.pe new file mode 100644 index 0000000..832c973 --- /dev/null +++ b/app/src/main/assets/particleEffects/test_fire.pe @@ -0,0 +1,135 @@ +Untitled +- Delay - +active: false +- Duration - +lowMin: 3000.0 +lowMax: 3000.0 +- Count - +min: 0 +max: 200 +- Emission - +lowMin: 0.0 +lowMax: 0.0 +highMin: 250.0 +highMax: 250.0 +relative: false +scalingCount: 1 +scaling0: 1.0 +timelineCount: 1 +timeline0: 0.0 +- Life - +lowMin: 0.0 +lowMax: 0.0 +highMin: 500.0 +highMax: 1000.0 +relative: false +scalingCount: 3 +scaling0: 1.0 +scaling1: 1.0 +scaling2: 0.3 +timelineCount: 3 +timeline0: 0.0 +timeline1: 0.66 +timeline2: 1.0 +- Life Offset - +active: false +- X Offset - +active: false +- Y Offset - +active: false +- Spawn Shape - +shape: point +- Spawn Width - +lowMin: 0.0 +lowMax: 0.0 +highMin: 0.0 +highMax: 0.0 +relative: false +scalingCount: 1 +scaling0: 1.0 +timelineCount: 1 +timeline0: 0.0 +- Spawn Height - +lowMin: 0.0 +lowMax: 0.0 +highMin: 0.0 +highMax: 0.0 +relative: false +scalingCount: 1 +scaling0: 1.0 +timelineCount: 1 +timeline0: 0.0 +- Scale - +lowMin: 0.0 +lowMax: 0.0 +highMin: 100.0 +highMax: 100.0 +relative: false +scalingCount: 1 +scaling0: 1.0 +timelineCount: 1 +timeline0: 0.0 +- Velocity - +active: true +lowMin: 0.0 +lowMax: 0.0 +highMin: 90.0 +highMax: 900.0 +relative: false +scalingCount: 1 +scaling0: 1.0 +timelineCount: 1 +timeline0: 0.0 +- Angle - +active: true +lowMin: 90.0 +lowMax: 90.0 +highMin: 45.0 +highMax: 135.0 +relative: false +scalingCount: 3 +scaling0: 1.0 +scaling1: 0.0 +scaling2: 0.0 +timelineCount: 3 +timeline0: 0.0 +timeline1: 0.5 +timeline2: 1.0 +- Rotation - +active: false +- Wind - +active: false +- Gravity - +active: false +- Tint - +colorsCount: 3 +colors0: 1.0 +colors1: 0.12156863 +colors2: 0.047058824 +timelineCount: 1 +timeline0: 0.0 +- Transparency - +lowMin: 0.0 +lowMax: 0.0 +highMin: 1.0 +highMax: 1.0 +relative: false +scalingCount: 4 +scaling0: 0.0 +scaling1: 1.0 +scaling2: 0.75 +scaling3: 0.0 +timelineCount: 4 +timeline0: 0.0 +timeline1: 0.2 +timeline2: 0.8 +timeline3: 1.0 +- Options - +attached: false +continuous: true +aligned: false +additive: true +behind: false +premultipliedAlpha: false +- Image Path - +particle.png diff --git a/app/src/main/java/de/frajul/endlessroll/data/Color.java b/app/src/main/java/de/frajul/endlessroll/data/Color.java new file mode 100644 index 0000000..a947743 --- /dev/null +++ b/app/src/main/java/de/frajul/endlessroll/data/Color.java @@ -0,0 +1,69 @@ +package de.frajul.endlessroll.data; + +import de.frajul.endlessroll.main.GameLog; + +/** + * Created by Julian on 02.08.2016. + */ +public class Color { + + private float r, g, b; + + public Color() { + } + + public Color(float r, float g, float b) { + this.r = r; + this.g = g; + this.b = b; + } + + public Color(Color other) { + this.r = other.getR(); + this.g = other.getG(); + this.b = other.getB(); + } + + public Color interpolate(float leftValue, float rightValue, Color color2) { + float r = this.r + (color2.r - this.r) * leftValue; + float g = this.g + (color2.g - this.g) * leftValue; + float b = this.b + (color2.b - this.b) * leftValue; + return new Color(r, g, b); + } + + private void mul(float a) { + r *= a; + g *= a; + b *= a; + } + + private void add(Color other) { + r += other.getR(); + g += other.getG(); + b += other.getB(); + } + + public float getR() { + return r; + } + + public void setR(float r) { + this.r = r; + } + + public float getG() { + return g; + } + + public void setG(float g) { + this.g = g; + } + + public float getB() { + return b; + } + + public void setB(float b) { + this.b = b; + } +} diff --git a/app/src/main/java/de/frajul/endlessroll/data/SynchronizedArrayList.java b/app/src/main/java/de/frajul/endlessroll/data/SynchronizedArrayList.java new file mode 100644 index 0000000..2ca8b7d --- /dev/null +++ b/app/src/main/java/de/frajul/endlessroll/data/SynchronizedArrayList.java @@ -0,0 +1,147 @@ +package de.frajul.endlessroll.data; + +import java.util.ArrayList; +import java.util.Collection; +import java.util.List; + +/** + * Created by Julian on 16.11.2016. + */ + +public class SynchronizedArrayList extends ArrayList { + + @Override + public synchronized String toString() { + return super.toString(); + } + + @Override + public synchronized boolean add(E object) { + return super.add(object); + } + + @Override + public synchronized void add(int index, E object) { + super.add(index, object); + } + + @Override + public synchronized boolean addAll(Collection collection) { + return super.addAll(collection); + } + + @Override + public synchronized boolean addAll(int index, Collection collection) { + return super.addAll(index, collection); + } + + @Override + public synchronized void clear() { + super.clear(); + } + + @Override + public synchronized Object clone() { + return super.clone(); + } + + @Override + public synchronized void ensureCapacity(int minimumCapacity) { + super.ensureCapacity(minimumCapacity); + } + + @Override + public synchronized E get(int index) { + return super.get(index); + } + + @Override + public synchronized int size() { + return super.size(); + } + + @Override + public synchronized boolean isEmpty() { + return super.isEmpty(); + } + + @Override + public synchronized boolean contains(Object object) { + return super.contains(object); + } + + @Override + public synchronized int indexOf(Object object) { + return super.indexOf(object); + } + + @Override + public synchronized int lastIndexOf(Object object) { + return super.lastIndexOf(object); + } + + @Override + public synchronized E remove(int index) { + return super.remove(index); + } + + @Override + public synchronized boolean remove(Object object) { + return super.remove(object); + } + + @Override + protected synchronized void removeRange(int fromIndex, int toIndex) { + super.removeRange(fromIndex, toIndex); + } + + @Override + public synchronized E set(int index, E object) { + return super.set(index, object); + } + + @Override + public synchronized Object[] toArray() { + return super.toArray(); + } + + @Override + public synchronized T[] toArray(T[] contents) { + return super.toArray(contents); + } + + @Override + public synchronized void trimToSize() { + super.trimToSize(); + } + + @Override + public synchronized int hashCode() { + return super.hashCode(); + } + + @Override + public synchronized boolean equals(Object o) { + return super.equals(o); + } + + @Override + public synchronized List subList(int start, int end) { + return super.subList(start, end); + } + + @Override + public synchronized boolean containsAll(Collection collection) { + return super.containsAll(collection); + } + + @Override + public synchronized boolean removeAll(Collection collection) { + return super.removeAll(collection); + } + + @Override + public synchronized boolean retainAll(Collection collection) { + return super.retainAll(collection); + } +} diff --git a/app/src/main/java/de/frajul/endlessroll/data/Vector.java b/app/src/main/java/de/frajul/endlessroll/data/Vector.java new file mode 100644 index 0000000..1fbbdb9 --- /dev/null +++ b/app/src/main/java/de/frajul/endlessroll/data/Vector.java @@ -0,0 +1,101 @@ +package de.frajul.endlessroll.data; + +/** + * Created by Julian on 01.12.2015. + */ +public class Vector { + + public float x, y; + + public Vector() { + this(0, 0); + } + + public Vector(Vector other) { + this(other.x, other.y); + } + + public Vector(float x, float y) { + set(x, y); + } + + @Override + public String toString() { + return "Vector(" + x + ", " + y + ")"; + } + + public Vector set(float x, float y) { + this.x = x; + this.y = y; + return this; + } + + public float length() { + return (float) Math.sqrt(x * x + y * y); + } + + public Vector normalize() { + float length = this.length(); + x /= length; + y /= length; + return this; + } + + public Vector translate(Vector other) { + this.x += other.x; + this.y += other.y; + return this; + } + + public Vector translate(float x, float y) { + this.x += x; + this.y += y; + return this; + } + + public Vector mul(float z) { + x *= z; + y *= z; + return this; + } + + public Vector mul(Vector other) { + this.x *= other.x; + this.y *= other.y; + return this; + } + + public Vector mul(float x, float y) { + this.x *= x; + this.y *= y; + return this; + } + + public Vector negate() { + this.x *= -1; + this.y *= -1; + return this; + } + + public Vector vectorTo(Vector other) { + float x = other.x - this.x; + float y = other.y - this.y; + return new Vector(x, y); + } + + public void setX(float x) { + this.x = x; + } + + public void setY(float y) { + this.y = y; + } + + public float getX() { + return x; + } + + public float getY() { + return y; + } +} diff --git a/app/src/main/java/de/frajul/endlessroll/entities/AnimatedEntity.java b/app/src/main/java/de/frajul/endlessroll/entities/AnimatedEntity.java new file mode 100644 index 0000000..bf85321 --- /dev/null +++ b/app/src/main/java/de/frajul/endlessroll/entities/AnimatedEntity.java @@ -0,0 +1,25 @@ +package de.frajul.endlessroll.entities; + +import de.frajul.endlessroll.data.Vector; +import de.frajul.endlessroll.entities.textures.Texture; +import de.frajul.endlessroll.main.game.Timer; + +/** + * Created by Julian on 20.02.2017. + */ + +public class AnimatedEntity extends Entity { + + protected Animation animation; + + public AnimatedEntity(Texture texture, Vector position, float width, float height) { + super(texture, position, width, height); + animation = new Animation(); + } + + public void update(Timer timer){ + animation.update(timer); + super.setTextureAtlasIndex(animation.getCurrentTexIndex()); + } + +} diff --git a/app/src/main/java/de/frajul/endlessroll/entities/Animation.java b/app/src/main/java/de/frajul/endlessroll/entities/Animation.java new file mode 100644 index 0000000..97c6171 --- /dev/null +++ b/app/src/main/java/de/frajul/endlessroll/entities/Animation.java @@ -0,0 +1,55 @@ +package de.frajul.endlessroll.entities; + +import de.frajul.endlessroll.main.game.Timer; + +/** + * Created by Julian on 14.12.2015. + */ +public class Animation { + + private int[] indexSequence = {0, 1, 2, 3}; + private boolean looping = false; + private int requiredDelta = 110; + + private int indexPointer = 0; + private boolean stillRunning = true; + private long lastSwitchTime = -1; + + public void disable(){ + stillRunning = false; + } + + public void update(Timer timer) { + if (lastSwitchTime == -1) { + lastSwitchTime = timer.getCurrentTime(); + return; + } + if (stillRunning) { + long delta = timer.getCurrentTime() - lastSwitchTime; + if (delta >= requiredDelta) { + lastSwitchTime = timer.getCurrentTime(); + indexPointer++; + if (!looping && indexPointer == indexSequence.length - 1) + stillRunning = false; + if (looping && indexPointer == indexSequence.length) + indexPointer = 0; + } + } + } + + public int getCurrentTexIndex() { + return indexSequence[indexPointer]; + } + + public void setIndexSequence(int[] indexSequence) { + this.indexSequence = indexSequence; + } + + public void setRequiredDelta(int requiredDelta) { + this.requiredDelta = requiredDelta; + } + + public void setLooping(boolean looping) { + this.looping = looping; + } +} diff --git a/app/src/main/java/de/frajul/endlessroll/entities/Background.java b/app/src/main/java/de/frajul/endlessroll/entities/Background.java new file mode 100644 index 0000000..dbdd971 --- /dev/null +++ b/app/src/main/java/de/frajul/endlessroll/entities/Background.java @@ -0,0 +1,56 @@ +package de.frajul.endlessroll.entities; + +import de.frajul.endlessroll.data.SynchronizedArrayList; +import de.frajul.endlessroll.data.Vector; +import de.frajul.endlessroll.entities.textures.Texture; + +/** + * Created by Julian on 20.07.2016. + */ +public class Background extends SynchronizedArrayList { + + private final float PART_WIDTH = 5; + private final float HALF_PART_WIDTH = PART_WIDTH / 2; + private final float HEIGHT = 2.5f; + private Texture texture; + + public Background(Texture texture) { + this.texture = texture; + super.add(createPart(-HALF_PART_WIDTH)); + } + + public void changeTexture(Texture texture) { + this.texture = texture; + synchronized (this) { + for (Entity entity : this) + entity.setTexture(texture); + } + } + + private Entity createPart(float xLeftEdge) { + return new Entity(texture, new Vector(xLeftEdge + HALF_PART_WIDTH, (HEIGHT - 2) / 2), PART_WIDTH, HEIGHT); + } + + public void move(float x, float cameraX) { + Vector movement = new Vector(x, 0); + synchronized (this) { + for (Entity part : this) + part.move(movement); + } + if (!super.isEmpty()) { + Entity last = super.get(super.size() - 1); + if (last.getRightEdge() - cameraX < 3) { + super.add(createPart(last.getRightEdge() - 0.001f)); + } + if (super.get(0).getRightEdge() - cameraX < -3) { + super.remove(0); + } + } + } + + public void resetPosition() { + super.clear(); + super.add(createPart(-HALF_PART_WIDTH)); + } + +} diff --git a/app/src/main/java/de/frajul/endlessroll/entities/DestroyEffect.java b/app/src/main/java/de/frajul/endlessroll/entities/DestroyEffect.java new file mode 100644 index 0000000..297479e --- /dev/null +++ b/app/src/main/java/de/frajul/endlessroll/entities/DestroyEffect.java @@ -0,0 +1,39 @@ +package de.frajul.endlessroll.entities; + +import android.support.annotation.Nullable; + +import de.frajul.endlessroll.data.Vector; +import de.frajul.endlessroll.entities.particles.ParticleEffect; +import de.frajul.endlessroll.entities.particles.ParticleSource; +import de.frajul.endlessroll.entities.particles.ParticleSystem; + +/** + * Created by Julian on 11.03.2016. + */ +public enum DestroyEffect { + + EXPLOSION, STAR_EXPLOSION, ENERGY_COLLECT, NONE; + + @Nullable + public ParticleSource createEffect(ParticleSystem system, Vector position, Vector size) { + if (this == NONE) + return null; + ParticleSource source = new ParticleSource(position, getEffect(system)); + source.setSpawnSize(size); + return source; + } + + private ParticleEffect getEffect(ParticleSystem system) { + switch (this) { + case EXPLOSION: + return system.explosion; + case STAR_EXPLOSION: + return system.starCollect; + case ENERGY_COLLECT: + return system.energyCollect; + default: + return null; + } + } + +} diff --git a/app/src/main/java/de/frajul/endlessroll/entities/Entity.java b/app/src/main/java/de/frajul/endlessroll/entities/Entity.java new file mode 100644 index 0000000..6e859e9 --- /dev/null +++ b/app/src/main/java/de/frajul/endlessroll/entities/Entity.java @@ -0,0 +1,113 @@ +package de.frajul.endlessroll.entities; + +import de.frajul.endlessroll.data.Vector; +import de.frajul.endlessroll.entities.collision.geometry.Quad; +import de.frajul.endlessroll.entities.textures.Texture; + +/** + * Created by Julian on 20.11.2015. + */ +public class Entity extends Quad { + + private int textureAtlasIndex; + private Texture texture; + private Vector movement; + private float rotation; + private float alpha = 1.0f; + private boolean destroyed; + private DestroyEffect destroyEffect; + private Vector maxTexSize; + private boolean visible = true; + + public Entity(Texture texture, Vector position, float width, float height) { + super(position, width, height); + this.texture = texture; + this.movement = new Vector(); + this.maxTexSize = new Vector(); + } + + public void move(Vector movement) { + position.translate(movement); + } + + public void rotate(float factor) { + rotation += factor; + } + + public void setToTerrain(float terrainEdge) { + position.y = terrainEdge + height / 2; + } + + public void setTopEdge(float y) { + position.y = y - height / 2; + } + + public Texture getTexture() { + return texture; + } + + public void setTexture(Texture texture) { + this.texture = texture; + } + + public Vector getMovement() { + return movement; + } + + public void setMovement(Vector movement) { + this.movement = movement; + } + + public float getRotation() { + return rotation; + } + + public void setRotation(float rotation) { + this.rotation = rotation; + } + + public void setAlpha(float alpha) { + this.alpha = alpha; + } + + public float getAlpha() { + return alpha; + } + + public void destroy(DestroyEffect destroyEffect) { + this.destroyed = true; + this.destroyEffect = destroyEffect; + } + + public boolean isDestroyed() { + return destroyed; + } + + public DestroyEffect getDestroyEffect() { + return destroyEffect; + } + + public void setTextureAtlasIndex(int textureAtlasIndex) { + this.textureAtlasIndex = textureAtlasIndex; + } + + public int getTextureAtlasIndex() { + return textureAtlasIndex; + } + + public void setMaxTexSize(Vector maxTexSize) { + this.maxTexSize = maxTexSize; + } + + public Vector getMaxTexSize() { + return maxTexSize; + } + + public void setVisible(boolean visible) { + this.visible = visible; + } + + public boolean isVisible() { + return visible; + } +} diff --git a/app/src/main/java/de/frajul/endlessroll/entities/Goal.java b/app/src/main/java/de/frajul/endlessroll/entities/Goal.java new file mode 100644 index 0000000..ae5dc5b --- /dev/null +++ b/app/src/main/java/de/frajul/endlessroll/entities/Goal.java @@ -0,0 +1,16 @@ +package de.frajul.endlessroll.entities; + +import de.frajul.endlessroll.data.Vector; +import de.frajul.endlessroll.entities.textures.Texture; + +public class Goal extends Entity { + + public Goal(Texture texture) { + super(texture, new Vector(), 0.1f, 3); + super.getMaxTexSize().setY(0.2f); + } + + public void setGoalX(float goalX) { + super.setPosition(new Vector(goalX - 0.05f, 0)); + } +} diff --git a/app/src/main/java/de/frajul/endlessroll/entities/Player.java b/app/src/main/java/de/frajul/endlessroll/entities/Player.java new file mode 100644 index 0000000..8ce4840 --- /dev/null +++ b/app/src/main/java/de/frajul/endlessroll/entities/Player.java @@ -0,0 +1,130 @@ +package de.frajul.endlessroll.entities; + +import java.util.ArrayList; +import java.util.List; + +import de.frajul.endlessroll.data.Vector; +import de.frajul.endlessroll.entities.particles.ParticleSource; +import de.frajul.endlessroll.entities.particles.ParticleSystem; +import de.frajul.endlessroll.entities.shapes.PlayerShape; +import de.frajul.endlessroll.entities.tools.PlayerInfluenceTool; +import de.frajul.endlessroll.main.game.Timer; + +/** + * Created by Julian on 20.11.2015. + */ +public class Player extends Entity { + + private final float ROTATION_SPEED = -400; + public final float RADIUS = 0.1f; + private final float START_X = -0.9f; + private final float SPEED = 0.002f; + + private float startSpeed, endSpeed; + private float speed = SPEED; + + private long currentSuperPowerDuration; + private boolean hasSuperPower; + private long superPowerDuration; + private ParticleSource superPowerParticles; + + private ParticleSystem particleSystem; + private List influenceTools = new ArrayList<>(); + private List forces = new ArrayList<>(); + private float gravityForce; + + public Player() { + super(PlayerShape.BALL.getTexture(), new Vector(), 0, 0); + super.setWidth(RADIUS * 2); + super.setHeight(RADIUS * 2); + } + + public void startSuperPower(long duration) { + this.superPowerDuration = duration; + currentSuperPowerDuration = 0; + hasSuperPower = true; + superPowerParticles = new ParticleSource( + new Vector(super.getPosition().x, super.getPosition().y), particleSystem.superPower); + superPowerParticles.start(); + } + + public void init(PlayerShape playerShape, float terrainEdge, float startSpeed, float endSpeed, ParticleSystem particleSystem) { + super.setTexture(playerShape.getTexture()); + super.setToTerrain(terrainEdge); + super.getPosition().x = START_X; + super.setMovement(new Vector(speed, 0)); + this.startSpeed = startSpeed; + this.endSpeed = endSpeed; + setSpeedByProgress(0); + this.particleSystem = particleSystem; + } + + public void setSpeedByProgress(float progress) { + this.speed = ((endSpeed - startSpeed) * progress + startSpeed) * SPEED; + super.getMovement().x = speed; + } + + public void preMoveUpdate(Timer timer) { + if (hasSuperPower && superPowerParticles != null) { + currentSuperPowerDuration += timer.getFrameTimeSeconds(); + hasSuperPower = superPowerDuration >= currentSuperPowerDuration; + superPowerParticles.setPosition(new Vector(super.getPosition())); + } + if (!hasSuperPower && superPowerParticles != null) + superPowerParticles.kill(); + + for (PlayerInfluenceTool tool : influenceTools) + tool.influencePlayerValues(this); + + for (float force : forces) + super.getMovement().y += force; + super.getMovement().y += gravityForce; + } + + public void clearAllForces() { + forces.clear(); + gravityForce = 0; + } + + public void manipulateAllForces(float factor) { + for (int i = 0; i < forces.size(); i++) + forces.set(i, forces.get(i) * factor); + gravityForce *= factor * factor; + } + + public void postMoveUpdate() { + influenceTools.clear(); + forces.clear(); + } + + public float getProgress() { + return getPosition().x - START_X; + } + + public float getSpeed() { + return speed; + } + + public boolean hasSuperPower() { + return hasSuperPower; + } + + public void addInfluenceTool(PlayerInfluenceTool tool) { + influenceTools.add(tool); + } + + public void addForce(float force) { + forces.add(force); + } + + public void setGravityForce(float gravityForce) { + this.gravityForce = gravityForce; + } + + @Override + public void move(Vector movement) { + super.move(movement); + rotate(movement.x * ROTATION_SPEED); + } + +} diff --git a/app/src/main/java/de/frajul/endlessroll/entities/Vertex.java b/app/src/main/java/de/frajul/endlessroll/entities/Vertex.java new file mode 100644 index 0000000..34ce49a --- /dev/null +++ b/app/src/main/java/de/frajul/endlessroll/entities/Vertex.java @@ -0,0 +1,44 @@ +package de.frajul.endlessroll.entities; + +import de.frajul.endlessroll.main.GameLog; + +/** + * Created by Julian on 11.12.2016. + */ + +public enum Vertex { + + UL(0, -1, 1), UR(1, 1, 1), BL(3, -1, -1), BR(2, 1, -1); + + private int index; + private float x, y; + + Vertex(int index, float x, float y) { + this.index = index; + this.x = x; + this.y = y; + } + + public Vertex getNext(boolean clockwise) { + int newIndex = index + 1; + if (!clockwise) + newIndex = index - 1; + if (newIndex > 3) + newIndex = 0; + if (newIndex < 0) + newIndex = 3; + for (Vertex vertex : values()) + if (vertex.index == newIndex) + return vertex; + GameLog.e("No vertex with index " + index + " found!!!"); + return null; + } + + public float getX() { + return x; + } + + public float getY() { + return y; + } +} diff --git a/app/src/main/java/de/frajul/endlessroll/entities/collectables/Energy.java b/app/src/main/java/de/frajul/endlessroll/entities/collectables/Energy.java new file mode 100644 index 0000000..4610e26 --- /dev/null +++ b/app/src/main/java/de/frajul/endlessroll/entities/collectables/Energy.java @@ -0,0 +1,17 @@ +package de.frajul.endlessroll.entities.collectables; + +import de.frajul.endlessroll.data.Vector; +import de.frajul.endlessroll.entities.AnimatedEntity; +import de.frajul.endlessroll.entities.textures.Texture; +import de.frajul.endlessroll.levels.PositionData; + +public class Energy extends AnimatedEntity { + + private final static float SIZE = 0.3f; + + public Energy(Texture texture, PositionData data) { + super(texture, new Vector(data.getX(), data.getY()), SIZE, SIZE); + animation.setLooping(true); + animation.setRequiredDelta(130); + } +} diff --git a/app/src/main/java/de/frajul/endlessroll/entities/collectables/Star.java b/app/src/main/java/de/frajul/endlessroll/entities/collectables/Star.java new file mode 100644 index 0000000..b4acd5d --- /dev/null +++ b/app/src/main/java/de/frajul/endlessroll/entities/collectables/Star.java @@ -0,0 +1,21 @@ +package de.frajul.endlessroll.entities.collectables; + +import de.frajul.endlessroll.data.Vector; +import de.frajul.endlessroll.entities.Entity; +import de.frajul.endlessroll.entities.textures.Texture; +import de.frajul.endlessroll.levels.PositionData; + +public class Star extends Entity { + + private final static float SIZE = 0.25f; + private int index; + + public Star(int index, Texture texture, PositionData data) { + super(texture, new Vector(data.getX(), data.getY()), SIZE, SIZE); + this.index = index; + } + + public int getIndex() { + return index; + } +} diff --git a/app/src/main/java/de/frajul/endlessroll/entities/collision/CircleTriangleCollisionDetector.java b/app/src/main/java/de/frajul/endlessroll/entities/collision/CircleTriangleCollisionDetector.java new file mode 100644 index 0000000..19fadbd --- /dev/null +++ b/app/src/main/java/de/frajul/endlessroll/entities/collision/CircleTriangleCollisionDetector.java @@ -0,0 +1,78 @@ +package de.frajul.endlessroll.entities.collision; + +import de.frajul.endlessroll.data.Vector; +import de.frajul.endlessroll.entities.collision.geometry.Circle; +import de.frajul.endlessroll.entities.collision.geometry.Triangle; + +/** + * Created by Julian on 28.02.2016. + */ +public class CircleTriangleCollisionDetector { + + public boolean circleTriangleCollision(Circle circle, Triangle triangle) { + if (circleIntersectingWithTriangleVertices(circle, triangle)) + return true; + + if (circleCenterInsideTriangle(circle, triangle)) + return true; + + if (circleIntersectingWithTriangleEdges(circle, triangle)) + return true; + return false; + } + + private boolean circleIntersectingWithTriangleEdges(Circle circle, Triangle triangle) { + Vector edge1 = triangle.getVertex1().vectorTo(triangle.getVertex2()); + Vector edge2 = triangle.getVertex2().vectorTo(triangle.getVertex3()); + Vector edge3 = triangle.getVertex3().vectorTo(triangle.getVertex1()); + + boolean intersectingWithEdge1 = circleIntersectingWithTriangleEdge(circle, triangle.getVertex1(), edge1); + boolean intersectingWithEdge2 = circleIntersectingWithTriangleEdge(circle, triangle.getVertex2(), edge2); + boolean intersectingWithEdge3 = circleIntersectingWithTriangleEdge(circle, triangle.getVertex3(), edge3); + return intersectingWithEdge1 || intersectingWithEdge2 || intersectingWithEdge3; + } + + private boolean circleIntersectingWithTriangleEdge(Circle circle, Vector vertex, Vector edge) { + Vector vertexToCenter = vertex.vectorTo(circle.getCenter()); + Vector kVector = new Vector(vertexToCenter).mul(edge); + float k = kVector.x + kVector.y; + + if (k > 0) { + float length = edge.length(); + k = k / length; + + if (k < length) + if (Math.sqrt(vertexToCenter.x * vertexToCenter.x + vertexToCenter.y * vertexToCenter.y - k * k) <= circle.getRadius()) + return true; + } + return false; + } + + private boolean circleCenterInsideTriangle(Circle circle, Triangle triangle) { + Vector vertex1To2 = triangle.getVertex1().vectorTo(triangle.getVertex2()); + Vector vertex2To3 = triangle.getVertex2().vectorTo(triangle.getVertex3()); + Vector vertex3To1 = triangle.getVertex3().vectorTo(triangle.getVertex1()); + Vector vertex1ToCenter = triangle.getVertex1().vectorTo(circle.getCenter()); + Vector vertex2ToCenter = triangle.getVertex2().vectorTo(circle.getCenter()); + Vector vertex3ToCenter = triangle.getVertex3().vectorTo(circle.getCenter()); + + boolean centerInsideV1V2 = vertex1To2.y * vertex1ToCenter.x - vertex1To2.x * vertex1ToCenter.y < 0; + boolean centerInsideV2V3 = vertex2To3.y * vertex2ToCenter.x - vertex2To3.x * vertex2ToCenter.y < 0; + boolean centerInsideV3V1 = vertex3To1.y * vertex3ToCenter.x - vertex3To1.x * vertex3ToCenter.y < 0; + + return centerInsideV1V2 && centerInsideV2V3 && centerInsideV3V1; + } + + private boolean circleIntersectingWithTriangleVertices(Circle circle, Triangle triangle) { + boolean intersectingWithVertex1 = circleIntersectingWithTriangleVertex(circle, triangle.getVertex1()); + boolean intersectingWithVertex2 = circleIntersectingWithTriangleVertex(circle, triangle.getVertex2()); + boolean intersectingWithVertex3 = circleIntersectingWithTriangleVertex(circle, triangle.getVertex3()); + return intersectingWithVertex1 || intersectingWithVertex2 || intersectingWithVertex3; + } + + private boolean circleIntersectingWithTriangleVertex(Circle circle, Vector vertex) { + Vector centerToVertex = circle.getCenter().vectorTo(vertex); + return centerToVertex.length() <= circle.getRadius(); + } + +} diff --git a/app/src/main/java/de/frajul/endlessroll/entities/collision/CollisionDetector.java b/app/src/main/java/de/frajul/endlessroll/entities/collision/CollisionDetector.java new file mode 100644 index 0000000..17458e6 --- /dev/null +++ b/app/src/main/java/de/frajul/endlessroll/entities/collision/CollisionDetector.java @@ -0,0 +1,205 @@ +package de.frajul.endlessroll.entities.collision; + +import de.frajul.endlessroll.data.Vector; +import de.frajul.endlessroll.entities.Entity; +import de.frajul.endlessroll.entities.Player; +import de.frajul.endlessroll.entities.collision.collisionData.EntityCollisionData; +import de.frajul.endlessroll.entities.collision.geometry.Circle; +import de.frajul.endlessroll.entities.collision.geometry.Quad; +import de.frajul.endlessroll.entities.collision.geometry.Triangle; + +/** + * Created by Julian on 01.12.2015. + */ +public class CollisionDetector { + + private CircleTriangleCollisionDetector triangleDetector; + + public CollisionDetector() { + triangleDetector = new CircleTriangleCollisionDetector(); + } + + public boolean isCircleCircleCollision(Circle c1, Circle c2) { + float distance = Math.abs(c1.getCenter().vectorTo(c2.getCenter()).length()); + float radiusSum = c1.getRadius() + c2.getRadius(); + return distance < radiusSum; + } + + public boolean isCircleQuadCollision(Circle circle, Quad quad) { + Vector distance = circle.getCenter().vectorTo(quad.getPosition()); + distance.x = Math.abs(distance.x); + distance.y = Math.abs(distance.y); + + if (distance.x > circle.getRadius() + quad.getWidth() / 2) + return false; + if (distance.y > circle.getRadius() + quad.getHeight() / 2) + return false; + + if (distance.x <= quad.getWidth() / 2) + return true; + if (distance.y <= quad.getHeight() / 2) + return true; + + float cornerDistance_sq = (distance.x - quad.getWidth() / 2) * (distance.x - quad + .getWidth() / 2) + (distance.y - quad.getHeight() / 2) * (distance.y - quad + .getHeight() / 2); + return cornerDistance_sq <= circle.getRadius() * circle.getRadius(); + } + + public boolean isCircleTriangleCollision(Circle circle, Triangle triangle) { + return triangleDetector.circleTriangleCollision(circle, triangle); + } + + public boolean isQuadQuadCollision(Quad q1, Quad q2) { + float xDistance = Math.abs(q2.getPosition().x - q1.getPosition().x); + float yDistance = Math.abs(q2.getPosition().y - q1.getPosition().y); + if (xDistance >= q1.getWidth() / 2 + q2.getWidth() / 2) + return false; + if (yDistance >= q1.getHeight() / 2 + q2.getHeight() / 2) + return false; + return true; + } + + public boolean isQuadTriangleCollision(Quad quad, Triangle triangle) { + boolean quadVertex1InTriangle = isVertexInTriangle( + new Vector(quad.getLeftEdge(), quad.getTopEdge()), triangle); + if (quadVertex1InTriangle) + return true; + boolean quadVertex2InTriangle = isVertexInTriangle( + new Vector(quad.getRightEdge(), quad.getTopEdge()), triangle); + if (quadVertex2InTriangle) + return true; + boolean quadVertex3InTriangle = isVertexInTriangle( + new Vector(quad.getRightEdge(), quad.getBottomEdge()), triangle); + if (quadVertex3InTriangle) + return true; + boolean quadVertex4InTriangle = isVertexInTriangle( + new Vector(quad.getLeftEdge(), quad.getBottomEdge()), triangle); + if (quadVertex4InTriangle) + return true; + boolean triangleVertex1InQuad = isVertexInQuad(triangle.getVertex1(), quad); + if (triangleVertex1InQuad) + return true; + boolean triangleVertex2InQuad = isVertexInQuad(triangle.getVertex2(), quad); + if (triangleVertex2InQuad) + return true; + boolean triangleVertex3InQuad = isVertexInQuad(triangle.getVertex3(), quad); + if (triangleVertex3InQuad) + return true; + return false; + } + + public boolean isTriangleTriangleCollision(Triangle triangle1, Triangle triangle2) { + boolean triangle1Vertex1InTriangle2 = isVertexInTriangle(triangle1.getVertex1(), triangle2); + if (triangle1Vertex1InTriangle2) + return true; + boolean triangle1Vertex2InTriangle2 = isVertexInTriangle(triangle1.getVertex2(), triangle2); + if (triangle1Vertex2InTriangle2) + return true; + boolean triangle1Vertex3InTriangle2 = isVertexInTriangle(triangle1.getVertex3(), triangle2); + if (triangle1Vertex3InTriangle2) + return true; + boolean triangle2Vertex1InTriangle1 = isVertexInTriangle(triangle2.getVertex1(), triangle1); + if (triangle2Vertex1InTriangle1) + return true; + boolean triangle2Vertex2InTriangle1 = isVertexInTriangle(triangle2.getVertex2(), triangle1); + if (triangle2Vertex2InTriangle1) + return true; + boolean triangle2Vertex3InTriangle1 = isVertexInTriangle(triangle2.getVertex3(), triangle1); + if (triangle2Vertex3InTriangle1) + return true; + return false; + } + + + private boolean isVertexInTriangle(Vector vertex, Triangle triangle) { + Vector vertex1To2 = triangle.getVertex1().vectorTo(triangle.getVertex2()); + Vector vertex2To3 = triangle.getVertex2().vectorTo(triangle.getVertex3()); + Vector vertex3To1 = triangle.getVertex3().vectorTo(triangle.getVertex1()); + Vector vertex1ToCenter = triangle.getVertex1().vectorTo(vertex); + Vector vertex2ToCenter = triangle.getVertex2().vectorTo(vertex); + Vector vertex3ToCenter = triangle.getVertex3().vectorTo(vertex); + + boolean centerInsideV1V2 = vertex1To2.y * vertex1ToCenter.x - vertex1To2.x * vertex1ToCenter.y < 0; + boolean centerInsideV2V3 = vertex2To3.y * vertex2ToCenter.x - vertex2To3.x * vertex2ToCenter.y < 0; + boolean centerInsideV3V1 = vertex3To1.y * vertex3ToCenter.x - vertex3To1.x * vertex3ToCenter.y < 0; + + return centerInsideV1V2 && centerInsideV2V3 && centerInsideV3V1; + } + + private boolean isVertexInQuad(Vector vertex, Quad quad) { + return vertex.getX() >= quad.getLeftEdge() && vertex.getX() <= quad.getRightEdge() && vertex + .getY() >= quad.getBottomEdge() && vertex.getY() <= quad.getTopEdge(); + } + + + public EntityCollisionData playerEntityCollision(Player player, Entity entity) { + Circle circle = new Circle(player); + Quad quad = entity; + if (isCircleQuadCollision(circle, quad)) { + Edge edge = circleQuadCollisionEdge(circle, player.getMovement(), quad, + entity.getMovement()); + return new EntityCollisionData(entity, edge); + } + return new EntityCollisionData(null, null); + } + + private Edge circleQuadCollisionEdge(Circle circle, Vector circleMovement, Quad quad, Vector quadMovement) { + Vector relativeMovement = circleMovement.translate(quadMovement); + + //LEFT || TOP || BOTTOM + if (relativeMovement.x > 0) { + //LEFT || BOTTOM + if (relativeMovement.y > 0) { + float toLeftDistance = quad.getLeftEdge() - circle.getCenter().x; + float actualY = toLeftDistance * (relativeMovement.y / relativeMovement.x) + circle + .getCenter().y; + if (actualY < quad.getBottomEdge()) + return Edge.BOTTOM; + else + return Edge.LEFT; + } + //LEFT || TOP + else if (relativeMovement.y < 0) { + float toLeftDistance = quad.getLeftEdge() - circle.getCenter().x; + float actualY = toLeftDistance * (relativeMovement.y / relativeMovement.x) + circle + .getCenter().y; + if (actualY < quad.getTopEdge()) + return Edge.LEFT; + else + return Edge.TOP; + } else + return Edge.LEFT; + } + //RIGHT || TOP || BOTTOM + else if (relativeMovement.x < 0) { + //RIGHT || BOTTOM + if (relativeMovement.y > 0) { + float toRightDistance = quad.getRightEdge() - circle.getCenter().x; + float actualY = toRightDistance * (relativeMovement.y / relativeMovement.x) + circle + .getCenter().y; + if (actualY < quad.getBottomEdge()) + return Edge.BOTTOM; + else + return Edge.RIGHT; + } + //RIGHT || TOP + else if (relativeMovement.y < 0) { + float toRightDistance = quad.getRightEdge() - circle.getCenter().x; + float actualY = toRightDistance * (relativeMovement.y / relativeMovement.x) + circle + .getCenter().y; + if (actualY < quad.getTopEdge()) + return Edge.RIGHT; + else + return Edge.TOP; + } else + return Edge.RIGHT; + } else { + if (relativeMovement.y > 0) + return Edge.BOTTOM; + else if (relativeMovement.y < 0) + return Edge.TOP; + } + return Edge.NONE; + } +} diff --git a/app/src/main/java/de/frajul/endlessroll/entities/collision/CollisionManager.java b/app/src/main/java/de/frajul/endlessroll/entities/collision/CollisionManager.java new file mode 100644 index 0000000..25839a7 --- /dev/null +++ b/app/src/main/java/de/frajul/endlessroll/entities/collision/CollisionManager.java @@ -0,0 +1,104 @@ +package de.frajul.endlessroll.entities.collision; + +import de.frajul.endlessroll.entities.DestroyEffect; +import de.frajul.endlessroll.entities.Obstacle; +import de.frajul.endlessroll.entities.Player; +import de.frajul.endlessroll.entities.collectables.Energy; +import de.frajul.endlessroll.entities.collectables.Star; +import de.frajul.endlessroll.entities.collision.collisionData.EntityCollisionData; +import de.frajul.endlessroll.entities.collision.collisionData.ObstacleCollisionData; +import de.frajul.endlessroll.entities.collision.collisionData.PlayerCollisionData; +import de.frajul.endlessroll.entities.collision.collisionData.ToolCollisionData; +import de.frajul.endlessroll.entities.tools.Tool; +import de.frajul.endlessroll.main.game.Game; +import de.frajul.endlessroll.main.game.GameScene; +import de.frajul.endlessroll.main.game.Timer; +import de.frajul.endlessroll.main.physics.Physics; + +/** + * Created by Julian on 02.01.2016. + */ +public class CollisionManager { + + private Game game; + private Player player; + private Timer timer; + + public CollisionManager(Game game) { + this.game = game; + } + + //Check Obstacle always before tool, because at tool, player could be moved etc. + public void update(Physics physics, GameScene scene, Timer timer) { + physics.checkToolCollision(scene); + + this.player = scene.getPlayer(); + this.timer = timer; + PlayerCollisionData data = physics.getPlayerCollisionData(scene); + if (data.isTerrainCollision()) + checkTerrainCollision(data.getTerrainCollisionData()); + if (data.isCeilingCollision()) + checkCeilingCollision(data.getCeilingCollisionData()); + if (data.isObstacleCollision()) + checkObstacleCollision(data.getObstacleCollisionData(), player.hasSuperPower()); + if (data.isToolCollision()) + checkToolCollision(data.getToolCollisionData()); + if (data.isStarCollision()) + game.onStarCollision((Star) data.getStarCollisionData().getEntity()); + if (data.isEnergyCollision()) + game.onEnergyCollision((Energy) data.getEnergyCollisionData().getEntity()); + } + + private void checkTerrainCollision(EntityCollisionData data) { + checkEntityCollision(data, -0.01f); + if (data.getEdge() != Edge.TOP) + game.onGameOver(true); + } + + private void checkCeilingCollision(EntityCollisionData data) { + checkEntityCollision(data, -0.01f); + if (data.getEdge() == Edge.RIGHT || data.getEdge() == Edge.LEFT) + game.onGameOver(true); + } + + private void checkToolCollision(ToolCollisionData data) { + for (Tool tool : data.getTools()) + tool.onPlayerCollision(player, timer); + } + + private void checkObstacleCollision(ObstacleCollisionData data, boolean playerHasSuperpower) { + for (EntityCollisionData entityData : data.getCollisions()) { + if (playerHasSuperpower) { + entityData.getEntity().destroy(DestroyEffect.EXPLOSION); + } else { + if (entityData.getEdge() != Edge.TOP || ((Obstacle) entityData.getEntity()) + .isDeadly()) + game.onGameOver(true); + else + checkEntityCollision(entityData, 0); + } + } + } + + private void checkEntityCollision(EntityCollisionData data, float xBounceFactor) { + switch (data.getEdge()) { + case TOP: + player.getMovement().y = 0; + player.setToTerrain(data.getEntity().getTopEdge()); + break; + case BOTTOM: + player.getMovement().y = 0; + player.setTopEdge(data.getEntity().getBottomEdge()); + break; + case LEFT: + player.getMovement().x *= xBounceFactor; + player.getPosition().x = data.getEntity().getLeftEdge() - player.RADIUS; + break; + case RIGHT: + player.getMovement().x *= xBounceFactor; + player.getPosition().x = data.getEntity().getRightEdge() + player.RADIUS; + break; + } + } + +} diff --git a/app/src/main/java/de/frajul/endlessroll/entities/collision/Edge.java b/app/src/main/java/de/frajul/endlessroll/entities/collision/Edge.java new file mode 100644 index 0000000..2fdf3d8 --- /dev/null +++ b/app/src/main/java/de/frajul/endlessroll/entities/collision/Edge.java @@ -0,0 +1,5 @@ +package de.frajul.endlessroll.entities.collision; + +public enum Edge { + LEFT, RIGHT, TOP, BOTTOM, NONE; +} \ No newline at end of file diff --git a/app/src/main/java/de/frajul/endlessroll/entities/collision/collisionData/EntityCollisionData.java b/app/src/main/java/de/frajul/endlessroll/entities/collision/collisionData/EntityCollisionData.java new file mode 100644 index 0000000..3cdb104 --- /dev/null +++ b/app/src/main/java/de/frajul/endlessroll/entities/collision/collisionData/EntityCollisionData.java @@ -0,0 +1,30 @@ +package de.frajul.endlessroll.entities.collision.collisionData; + +import de.frajul.endlessroll.entities.Entity; +import de.frajul.endlessroll.entities.collision.Edge; + +/** + * Created by Julian on 01.01.2016. + */ +public class EntityCollisionData { + + private Entity entity; + private Edge edge; + + public EntityCollisionData(Entity entity, Edge edge) { + this.entity = entity; + this.edge = edge; + } + + public boolean isCollision() { + return entity != null && edge != null; + } + + public Entity getEntity() { + return entity; + } + + public Edge getEdge() { + return edge; + } +} diff --git a/app/src/main/java/de/frajul/endlessroll/entities/collision/collisionData/ObstacleCollisionData.java b/app/src/main/java/de/frajul/endlessroll/entities/collision/collisionData/ObstacleCollisionData.java new file mode 100644 index 0000000..ff697a2 --- /dev/null +++ b/app/src/main/java/de/frajul/endlessroll/entities/collision/collisionData/ObstacleCollisionData.java @@ -0,0 +1,23 @@ +package de.frajul.endlessroll.entities.collision.collisionData; + +import java.util.List; + +/** + * Created by Julian on 04.01.2016. + */ +public class ObstacleCollisionData { + + private List collisions; + + public ObstacleCollisionData(List collisions) { + this.collisions = collisions; + } + + public boolean isCollision() { + return collisions.size() > 0; + } + + public List getCollisions() { + return collisions; + } +} diff --git a/app/src/main/java/de/frajul/endlessroll/entities/collision/collisionData/PlayerCollisionData.java b/app/src/main/java/de/frajul/endlessroll/entities/collision/collisionData/PlayerCollisionData.java new file mode 100644 index 0000000..da100c1 --- /dev/null +++ b/app/src/main/java/de/frajul/endlessroll/entities/collision/collisionData/PlayerCollisionData.java @@ -0,0 +1,71 @@ +package de.frajul.endlessroll.entities.collision.collisionData; + +/** + * Created by Julian on 05.12.2015. + */ +public class PlayerCollisionData { + + private EntityCollisionData terrainCollision; + private EntityCollisionData ceilingCollision; + private ObstacleCollisionData obstacleCollision; + private ToolCollisionData toolCollision; + private EntityCollisionData starCollision; + private EntityCollisionData energyCollision; + + public PlayerCollisionData(EntityCollisionData terrainCollision, EntityCollisionData ceilingCollision, ObstacleCollisionData obstacleCollision, ToolCollisionData toolCollision, EntityCollisionData starCollision, EntityCollisionData energyCollision) { + this.terrainCollision = terrainCollision; + this.ceilingCollision = ceilingCollision; + this.obstacleCollision = obstacleCollision; + this.toolCollision = toolCollision; + this.starCollision = starCollision; + this.energyCollision = energyCollision; + } + + public boolean isTerrainCollision() { + return terrainCollision.isCollision(); + } + + public EntityCollisionData getTerrainCollisionData() { + return terrainCollision; + } + + public boolean isCeilingCollision() { + return ceilingCollision.isCollision(); + } + + public EntityCollisionData getCeilingCollisionData() { + return ceilingCollision; + } + + public boolean isObstacleCollision() { + return obstacleCollision.isCollision(); + } + + public ObstacleCollisionData getObstacleCollisionData() { + return obstacleCollision; + } + + public boolean isToolCollision() { + return toolCollision.isCollision(); + } + + public ToolCollisionData getToolCollisionData() { + return toolCollision; + } + + public boolean isStarCollision() { + return starCollision.isCollision(); + } + + public EntityCollisionData getStarCollisionData() { + return starCollision; + } + + public boolean isEnergyCollision() { + return energyCollision.isCollision(); + } + + public EntityCollisionData getEnergyCollisionData() { + return energyCollision; + } +} diff --git a/app/src/main/java/de/frajul/endlessroll/entities/collision/collisionData/ToolCollisionData.java b/app/src/main/java/de/frajul/endlessroll/entities/collision/collisionData/ToolCollisionData.java new file mode 100644 index 0000000..1f02efa --- /dev/null +++ b/app/src/main/java/de/frajul/endlessroll/entities/collision/collisionData/ToolCollisionData.java @@ -0,0 +1,25 @@ +package de.frajul.endlessroll.entities.collision.collisionData; + +import de.frajul.endlessroll.entities.tools.Tool; + +import java.util.List; + +/** + * Created by Julian on 21.02.2016. + */ +public class ToolCollisionData { + + private List tools; + + public ToolCollisionData(List tools) { + this.tools = tools; + } + + public boolean isCollision() { + return tools.size() > 0; + } + + public List getTools() { + return tools; + } +} diff --git a/app/src/main/java/de/frajul/endlessroll/entities/collision/geometry/Circle.java b/app/src/main/java/de/frajul/endlessroll/entities/collision/geometry/Circle.java new file mode 100644 index 0000000..526d9f3 --- /dev/null +++ b/app/src/main/java/de/frajul/endlessroll/entities/collision/geometry/Circle.java @@ -0,0 +1,51 @@ +package de.frajul.endlessroll.entities.collision.geometry; + +import de.frajul.endlessroll.data.Vector; +import de.frajul.endlessroll.entities.Player; +import de.frajul.endlessroll.entities.collision.CollisionDetector; + +/** + * Created by Julian on 01.12.2015. + */ +public class Circle implements Geometry { + + private Vector center; + private float radius; + + public Circle(Player ball) { + this(new Vector(ball.getPosition()), ball.getWidth() / 2); + } + + public Circle(Vector center, float radius) { + this.center = center; + this.radius = radius; + } + + public Vector getCenter() { + return center; + } + + public float getRadius() { + return radius; + } + + public void setRadius(float radius) { + this.radius = radius; + } + + @Override + public boolean isCollisionWithCircle(Circle circle, CollisionDetector collisionDetector){ + return collisionDetector.isCircleCircleCollision(this, circle); + } + + @Override + public boolean isCollisionWithQuad(Quad quad, CollisionDetector collisionDetector){ + return collisionDetector.isCircleQuadCollision(this, quad); + } + + @Override + public boolean isCollisionWithTriangle(Triangle triangle, CollisionDetector collisionDetector){ + return collisionDetector.isCircleTriangleCollision(this, triangle); + } + +} diff --git a/app/src/main/java/de/frajul/endlessroll/entities/collision/geometry/Geometry.java b/app/src/main/java/de/frajul/endlessroll/entities/collision/geometry/Geometry.java new file mode 100644 index 0000000..f539fd2 --- /dev/null +++ b/app/src/main/java/de/frajul/endlessroll/entities/collision/geometry/Geometry.java @@ -0,0 +1,17 @@ +package de.frajul.endlessroll.entities.collision.geometry; + +import de.frajul.endlessroll.entities.collision.CollisionDetector; + +/** + * Created by Julian on 28.02.2016. + */ +public interface Geometry { + + boolean isCollisionWithCircle(Circle circle, CollisionDetector collisionDetector); + + boolean isCollisionWithQuad(Quad quad, CollisionDetector collisionDetector); + + boolean isCollisionWithTriangle(Triangle triangle, CollisionDetector collisionDetector); + + +} diff --git a/app/src/main/java/de/frajul/endlessroll/entities/collision/geometry/Quad.java b/app/src/main/java/de/frajul/endlessroll/entities/collision/geometry/Quad.java new file mode 100644 index 0000000..0791fb8 --- /dev/null +++ b/app/src/main/java/de/frajul/endlessroll/entities/collision/geometry/Quad.java @@ -0,0 +1,75 @@ +package de.frajul.endlessroll.entities.collision.geometry; + +import de.frajul.endlessroll.data.Vector; +import de.frajul.endlessroll.entities.collision.CollisionDetector; + +/** + * Created by Julian on 01.12.2015. + */ +public class Quad implements Geometry { + + protected Vector position; + protected float width, height; + + public Quad(Vector position, float width, float height) { + this.position = position; + this.width = width; + this.height = height; + } + + public float getRightEdge() { + return position.x + width / 2; + } + + public float getLeftEdge() { + return position.x - width / 2; + } + + public float getTopEdge() { + return position.y + height / 2; + } + + public float getBottomEdge() { + return position.y - height / 2; + } + + public Vector getPosition() { + return position; + } + + public void setPosition(Vector position) { + this.position = position; + } + + public float getWidth() { + return width; + } + + public void setWidth(float width) { + this.width = width; + } + + public float getHeight() { + return height; + } + + public void setHeight(float height) { + this.height = height; + } + + @Override + public boolean isCollisionWithCircle(Circle circle, CollisionDetector collisionDetector) { + return collisionDetector.isCircleQuadCollision(circle, this); + } + + @Override + public boolean isCollisionWithQuad(Quad quad, CollisionDetector collisionDetector) { + return collisionDetector.isQuadQuadCollision(this, quad); + } + + @Override + public boolean isCollisionWithTriangle(Triangle triangle, CollisionDetector collisionDetector) { + return collisionDetector.isQuadTriangleCollision(this, triangle); + } + +} diff --git a/app/src/main/java/de/frajul/endlessroll/entities/collision/geometry/Triangle.java b/app/src/main/java/de/frajul/endlessroll/entities/collision/geometry/Triangle.java new file mode 100644 index 0000000..ea6cdc1 --- /dev/null +++ b/app/src/main/java/de/frajul/endlessroll/entities/collision/geometry/Triangle.java @@ -0,0 +1,61 @@ +package de.frajul.endlessroll.entities.collision.geometry; + +import de.frajul.endlessroll.data.Vector; +import de.frajul.endlessroll.entities.collision.CollisionDetector; +import de.frajul.endlessroll.entities.tools.Ramp; + +/** + * Created by Julian on 01.12.2015. + */ +public class Triangle implements Geometry { + + //bottom right + private Vector vertex1; + //top right + private Vector vertex2; + //bottom left + private Vector vertex3; + + public Triangle(Ramp ramp) { + Vector vertex1 = new Vector(ramp.getRightEdge(), ramp.getBottomEdge()); + Vector vertex2 = new Vector(ramp.getRightEdge(), ramp.getTopEdge()); + Vector vertex3 = new Vector(ramp.getLeftEdge(), ramp.getBottomEdge()); + this.vertex1 = vertex1; + this.vertex2 = vertex2; + this.vertex3 = vertex3; + } + + public Triangle(Vector vertex1, Vector vertex2, Vector vertex3) { + this.vertex1 = vertex1; + this.vertex2 = vertex2; + this.vertex3 = vertex3; + } + + public Vector getVertex1() { + return vertex1; + } + + public Vector getVertex2() { + return vertex2; + } + + public Vector getVertex3() { + return vertex3; + } + + @Override + public boolean isCollisionWithCircle(Circle circle, CollisionDetector collisionDetector) { + return collisionDetector.isCircleTriangleCollision(circle, this); + } + + @Override + public boolean isCollisionWithQuad(Quad quad, CollisionDetector collisionDetector) { + return collisionDetector.isQuadTriangleCollision(quad, this); + } + + @Override + public boolean isCollisionWithTriangle(Triangle triangle, CollisionDetector collisionDetector) { + return collisionDetector.isTriangleTriangleCollision(this, triangle); + } + +} diff --git a/app/src/main/java/de/frajul/endlessroll/entities/particles/Particle.java b/app/src/main/java/de/frajul/endlessroll/entities/particles/Particle.java new file mode 100644 index 0000000..63c2175 --- /dev/null +++ b/app/src/main/java/de/frajul/endlessroll/entities/particles/Particle.java @@ -0,0 +1,111 @@ +package de.frajul.endlessroll.entities.particles; + +import java.util.Random; + +import de.frajul.endlessroll.data.Color; +import de.frajul.endlessroll.data.Vector; +import de.frajul.endlessroll.entities.Entity; +import de.frajul.endlessroll.entities.particles.attributes.attributeValues.Range; +import de.frajul.endlessroll.entities.particles.attributes.attributeValues.Timeline; +import de.frajul.endlessroll.entities.particles.attributes.attributeValues.TintTimeline; +import de.frajul.endlessroll.main.game.Timer; + +/** + * Created by Julian on 02.08.2016. + */ +public class Particle extends Entity { + + private Color color; + private Random random; + private boolean active; + private float maxLife; + private float passedLifetime; + + private Timeline scaleTimeline; + private Range scale; + private Timeline velocityTimeline; + private Range velocity; + private Timeline angleTimeline; + private Range angle; + private Timeline rotationTimeline; + private Range rotation; + private Timeline transparencyTimeline; + private TintTimeline tintTimeline; + private Timeline windTimeline; + private Range wind; + private Timeline gravityTimeline; + private Range gravity; + + public Particle(Random random) { + super(null, new Vector(), 1, 1); + this.random = random; + } + + public void activate(Vector position, float liveValue, ParticleData particleData) { + active = true; + passedLifetime = 0; + super.setPosition(position); + maxLife = particleData.getLife().createValue(random, liveValue); + scaleTimeline = particleData.getScaleTR().getTimeline(); + scale = particleData.getScaleTR().getRange().createNormalizedInstance(random); + velocityTimeline = particleData.getVelocityTR().getTimeline(); + velocity = particleData.getVelocityTR().getRange().createNormalizedInstance(random); + angleTimeline = particleData.getAngleTR().getTimeline(); + angle = particleData.getAngleTR().getRange().createNormalizedInstance(random); + rotationTimeline = particleData.getRotationTR().getTimeline(); + rotation = particleData.getRotationTR().getRange().createNormalizedInstance(random); + transparencyTimeline = particleData.getTransparencyT(); + tintTimeline = particleData.getTint(); + windTimeline = particleData.getWindTR().getTimeline(); + wind = particleData.getWindTR().getRange().createNormalizedInstance(random); + gravityTimeline = particleData.getGravityTR().getTimeline(); + gravity = particleData.getGravityTR().getRange().createNormalizedInstance(random); + } + + public void update(Timer timer) { + if (active) { + passedLifetime += timer.getFrameTimeSeconds(); + if (passedLifetime >= maxLife) + active = false; + float lifetimePercent = passedLifetime / maxLife; + setScale(scale.createValue(random, scaleTimeline.getValueAtTime(lifetimePercent))); + setMovement( + velocity.createValue(random, velocityTimeline.getValueAtTime(lifetimePercent)), + angle.createValue(random, angleTimeline.getValueAtTime(lifetimePercent)), + wind.createValue(random, windTimeline.getValueAtTime(lifetimePercent)), + gravity.createValue(random, gravityTimeline.getValueAtTime(lifetimePercent))); + super.setRotation(-rotation + .createValue(random, rotationTimeline.getValueAtTime(lifetimePercent))); + super.setAlpha(transparencyTimeline.getValueAtTime(lifetimePercent)); + setColor(tintTimeline.getValueAtTime(lifetimePercent)); + } + } + + private void setScale(float scale) { + super.setWidth(scale * ParticleSystem.TRANSFER_VALUE); + super.setHeight(scale * ParticleSystem.TRANSFER_VALUE); + } + + private void setMovement(float velocity, float angle, float windStrength, float gravityStrength) { + float radians = (float) Math.toRadians(angle); + Vector normalMovement = new Vector(); + normalMovement.setX((float) Math.cos(radians)); + normalMovement.setY((float) Math.sin(radians)); + normalMovement.mul(velocity * ParticleSystem.TRANSFER_VALUE); + normalMovement.translate(windStrength * ParticleSystem.TRANSFER_VALUE, + gravityStrength * ParticleSystem.TRANSFER_VALUE); + super.setMovement(normalMovement); + } + + public boolean isActive() { + return active; + } + + public void setColor(Color color) { + this.color = color; + } + + public Color getColor() { + return color; + } +} diff --git a/app/src/main/java/de/frajul/endlessroll/entities/particles/ParticleData.java b/app/src/main/java/de/frajul/endlessroll/entities/particles/ParticleData.java new file mode 100644 index 0000000..dda6491 --- /dev/null +++ b/app/src/main/java/de/frajul/endlessroll/entities/particles/ParticleData.java @@ -0,0 +1,70 @@ +package de.frajul.endlessroll.entities.particles; + +import de.frajul.endlessroll.entities.particles.attributes.attributeValues.Range; +import de.frajul.endlessroll.entities.particles.attributes.attributeValues.Timeline; +import de.frajul.endlessroll.entities.particles.attributes.attributeValues.TimelineRange; +import de.frajul.endlessroll.entities.particles.attributes.attributeValues.TintTimeline; + +/** + * Created by Julian on 03.08.2016. + */ +public class ParticleData { + + private Range life; + private TimelineRange scaleTR; + private TimelineRange velocityTR; + private TimelineRange angleTR; + private TimelineRange rotationTR; + private Timeline transparencyT; + private TintTimeline tint; + private TimelineRange windTR; + private TimelineRange gravityTR; + + public ParticleData(Range life, TimelineRange scaleTR, TimelineRange velocityTR, TimelineRange angleTR, TimelineRange rotationTR, Timeline transparencyT, TintTimeline tint, TimelineRange windTR, TimelineRange gravityTR) { + this.life = life; + this.scaleTR = scaleTR; + this.velocityTR = velocityTR; + this.angleTR = angleTR; + this.rotationTR = rotationTR; + this.transparencyT = transparencyT; + this.tint = tint; + this.windTR = windTR; + this.gravityTR = gravityTR; + } + + public Range getLife() { + return life; + } + + public TimelineRange getScaleTR() { + return scaleTR; + } + + public TimelineRange getVelocityTR() { + return velocityTR; + } + + public TimelineRange getAngleTR() { + return angleTR; + } + + public TimelineRange getRotationTR() { + return rotationTR; + } + + public Timeline getTransparencyT() { + return transparencyT; + } + + public TintTimeline getTint() { + return tint; + } + + public TimelineRange getWindTR() { + return windTR; + } + + public TimelineRange getGravityTR() { + return gravityTR; + } +} diff --git a/app/src/main/java/de/frajul/endlessroll/entities/particles/ParticleEffect.java b/app/src/main/java/de/frajul/endlessroll/entities/particles/ParticleEffect.java new file mode 100644 index 0000000..7e1f616 --- /dev/null +++ b/app/src/main/java/de/frajul/endlessroll/entities/particles/ParticleEffect.java @@ -0,0 +1,229 @@ +package de.frajul.endlessroll.entities.particles; + +import de.frajul.endlessroll.entities.particles.attributes.attributeValues.Options; +import de.frajul.endlessroll.entities.particles.attributes.attributeValues.Range; +import de.frajul.endlessroll.entities.particles.attributes.attributeValues.SpawnShape; +import de.frajul.endlessroll.entities.particles.attributes.attributeValues.Timeline; +import de.frajul.endlessroll.entities.particles.attributes.attributeValues.TimelineRange; +import de.frajul.endlessroll.entities.particles.attributes.attributeValues.TintTimeline; +import de.frajul.endlessroll.entities.textures.Texture; +import de.frajul.endlessroll.main.game.Timer; + +import java.util.ArrayList; +import java.util.Collections; +import java.util.List; +import java.util.Random; + +/** + * Created by Julian on 05.08.2016. + */ +public class ParticleEffect { + + private TimelineRange life; + //Particle Timeline + private TimelineRange scale; + private TimelineRange velocity; + private TimelineRange angle; + private TimelineRange rotation; + private Timeline transparency; + private TintTimeline tint; + private TimelineRange wind; + private TimelineRange gravity; + + //Source Timeline + private Range delay; + private Range duration; + private TimelineRange emission; + private Range xOffset; + private Range yOffset; + private SpawnShape.Shape spawnShape; + private TimelineRange spawnWidth; + private TimelineRange spawnHeight; + + private Options options; + private Texture texture; + private String textureName; + + private Random random; + private List sources = Collections.synchronizedList(new ArrayList()); + + public ParticleEffect() { + this.random = new Random(); + } + + public void update(Timer timer) { + synchronized (sources) { + for (ParticleSource source : sources) + source.update(timer); + } + } + + public ParticleData createParticleData() { + return new ParticleData(life.getRange(), scale, velocity, angle, rotation, transparency, tint, wind , gravity); + } + + public Random getRandom() { + return random; + } + + public void addSource(ParticleSource source) { + sources.add(source); + } + + public void setDelay(Range delay) { + this.delay = delay; + } + + public void setDuration(Range duration) { + this.duration = duration; + } + + public void setEmission(TimelineRange emission) { + this.emission = emission; + } + + public void setLife(TimelineRange life) { + this.life = life; + } + + public void setxOffset(Range xOffset) { + this.xOffset = xOffset; + } + + public void setyOffset(Range yOffset) { + this.yOffset = yOffset; + } + + public void setSpawnShape(SpawnShape.Shape spawnShape) { + this.spawnShape = spawnShape; + } + + public void setSpawnWidth(TimelineRange spawnWidth) { + this.spawnWidth = spawnWidth; + } + + public void setSpawnHeight(TimelineRange spawnHeight) { + this.spawnHeight = spawnHeight; + } + + public void setScale(TimelineRange scale) { + this.scale = scale; + } + + public void setVelocity(TimelineRange velocity) { + this.velocity = velocity; + } + + public void setAngle(TimelineRange angle) { + this.angle = angle; + } + + public void setRotation(TimelineRange rotation) { + this.rotation = rotation; + } + + public void setWind(TimelineRange wind) { + this.wind = wind; + } + + public void setGravity(TimelineRange gravity) { + this.gravity = gravity; + } + + public void setTint(TintTimeline tint) { + this.tint = tint; + } + + public void setTransparency(Timeline transparency) { + this.transparency = transparency; + } + + public Timeline getTransparency() { + return transparency; + } + + public TintTimeline getTint() { + return tint; + } + + public void setOptions(Options options) { + this.options = options; + } + + public void setTexture(Texture texture) { + this.texture = texture; + } + + public void setTextureName(String textureName) { + this.textureName = textureName; + } + + public String getTextureName() { + return textureName; + } + + public Texture getTexture() { + return texture; + } + + public Range getDelay() { + return delay; + } + + public Range getDuration() { + return duration; + } + + public TimelineRange getEmission() { + return emission; + } + + public Options getOptions() { + return options; + } + + public TimelineRange getWind() { + return wind; + } + + public TimelineRange getGravity() { + return gravity; + } + + public Range getxOffset() { + return xOffset; + } + + public Range getyOffset() { + return yOffset; + } + + public synchronized List getSources() { + return sources; + } + + public TimelineRange getLife() { + return life; + } + + public SpawnShape.Shape getSpawnShape() { + return spawnShape; + } + + public TimelineRange getSpawnHeight() { + return spawnHeight; + } + + public void deleteSources() { + synchronized (sources) { + for (ParticleSource source : sources) + source.kill(); + sources.clear(); + } + } + + public TimelineRange getSpawnWidth() { + return spawnWidth; + } +} + diff --git a/app/src/main/java/de/frajul/endlessroll/entities/particles/ParticleReader.java b/app/src/main/java/de/frajul/endlessroll/entities/particles/ParticleReader.java new file mode 100644 index 0000000..381ce89 --- /dev/null +++ b/app/src/main/java/de/frajul/endlessroll/entities/particles/ParticleReader.java @@ -0,0 +1,163 @@ +package de.frajul.endlessroll.entities.particles; + +import android.content.Context; + +import de.frajul.endlessroll.entities.particles.attributes.Attribute; +import de.frajul.endlessroll.entities.particles.attributes.AttributeValueReader; +import de.frajul.endlessroll.entities.particles.attributes.ParticleAttributeType; +import de.frajul.endlessroll.entities.particles.attributes.attributeValues.ImagePath; +import de.frajul.endlessroll.entities.particles.attributes.attributeValues.Options; +import de.frajul.endlessroll.entities.particles.attributes.attributeValues.ParticleAttributeValueType; +import de.frajul.endlessroll.entities.particles.attributes.attributeValues.Range; +import de.frajul.endlessroll.entities.particles.attributes.attributeValues.SpawnShape; +import de.frajul.endlessroll.entities.particles.attributes.attributeValues.Timeline; +import de.frajul.endlessroll.entities.particles.attributes.attributeValues.TimelineRange; +import de.frajul.endlessroll.entities.particles.attributes.attributeValues.TintTimeline; + +import java.io.BufferedReader; +import java.io.InputStream; +import java.io.InputStreamReader; +import java.util.ArrayList; +import java.util.List; + +/** + * Created by Julian on 02.08.2016. + */ +public class ParticleReader { + + private Context context; + private AttributeValueReader attributeValueReader; + + private List attributes; + private Attribute currentAttribute; + + public ParticleReader(Context context) { + this.context = context; + attributeValueReader = new AttributeValueReader(); + } + + /** + * reads ParticleEffect from *.pe files + * !Ignores COUNT, LIFE_OFFSET! + */ + public ParticleEffect read(String filename) throws Exception { + try { + attributes = new ArrayList<>(); + currentAttribute = null; + InputStream is = context.getAssets().open(filename); + BufferedReader reader = new BufferedReader(new InputStreamReader(is)); + String line; + while ((line = reader.readLine()) != null) { + line = line.trim(); + handleLine(line); + } + reader.close(); + return createParticleEffect(); + } catch (Exception e) { + throw new Exception("Could not read particleFile: ", e); + } + } + + private void handleLine(String line) throws Exception { + if (line.startsWith("- ")) { + Attribute attrib = ParticleAttributeType.getByInFileTitle(line).createInstance(); + attributes.add(attrib); + currentAttribute = attrib; + } else if (currentAttribute != null) + attributeValueReader.addValueForAttribute(currentAttribute, line); + } + + private ParticleEffect createParticleEffect() throws Exception { + ParticleEffect effect = new ParticleEffect(); + Timeline timeline = null; + Range range = null; + for (Attribute attribute : attributes) { + switch (attribute.getType()) { + case DELAY: + effect.setDelay((Range) attribute.get(ParticleAttributeValueType.RANGE)); + break; + case DURATION: + effect.setDuration((Range) attribute.get(ParticleAttributeValueType.RANGE)); + break; + case COUNT: + break; + case EMISSION: + timeline = (Timeline) attribute.get(ParticleAttributeValueType.TIMELINE); + range = (Range) attribute.get(ParticleAttributeValueType.RANGE); + effect.setEmission(new TimelineRange(timeline, range)); + break; + case LIFE: + timeline = (Timeline) attribute.get(ParticleAttributeValueType.TIMELINE); + range = (Range) attribute.get(ParticleAttributeValueType.RANGE); + effect.setLife(new TimelineRange(timeline, range)); + break; + case LIFE_OFFSET: + break; + case X_OFFSET: + effect.setxOffset((Range) attribute.get(ParticleAttributeValueType.RANGE)); + break; + case Y_OFFSET: + effect.setyOffset((Range) attribute.get(ParticleAttributeValueType.RANGE)); + break; + case SPAWN_SHAPE: + effect.setSpawnShape(((SpawnShape) attribute.get(ParticleAttributeValueType.SPAWN_SHAPE)).getShape()); + break; + case SPAWN_WIDTH: + timeline = (Timeline) attribute.get(ParticleAttributeValueType.TIMELINE); + range = (Range) attribute.get(ParticleAttributeValueType.RANGE); + effect.setSpawnWidth(new TimelineRange(timeline, range)); + break; + case SPAWN_HEIGHT: + timeline = (Timeline) attribute.get(ParticleAttributeValueType.TIMELINE); + range = (Range) attribute.get(ParticleAttributeValueType.RANGE); + effect.setSpawnHeight(new TimelineRange(timeline, range)); + break; + case SCALE: + timeline = (Timeline) attribute.get(ParticleAttributeValueType.TIMELINE); + range = (Range) attribute.get(ParticleAttributeValueType.RANGE); + effect.setScale(new TimelineRange(timeline, range)); + break; + case VELOCITY: + timeline = (Timeline) attribute.get(ParticleAttributeValueType.TIMELINE); + range = (Range) attribute.get(ParticleAttributeValueType.RANGE); + effect.setVelocity(new TimelineRange(timeline, range)); + break; + case ANGLE: + timeline = (Timeline) attribute.get(ParticleAttributeValueType.TIMELINE); + range = (Range) attribute.get(ParticleAttributeValueType.RANGE); + effect.setAngle(new TimelineRange(timeline, range)); + break; + case ROTATION: + timeline = (Timeline) attribute.get(ParticleAttributeValueType.TIMELINE); + range = (Range) attribute.get(ParticleAttributeValueType.RANGE); + effect.setRotation(new TimelineRange(timeline, range)); + break; + case WIND: + timeline = (Timeline) attribute.get(ParticleAttributeValueType.TIMELINE); + range = (Range) attribute.get(ParticleAttributeValueType.RANGE); + effect.setWind(new TimelineRange(timeline, range)); + break; + case GRAVITY: + timeline = (Timeline) attribute.get(ParticleAttributeValueType.TIMELINE); + range = (Range) attribute.get(ParticleAttributeValueType.RANGE); + effect.setGravity(new TimelineRange(timeline, range)); + break; + case TINT: + effect.setTint((TintTimeline) attribute.get(ParticleAttributeValueType.TINT_TIMELINE)); + break; + case TRANSPARENCY: + timeline = (Timeline) attribute.get(ParticleAttributeValueType.TIMELINE); + effect.setTransparency(timeline); + break; + case OPTIONS: + effect.setOptions((Options) attribute.get(ParticleAttributeValueType.OPTIONS)); + break; + case IMAGE_PATH: + String path = ((ImagePath) attribute.get(ParticleAttributeValueType.IMAGE_PATH)).getImagePath(); + effect.setTextureName(path); + break; + } + } + return effect; + } +} diff --git a/app/src/main/java/de/frajul/endlessroll/entities/particles/ParticleSource.java b/app/src/main/java/de/frajul/endlessroll/entities/particles/ParticleSource.java new file mode 100644 index 0000000..a21a254 --- /dev/null +++ b/app/src/main/java/de/frajul/endlessroll/entities/particles/ParticleSource.java @@ -0,0 +1,176 @@ +package de.frajul.endlessroll.entities.particles; + +import android.util.Log; + +import java.util.ArrayList; +import java.util.Iterator; +import java.util.List; +import java.util.Random; + +import de.frajul.endlessroll.data.Vector; +import de.frajul.endlessroll.entities.particles.attributes.attributeValues.SpawnShape; +import de.frajul.endlessroll.main.GameLog; +import de.frajul.endlessroll.main.game.Timer; +import de.frajul.endlessroll.rendering.Lock; + +/** + * Created by Julian on 02.08.2016. + */ +public class ParticleSource { + + private Vector position; + private ParticleEffect effect; + private Random random; + + private boolean delayManuallySet = false; + + private boolean alife; + private float currentDelay; + private float lifePercent; + private float maxTime = -1; + private float passedTime; + private float emittPause; + private float passedEmittPause; + private float passedSecond; + + private Vector spawnSize = null; + private ParticleData particleData; + private List activeParticles = new ArrayList<>(); + private List inactiveParticles = new ArrayList<>(); + private Lock activeParticleLock = new Lock(); + + public ParticleSource(Vector position, ParticleEffect effect) { + this.position = position; + this.effect = effect; + random = effect.getRandom(); + effect.addSource(this); + } + + public void start() { + alife = true; + if (!delayManuallySet) + currentDelay = effect.getDelay().createValue(random, 0); + maxTime = effect.getDuration().createValue(random, 0) + currentDelay; + passedTime = 0; + emittPause = calcEmittPause(); + passedEmittPause = 0; + passedSecond = 0; + lifePercent = 0; + } + + public void update(Timer timer) { + if (alife) { + passedTime += timer.getFrameTimeSeconds(); + lifePercent = passedTime / maxTime; + + if (passedTime >= currentDelay) { + passedEmittPause += timer.getFrameTimeSeconds(); + while (passedEmittPause >= emittPause) { + passedEmittPause -= emittPause; + emitt(); + } + + passedSecond += timer.getFrameTimeSeconds(); + if (passedSecond >= 1000) { + passedSecond -= 1000; + calcEmittPause(); + } + } + if (passedTime >= maxTime) + die(); + } + updateParticles(timer); + } + + private void updateParticles(Timer timer) { + activeParticleLock.lock(); + Iterator iter = activeParticles.iterator(); + while (iter.hasNext()) { + Particle particle = iter.next(); + particle.update(timer); + if (!particle.isActive()) { + inactiveParticles.add(particle); + iter.remove(); + } else { + particle.move( + new Vector(particle.getMovement()).mul(timer.getFrameTimeSeconds() / 1000)); + } + } + activeParticleLock.unlock(); + } + + private void die() { + alife = false; + if (effect.getOptions().isContinuous()) + start(); + } + + public void kill() { + alife = false; + } + + public void emitt() { + if (particleData == null) + particleData = effect.createParticleData(); + float xOff = effect.getxOffset().createValue(random, 0) * ParticleSystem.TRANSFER_VALUE; + float yOff = effect.getyOffset().createValue(random, 0) * ParticleSystem.TRANSFER_VALUE; + if (effect.getSpawnShape() == SpawnShape.Shape.SQUARE || effect.getSpawnShape() == SpawnShape.Shape.LINE) { + float width, height; + if (spawnSize == null) { + width = effect.getSpawnWidth().getRange().createValue(random, + effect.getSpawnWidth().getTimeline().getValueAtTime(lifePercent)); + height = effect.getSpawnHeight().getRange().createValue(random, + effect.getSpawnHeight().getTimeline().getValueAtTime(lifePercent)); + } else { + width = spawnSize.getX() / ParticleSystem.TRANSFER_VALUE; + height = spawnSize.getY() / ParticleSystem.TRANSFER_VALUE; + } + xOff += (random.nextFloat() * width - width * 0.5f) * ParticleSystem.TRANSFER_VALUE; + yOff += (random.nextFloat() * height - height * 0.5f) * ParticleSystem.TRANSFER_VALUE; + } + setUpParticle(new Vector(position).translate(xOff, yOff)); + } + + private Particle setUpParticle(Vector position) { + Particle particle; + if (inactiveParticles.size() > 0) + particle = inactiveParticles.remove(0); + else + particle = new Particle(random); + + particle.activate(position, effect.getLife().getTimeline().getValueAtTime(lifePercent), + particleData); + activeParticleLock.lock(); + activeParticles.add(particle); + activeParticleLock.unlock(); + return particle; + } + + private float calcEmittPause() { + float emittedPerSecond = effect.getEmission().getRange().createValue(random, + effect.getEmission().getTimeline().getValueAtTime(passedTime / maxTime)); + return 1000 / emittedPerSecond; + } + + public Lock getActiveParticleLock() { + return activeParticleLock; + } + + public List getActiveParticles() { + return activeParticles; + } + + public void setSpawnSize(Vector spawnSize) { + this.spawnSize = spawnSize; + } + + public void setPosition(Vector position) { + this.position = position; + } + + public void setDelayMS(float delay) { + currentDelay = delay; + delayManuallySet = true; + } + +} diff --git a/app/src/main/java/de/frajul/endlessroll/entities/particles/ParticleSystem.java b/app/src/main/java/de/frajul/endlessroll/entities/particles/ParticleSystem.java new file mode 100644 index 0000000..a00df18 --- /dev/null +++ b/app/src/main/java/de/frajul/endlessroll/entities/particles/ParticleSystem.java @@ -0,0 +1,69 @@ +package de.frajul.endlessroll.entities.particles; + +import android.content.Context; + +import de.frajul.endlessroll.entities.textures.TextureLoader; +import de.frajul.endlessroll.main.game.Timer; + +/** + * Created by Julian on 02.08.2016. + */ +public class ParticleSystem { + + public static final float TRANSFER_VALUE = 0.002f; + public final ParticleEffect stasis; + public final ParticleEffect testFire; + public final ParticleEffect colorChange; + public final ParticleEffect explosion; + public final ParticleEffect magnet; + public final ParticleEffect starCollect; + public final ParticleEffect energyCollect; + public final ParticleEffect firework; + public final ParticleEffect superPower; + private ParticleEffect[] effects; + + private TextureLoader textureLoader; + + public ParticleSystem(Context context) throws Exception { + this.textureLoader = new TextureLoader(context); + ParticleReader reader = new ParticleReader(context); + stasis = reader.read("particleEffects/stasis.pe"); + testFire = reader.read("particleEffects/test_fire.pe"); + colorChange = reader.read("particleEffects/colorChange.pe"); + explosion = reader.read("particleEffects/explosion.pe"); + magnet = reader.read("particleEffects/magnet.pe"); + starCollect = reader.read("particleEffects/collectStar.pe"); + energyCollect = reader.read("particleEffects/collectEnergy.pe"); + firework = reader.read("particleEffects/firework.pe"); + superPower = reader.read("particleEffects/superPower.pe"); + + effects = new ParticleEffect[]{stasis, testFire,colorChange, explosion, magnet, starCollect, energyCollect, firework, superPower}; + } + + public void update(Timer timer) { + synchronized (effects) { + for (ParticleEffect effect : effects) + effect.update(timer); + } + } + + public void loadTextures() throws Exception { + synchronized (effects) { + for (ParticleEffect effect : effects) + effect.setTexture( + textureLoader.loadTexture("particleEffects/" + effect.getTextureName())); + } + } + + public void deleteAllSources() { + synchronized (effects) { + for (ParticleEffect effect : effects) { + effect.deleteSources(); + } + } + } + + public synchronized ParticleEffect[] getEffects() { + return effects; + } +} diff --git a/app/src/main/java/de/frajul/endlessroll/entities/particles/attributes/Attribute.java b/app/src/main/java/de/frajul/endlessroll/entities/particles/attributes/Attribute.java new file mode 100644 index 0000000..072a599 --- /dev/null +++ b/app/src/main/java/de/frajul/endlessroll/entities/particles/attributes/Attribute.java @@ -0,0 +1,33 @@ +package de.frajul.endlessroll.entities.particles.attributes; + +import de.frajul.endlessroll.entities.particles.attributes.attributeValues.ParticleAttributeValue; +import de.frajul.endlessroll.entities.particles.attributes.attributeValues.ParticleAttributeValueType; + +import java.util.ArrayList; +import java.util.List; + +/** + * Created by Julian on 02.08.2016. + */ +public class Attribute { + + private ParticleAttributeType type; + private List values = new ArrayList<>(); + + public Attribute(ParticleAttributeType type, ParticleAttributeValueType... valueTypes) { + this.type = type; + for (ParticleAttributeValueType valueType : valueTypes) + values.add(valueType.createInstance()); + } + + public ParticleAttributeValue get(ParticleAttributeValueType valueType) throws Exception { + for (ParticleAttributeValue v : values) + if (v.getType() == valueType) + return v; + throw new Exception("ParticleAttributeValue with type: " + valueType + " does not exist in Attribute " + type); + } + + public ParticleAttributeType getType() { + return type; + } +} diff --git a/app/src/main/java/de/frajul/endlessroll/entities/particles/attributes/AttributeValueReader.java b/app/src/main/java/de/frajul/endlessroll/entities/particles/attributes/AttributeValueReader.java new file mode 100644 index 0000000..c9f774a --- /dev/null +++ b/app/src/main/java/de/frajul/endlessroll/entities/particles/attributes/AttributeValueReader.java @@ -0,0 +1,77 @@ +package de.frajul.endlessroll.entities.particles.attributes; + +import de.frajul.endlessroll.entities.particles.attributes.attributeValues.ImagePath; +import de.frajul.endlessroll.entities.particles.attributes.attributeValues.Options; +import de.frajul.endlessroll.entities.particles.attributes.attributeValues.ParticleAttributeValueType; +import de.frajul.endlessroll.entities.particles.attributes.attributeValues.Range; +import de.frajul.endlessroll.entities.particles.attributes.attributeValues.SpawnShape; +import de.frajul.endlessroll.entities.particles.attributes.attributeValues.Timeline; +import de.frajul.endlessroll.entities.particles.attributes.attributeValues.TintTimeline; + +/** + * Created by Julian on 02.08.2016. + */ +public class AttributeValueReader { + + public void addValueForAttribute(Attribute attribute, String line) throws Exception { + //RANGE + if (line.startsWith("lowMin:") || line.startsWith("min:")) + ((Range) attribute.get(ParticleAttributeValueType.RANGE)).setLowMin(parseFloat(line)); + else if (line.startsWith("lowMax:") || line.startsWith("max:")) + ((Range) attribute.get(ParticleAttributeValueType.RANGE)).setLowMax(parseFloat(line)); + else if (line.startsWith("highMin:")) + ((Range) attribute.get(ParticleAttributeValueType.RANGE)).setHighMin(parseFloat(line)); + else if (line.startsWith("highMax:")) + ((Range) attribute.get(ParticleAttributeValueType.RANGE)).setHighMax(parseFloat(line)); + //TIMELINE + else if (!line.startsWith("scalingCount") && line.startsWith("scaling")) + ((Timeline) attribute.get(ParticleAttributeValueType.TIMELINE)).setValueOfPoint(parseTimeLineIndex("scaling", line), parseFloat(line)); + else if (!line.startsWith("timelineCount") && line.startsWith("timeline") && attribute.getType() != ParticleAttributeType.TINT) + ((Timeline) attribute.get(ParticleAttributeValueType.TIMELINE)).setTimeOfPoint(parseTimeLineIndex("timeline", line), parseFloat(line)); + //TINT_TIMELINE + else if (!line.startsWith("colorsCount") && line.startsWith("colors")) { + int index = parseTimeLineIndex("colors", line); + ((TintTimeline) attribute.get(ParticleAttributeValueType.TINT_TIMELINE)).setValueOfPoint((int) (index / 3f), index % 3, parseFloat(line)); + } else if (!line.startsWith("timelineCount") && line.startsWith("timeline") && attribute.getType() == ParticleAttributeType.TINT) + ((TintTimeline) attribute.get(ParticleAttributeValueType.TINT_TIMELINE)).setTimeOfPoint(parseTimeLineIndex("timeline", line), parseFloat(line)); + //SPAWN_SHAPE + else if (line.startsWith("shape:")) + ((SpawnShape) attribute.get(ParticleAttributeValueType.SPAWN_SHAPE)).setShape(SpawnShape.Shape.byName(parseString(line))); + //OPTIONS + else if (line.startsWith("attached:")) + ((Options) attribute.get(ParticleAttributeValueType.OPTIONS)).setAttached(parseBoolean(line)); + else if (line.startsWith("continuous:")) + ((Options) attribute.get(ParticleAttributeValueType.OPTIONS)).setContinuous(parseBoolean(line)); + else if (line.startsWith("aligned:")) + ((Options) attribute.get(ParticleAttributeValueType.OPTIONS)).setAligned(parseBoolean(line)); + else if (line.startsWith("additive:")) + ((Options) attribute.get(ParticleAttributeValueType.OPTIONS)).setAdditive(parseBoolean(line)); + else if (line.startsWith("behind:")) + ((Options) attribute.get(ParticleAttributeValueType.OPTIONS)).setBehind(parseBoolean(line)); + else if (line.startsWith("premultipliedAlpha:")) + ((Options) attribute.get(ParticleAttributeValueType.OPTIONS)).setPremultipliedAlpha(parseBoolean(line)); + //IMAGE PATH + else if (attribute.getType() == ParticleAttributeType.IMAGE_PATH) + ((ImagePath) attribute.get(ParticleAttributeValueType.IMAGE_PATH)).setImagePath(line); + } + + private int parseTimeLineIndex(String start, String line) throws Exception { + String asString = line.split(start)[1].split(":")[0]; + return Integer.parseInt(asString); + } + + private float parseFloat(String line) throws Exception { + String asString = line.split(" ")[1]; + return Float.parseFloat(asString); + } + + private String parseString(String line) throws Exception { + return line.split(" ")[1]; + } + + private boolean parseBoolean(String line) throws Exception { + String asString = line.split(" ")[1]; + return Boolean.parseBoolean(asString); + } + +} diff --git a/app/src/main/java/de/frajul/endlessroll/entities/particles/attributes/ParticleAttributeType.java b/app/src/main/java/de/frajul/endlessroll/entities/particles/attributes/ParticleAttributeType.java new file mode 100644 index 0000000..ab6bf97 --- /dev/null +++ b/app/src/main/java/de/frajul/endlessroll/entities/particles/attributes/ParticleAttributeType.java @@ -0,0 +1,55 @@ +package de.frajul.endlessroll.entities.particles.attributes; + +import de.frajul.endlessroll.entities.particles.attributes.attributeValues.ParticleAttributeValueType; + +public enum ParticleAttributeType { + NONE(""), + DELAY("Delay", ParticleAttributeValueType.RANGE), + DURATION("Duration", ParticleAttributeValueType.RANGE), + COUNT("Count", ParticleAttributeValueType.RANGE), + EMISSION("Emission", ParticleAttributeValueType.RANGE, ParticleAttributeValueType.TIMELINE), + LIFE("Life", ParticleAttributeValueType.RANGE, ParticleAttributeValueType.TIMELINE), + LIFE_OFFSET("Life Offset", ParticleAttributeValueType.RANGE, ParticleAttributeValueType.TIMELINE), + X_OFFSET("X Offset", ParticleAttributeValueType.RANGE, ParticleAttributeValueType.TIMELINE), + Y_OFFSET("Y Offset", ParticleAttributeValueType.RANGE, ParticleAttributeValueType.TIMELINE), + SPAWN_SHAPE("Spawn Shape", ParticleAttributeValueType.SPAWN_SHAPE), + SPAWN_WIDTH("Spawn Width", ParticleAttributeValueType.RANGE, ParticleAttributeValueType.TIMELINE), + SPAWN_HEIGHT("Spawn Height", ParticleAttributeValueType.RANGE, ParticleAttributeValueType.TIMELINE), + SCALE("Scale", ParticleAttributeValueType.RANGE, ParticleAttributeValueType.TIMELINE), + VELOCITY("Velocity", ParticleAttributeValueType.RANGE, ParticleAttributeValueType.TIMELINE), + ANGLE("Angle", ParticleAttributeValueType.RANGE, ParticleAttributeValueType.TIMELINE), + ROTATION("Rotation", ParticleAttributeValueType.RANGE, ParticleAttributeValueType.TIMELINE), + WIND("Wind", ParticleAttributeValueType.RANGE, ParticleAttributeValueType.TIMELINE), + GRAVITY("Gravity", ParticleAttributeValueType.RANGE, ParticleAttributeValueType.TIMELINE), + TINT("Tint", ParticleAttributeValueType.TINT_TIMELINE), + TRANSPARENCY("Transparency", ParticleAttributeValueType.RANGE, ParticleAttributeValueType.TIMELINE), + OPTIONS("Options", ParticleAttributeValueType.OPTIONS), + IMAGE_PATH("Image Path", ParticleAttributeValueType.IMAGE_PATH); + + private String name; + private ParticleAttributeValueType[] valueTypes; + + ParticleAttributeType(String name, ParticleAttributeValueType... valueTypes) { + this.name = name; + this.valueTypes = valueTypes; + } + + private String getInFileTitle() { + return "- " + name + " -"; + } + + public static ParticleAttributeType getByInFileTitle(String title) throws Exception { + for (ParticleAttributeType setting : values()) { + if (setting != NONE && setting.getInFileTitle().equals(title)) + return setting; + } + throw new Exception("Could not find ParticleAttributeType by title: " + title); + } + + public Attribute createInstance() throws Exception { + if (this == NONE) + throw new Exception("Cannot create Instance from Attribute NONE"); + return new Attribute(this, valueTypes); + } + +} \ No newline at end of file diff --git a/app/src/main/java/de/frajul/endlessroll/entities/particles/attributes/attributeValues/ImagePath.java b/app/src/main/java/de/frajul/endlessroll/entities/particles/attributes/attributeValues/ImagePath.java new file mode 100644 index 0000000..b697bdc --- /dev/null +++ b/app/src/main/java/de/frajul/endlessroll/entities/particles/attributes/attributeValues/ImagePath.java @@ -0,0 +1,21 @@ +package de.frajul.endlessroll.entities.particles.attributes.attributeValues; + +/** + * Created by Julian on 02.08.2016. + */ +public class ImagePath extends ParticleAttributeValue { + + private String imagePath; + + public ImagePath() { + super(ParticleAttributeValueType.IMAGE_PATH); + } + + public String getImagePath() { + return imagePath; + } + + public void setImagePath(String imagePath) { + this.imagePath = imagePath; + } +} diff --git a/app/src/main/java/de/frajul/endlessroll/entities/particles/attributes/attributeValues/Options.java b/app/src/main/java/de/frajul/endlessroll/entities/particles/attributes/attributeValues/Options.java new file mode 100644 index 0000000..11c5190 --- /dev/null +++ b/app/src/main/java/de/frajul/endlessroll/entities/particles/attributes/attributeValues/Options.java @@ -0,0 +1,66 @@ +package de.frajul.endlessroll.entities.particles.attributes.attributeValues; + +/** + * Created by Julian on 02.08.2016. + */ +public class Options extends ParticleAttributeValue { + + private boolean attached; + private boolean continuous; + private boolean aligned; + private boolean additive; + private boolean behind; + private boolean premultipliedAlpha; + + public Options() { + super(ParticleAttributeValueType.OPTIONS); + } + + public boolean isAttached() { + return attached; + } + + public void setAttached(boolean attached) { + this.attached = attached; + } + + public boolean isContinuous() { + return continuous; + } + + public void setContinuous(boolean continuous) { + this.continuous = continuous; + } + + public boolean isAligned() { + return aligned; + } + + public void setAligned(boolean aligned) { + this.aligned = aligned; + } + + public boolean isAdditive() { + return additive; + } + + public void setAdditive(boolean additive) { + this.additive = additive; + } + + public boolean isBehind() { + return behind; + } + + public void setBehind(boolean behind) { + this.behind = behind; + } + + public boolean isPremultipliedAlpha() { + return premultipliedAlpha; + } + + public void setPremultipliedAlpha(boolean premultipliedAlpha) { + this.premultipliedAlpha = premultipliedAlpha; + } +} diff --git a/app/src/main/java/de/frajul/endlessroll/entities/particles/attributes/attributeValues/ParticleAttributeValue.java b/app/src/main/java/de/frajul/endlessroll/entities/particles/attributes/attributeValues/ParticleAttributeValue.java new file mode 100644 index 0000000..e366b3f --- /dev/null +++ b/app/src/main/java/de/frajul/endlessroll/entities/particles/attributes/attributeValues/ParticleAttributeValue.java @@ -0,0 +1,17 @@ +package de.frajul.endlessroll.entities.particles.attributes.attributeValues; + +/** + * Created by Julian on 02.08.2016. + */ +public abstract class ParticleAttributeValue { + + private ParticleAttributeValueType type; + + public ParticleAttributeValue(ParticleAttributeValueType type) { + this.type = type; + } + + public ParticleAttributeValueType getType() { + return type; + } +} diff --git a/app/src/main/java/de/frajul/endlessroll/entities/particles/attributes/attributeValues/ParticleAttributeValueType.java b/app/src/main/java/de/frajul/endlessroll/entities/particles/attributes/attributeValues/ParticleAttributeValueType.java new file mode 100644 index 0000000..60321aa --- /dev/null +++ b/app/src/main/java/de/frajul/endlessroll/entities/particles/attributes/attributeValues/ParticleAttributeValueType.java @@ -0,0 +1,28 @@ +package de.frajul.endlessroll.entities.particles.attributes.attributeValues; + +/** + * Created by Julian on 02.08.2016. + */ +public enum ParticleAttributeValueType { + + RANGE, TIMELINE, TINT_TIMELINE, SPAWN_SHAPE, OPTIONS, IMAGE_PATH; + + public ParticleAttributeValue createInstance() { + switch (this) { + case RANGE: + return new Range(); + case TIMELINE: + return new Timeline(); + case TINT_TIMELINE: + return new TintTimeline(); + case SPAWN_SHAPE: + return new SpawnShape(); + case OPTIONS: + return new Options(); + case IMAGE_PATH: + return new ImagePath(); + } + return null; + } + +} diff --git a/app/src/main/java/de/frajul/endlessroll/entities/particles/attributes/attributeValues/Range.java b/app/src/main/java/de/frajul/endlessroll/entities/particles/attributes/attributeValues/Range.java new file mode 100644 index 0000000..c0eb2d1 --- /dev/null +++ b/app/src/main/java/de/frajul/endlessroll/entities/particles/attributes/attributeValues/Range.java @@ -0,0 +1,82 @@ +package de.frajul.endlessroll.entities.particles.attributes.attributeValues; + +import java.util.Random; + +/** + * Created by Julian on 02.08.2016. + */ +public class Range extends ParticleAttributeValue { + + private float lowMin; + private float lowMax; + private float highMin; + private float highMax; + + public Range() { + super(ParticleAttributeValueType.RANGE); + } + + public Range createNormalizedInstance(Random random) { + Range range = new Range(); + float high = createHighValue(random); + range.setHighMax(high); + range.setHighMin(high); + float low = createLowValue(random); + range.setLowMax(low); + range.setLowMin(low); + return range; + } + + public float createValue(Random random, float mix) { + if (mix == 1) + return createHighValue(random); + else if (mix == 0) + return createLowValue(random); + else { + float highValue = createHighValue(random); + float lowValue = createLowValue(random); + return mix * (highValue - lowValue) + lowValue; + } + } + + private float createHighValue(Random random) { + float min = highMin; + float max = highMax; + if (min == max) + return min; + return random.nextFloat() * (max - min) + min; + } + + private float createLowValue(Random random) { + float min = lowMin; + float max = lowMax; + if (min == max) + return min; + return random.nextFloat() * (max - min) + min; + } + + public void setLowMin(float lowMin) { + this.lowMin = lowMin; + } + + public void setLowMax(float lowMax) { + this.lowMax = lowMax; + } + + public void setHighMin(float highMin) { + this.highMin = highMin; + } + + public void setHighMax(float highMax) { + this.highMax = highMax; + } + + private boolean isLowDifference() { + return lowMin - lowMax != 0; + } + + private boolean isHighDifference() { + return highMin - highMax != 0; + } + +} diff --git a/app/src/main/java/de/frajul/endlessroll/entities/particles/attributes/attributeValues/SpawnShape.java b/app/src/main/java/de/frajul/endlessroll/entities/particles/attributes/attributeValues/SpawnShape.java new file mode 100644 index 0000000..4de13d4 --- /dev/null +++ b/app/src/main/java/de/frajul/endlessroll/entities/particles/attributes/attributeValues/SpawnShape.java @@ -0,0 +1,38 @@ +package de.frajul.endlessroll.entities.particles.attributes.attributeValues; + +/** + * Created by Julian on 02.08.2016. + */ +public class SpawnShape extends ParticleAttributeValue { + + public enum Shape { + POINT("point"), SQUARE("square"), LINE("line"); + + private String name; + + Shape(String name) { + this.name = name; + } + + public static Shape byName(String text) throws Exception { + for (Shape shape : values()) + if (shape.name.equals(text)) + return shape; + throw new Exception("spawnShape with name \"" + text + "\" does not exist"); + } + } + + private Shape shape; + + public SpawnShape() { + super(ParticleAttributeValueType.SPAWN_SHAPE); + } + + public Shape getShape() { + return shape; + } + + public void setShape(Shape shape) { + this.shape = shape; + } +} diff --git a/app/src/main/java/de/frajul/endlessroll/entities/particles/attributes/attributeValues/Timeline.java b/app/src/main/java/de/frajul/endlessroll/entities/particles/attributes/attributeValues/Timeline.java new file mode 100644 index 0000000..ae45d9e --- /dev/null +++ b/app/src/main/java/de/frajul/endlessroll/entities/particles/attributes/attributeValues/Timeline.java @@ -0,0 +1,54 @@ +package de.frajul.endlessroll.entities.particles.attributes.attributeValues; + +import java.util.ArrayList; +import java.util.List; + +/** + * Created by Julian on 02.08.2016. + */ +public class Timeline extends ParticleAttributeValue { + + private List points = new ArrayList<>(); + + public Timeline() { + super(ParticleAttributeValueType.TIMELINE); + } + + public void setValueOfPoint(int index, float value) { + if (points.size() <= index) { + points.add(new TimelinePoint()); + } + points.get(index).setValue(value); + } + + public void setTimeOfPoint(int index, float time) { + if (points.size() <= index) { + points.add(new TimelinePoint()); + } + points.get(index).setTime(time); + } + + public float getValueAtTime(float time) { + TimelinePoint left = null, right = null; + for (TimelinePoint point : points) { + if (point.getTime() <= time) { + if (left == null || left.getTime() < point.getTime()) + left = point; + } else if (right == null || right.getTime() > point.getTime()) + right = point; + } + if (left != null) { + if (right != null) { + float leftDist = Math.abs(left.getTime() - time); + float rightDist = Math.abs(right.getTime() - time); + float totalDist = leftDist + rightDist; + float leftMultiplier = 1 - (leftDist / totalDist); + float rightMultiplier = 1 - (rightDist / totalDist); + return left.getValue() * leftMultiplier + right.getValue() * rightMultiplier; + } + return left.getValue(); + } + return 0; + } + +} \ No newline at end of file diff --git a/app/src/main/java/de/frajul/endlessroll/entities/particles/attributes/attributeValues/TimelinePoint.java b/app/src/main/java/de/frajul/endlessroll/entities/particles/attributes/attributeValues/TimelinePoint.java new file mode 100644 index 0000000..61804b4 --- /dev/null +++ b/app/src/main/java/de/frajul/endlessroll/entities/particles/attributes/attributeValues/TimelinePoint.java @@ -0,0 +1,23 @@ +package de.frajul.endlessroll.entities.particles.attributes.attributeValues; + +public class TimelinePoint { + + private float time, value; + + public float getTime() { + return time; + } + + public void setTime(float time) { + this.time = time; + } + + public float getValue() { + return value; + } + + public void setValue(float value) { + this.value = value; + } + +} \ No newline at end of file diff --git a/app/src/main/java/de/frajul/endlessroll/entities/particles/attributes/attributeValues/TimelineRange.java b/app/src/main/java/de/frajul/endlessroll/entities/particles/attributes/attributeValues/TimelineRange.java new file mode 100644 index 0000000..abcecb1 --- /dev/null +++ b/app/src/main/java/de/frajul/endlessroll/entities/particles/attributes/attributeValues/TimelineRange.java @@ -0,0 +1,31 @@ +package de.frajul.endlessroll.entities.particles.attributes.attributeValues; + +/** + * Created by Julian on 02.08.2016. + */ +public class TimelineRange { + + private Timeline timeline; + private Range range; + + public TimelineRange(Timeline timeline, Range range) { + this.timeline = timeline; + this.range = range; + } + + public Timeline getTimeline() { + return timeline; + } + + public void setTimeline(Timeline timeline) { + this.timeline = timeline; + } + + public Range getRange() { + return range; + } + + public void setRange(Range range) { + this.range = range; + } +} diff --git a/app/src/main/java/de/frajul/endlessroll/entities/particles/attributes/attributeValues/TintTimeline.java b/app/src/main/java/de/frajul/endlessroll/entities/particles/attributes/attributeValues/TintTimeline.java new file mode 100644 index 0000000..21df35e --- /dev/null +++ b/app/src/main/java/de/frajul/endlessroll/entities/particles/attributes/attributeValues/TintTimeline.java @@ -0,0 +1,58 @@ +package de.frajul.endlessroll.entities.particles.attributes.attributeValues; + +import de.frajul.endlessroll.data.Color; +import de.frajul.endlessroll.main.GameLog; + +import java.util.ArrayList; +import java.util.List; + +/** + * Created by Julian on 02.08.2016. + */ +public class TintTimeline extends ParticleAttributeValue { + + private List points = new ArrayList<>(); + + public TintTimeline() { + super(ParticleAttributeValueType.TINT_TIMELINE); + } + + public void setValueOfPoint(int index, int colorIndex, float value) { + if (points.size() <= index) { + points.add(new TintTimelinePoint()); + } + points.get(index).setValue(colorIndex, value); + } + + public void setTimeOfPoint(int index, float time) { + if (points.size() <= index) { + points.add(new TintTimelinePoint()); + } + points.get(index).setTime(time); + } + + public Color getValueAtTime(float time) { + TintTimelinePoint left = null, right = null; + for (TintTimelinePoint point : points) { + if (point.getTime() <= time) { + if (left == null || left.getTime() < point.getTime()) + left = point; + } else if (right == null || right.getTime() > point.getTime()) + right = point; + } + if (left != null) { + if (right != null) { + float leftDist = Math.abs(left.getTime() - time); + float rightDist = Math.abs(right.getTime() - time); + float totalDist = leftDist + rightDist; + float leftMultiplier = leftDist / totalDist; + float rightMultiplier = rightDist / totalDist; + + return left.getColor().interpolate(leftMultiplier,rightMultiplier, right.getColor()); + } + return left.getColor(); + } + return new Color(); + } + +} diff --git a/app/src/main/java/de/frajul/endlessroll/entities/particles/attributes/attributeValues/TintTimelinePoint.java b/app/src/main/java/de/frajul/endlessroll/entities/particles/attributes/attributeValues/TintTimelinePoint.java new file mode 100644 index 0000000..7f98332 --- /dev/null +++ b/app/src/main/java/de/frajul/endlessroll/entities/particles/attributes/attributeValues/TintTimelinePoint.java @@ -0,0 +1,33 @@ +package de.frajul.endlessroll.entities.particles.attributes.attributeValues; + +import de.frajul.endlessroll.data.Color; + +public class TintTimelinePoint { + + private float time; + private Color color; + + public float getTime() { + return time; + } + + public void setTime(float time) { + this.time = time; + } + + public Color getColor() { + return color; + } + + public void setValue(int colorIndex, float value) { + if (color == null) + color = new Color(); + if (colorIndex == 0) + color.setR(value); + else if (colorIndex == 1) + color.setG(value); + else if (colorIndex == 2) + color.setB(value); + } + +} \ No newline at end of file diff --git a/app/src/main/java/de/frajul/endlessroll/entities/textures/Texture.java b/app/src/main/java/de/frajul/endlessroll/entities/textures/Texture.java new file mode 100644 index 0000000..daeddd2 --- /dev/null +++ b/app/src/main/java/de/frajul/endlessroll/entities/textures/Texture.java @@ -0,0 +1,36 @@ +package de.frajul.endlessroll.entities.textures; + +/** + * Created by Julian on 11.12.2015. + */ +public class Texture { + + private int id; + private int atlasWidth; + private int atlasHeight; + + public Texture(int id, int atlasWidth, int atlasHeight) { + this.id = id; + this.atlasWidth = atlasWidth; + this.atlasHeight = atlasHeight; + } + + public Texture(Texture other) { + this.id = other.getId(); + this.atlasWidth = other.getAtlasWidth(); + this.atlasHeight = other.getAtlasHeight(); + } + + public int getId() { + return id; + } + + public int getAtlasWidth() { + return atlasWidth; + } + + public int getAtlasHeight() { + return atlasHeight; + } + +} diff --git a/app/src/main/java/de/frajul/endlessroll/entities/textures/TextureLoader.java b/app/src/main/java/de/frajul/endlessroll/entities/textures/TextureLoader.java new file mode 100644 index 0000000..b2860ce --- /dev/null +++ b/app/src/main/java/de/frajul/endlessroll/entities/textures/TextureLoader.java @@ -0,0 +1,59 @@ +package de.frajul.endlessroll.entities.textures; + +import android.content.Context; +import android.graphics.Bitmap; +import android.graphics.BitmapFactory; +import android.opengl.GLES20; +import android.opengl.GLUtils; + +import java.io.InputStream; + +import de.frajul.endlessroll.main.GameLog; + +/** + * Created by Julian on 26.11.2015. + */ +public class TextureLoader { + + private Context context; + + public TextureLoader(Context context) { + this.context = context; + } + + public int loadTextureId(int texture, boolean isAtlas) { + Bitmap bitmap = BitmapFactory.decodeResource(context.getResources(), texture); + return loadTextureId(bitmap, isAtlas); + } + + public Texture loadTexture(String inAssetsLocation) throws Exception { + InputStream is = context.getAssets().open(inAssetsLocation); + BitmapFactory.Options options = new BitmapFactory.Options(); + options.inScaled = false; + Bitmap bitmap = BitmapFactory.decodeStream(is, null, options); + return new Texture(loadTextureId(bitmap, false), 1, 1); + } + + private int loadTextureId(Bitmap bitmap, boolean isAtlas) { + int id = genTexture(); + + GLES20.glBindTexture(GLES20.GL_TEXTURE_2D, id); + GLES20.glTexParameteri(GLES20.GL_TEXTURE_2D, GLES20.GL_TEXTURE_MIN_FILTER, + GLES20.GL_NEAREST); + GLES20.glTexParameteri(GLES20.GL_TEXTURE_2D, GLES20.GL_TEXTURE_MAG_FILTER, + GLES20.GL_NEAREST); + + GLUtils.texImage2D(GLES20.GL_TEXTURE_2D, 0, bitmap, 0); + + bitmap.recycle(); + GameLog.d("Texture " + id + " successfully loaded"); + return id; + } + + private int genTexture() { + int[] idField = new int[1]; + GLES20.glGenTextures(1, idField, 0); + return idField[0]; + } + +} diff --git a/app/src/main/java/de/frajul/endlessroll/entities/textures/TexturePack.java b/app/src/main/java/de/frajul/endlessroll/entities/textures/TexturePack.java new file mode 100644 index 0000000..04b43c9 --- /dev/null +++ b/app/src/main/java/de/frajul/endlessroll/entities/textures/TexturePack.java @@ -0,0 +1,45 @@ +package de.frajul.endlessroll.entities.textures; + +import android.content.Context; +import android.support.annotation.DrawableRes; + +import de.frajul.endlessroll.R; +import de.frajul.endlessroll.entities.shapes.PlayerShape; +import de.frajul.endlessroll.entities.tools.ToolType; +import de.frajul.endlessroll.levels.worlds.World; + +/** + * Created by Julian on 05.12.2015. + */ +public class TexturePack { + + private TextureLoader loader; + + public final Texture goal; + public final Texture playerArrow; + public final Texture star; + public final Texture energy; + + public TexturePack(Context context) { + loader = new TextureLoader(context); + goal = loadTexture(R.drawable.guis_goal); + playerArrow = loadTexture(R.drawable.guis_playerarrow); + + star = loadTexture(R.drawable.currency_star); + energy = loadAtlas(R.drawable.currency_energy_atlas, 2, 2); + + PlayerShape.loadAllTextures(this); + ToolType.loadAllToolTextures(this); + World.loadAllSpecificTextures(this); + } + + public Texture loadTexture(@DrawableRes int id) { + int texId = loader.loadTextureId(id, false); + return new Texture(texId, 1, 1); + } + + public Texture loadAtlas(@DrawableRes int id, int atlasWidth, int atlasHeight) { + int texId = loader.loadTextureId(id, true); + return new Texture(texId, atlasWidth, atlasHeight); + } +} diff --git a/app/src/main/java/de/frajul/endlessroll/entities/tileLists/Ceiling.java b/app/src/main/java/de/frajul/endlessroll/entities/tileLists/Ceiling.java new file mode 100644 index 0000000..85947ae --- /dev/null +++ b/app/src/main/java/de/frajul/endlessroll/entities/tileLists/Ceiling.java @@ -0,0 +1,12 @@ +package de.frajul.endlessroll.entities.tileLists; + +import de.frajul.endlessroll.entities.textures.Texture; + +@SuppressWarnings("serial") +public class Ceiling extends TileList { + + public Ceiling(Texture texture) { + super(Type.CEILING, texture); + } + +} diff --git a/app/src/main/java/de/frajul/endlessroll/entities/tileLists/Terrain.java b/app/src/main/java/de/frajul/endlessroll/entities/tileLists/Terrain.java new file mode 100644 index 0000000..c328ac9 --- /dev/null +++ b/app/src/main/java/de/frajul/endlessroll/entities/tileLists/Terrain.java @@ -0,0 +1,12 @@ +package de.frajul.endlessroll.entities.tileLists; + +import de.frajul.endlessroll.entities.textures.Texture; + +@SuppressWarnings("serial") +public class Terrain extends TileList { + + public Terrain(Texture texture) { + super(TileList.Type.TERRAIN, texture); + } + +} diff --git a/app/src/main/java/de/frajul/endlessroll/entities/tileLists/Tile.java b/app/src/main/java/de/frajul/endlessroll/entities/tileLists/Tile.java new file mode 100644 index 0000000..8311d16 --- /dev/null +++ b/app/src/main/java/de/frajul/endlessroll/entities/tileLists/Tile.java @@ -0,0 +1,32 @@ +package de.frajul.endlessroll.entities.tileLists; + +import de.frajul.endlessroll.data.Vector; +import de.frajul.endlessroll.entities.Entity; +import de.frajul.endlessroll.entities.textures.Texture; +import de.frajul.endlessroll.levels.TileData; + +/** + * Created by Julian on 18.12.2015. + */ + +public class Tile extends Entity { + + public Tile(TileList.Type type, Texture texture, float edge, TileData data) { + this(type, texture, edge, data.getX(), data.getWidth()); + } + + public Tile(TileList.Type type, Texture texture, float edge, float x, float width) { + super(texture, new Vector(), width, 0); + super.height = type.calculateTileHeightFromEdge(edge); + super.position.x = x; + switch (type) { + case TERRAIN: + super.position.y = edge - super.height / 2; + break; + case CEILING: + super.position.y = edge + super.height / 2; + break; + } + } + +} diff --git a/app/src/main/java/de/frajul/endlessroll/entities/tileLists/TileList.java b/app/src/main/java/de/frajul/endlessroll/entities/tileLists/TileList.java new file mode 100644 index 0000000..ba47f49 --- /dev/null +++ b/app/src/main/java/de/frajul/endlessroll/entities/tileLists/TileList.java @@ -0,0 +1,79 @@ +package de.frajul.endlessroll.entities.tileLists; + +import de.frajul.endlessroll.data.SynchronizedArrayList; +import de.frajul.endlessroll.entities.textures.Texture; +import de.frajul.endlessroll.levels.TileData; +import de.frajul.endlessroll.levels.worlds.World; + +import java.util.ArrayList; +import java.util.List; + +@SuppressWarnings("serial") +public class TileList extends SynchronizedArrayList { + + public enum Type { + TERRAIN, CEILING; + + public float calculateTileHeightFromEdge(float edge) { + switch (this) { + case TERRAIN: + return 1 + edge; + case CEILING: + return 1 - edge; + } + return 0; + } + + } + + private Type type; + private Texture texture; + private float edge; + private boolean endless; + + public TileList(Type type, Texture texture) { + this.type = type; + this.texture = texture; + } + + public void loadData(World world, float edge, List tileData) { + this.texture = world.getTerrainTexture(); + if (type == Type.CEILING) + this.texture = world.getCeilingTexture(); + this.endless = false; + super.clear(); + for (TileData data : tileData) + super.add(new Tile(type, texture, edge, data)); + this.edge = edge; + if (edge >= 1 || edge <= -1) + super.clear(); + } + + public void createEndless(World world, float edge) { + loadData(world, edge, new ArrayList()); + super.add(createEndlessTile(0)); + this.endless = true; + } + + public void update(float cameraX) { + if (!super.isEmpty()) { + if (endless) { + Tile last = super.get(super.size() - 1); + if (last.getRightEdge() - cameraX < 3) + super.add(createEndlessTile(last.getRightEdge() + 2.5f)); + } + if (super.get(0).getRightEdge() - cameraX < -3) { + super.remove(0); + } + } + } + + private Tile createEndlessTile(float x) { + return new Tile(type, texture, edge, x, 5); + } + + public float getEdge() { + return edge; + } + +} diff --git a/app/src/main/java/de/frajul/endlessroll/entities/tools/Bomb.java b/app/src/main/java/de/frajul/endlessroll/entities/tools/Bomb.java new file mode 100644 index 0000000..34d0761 --- /dev/null +++ b/app/src/main/java/de/frajul/endlessroll/entities/tools/Bomb.java @@ -0,0 +1,67 @@ +package de.frajul.endlessroll.entities.tools; + +import java.util.List; + +import de.frajul.endlessroll.data.Vector; +import de.frajul.endlessroll.entities.DestroyEffect; +import de.frajul.endlessroll.entities.Obstacle; +import de.frajul.endlessroll.entities.Player; +import de.frajul.endlessroll.entities.collision.CollisionDetector; +import de.frajul.endlessroll.entities.collision.geometry.Geometry; +import de.frajul.endlessroll.entities.collision.geometry.Quad; +import de.frajul.endlessroll.main.game.Timer; + +/** + * Created by Julian on 20.02.2016. + */ +public class Bomb extends Tool { + + public final float RANGE = 1; + private float delta; + private boolean exploding = false; + + public Bomb(Vector position) { + super(ToolType.BOMB, position, .29f, .29f, false, false); + animation.setIndexSequence(new int[]{0, 1, 2}); + animation.setLooping(false); + animation.setRequiredDelta( + (int) (ToolType.BOMB.getCurrentUpgradeValue(ToolUpgradeType.DURATION) / 3)); + } + + @Override + public void update(Timer timer) { + super.update(timer); + delta += timer.getFrameTimeSeconds(); + if (delta >= ToolType.BOMB.getCurrentUpgradeValue(ToolUpgradeType.DURATION)) + exploding = true; + } + + @Override + public void onPlayerCollision(Player player, Timer timer) { + + } + + @Override + protected Geometry createWorldCollisionBounds() { + return this; + } + + @Override + protected Geometry createPlayerCollisionBounds() { + return this; + } + + public boolean isExploding() { + return exploding; + } + + public void explode(List obstacles, CollisionDetector detector) { + float range = RANGE * ToolType.BOMB.getCurrentUpgradeValue(ToolUpgradeType.RANGE) / 100; + Quad explosionRange = new Quad(new Vector(super.getPosition()), range, range); + for (Obstacle obstacle : obstacles) { + if (detector.isQuadQuadCollision(obstacle, explosionRange)) + obstacle.destroy(DestroyEffect.EXPLOSION); + } + super.destroy(DestroyEffect.EXPLOSION); + } +} diff --git a/app/src/main/java/de/frajul/endlessroll/entities/tools/Magnet.java b/app/src/main/java/de/frajul/endlessroll/entities/tools/Magnet.java new file mode 100644 index 0000000..95d2234 --- /dev/null +++ b/app/src/main/java/de/frajul/endlessroll/entities/tools/Magnet.java @@ -0,0 +1,59 @@ +package de.frajul.endlessroll.entities.tools; + +import de.frajul.endlessroll.data.Vector; +import de.frajul.endlessroll.entities.DestroyEffect; +import de.frajul.endlessroll.entities.Player; +import de.frajul.endlessroll.entities.collision.geometry.Circle; +import de.frajul.endlessroll.entities.collision.geometry.Geometry; +import de.frajul.endlessroll.entities.particles.ParticleSource; +import de.frajul.endlessroll.entities.particles.ParticleSystem; +import de.frajul.endlessroll.main.game.Timer; + +/** + * Created by Julian on 11.02.2016. + */ +public class Magnet extends Tool { + + private ParticleSource particleSource; + + public Magnet(Vector position, ParticleSystem particleSystem) { + super(ToolType.MAGNET, position, .24f, .24f, false, false); + animation.setRequiredDelta(300); + animation.setIndexSequence(new int[]{1, 1, 0}); + animation.setLooping(true); + super.setFloating(true); + particleSource = new ParticleSource(new Vector(position), particleSystem.magnet); + particleSource.start(); + } + + @Override + public void destroy(DestroyEffect destroyEffect) { + super.destroy(destroyEffect); + particleSource.kill(); + } + + @Override + public void onPlayerCollision(Player player, Timer timer) { + float fromPlayerDistance = player.getPosition().vectorTo(super.getPosition()).length(); + float fromPlayerDistanceGreaterFour = Math.max(fromPlayerDistance, 0.4f); + float fromPlayerYDistance = super.getPosition().y - player.getPosition().y; + float force = 0.0000012f / (fromPlayerDistanceGreaterFour * fromPlayerDistanceGreaterFour); + force *= ToolType.MAGNET.getCurrentUpgradeValue(ToolUpgradeType.FORCE) / 100; + force *= timer.getFrameTimeSeconds(); + + if (fromPlayerYDistance < 0) { + force = -force; + } + player.addForce(force); + } + + @Override + protected Geometry createWorldCollisionBounds() { + return this; + } + + @Override + protected Geometry createPlayerCollisionBounds() { + return new Circle(super.getPosition(), 2); + } +} diff --git a/app/src/main/java/de/frajul/endlessroll/entities/tools/Ramp.java b/app/src/main/java/de/frajul/endlessroll/entities/tools/Ramp.java new file mode 100644 index 0000000..da0eb88 --- /dev/null +++ b/app/src/main/java/de/frajul/endlessroll/entities/tools/Ramp.java @@ -0,0 +1,64 @@ +package de.frajul.endlessroll.entities.tools; + +import de.frajul.endlessroll.data.Vector; +import de.frajul.endlessroll.entities.Player; +import de.frajul.endlessroll.entities.collision.geometry.Geometry; +import de.frajul.endlessroll.entities.collision.geometry.Triangle; +import de.frajul.endlessroll.main.game.Timer; + +/** + * Created by Julian on 29.11.2015. + */ +public class Ramp extends Tool { + + public Ramp(Vector position) { + super(ToolType.RAMP, position, .4f, .35f, true, true); + animation.setLooping(true); + } + + public float getGradient() { + return super.getHeight() / super.getWidth(); + } + + public float getHeightAt(float x, boolean clamp) { + float ratio = (x - getLeftEdge()) / super.getWidth(); + if (clamp) { + if (ratio < 0) + return getBottomEdge(); + if (ratio > 1) + return getTopEdge(); + } + return getBottomEdge() + super.getHeight() * ratio; + } + + @Override + public void onPlayerCollision(Player player, Timer timer) { + float necessaryY = calcNecessaryPlayerY(player); + player.getPosition().y = necessaryY; + float acceleration = player.getMovement().x * getGradient(); + + player.setGravityForce(0); + player.getMovement().setY(0); + player.addForce(acceleration); + } + + private float calcNecessaryPlayerY(Player player) { + float normalM = -1 / getGradient(); + Vector normalToCircleCenter = new Vector(-1, -normalM).normalize(); + normalToCircleCenter.mul(player.RADIUS); + float normalX = player.getPosition().x - normalToCircleCenter.x; + float normalY = getHeightAt(normalX, false); + return normalY + normalToCircleCenter.y; + } + + @Override + protected Geometry createWorldCollisionBounds() { + return new Triangle(this); + } + + @Override + protected Geometry createPlayerCollisionBounds() { + return new Triangle(this); + } + +} diff --git a/app/src/main/java/de/frajul/endlessroll/entities/tools/Spring.java b/app/src/main/java/de/frajul/endlessroll/entities/tools/Spring.java new file mode 100644 index 0000000..8796445 --- /dev/null +++ b/app/src/main/java/de/frajul/endlessroll/entities/tools/Spring.java @@ -0,0 +1,48 @@ +package de.frajul.endlessroll.entities.tools; + +import de.frajul.endlessroll.data.Vector; +import de.frajul.endlessroll.entities.Player; +import de.frajul.endlessroll.entities.collision.geometry.Geometry; +import de.frajul.endlessroll.entities.collision.geometry.Quad; +import de.frajul.endlessroll.main.game.Timer; + +/** + * Created by Julian on 04.01.2016. + */ +public class Spring extends Tool { + + private boolean hasYetCollided = false; + + public Spring(Vector position) { + super(ToolType.SPRING, position, .3f, .35f, true, true); + animation.setIndexSequence(new int[]{1, 0, 0, 3, 3, 3, 1}); + animation.setRequiredDelta(80); + } + + @Override + public void update(Timer timer) { + if (hasYetCollided) + super.update(timer); + } + + @Override + public void onPlayerCollision(Player player, Timer timer) { + if (!hasYetCollided) { + hasYetCollided = true; + + player.clearAllForces(); + player.getMovement().setY(0); + player.addForce(.0022f); + } + } + + @Override + protected Geometry createWorldCollisionBounds() { + return this; + } + + @Override + protected Geometry createPlayerCollisionBounds() { + return new Quad(super.getPosition(), .2f, .1f); + } +} diff --git a/app/src/main/java/de/frajul/endlessroll/entities/tools/Tool.java b/app/src/main/java/de/frajul/endlessroll/entities/tools/Tool.java new file mode 100644 index 0000000..7ab3214 --- /dev/null +++ b/app/src/main/java/de/frajul/endlessroll/entities/tools/Tool.java @@ -0,0 +1,57 @@ +package de.frajul.endlessroll.entities.tools; + +import de.frajul.endlessroll.data.Vector; +import de.frajul.endlessroll.entities.AnimatedEntity; +import de.frajul.endlessroll.entities.Player; +import de.frajul.endlessroll.entities.collision.geometry.Geometry; +import de.frajul.endlessroll.main.game.Timer; + +/** + * Created by Julian on 04.01.2016. + */ +public abstract class Tool extends AnimatedEntity { + + private boolean placedByRightEdge; + private boolean updateBounds; + private Geometry worldCollisionBounds; + private Geometry playerCollisionBounds; + private boolean floating = false; + + public Tool(ToolType type, Vector position, float width, float height, boolean updateBounds, boolean placedByRightEdge) { + super(type.getToolTexture(), position, width, height); + this.updateBounds = updateBounds; + this.placedByRightEdge = placedByRightEdge; + worldCollisionBounds = createWorldCollisionBounds(); + playerCollisionBounds = createPlayerCollisionBounds(); + } + + public abstract void onPlayerCollision(Player player, Timer timer); + + protected abstract Geometry createWorldCollisionBounds(); + + protected abstract Geometry createPlayerCollisionBounds(); + + public Geometry getWorldCollisionBounds() { + if (updateBounds) + return createWorldCollisionBounds(); + return worldCollisionBounds; + } + + public Geometry getPlayerCollisionBounds() { + if (updateBounds) + return createPlayerCollisionBounds(); + return playerCollisionBounds; + } + + public void setFloating(boolean floating) { + this.floating = floating; + } + + public boolean isFloating() { + return floating; + } + + public boolean isPlacedByRightEdge() { + return placedByRightEdge; + } +} diff --git a/app/src/main/java/de/frajul/endlessroll/entities/tools/ToolSlot.java b/app/src/main/java/de/frajul/endlessroll/entities/tools/ToolSlot.java new file mode 100644 index 0000000..4ff3dd4 --- /dev/null +++ b/app/src/main/java/de/frajul/endlessroll/entities/tools/ToolSlot.java @@ -0,0 +1,42 @@ +package de.frajul.endlessroll.entities.tools; + +import de.frajul.endlessroll.R; + +/** + * Created by Julian on 16.07.2016. + */ +public class ToolSlot { + + private ToolType toolType; + private boolean locked; + + public ToolSlot(ToolType toolType, boolean locked) { + this.toolType = toolType; + this.locked = locked; + } + + public ToolType getToolType() { + return toolType; + } + + public int getDrawable() { + if (locked) + return R.drawable.tools_button_locked; + else if(toolType != null) + return toolType.getButtonDrawable(); + else + return R.drawable.tools_button_empty; + } + + public void setToolType(ToolType toolType) { + this.toolType = toolType; + } + + public boolean isLocked() { + return locked; + } + + public void setLocked(boolean locked) { + this.locked = locked; + } +} diff --git a/app/src/main/java/de/frajul/endlessroll/entities/tools/ToolType.java b/app/src/main/java/de/frajul/endlessroll/entities/tools/ToolType.java new file mode 100644 index 0000000..b50e919 --- /dev/null +++ b/app/src/main/java/de/frajul/endlessroll/entities/tools/ToolType.java @@ -0,0 +1,194 @@ +package de.frajul.endlessroll.entities.tools; + +import android.support.annotation.Nullable; +import android.support.annotation.StringRes; + +import java.util.Arrays; +import java.util.List; + +import de.frajul.endlessroll.R; +import de.frajul.endlessroll.data.Vector; +import de.frajul.endlessroll.entities.particles.ParticleSystem; +import de.frajul.endlessroll.entities.textures.Texture; +import de.frajul.endlessroll.entities.textures.TexturePack; +import de.frajul.endlessroll.sounds.SoundManager; + +public enum ToolType { + + //Check newInstance when new Tool is added! + RAMP(R.string.tool_name_ramp, R.string.tool_description_ramp, R.drawable.tools_ramp, + R.drawable.tools_ramp_button, R.raw.ramp, 0, 1, 5, + new ToolUpgrade(ToolUpgradeType.COOLDOWN, 3000, 1000)), + SPRING(R.string.tool_name_spring, R.string.tool_description_spring, R.drawable.tools_spring, + R.drawable.tools_spring_button, R.raw.ramp, 5, 2, 5, + new ToolUpgrade(ToolUpgradeType.COOLDOWN, 4000, 2000)), + BOMB(R.string.tool_name_bomb, R.string.tool_description_bomb, R.drawable.tools_bomb, + R.drawable.tools_bomb_button, R.raw.ramp, 12, 4, 5, + new ToolUpgrade(ToolUpgradeType.COOLDOWN, 6000, 4000), + new ToolUpgrade(ToolUpgradeType.DURATION, 1200, 400), + new ToolUpgrade(ToolUpgradeType.RANGE, 100, 200)), + MAGNET(R.string.tool_name_magnet, R.string.tool_description_magnet, R.drawable.tools_magnet, + R.drawable.tools_magnet_button, R.raw.ramp, 10, 4, 5, + new ToolUpgrade(ToolUpgradeType.COOLDOWN, 6000, 4000), + new ToolUpgrade(ToolUpgradeType.FORCE, 100, 500)), + POWER_MUSHROOM(R.string.tool_name_power_mushroom, R.string.tool_description_power_mushroom, + R.drawable.tools_power_mushroom, R.drawable.tools_power_mushroom_button, R.raw.ramp, 5, + 5, 7, new ToolUpgrade(ToolUpgradeType.COOLDOWN, 15000, 11000), + new ToolUpgrade(ToolUpgradeType.DURATION, 5000, 10000)), + STASIS(R.string.tool_name_stasis, R.string.tool_description_stasis, R.drawable.tools_stasis, + R.drawable.tools_stasis_button, R.raw.ramp, 15, 6, 6, + new ToolUpgrade(ToolUpgradeType.COOLDOWN, 8000, 5000), + new ToolUpgrade(ToolUpgradeType.FORCE, 1, 2), + new ToolUpgrade(ToolUpgradeType.SIZE, 100, 200)); + + @StringRes + private final int name; + @StringRes + private final int description; + private final int toolTextureId; + private final int buttonDrawable; + private final int placingSoundId; + private final int buyPrice; + private final int upgradePrice; + private final int maxUpgradeLevel; + private final List upgrades; + + private Texture toolTexture = null; + private int placingSound = -1; + private boolean bought; + private int currentUpgradeLevel = 1; + + ToolType(@StringRes int name, @StringRes int description, int toolTextureId, int buttonDrawable, int placingSoundId, int buyPrice, int upgradePrice, int maxUpgradeLevel, ToolUpgrade... upgrades) { + this.name = name; + this.description = description; + this.toolTextureId = toolTextureId; + this.buttonDrawable = buttonDrawable; + this.placingSoundId = placingSoundId; + this.buyPrice = buyPrice; + this.upgradePrice = upgradePrice; + this.maxUpgradeLevel = maxUpgradeLevel; + this.upgrades = Arrays.asList(upgrades); + } + + @Nullable + public Tool newInstance(Vector position, ParticleSystem particleSystem) { + Tool tool = null; + switch (this) { + case RAMP: + tool = new Ramp(position); + break; + case SPRING: + tool = new Spring(position); + break; + case MAGNET: + tool = new Magnet(position, particleSystem); + break; + case BOMB: + tool = new Bomb(position); + break; + case POWER_MUSHROOM: + tool = new PowerMushroom(position); + break; + case STASIS: + tool = new Stasis(position,particleSystem); + break; + } + if (tool != null && tool.isPlacedByRightEdge()) + tool.move(new Vector(-tool.getWidth() / 2, 0)); + return tool; + } + + public static void loadAllPlacingSounds(SoundManager soundManager) { + for (ToolType type : values()) + type.loadPlacingSound(soundManager); + } + + public static void loadAllToolTextures(TexturePack texturePack) { + for (ToolType type : values()) + type.loadToolTexture(texturePack); + } + + private void loadPlacingSound(SoundManager soundManager) { + if (placingSoundId == -1) + return; + placingSound = soundManager.loadSound(placingSoundId); + } + + private void loadToolTexture(TexturePack texturePack) { + if (toolTextureId == -1) + return; + if (this != POWER_MUSHROOM) + toolTexture = texturePack.loadAtlas(toolTextureId, 2, 2); + else + toolTexture = texturePack.loadTexture(toolTextureId); + } + + public Texture getToolTexture() { + return toolTexture; + } + + public int getButtonDrawable() { + return buttonDrawable; + } + + public int getPlacingSound() { + return placingSound; + } + + @StringRes + public int getName() { + return name; + } + + @StringRes + public int getDescription() { + return description; + } + + public void setBought(boolean bought) { + this.bought = bought; + } + + public boolean isBought() { + if (this == RAMP) + bought = true; + return bought; + } + + public void upgrade() { + currentUpgradeLevel++; + } + + public void reset() { + setBought(false); + currentUpgradeLevel = 1; + } + + public int getBuyPrice() { + return buyPrice; + } + + public int getUpgradePrice() { + return upgradePrice + currentUpgradeLevel - 1; + } + + public int getCurrentUpgradeLevel() { + return currentUpgradeLevel; + } + + public void setCurrentUpgradeLevel(int currentUpgradeLevel) { + this.currentUpgradeLevel = currentUpgradeLevel; + } + + public float getCurrentUpgradeValue(ToolUpgradeType type) { + for (ToolUpgrade upgrade : upgrades) + if (upgrade.getType().equals(type)) + return upgrade.getValueAtLevel(currentUpgradeLevel, maxUpgradeLevel); + return -1; + } + + public boolean isAtMaxUpgradeLevel() { + return currentUpgradeLevel == maxUpgradeLevel; + } + +} \ No newline at end of file diff --git a/app/src/main/java/de/frajul/endlessroll/levels/Gap.java b/app/src/main/java/de/frajul/endlessroll/levels/Gap.java new file mode 100644 index 0000000..ecd74f1 --- /dev/null +++ b/app/src/main/java/de/frajul/endlessroll/levels/Gap.java @@ -0,0 +1,22 @@ +package de.frajul.endlessroll.levels; + +import org.simpleframework.xml.Attribute; + +/** + * Created by Julian on 27.11.2015. + */ +public class Gap { + + @Attribute + private float leftEdge; + @Attribute + private float rightEdge; + + public float getLeftEdge() { + return leftEdge; + } + + public float getRightEdge() { + return rightEdge; + } +} diff --git a/app/src/main/java/de/frajul/endlessroll/levels/Level.java b/app/src/main/java/de/frajul/endlessroll/levels/Level.java new file mode 100644 index 0000000..e99b14e --- /dev/null +++ b/app/src/main/java/de/frajul/endlessroll/levels/Level.java @@ -0,0 +1,147 @@ +package de.frajul.endlessroll.levels; + +import org.simpleframework.xml.Attribute; +import org.simpleframework.xml.Element; +import org.simpleframework.xml.ElementList; + +import java.util.List; + +/** + * Created by Julian on 07.12.2015. + */ +public class Level { + + @Attribute + private int packId; + @Attribute + private int id; + @Attribute + private float goalX; + @Attribute + private float startSpeed; + @Attribute + private float endSpeed; + @Attribute + private float terrainEdge; + @Attribute + private float ceilingEdge; + @ElementList + private List terrainTiles; + @ElementList + private List ceilingTiles; + @ElementList + private List obstacles; + @ElementList + private List stars; + @Element(required = false) + private PositionData energy; + + private boolean finished = false; + private boolean locked = true; + private boolean[] collectedStars = {false, false, false}; + private boolean energyCollected = false; + + public int getPackId() { + return packId; + } + + public int getId() { + return id; + } + + public float getGoalX() { + return goalX; + } + + public float getStartSpeed() { + return startSpeed; + } + + public float getEndSpeed() { + return endSpeed; + } + + public float getTerrainEdge() { + return terrainEdge; + } + + public float getCeilingEdge() { + return ceilingEdge; + } + + public List getTerrainTiles() { + return terrainTiles; + } + + public List getCeilingTiles() { + return ceilingTiles; + } + + public List getObstacles() { + return obstacles; + } + + public List getStars() { + return stars; + } + + public PositionData getEnergyData() { + return energy; + } + + public boolean isLocked() { + return locked; + } + + public void setLocked(boolean locked) { + this.locked = locked; + } + + public boolean isFinished() { + return finished; + } + + public void setFinished(boolean finished) { + this.finished = finished; + } + + public boolean isStarCollected(int index) { + return collectedStars[index]; + } + + public void setStarCollected(int index, boolean collected) { + collectedStars[index] = collected; + } + + public String getCollectedStarCodeForSQL() { + String code = ""; + for (int i = 0; i < 3; i++) + code += collectedStars[i] ? (i + 1) + "" : ""; + return code; + } + + public void setCollectedStarsFromSQL(String code) { + for (int i = 0; i < 3; i++) + collectedStars[i] = code.contains((i + 1) + ""); + } + + public boolean[] getCollectedStars() { + return collectedStars; + } + + public boolean isEnergyCollected() { + return energyCollected; + } + + public void setEnergyCollected(boolean collected) { + this.energyCollected = collected; + } + + public void reset() { + finished = false; + locked = true; + collectedStars = new boolean[]{false, false, false}; + energyCollected = false; + } + +} diff --git a/app/src/main/java/de/frajul/endlessroll/levels/LevelManager.java b/app/src/main/java/de/frajul/endlessroll/levels/LevelManager.java new file mode 100644 index 0000000..6405af4 --- /dev/null +++ b/app/src/main/java/de/frajul/endlessroll/levels/LevelManager.java @@ -0,0 +1,117 @@ +package de.frajul.endlessroll.levels; + +import android.content.Context; + +import org.simpleframework.xml.Serializer; +import org.simpleframework.xml.core.Persister; + +import java.io.InputStream; +import java.util.ArrayList; +import java.util.Collections; +import java.util.Comparator; + +import de.frajul.endlessroll.R; +import de.frajul.endlessroll.main.DataStorageHandler; +import de.frajul.endlessroll.main.GameLog; +import de.frajul.endlessroll.sqlDatabase.MyDatabase; + +public class LevelManager extends ArrayList { + + public LevelManager(Context context, DataStorageHandler dataStorageHandler) throws Exception { + String[] worldNames = context.getResources().getStringArray(R.array.world_names); + String[] assets = context.getAssets().list("levelpacks"); + for (String asset : assets) { + try { + LevelPack pack = loadLevelPack(context, "levelpacks/" + asset); + pack.setName(worldNames[pack.getId()]); + + MyDatabase database = dataStorageHandler.getDatabase(); + database.open(); + for (Level level : pack.getLevels()) + database.readLevelProgress(level); + database.readLevelPackLocked(pack); + database.close(); + pack.tryToUnlockFirstLevel(); + if (pack.getId() == 1) + pack.setLocked(false); + super.add(pack); + } catch (Exception e) { + GameLog.e(e); + } + } + sortPacks(); + } + + private void sortPacks() { + Collections.sort(this, packComparator); + } + + private LevelPack loadLevelPack(Context context, String name) throws Exception { + try { + InputStream source = context.getAssets().open(name); + Serializer serializer = new Persister(); + return serializer.read(LevelPack.class, source); + } catch (Exception e) { + throw new Exception("Could not load levelPack \"" + name + "\"", e); + } + } + + public int getTotalCollectedStarCount(){ + int count = 0; + for(LevelPack levelPack : this) + count += levelPack.getCollectedStarCount(); + return count; + } + + public int getTotalCollectedEnergyCount(){ + int count = 0; + for(LevelPack levelPack : this) + count += levelPack.getCollectedEnergyCount(); + return count; + } + + public LevelPack getNextLevelPack(LevelPack currentPack) { + int searchedId = currentPack.getId() + 1; + for (LevelPack pack : this) { + if (pack.getId() == searchedId) + return pack; + } + return null; + } + + public LevelPack getPackWithId(int id) { + for (LevelPack pack : this) + if (pack.getId() == id) + return pack; + return null; + } + + public void reset() { + for (LevelPack pack : this) { + pack.reset(); + if (pack.getId() == 1) + pack.setLocked(false); + } + } + + private Comparator packComparator = new Comparator() { + @Override + public int compare(LevelPack lhs, LevelPack rhs) { + return lhs.getId() - rhs.getId(); + } + }; + + //CHEAT + public void unlockAllPacks() { + for (LevelPack levelPack : this) + levelPack.setLocked(false); + } + + public void unlockAllLevels() { + for (LevelPack levelPack : this) { + for (Level level : levelPack.getLevels()) + level.setLocked(false); + } + } + +} diff --git a/app/src/main/java/de/frajul/endlessroll/levels/LevelPack.java b/app/src/main/java/de/frajul/endlessroll/levels/LevelPack.java new file mode 100644 index 0000000..3d6b238 --- /dev/null +++ b/app/src/main/java/de/frajul/endlessroll/levels/LevelPack.java @@ -0,0 +1,120 @@ +package de.frajul.endlessroll.levels; + +import org.simpleframework.xml.Attribute; +import org.simpleframework.xml.Element; +import org.simpleframework.xml.ElementList; +import org.simpleframework.xml.Root; + +import java.util.List; + +import de.frajul.endlessroll.levels.worlds.World; + +/** + * Created by Julian on 07.12.2015. + */ +@Root +public class LevelPack { + + @Attribute + private int id; + @Element + private World world; + @ElementList + private List levels; + + private String name; + private boolean locked = true; + + public int getId() { + return id; + } + + public List getLevels() { + return levels; + } + + public World getWorld() { + return world; + } + + public void setName(String name) { + this.name = name; + } + + public String getName() { + return name; + } + + public int getFinishedLevelCount() { + int count = 0; + for (Level level : levels) + if (level.isFinished()) + count++; + return count; + } + + public int getCollectedStarCount() { + int count = 0; + for (Level level : levels) + count += level.getCollectedStarCodeForSQL().length(); + return count; + } + + public int getAvailableStars() { + return levels.size() * 3; + } + + public int getCollectedEnergyCount() { + int count = 0; + for (Level level : levels) + count += level.isEnergyCollected() ? 1 : 0; + return count; + } + + public int getAvailableEnergy() { + return levels.size(); + } + + public void tryToUnlockFirstLevel() { + Level firstLevel = getLevel(1); + if (firstLevel != null) + firstLevel.setLocked(false); + } + + public Level getLevel(int id) { + for (Level level : levels) + if (level.getId() == id) + return level; + return null; + } + + public Level getNextLevel(Level currentLevel) { + return getLevel(currentLevel.getId() + 1); + } + + public boolean isAllLevelsFinished() { + for (Level level : levels) + if (!level.isFinished()) + return false; + return true; + } + + public boolean isLastLevel(Level level) { + return getNextLevel(level) == null; + } + + public void reset() { + for (Level level : levels) + level.reset(); + setLocked(true); + tryToUnlockFirstLevel(); + } + + public void setLocked(boolean locked) { + this.locked = locked; + } + + public boolean isLocked() { + return locked; + } +} diff --git a/app/src/main/java/de/frajul/endlessroll/levels/MoveComponent.java b/app/src/main/java/de/frajul/endlessroll/levels/MoveComponent.java new file mode 100644 index 0000000..9a79808 --- /dev/null +++ b/app/src/main/java/de/frajul/endlessroll/levels/MoveComponent.java @@ -0,0 +1,56 @@ +package de.frajul.endlessroll.levels; + +import de.frajul.endlessroll.data.Vector; +import de.frajul.endlessroll.entities.Vertex; + +import org.simpleframework.xml.Attribute; + +public class MoveComponent { + + @Attribute + private float width; + @Attribute + private float height; + @Attribute + private float x; + @Attribute + private float y; + @Attribute + private float speed; + + public float getWidth() { + return width; + } + + public float getHeight() { + return height; + } + + public float getX() { + return x; + } + + public float getY() { + return y; + } + + public float getSpeed() { + return speed; + } + + public Vector getPositionOfVertex(Vertex vertex) { + float x = this.x + (width / 2f) * vertex.getX(); + float y = this.y + (height / 2f) * vertex.getY(); + return new Vector(x, y); + } + + public void shrink(Vector value) { + this.width -= value.getX(); + this.height -= value.getY(); + if (width < 0) + width = 0; + if (height < 0) + height = 0; + } + +} diff --git a/app/src/main/java/de/frajul/endlessroll/levels/ObstacleData.java b/app/src/main/java/de/frajul/endlessroll/levels/ObstacleData.java new file mode 100644 index 0000000..23dff98 --- /dev/null +++ b/app/src/main/java/de/frajul/endlessroll/levels/ObstacleData.java @@ -0,0 +1,93 @@ +package de.frajul.endlessroll.levels; + +import org.simpleframework.xml.Attribute; +import org.simpleframework.xml.Element; + +/** + * Created by Julian on 07.12.2015. + */ +public class ObstacleData { + + @Attribute + private boolean floating; + @Attribute + private boolean moving; + @Attribute + private boolean deadly; + @Attribute + private float leftEdge; + @Attribute + private float rightEdge; + @Attribute + private float height; + @Attribute + private float y; + @Element(required = false) + private MoveComponent moveComponent; + + public boolean isFloating() { + return floating; + } + + public boolean isMoving() { + return moving; + } + + public boolean isDeadly() { + return deadly; + } + + public float getX() { + return leftEdge + getWidth() / 2; + } + + public float getWidth() { + return rightEdge - leftEdge; + } + + public float getHeight() { + return height; + } + + public float getY() { + return y; + } + + public MoveComponent getMoveComponent() { + return moveComponent; + } + + + //Only for glTestScreen + public void setFloating(boolean floating) { + this.floating = floating; + } + + public void setMoving(boolean moving) { + this.moving = moving; + } + + public void setDeadly(boolean deadly) { + this.deadly = deadly; + } + + public void setLeftEdge(float leftEdge) { + this.leftEdge = leftEdge; + } + + public void setRightEdge(float rightEdge) { + this.rightEdge = rightEdge; + } + + public void setHeight(float height) { + this.height = height; + } + + public void setY(float y) { + this.y = y; + } + + public void setMoveComponent(MoveComponent moveComponent) { + this.moveComponent = moveComponent; + } +} diff --git a/app/src/main/java/de/frajul/endlessroll/levels/PositionData.java b/app/src/main/java/de/frajul/endlessroll/levels/PositionData.java new file mode 100644 index 0000000..908ea4f --- /dev/null +++ b/app/src/main/java/de/frajul/endlessroll/levels/PositionData.java @@ -0,0 +1,23 @@ +package de.frajul.endlessroll.levels; + +import org.simpleframework.xml.Attribute; + +/** + * Created by Julian on 27.01.2017. + */ + +public class PositionData { + + @Attribute + private float x; + @Attribute + private float y; + + public float getX() { + return x; + } + + public float getY() { + return y; + } +} diff --git a/app/src/main/java/de/frajul/endlessroll/levels/TileData.java b/app/src/main/java/de/frajul/endlessroll/levels/TileData.java new file mode 100644 index 0000000..01ecad8 --- /dev/null +++ b/app/src/main/java/de/frajul/endlessroll/levels/TileData.java @@ -0,0 +1,19 @@ +package de.frajul.endlessroll.levels; + +import org.simpleframework.xml.Attribute; + +public class TileData { + + @Attribute + private float x; + @Attribute + private float width; + + public float getX() { + return x; + } + + public float getWidth() { + return width; + } +} diff --git a/app/src/main/java/de/frajul/endlessroll/levels/worlds/World.java b/app/src/main/java/de/frajul/endlessroll/levels/worlds/World.java new file mode 100644 index 0000000..bf6ee07 --- /dev/null +++ b/app/src/main/java/de/frajul/endlessroll/levels/worlds/World.java @@ -0,0 +1,80 @@ +package de.frajul.endlessroll.levels.worlds; + +import android.support.annotation.DrawableRes; + +import de.frajul.endlessroll.R; +import de.frajul.endlessroll.entities.textures.Texture; +import de.frajul.endlessroll.entities.textures.TexturePack; + +/** + * Created by Julian on 14.11.2016. + */ + +public enum World { + + GRASSLANDS("Grasslands", R.drawable.world_previews_grass, R.drawable.backgrounds_game_grass, R.drawable.terrain_t_grass, R.drawable.terrain_c_grass, R.drawable.obstacles_grass), + TESTCAVE("Testcave", R.drawable.world_previews_grass, R.drawable.backgrounds_game_cave, R.drawable.terrain_t_grass, R.drawable.terrain_c_grass, R.drawable.obstacles_grass), + ICY_MOUNTAINS("Icy Mountains", R.drawable.world_previews_grass, R.drawable.backgrounds_game_mountains, R.drawable.terrain_t_grass, R.drawable.terrain_c_grass, R.drawable.obstacles_grass); + + private String name; + @DrawableRes + private int previewId; + @DrawableRes + private int backgroundId; + @DrawableRes + private int terrainId; + @DrawableRes + private int ceilingId; + @DrawableRes + private int obstacleId; + + private Texture background; + private Texture terrain; + private Texture ceiling; + private Texture obstacle; + + World(String name, @DrawableRes int previewId, @DrawableRes int backgroundId, @DrawableRes int terrainId, @DrawableRes int ceilingId, @DrawableRes int obstacleId) { + this.name = name; + this.previewId = previewId; + this.backgroundId = backgroundId; + this.terrainId = terrainId; + this.ceilingId = ceilingId; + this.obstacleId = obstacleId; + } + + public static void loadAllSpecificTextures(TexturePack texturePack) { + for (World world : values()) + world.loadSpecificTextures(texturePack); + } + + private void loadSpecificTextures(TexturePack texturePack) { + background = texturePack.loadTexture(backgroundId); + terrain = texturePack.loadTexture(terrainId); + ceiling = texturePack.loadTexture(ceilingId); + obstacle = texturePack.loadAtlas(obstacleId, 8, 8); + } + + public String getName() { + return name; + } + + public int getPreviewId() { + return previewId; + } + + public Texture getBackgroundTexture() { + return background; + } + + public Texture getTerrainTexture() { + return terrain; + } + + public Texture getCeilingTexture() { + return ceiling; + } + + public Texture getObstacleTexture() { + return obstacle; + } +} diff --git a/app/src/main/java/de/frajul/endlessroll/main/DataSafer.java b/app/src/main/java/de/frajul/endlessroll/main/DataSafer.java new file mode 100644 index 0000000..808a3d2 --- /dev/null +++ b/app/src/main/java/de/frajul/endlessroll/main/DataSafer.java @@ -0,0 +1,12 @@ +package de.frajul.endlessroll.main; + +import de.frajul.endlessroll.user.User; + +/** + * Created by Julian on 15.07.2016. + */ +public class DataSafer { + + private User user; + +} diff --git a/app/src/main/java/de/frajul/endlessroll/main/DataStorageHandler.java b/app/src/main/java/de/frajul/endlessroll/main/DataStorageHandler.java new file mode 100644 index 0000000..c161367 --- /dev/null +++ b/app/src/main/java/de/frajul/endlessroll/main/DataStorageHandler.java @@ -0,0 +1,105 @@ +package de.frajul.endlessroll.main; + +import android.app.Activity; +import android.content.Context; +import android.content.SharedPreferences; + +import de.frajul.endlessroll.entities.shapes.PlayerShape; +import de.frajul.endlessroll.entities.tools.ToolType; +import de.frajul.endlessroll.sqlDatabase.MyDatabase; +import de.frajul.endlessroll.user.ToolSlotSettings; +import de.frajul.endlessroll.user.User; + +/** + * Created by Julian on 25.04.2016. + */ +public class DataStorageHandler { + + private final String PREFERENCES_NAME = "GamePreferences"; + private final String SOUND_ON = "Sound"; + private final String USER_EP = "EP"; + private final String USER_LEVEL = "Level"; + private final String USER_STARS = "Stars"; + private final String USER_ENERGY = "Energy"; + private final String USER_TOOL_1 = "Tool1"; + private final String USER_TOOL_2 = "Tool2"; + private final String USER_TOOL_3 = "Tool3"; + private final String USER_TOOL_4 = "Tool4"; + private final String USER_TOOLS_LOCKED = "ToolsLocked"; + private final String USER_PLAYER_SHAPE = "PlayerShape"; + private final String TOOL_SHOP_TUTORIAL_PART_1_FINISHED = "ToolShopTutorialPart1Finished"; + + private SharedPreferences preferences; + private MyDatabase database; + + public DataStorageHandler(Activity activity) { + preferences = activity.getSharedPreferences(PREFERENCES_NAME, Context.MODE_PRIVATE); + database = new MyDatabase(activity); + } + + public boolean readIsSoundOn() { + return preferences.getBoolean(SOUND_ON, false); + } + + public void writeSoundOn(boolean soundOn) { + SharedPreferences.Editor editor = preferences.edit(); + editor.putBoolean(SOUND_ON, soundOn); + editor.apply(); + } + + public User readUserData(User.LvUpListener lvUpListener) throws Exception { + int ep = preferences.getInt(USER_EP, 0); + int level = preferences.getInt(USER_LEVEL, 1); + int stars = preferences.getInt(USER_STARS, 0); + int energy = preferences.getInt(USER_ENERGY, 0); + int toolsLocked = preferences.getInt(USER_TOOLS_LOCKED, 3); + String tool1 = preferences.getString(USER_TOOL_1, ToolType.RAMP.name()); + String tool2 = preferences.getString(USER_TOOL_2, "null"); + String tool3 = preferences.getString(USER_TOOL_3, "null"); + String tool4 = preferences.getString(USER_TOOL_4, "null"); + ToolSlotSettings toolSlotSettings = new ToolSlotSettings(tool1, tool2, tool3, tool4, + toolsLocked); + String playerShapeName = preferences.getString(USER_PLAYER_SHAPE, PlayerShape.BALL.name()); + PlayerShape playerShape; + try{ + playerShape = PlayerShape.valueOf(playerShapeName); + }catch (Exception e){ + playerShape = PlayerShape.BALL; + } + return new User(lvUpListener, ep, level, stars, energy, toolSlotSettings, playerShape); + } + + public void writeUserData(User user) { + SharedPreferences.Editor editor = preferences.edit(); + editor.putInt(USER_EP, user.getEp()); + editor.putInt(USER_LEVEL, user.getLevel()); + editor.putInt(USER_STARS, user.getStarCount()); + editor.putInt(USER_ENERGY, user.getEnergyCount()); + editor.putString(USER_TOOL_1, toolSlotToString(user.getToolSlotSettings(), 0)); + editor.putString(USER_TOOL_2, toolSlotToString(user.getToolSlotSettings(), 1)); + editor.putString(USER_TOOL_3, toolSlotToString(user.getToolSlotSettings(), 2)); + editor.putString(USER_TOOL_4, toolSlotToString(user.getToolSlotSettings(), 3)); + editor.putInt(USER_TOOLS_LOCKED, user.getToolSlotSettings().getLockedSlotCount()); + editor.putString(USER_PLAYER_SHAPE, user.getCurrentPlayerShape().name()); + editor.apply(); + } + + private String toolSlotToString(ToolSlotSettings toolSlotSettings, int index) { + ToolType toolType = toolSlotSettings.get(index).getToolType(); + return toolType == null ? "null" : toolType.toString(); + } + + public void writeToolShopTutorialPart1Finished(boolean finished) { + SharedPreferences.Editor editor = preferences.edit(); + editor.putBoolean(TOOL_SHOP_TUTORIAL_PART_1_FINISHED, finished); + editor.apply(); + } + + public boolean readToolShopTutorialPart1Finished() { + return preferences.getBoolean(TOOL_SHOP_TUTORIAL_PART_1_FINISHED, false); + } + + public MyDatabase getDatabase() { + return database; + } +} diff --git a/app/src/main/java/de/frajul/endlessroll/main/ExceptionHandler.java b/app/src/main/java/de/frajul/endlessroll/main/ExceptionHandler.java new file mode 100644 index 0000000..0aba872 --- /dev/null +++ b/app/src/main/java/de/frajul/endlessroll/main/ExceptionHandler.java @@ -0,0 +1,10 @@ +package de.frajul.endlessroll.main; + +/** + * Created by Julian on 06.02.2016. + */ +public interface ExceptionHandler { + + void onException(Exception e); + +} diff --git a/app/src/main/java/de/frajul/endlessroll/main/GameActivity.java b/app/src/main/java/de/frajul/endlessroll/main/GameActivity.java new file mode 100644 index 0000000..6fd94a9 --- /dev/null +++ b/app/src/main/java/de/frajul/endlessroll/main/GameActivity.java @@ -0,0 +1,292 @@ +package de.frajul.endlessroll.main; + +import android.app.Activity; +import android.app.ActivityManager; +import android.content.Context; +import android.content.pm.ConfigurationInfo; +import android.content.res.Configuration; +import android.graphics.Typeface; +import android.os.Bundle; +import android.view.KeyEvent; +import android.view.Window; +import android.view.WindowManager; +import android.widget.RelativeLayout; + +import java.util.List; + +import de.frajul.endlessroll.entities.shapes.PlayerShape; +import de.frajul.endlessroll.entities.tools.ToolType; +import de.frajul.endlessroll.levels.Level; +import de.frajul.endlessroll.levels.LevelManager; +import de.frajul.endlessroll.levels.LevelPack; +import de.frajul.endlessroll.main.screens.GLTestScreen; +import de.frajul.endlessroll.main.screens.GameScreen; +import de.frajul.endlessroll.main.screens.LevelsScreen; +import de.frajul.endlessroll.main.screens.PlayerShapeShopScreen; +import de.frajul.endlessroll.main.screens.PreStartScreen; +import de.frajul.endlessroll.main.screens.Screen; +import de.frajul.endlessroll.main.screens.ScreenFlipper; +import de.frajul.endlessroll.main.screens.SettingsScreen; +import de.frajul.endlessroll.main.screens.StartScreen; +import de.frajul.endlessroll.main.screens.ToolShopScreen; +import de.frajul.endlessroll.main.screens.WorldsScreen; +import de.frajul.endlessroll.main.tutorial.BreakPoint; +import de.frajul.endlessroll.main.tutorial.TutorialManager; +import de.frajul.endlessroll.main.tutorial.TutorialView; +import de.frajul.endlessroll.rendering.renderer.GameRenderer; +import de.frajul.endlessroll.sounds.SoundManager; +import de.frajul.endlessroll.sqlDatabase.MyDatabase; +import de.frajul.endlessroll.user.User; +import de.frajul.endlessroll.views.GoalMessage; +import de.frajul.endlessroll.views.LevelupMessage; +import de.frajul.endlessroll.views.TaskCompletedMessage; + +/** + * Created by Julian on 06.02.2016. + */ +public class GameActivity extends Activity implements ExceptionHandler, User.LvUpListener { + + private DataStorageHandler dataStorageHandler; + private LevelManager levelManager; + private SoundManager soundManager; + private User user; + private Typeface typeface; + private TutorialManager tutorialManager; + + private MyGlSurfaceView glSurfaceView; + private ScreenFlipper flipper; + private PreStartScreen preStartScreen; + private StartScreen startScreen; + private GLTestScreen glTestScreen; + private WorldsScreen worldsScreen; + private LevelsScreen levelsScreen; + private ToolShopScreen toolShopScreen; + private PlayerShapeShopScreen shapeShopScreen; + private GameScreen gameScreen; + private SettingsScreen settingsScreen; + + private LevelupMessage levelupMessage; + private TaskCompletedMessage taskCompletedMessage; + private TutorialView tutorialView; + + @Override + protected void onCreate(Bundle savedInstanceState) { + try { + GameLog.d("OnCreate"); + super.onCreate(savedInstanceState); + super.requestWindowFeature(Window.FEATURE_NO_TITLE); + super.getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, + WindowManager.LayoutParams.FLAG_FULLSCREEN); + if (!hasGLES20()) + throw new Exception("OpenGL ES 2.0 not supported"); + + dataStorageHandler = new DataStorageHandler(this); + dataStorageHandler.getDatabase().open(); + dataStorageHandler.getDatabase().readToolData(); + dataStorageHandler.getDatabase().close(); + + user = dataStorageHandler.readUserData(this); + + soundManager = new SoundManager(this); + soundManager.setSoundOn(dataStorageHandler.readIsSoundOn()); + soundManager.backgroundMusic.getPlayer().setLooping(true); + soundManager.backgroundMusic.start(); + + levelManager = new LevelManager(this, dataStorageHandler); + tutorialManager = new TutorialManager(); + + this.glSurfaceView = new MyGlSurfaceView(this, new GameRenderer(this)); + typeface = Typeface.createFromAsset(getAssets(), "fontBaron.ttf"); + + preStartScreen = new PreStartScreen(this); + startScreen = new StartScreen(this, glSurfaceView); + glTestScreen = new GLTestScreen(this, glSurfaceView); + worldsScreen = new WorldsScreen(this); + levelsScreen = new LevelsScreen(this); + toolShopScreen = new ToolShopScreen(this); + shapeShopScreen = new PlayerShapeShopScreen(this); + gameScreen = new GameScreen(this, glSurfaceView); + settingsScreen = new SettingsScreen(this); + + levelupMessage = new LevelupMessage(this); + taskCompletedMessage = new TaskCompletedMessage(this); + tutorialView = new TutorialView(this); + + flipper = new ScreenFlipper(this, preStartScreen, startScreen, worldsScreen, + levelsScreen, gameScreen, toolShopScreen, glTestScreen, settingsScreen, + shapeShopScreen); + RelativeLayout relativeLayout = new RelativeLayout(this); + relativeLayout.addView(glSurfaceView); + relativeLayout.addView(flipper); + relativeLayout.addView(levelupMessage.getLayout()); + relativeLayout.addView(taskCompletedMessage.getLayout()); + relativeLayout.addView(tutorialView.getLayout()); + setContentView(relativeLayout); + } catch (Exception e) { + onException(e); + return; + } + } + + public void exitGame() { + super.finish(); + } + + public void flipToScreen(final Screen.ScreenType screen) { + if (screen != Screen.ScreenType.NONE) { + runOnUiThread(new Runnable() { + @Override + public void run() { + flipper.showScreen(screen, flipper.getCurrentScreen().getType()); + } + }); + } + } + + public void onSurfaceChanged() { + if (flipper.getCurrentScreen().getType() == Screen.ScreenType.PRE_START) + flipToScreen(Screen.ScreenType.START); + } + + public void onWorldSelected(LevelPack levelPack) { + levelsScreen.onLevelPackSelected(levelPack); + } + + public void startGame(final LevelPack levelPack, final Level level) { + flipToScreen(Screen.ScreenType.GAME); + gameScreen.startGame(levelPack, level); + } + + @Override + public void onLvUp(final int level) { + runOnUiThread(new Runnable() { + @Override + public void run() { + levelupMessage.show(level); + } + }); + } + + public void onTasksCompleted(final List shapes) { + runOnUiThread(new Runnable() { + @Override + public void run() { + taskCompletedMessage.show(shapes); + } + }); + } + + public void showTutorialScreen(final List breakPoints) { + runOnUiThread(new Runnable() { + @Override + public void run() { + tutorialView.show(breakPoints); + } + }); + } + + public void onTutorialViewHidden() { + if (!gameScreen.isLevelFinished()) + gameScreen.onResume(); + } + + public void resetData() { + user.clearData(); + dataStorageHandler.writeUserData(user); + dataStorageHandler.writeToolShopTutorialPart1Finished(false); + levelManager.reset(); + tutorialManager.getToolShopTutorial().reset(); + MyDatabase database = dataStorageHandler.getDatabase(); + database.open(); + database.clearLevelProgess(); + database.clearLevelPackLocked(); + for (ToolType type : ToolType.values()) + type.reset(); + database.writeToolData(); + database.close(); + } + + @Override + public boolean onKeyDown(int keyCode, KeyEvent event) { + try { + if (keyCode == KeyEvent.KEYCODE_BACK) { + if (tutorialView.isShowingTutorial()) + tutorialView.onClick(null); + else + flipper.getCurrentScreen().onBackKeyDown(); + return true; + } + } catch (Exception e) { + onException(e); + } + return super.onKeyDown(keyCode, event); + } + + @Override + public void onException(Exception e) { + GameLog.e(e); + super.finish(); + } + + @Override + protected void onPause() { + GameLog.d("OnPause"); + glSurfaceView.onPause(); + if (flipper.getCurrentScreen() == gameScreen) + gameScreen.onPause(); + soundManager.pause(); + super.onPause(); + } + + @Override + protected void onResume() { + GameLog.d("OnResume"); + glSurfaceView.onResume(); + soundManager.resume(); + super.onResume(); + } + + @Override + protected void onDestroy() { + GameLog.d("OnDestroy"); + soundManager.destroy(); + + dataStorageHandler.writeSoundOn(soundManager.isSoundOn()); + super.onDestroy(); + } + + @Override + public void onConfigurationChanged(Configuration newConfig) { + super.onConfigurationChanged(newConfig); + } + + private boolean hasGLES20() { + ActivityManager am = (ActivityManager) getSystemService(Context.ACTIVITY_SERVICE); + ConfigurationInfo info = am.getDeviceConfigurationInfo(); + return info.reqGlEsVersion >= 0x20000; + } + + public User getUser() { + return user; + } + + public DataStorageHandler getDataStorageHandler() { + return dataStorageHandler; + } + + public SoundManager getSoundManager() { + return soundManager; + } + + public Typeface getTypeface() { + return typeface; + } + + public LevelManager getLevelManager() { + return levelManager; + } + + public TutorialManager getTutorialManager() { + return tutorialManager; + } +} diff --git a/app/src/main/java/de/frajul/endlessroll/main/GameHandler.java b/app/src/main/java/de/frajul/endlessroll/main/GameHandler.java new file mode 100644 index 0000000..bdc6881 --- /dev/null +++ b/app/src/main/java/de/frajul/endlessroll/main/GameHandler.java @@ -0,0 +1,23 @@ +package de.frajul.endlessroll.main; + +import android.widget.RelativeLayout; + +import de.frajul.endlessroll.main.screens.Screen; +import de.frajul.endlessroll.main.tutorial.BreakPoint; + +import java.util.List; + +/** + * Created by Julian on 08.12.2015. + */ +public interface GameHandler extends ExceptionHandler { + + void startInUiThread(Runnable runnable); + + void toScreen(Screen.ScreenType screen); + + RelativeLayout getRootLayout(); + + void showTutorialScreen(List breakPoints); + +} diff --git a/app/src/main/java/de/frajul/endlessroll/main/GameLog.java b/app/src/main/java/de/frajul/endlessroll/main/GameLog.java new file mode 100644 index 0000000..d8c76cb --- /dev/null +++ b/app/src/main/java/de/frajul/endlessroll/main/GameLog.java @@ -0,0 +1,44 @@ +package de.frajul.endlessroll.main; + +import android.util.Log; + +/** + * Created by Julian on 23.11.2015. + */ +public class GameLog { + + private final static String TAG = "GameLog"; + public static boolean debugging = true; + + public static void i(String message) { + Log.i(TAG + getCallerInfo(), message); + } + + public static void d(String message) { + if (debugging) + Log.d(TAG + getCallerInfo(), message); + } + + public static void e(String message) { + Log.e(TAG + getCallerInfo(), message); + } + + public static void e(Throwable error) { + Log.e(TAG + getCallerInfo(), error.getMessage(), error); + } + + //Possible to get Method which called i, d, e + //Method found at stack[4] + public static void stack() { + StackTraceElement[] stack = Thread.currentThread().getStackTrace(); + Log.i(TAG + "Stack", "StackSize: " + stack.length); + for (int i = 0; i < stack.length; i++) { + Log.i(TAG + "Stack", i + ": " + stack[i]); + } + } + + private static String getCallerInfo() { + StackTraceElement[] stack = Thread.currentThread().getStackTrace(); + return "(" + stack[4].getFileName() + ", " + stack[4].getMethodName() + ", " + stack[4].getLineNumber() + ")"; + } +} diff --git a/app/src/main/java/de/frajul/endlessroll/main/MyGlSurfaceView.java b/app/src/main/java/de/frajul/endlessroll/main/MyGlSurfaceView.java new file mode 100644 index 0000000..1994479 --- /dev/null +++ b/app/src/main/java/de/frajul/endlessroll/main/MyGlSurfaceView.java @@ -0,0 +1,45 @@ +package de.frajul.endlessroll.main; + +import android.content.Context; +import android.opengl.GLSurfaceView; +import android.view.MotionEvent; +import android.view.View; + +import de.frajul.endlessroll.rendering.Rendering; +import de.frajul.endlessroll.rendering.renderer.GameRenderer; + +/** + * Created by Julian on 30.07.2016. + */ +public class MyGlSurfaceView extends GLSurfaceView { + + private GameRenderer renderer; + + public MyGlSurfaceView(Context context, GameRenderer gameRenderer) throws Exception { + super(context); + this.renderer = gameRenderer; + super.setEGLContextClientVersion(2); + super.setRenderer(renderer); + } + + public void addRendering(Rendering rendering) { + renderer.addRendering(rendering); + } + + public void setCurrentRendering(Rendering currentRendering) { + super.setOnTouchListener(currentRendering); + renderer.setCurrentRendering(currentRendering); + } + + @Override + public void onResume() { + GameLog.i("GLSurfaceView: onResume"); + super.onResume(); + } + + @Override + public void onPause() { + GameLog.i("GLSurfaceView: onPause"); + super.onPause(); + } +} diff --git a/app/src/main/java/de/frajul/endlessroll/main/game/Camera.java b/app/src/main/java/de/frajul/endlessroll/main/game/Camera.java new file mode 100644 index 0000000..f126ace --- /dev/null +++ b/app/src/main/java/de/frajul/endlessroll/main/game/Camera.java @@ -0,0 +1,45 @@ +package de.frajul.endlessroll.main.game; + +/** + * Created by Julian on 22.05.2017. + */ + +public class Camera { + + private final float MOVE_SPEED_UP = 0.7f; + private final float MOVE_SPEED_DOWN = 0.7f; + private final float MAX_Y = 0.5f; + private final float MIN_Y = 0; + private float x, y; + + public void update(float playerY, Timer timer){ + float frameTime = timer.getFrameTimeSeconds() / 1000f; + float maxY = Math.min(playerY - 1 + 0.6f, MAX_Y); + if(playerY >= 0.5f){ + y += MOVE_SPEED_UP * frameTime; + if(y > maxY) + y = maxY; + } else if(y > MIN_Y){ + y -= MOVE_SPEED_DOWN * frameTime; + if(y < MIN_Y) + y = MIN_Y; + } + } + + public void moveX(float move){ + x += move; + } + + public void reset(){ + x = 0; + y = 0; + } + + public float getX() { + return x; + } + + public float getY() { + return y; + } +} diff --git a/app/src/main/java/de/frajul/endlessroll/main/game/Game.java b/app/src/main/java/de/frajul/endlessroll/main/game/Game.java new file mode 100644 index 0000000..aa6918a --- /dev/null +++ b/app/src/main/java/de/frajul/endlessroll/main/game/Game.java @@ -0,0 +1,337 @@ +package de.frajul.endlessroll.main.game; + +import android.view.MotionEvent; +import android.view.View; + +import java.util.ArrayList; +import java.util.List; + +import de.frajul.endlessroll.data.Vector; +import de.frajul.endlessroll.entities.DestroyEffect; +import de.frajul.endlessroll.entities.Player; +import de.frajul.endlessroll.entities.collectables.Energy; +import de.frajul.endlessroll.entities.collectables.Star; +import de.frajul.endlessroll.entities.collision.CollisionManager; +import de.frajul.endlessroll.entities.particles.Firework; +import de.frajul.endlessroll.entities.particles.ParticleSystem; +import de.frajul.endlessroll.entities.shapes.PlayerShape; +import de.frajul.endlessroll.entities.shapes.Task; +import de.frajul.endlessroll.entities.textures.TexturePack; +import de.frajul.endlessroll.entities.tools.ToolType; +import de.frajul.endlessroll.levels.Level; +import de.frajul.endlessroll.levels.LevelPack; +import de.frajul.endlessroll.main.GameActivity; +import de.frajul.endlessroll.main.GameHandler; +import de.frajul.endlessroll.main.GameLog; +import de.frajul.endlessroll.main.physics.Physics; +import de.frajul.endlessroll.main.screens.Screen; +import de.frajul.endlessroll.main.tutorial.Tutorial; +import de.frajul.endlessroll.rendering.Rendering; +import de.frajul.endlessroll.sqlDatabase.MyDatabase; +import de.frajul.endlessroll.views.ToolButton; +import de.frajul.endlessroll.views.ToolButtonBar; +import de.frajul.endlessroll.views.ViewManager; + +/** + * Created by Julian on 26.11.2015. + */ +public class Game extends Rendering { + + private GameActivity gameActivity; + private GameHandler handler; + private ViewManager viewManager; + private LevelPack levelPack; + private ParticleSystem particleSystem; + private Firework firework; + + private ToolType currentTool; + private Player player; + private Physics physics; + private CollisionManager collisionManager; + private Timer timer; + private GameState gameState = GameState.COUNTDOWN; + + private Level level; + private List collectedStars = new ArrayList<>(); + private boolean energyCollected; + + private Tutorial currentTutorial; + + public Game(GameHandler handler, GameActivity gameActivity) throws Exception { + super(gameActivity); + this.handler = handler; + this.gameActivity = gameActivity; + physics = new Physics(); + collisionManager = new CollisionManager(this); + particleSystem = new ParticleSystem(getContext()); + viewManager = new ViewManager(this, handler, gameActivity); + } + + @Override + public GameScene init(TexturePack texturePack, Timer timer, boolean isFirstTime) { + GameLog.d("init Game"); + this.timer = timer; + try { + if (isFirstTime) { + scene = new GameScene(texturePack, particleSystem); + firework = new Firework(particleSystem.firework, scene.getCamera()); + if (level != null) + startGame(levelPack, level); + } else { + scene.setTexturePack(texturePack); + } + particleSystem.loadTextures(); + } catch (Exception e) { + onException(e); + } + return scene; + } + + public void startGame(LevelPack levelPack, Level level) { + GameLog.d("Start game"); + try { + this.level = level; + this.levelPack = levelPack; + if (scene != null) { + gameState = GameState.COUNTDOWN; + gameActivity.getTutorialManager().resetGameTutorials(); + currentTutorial = gameActivity.getTutorialManager().getGameTutorial(level); + if (level.isFinished()) + currentTutorial = null; + collectedStars.clear(); + energyCollected = false; + particleSystem.deleteAllSources(); + scene.loadLevel(level, levelPack.getWorld(), + gameActivity.getUser().getCurrentPlayerShape()); + player = scene.getPlayer(); + viewManager.resetViews(gameActivity.getUser()); + currentTool = viewManager.toolButtonBar.getActiveButton().getToolType(); + viewManager.startCountdown(); + } + } catch (Exception e) { + onException(e); + } + } + + public void countdownFinished() { + gameState = GameState.RUNNING; + } + + @Override + public void setScreenSize(int width, int height) { + Vector screenSize = new Vector(width, height); + scene.setScreenSize(screenSize); + } + + @Override + public void update() { + try { + particleSystem.update(timer); + if (scene == null || player == null) + return; + + float playerProgress = player.getProgress(); + float playerSpeed = player.getMovement().getX(); + viewManager.update(gameState == GameState.RUNNING, timer, playerProgress, playerSpeed); + switch (gameState) { + case RUNNING: + if (player.getPosition().y < -2f) { + onGameOver(false); + return; + } + if (player.getPosition().x >= scene.getGoalX()) { + onGoalReached(); + return; + } + scene.getCamera().update(player.getPosition().y, timer); + + if (currentTutorial != null) { + currentTutorial.update(playerProgress); + if (currentTutorial.isOverNewBreakPoints()) { + gameState = GameState.PAUSED; + handler.showTutorialScreen(currentTutorial.getCurrentBreakPoints()); + return; + } + } + + physics.applyGravity(scene, timer); + scene.update(timer); + collisionManager.update(physics, scene, timer); + break; + } + } catch (Exception e) { + onException(e); + } + } + + @Override + public boolean onTouch(View v, MotionEvent event) { + if (gameState == GameState.RUNNING) { + ToolButtonBar bar = viewManager.toolButtonBar; + ToolButton button = bar.getByToolType(currentTool); + if (button != null && button.finishedLoading()) { + if (event.getAction() == MotionEvent.ACTION_DOWN) { + button.setProgress(0); + addTool(event.getX(), event.getY()); + } + } + return true; + } + return false; + } + + public void resetViews() { + viewManager.resetViews(gameActivity.getUser()); + } + + public void continueGame() { + viewManager.hideShortMenu(); + gameState = GameState.COUNTDOWN; + viewManager.startCountdown(); + } + + public void startNextLevel() { + level = levelPack.getNextLevel(level); + startGame(levelPack, level); + } + + public void restartLevel() { + startGame(levelPack, level); + } + + public void toLevelsScreen() { + handler.toScreen(Screen.ScreenType.LEVELS); + } + + public void toToolShop() { + handler.toScreen(Screen.ScreenType.TOOL_SHOP); + } + + public void setCurrentTool(ToolType toolType) { + currentTool = toolType; + } + + public void tryToPause() { + if (gameState == GameState.GAME_OVER || gameState == GameState.LEVEL_FINISHED || gameState == GameState.PAUSED) + return; + viewManager.showShortMenu(); + if (gameState == GameState.COUNTDOWN) + viewManager.stopCountdown(); + gameState = GameState.PAUSED; + } + + public void onGoalMessageKeyBack(){ + viewManager.onGoalMessageKeyBack(); + } + + public void setRunning() { + gameState = GameState.RUNNING; + } + + private void addTool(float x, float y) { + try { + gameActivity.getSoundManager().playSound(currentTool.getPlacingSound()); + scene.addTool(currentTool, x, y, physics); + } catch (Exception e) { + onException(e); + } + } + + public void onGameOver(boolean playerExplode) { + if (playerExplode) { + scene.getUncategorizedEntities().remove(player); + DestroyEffect.EXPLOSION.createEffect(particleSystem, player.getPosition(), + new Vector(player.getWidth(), player.getHeight())).start(); + } + gameState = GameState.GAME_OVER; + viewManager.showGameOverMessage(); + } + + private void onGoalReached() { + List alreadyUnlockedShapes = new ArrayList<>(); + for (PlayerShape shape : PlayerShape.values()) { + Task task = shape.getUnlockTask(); + task.update(gameActivity.getLevelManager()); + if (task.isConditionFulfilled()) + alreadyUnlockedShapes.add(shape); + } + + + gameState = GameState.LEVEL_FINISHED; + if (!level.isFinished()) + gameActivity.getUser().gainLvFinishedEp(); + level.setFinished(true); + + for (int i = 0; i <= 2; i++) { + if (collectedStars.contains(i)) { + level.setStarCollected(i, true); + gameActivity.getUser().onStarCollected(); + } + } + + if (energyCollected) { + level.setEnergyCollected(true); + gameActivity.getUser().onEnergyCollected(); + } + + firework.start(); + + //viewManager.showGameOverMessage(levelPack.isLastLevel(level), MessageType.WIN); + //TODO: fadeInWithDelay something + viewManager.showGoalMessage(levelPack, level); + + MyDatabase database = gameActivity.getDataStorageHandler().getDatabase(); + database.open(); + database.writeLevelProgress(level); + + List newUnlockedShapes = new ArrayList<>(); + for (PlayerShape shape : PlayerShape.values()) { + Task task = shape.getUnlockTask(); + task.update(gameActivity.getLevelManager()); + if (task.isConditionFulfilled() && !alreadyUnlockedShapes.contains(shape)) + newUnlockedShapes.add(shape); + } + if (!newUnlockedShapes.isEmpty()) + gameActivity.onTasksCompleted(newUnlockedShapes); + + Level nextLevel = levelPack.getNextLevel(level); + if (nextLevel != null) { + nextLevel.setLocked(false); + database.writeLevelProgress(nextLevel); + } else { + LevelPack nextLevelPack = gameActivity.getLevelManager().getNextLevelPack(levelPack); + if (nextLevelPack != null) { + nextLevelPack.setLocked(false); + database.writeLevelPackLocked(nextLevelPack); + } + } + database.close(); + gameActivity.getDataStorageHandler().writeUserData(gameActivity.getUser()); + + if (currentTutorial != null) { + currentTutorial.onLevelFinished(); + if (currentTutorial.isOverNewBreakPoints()) + handler.showTutorialScreen(currentTutorial.getCurrentBreakPoints()); + } + } + + public void onStarCollision(Star star) { + scene.onStarCollision(star); + collectedStars.add(star.getIndex()); + } + + public void onEnergyCollision(Energy energy) { + scene.onEnergyCollision(energy); + energyCollected = true; + } + + @Override + public void onException(Exception e) { + handler.onException(e); + } + + public GameState getGameState() { + return gameState; + } + +} diff --git a/app/src/main/java/de/frajul/endlessroll/main/game/GameScene.java b/app/src/main/java/de/frajul/endlessroll/main/game/GameScene.java new file mode 100644 index 0000000..b6a6ddf --- /dev/null +++ b/app/src/main/java/de/frajul/endlessroll/main/game/GameScene.java @@ -0,0 +1,112 @@ +package de.frajul.endlessroll.main.game; + +import de.frajul.endlessroll.data.Vector; +import de.frajul.endlessroll.entities.DestroyEffect; +import de.frajul.endlessroll.entities.Goal; +import de.frajul.endlessroll.entities.Obstacle; +import de.frajul.endlessroll.entities.collectables.Energy; +import de.frajul.endlessroll.entities.collectables.Star; +import de.frajul.endlessroll.entities.collision.CollisionDetector; +import de.frajul.endlessroll.entities.particles.ParticleSystem; +import de.frajul.endlessroll.entities.shapes.PlayerShape; +import de.frajul.endlessroll.entities.textures.TexturePack; +import de.frajul.endlessroll.entities.tools.Bomb; +import de.frajul.endlessroll.entities.tools.Tool; +import de.frajul.endlessroll.entities.tools.ToolType; +import de.frajul.endlessroll.levels.Level; +import de.frajul.endlessroll.levels.ObstacleData; +import de.frajul.endlessroll.levels.worlds.World; +import de.frajul.endlessroll.main.GameLog; +import de.frajul.endlessroll.main.physics.Physics; + +/** + * Created by Julian on 27.11.2015. + */ +public class GameScene extends Scene { + + private World currentWorld; + private CollisionDetector collisionDetector; + private Goal goal; + private float goalX; + + public GameScene(TexturePack texturePack, ParticleSystem particleSystem) throws Exception { + super(texturePack, particleSystem); + collisionDetector = new CollisionDetector(); + + goal = new Goal(textures.goal); + } + + public void loadLevel(Level level, World world, PlayerShape playerPlayerShape) throws Exception { + this.currentWorld = world; + super.reset(); + background.changeTexture(world.getBackgroundTexture()); + terrain.loadData(world, level.getTerrainEdge(), level.getTerrainTiles()); + ceiling.loadData(world, level.getCeilingEdge(), level.getCeilingTiles()); + uncategorizedEntities.add(goal); + player.init(playerPlayerShape, terrain.getEdge(), level.getStartSpeed(), level.getEndSpeed(), particleSystem); + uncategorizedEntities.add(player); + collectables.init(level, textures); + for (ObstacleData data : level.getObstacles()) + addObstacle(data); + + goalX = level.getGoalX(); + goal.setGoalX(goalX); + GameLog.d("Level " + level.getId() + " successfully loaded"); + } + + public void onStarCollision(Star collisionStar) { + collisionStar.destroy(DestroyEffect.STAR_EXPLOSION); + } + + public void onEnergyCollision(Energy energy) { + energy.destroy(DestroyEffect.ENERGY_COLLECT); + } + + public void addObstacle(ObstacleData data) { + Obstacle obstacle = new Obstacle(currentWorld, data, terrain.getEdge()); + obstacles.add(obstacle); + } + + public void addTool(ToolType type, float screenX, float screenY, Physics physics) throws Exception { + Vector position = calcWorldFromScreenCoords(screenX, screenY); + Tool tool = type.newInstance(position, particleSystem); + physics.checkSingleToolCollision(tool, this); + + if (tool == null) + throw new Exception( + "Current ToolType(" + type + ") returns null at method newInstance()"); + tools.add(tool); + } + + + public void update(Timer timer) { + player.setSpeedByProgress(player.getProgress() / goalX); + player.preMoveUpdate(timer); + + if (player.hasSuperPower() && player.getBottomEdge() < terrain.getEdge()) { + player.setToTerrain(terrain.getEdge()); + if (player.getMovement().y < 0) + player.getMovement().setY(0); + } + + super.update(timer); + + player.postMoveUpdate(); + + synchronized (tools) { + for (Tool tool : tools) { + if (tool instanceof Bomb) { + Bomb bomb = (Bomb) tool; + if (bomb.isExploding()) + bomb.explode(obstacles, collisionDetector); + } + } + } + + } + + public float getGoalX() { + return goalX; + } + +} diff --git a/app/src/main/java/de/frajul/endlessroll/main/game/GameState.java b/app/src/main/java/de/frajul/endlessroll/main/game/GameState.java new file mode 100644 index 0000000..bf57f05 --- /dev/null +++ b/app/src/main/java/de/frajul/endlessroll/main/game/GameState.java @@ -0,0 +1,10 @@ +package de.frajul.endlessroll.main.game; + +/** + * Created by Julian on 02.02.2016. + */ +public enum GameState { + + RUNNING, PAUSED, GAME_OVER, LEVEL_FINISHED, COUNTDOWN + +} diff --git a/app/src/main/java/de/frajul/endlessroll/main/game/Scene.java b/app/src/main/java/de/frajul/endlessroll/main/game/Scene.java new file mode 100644 index 0000000..2ee76de --- /dev/null +++ b/app/src/main/java/de/frajul/endlessroll/main/game/Scene.java @@ -0,0 +1,191 @@ +package de.frajul.endlessroll.main.game; + +import java.util.ArrayList; +import java.util.Collections; +import java.util.Iterator; +import java.util.List; + +import de.frajul.endlessroll.data.Vector; +import de.frajul.endlessroll.entities.AnimatedEntity; +import de.frajul.endlessroll.entities.Background; +import de.frajul.endlessroll.entities.collectables.Collectables; +import de.frajul.endlessroll.entities.collectables.Energy; +import de.frajul.endlessroll.entities.Entity; +import de.frajul.endlessroll.entities.Obstacle; +import de.frajul.endlessroll.entities.Player; +import de.frajul.endlessroll.entities.collectables.Star; +import de.frajul.endlessroll.entities.particles.ParticleSystem; +import de.frajul.endlessroll.entities.textures.TexturePack; +import de.frajul.endlessroll.entities.tileLists.Ceiling; +import de.frajul.endlessroll.entities.tileLists.Terrain; +import de.frajul.endlessroll.entities.tools.Tool; +import de.frajul.endlessroll.levels.worlds.World; + +/** + * Created by Julian on 20.07.2016. + */ +public abstract class Scene { + + //Not sure if needed, this why set on very high value + private final float MAX_Y_MOVEMENT = -1f; + + protected Camera camera; + private Vector screenSize; + private Entity playerArrow; + + protected ParticleSystem particleSystem; + protected TexturePack textures; + protected Background background; + protected Terrain terrain; + protected Ceiling ceiling; + protected Player player; + + protected List uncategorizedEntities = Collections.synchronizedList(new ArrayList()); + protected List obstacles = Collections.synchronizedList(new ArrayList()); + protected List tools = Collections.synchronizedList(new ArrayList()); + protected Collectables collectables = new Collectables(); + + public Scene(TexturePack texturePack, ParticleSystem particleSystem) { + this.particleSystem = particleSystem; + setTexturePack(texturePack); + camera = new Camera(); + playerArrow = new Entity(textures.playerArrow, new Vector(0, 0.9f), .2f, .2f); + background = new Background(World.GRASSLANDS.getBackgroundTexture()); + terrain = new Terrain(World.GRASSLANDS.getTerrainTexture()); + ceiling = new Ceiling(World.GRASSLANDS.getTerrainTexture()); + player = new Player(); + } + + public void setTexturePack(TexturePack texturePack) { + this.textures = texturePack; + } + + public void reset(){ + uncategorizedEntities.clear(); + obstacles.clear(); + tools.clear(); + collectables.reset(); + camera.reset(); + background.resetPosition(); + } + + public void update(Timer timer) { + updateEntityList(uncategorizedEntities, timer); + updateEntityList(obstacles, timer); + updateEntityList(tools, timer); + updateEntityList(collectables, timer); + + if (player.getPosition().y >= player.RADIUS + 1 + camera.getY()) { + playerArrow.getPosition().x = player.getPosition().x; + playerArrow.getPosition().y = camera.getY() + 0.9f; + if (!uncategorizedEntities.contains(playerArrow)) { + uncategorizedEntities.add(playerArrow); + } + } else + uncategorizedEntities.remove(playerArrow); + } + + private void updateEntityList(List list, Timer timer){ + synchronized (list){ + Iterator iterator = list.iterator(); + while(iterator.hasNext()) { + Entity entity = iterator.next(); + if(entity instanceof Obstacle){ + Obstacle obstacle = (Obstacle) entity; + if (obstacle.isMoving()) + obstacle.moveWithMoveComponent(timer.getFrameTimeSeconds()); + } + boolean remove = updateEntity(entity, timer); + if (remove) + iterator.remove(); + } + } + } + + private boolean updateEntity(Entity entity, Timer timer){ + if (entity instanceof AnimatedEntity) + ((AnimatedEntity) entity).update(timer); + Vector movement = entity.getMovement(); + Vector finalMovement = new Vector(movement).mul(timer.getFrameTimeSeconds()); + if(finalMovement.y < MAX_Y_MOVEMENT) + finalMovement.y = MAX_Y_MOVEMENT; + entity.move(finalMovement); + if (entity.equals(player)) + moveEnviroment(finalMovement.x); + + if (entity.isDestroyed() && entity.getDestroyEffect() != null) + entity.getDestroyEffect() + .createEffect(particleSystem, new Vector(entity.getPosition()), + new Vector(entity.getWidth(), entity.getHeight())).start(); + if (entity.getRightEdge() - camera.getX() < -3f || entity.isDestroyed()) { + return true; + } + return false; + } + + private void moveEnviroment(float x) { + camera.moveX(x); + background.move(x * 0.95f, camera.getX()); + terrain.update(camera.getX()); + ceiling.update(camera.getX()); + } + + protected Vector calcWorldFromScreenCoords(float screenX, float screenY) throws Exception { + if (screenSize == null) + throw new Exception("ScreenSize not set"); + float glCoordWidth = (2f * screenSize.x / screenSize.y); + float x = ((screenX / screenSize.x) * 2f - 1f) * glCoordWidth / 2; + x += camera.getX(); + float y = -((screenY / screenSize.y) * 2f - 1f); + y += camera.getY(); + return new Vector(x, y); + } + + public void setScreenSize(Vector screenSize) { + this.screenSize = screenSize; + } + + public synchronized Background getBackground() { + return background; + } + + public synchronized Terrain getTerrain() { + return terrain; + } + + public synchronized Ceiling getCeiling() { + return ceiling; + } + + public synchronized List getUncategorizedEntities() { + return uncategorizedEntities; + } + + public synchronized List getObstacles() { + return obstacles; + } + + public synchronized List getTools() { + return tools; + } + + public synchronized Collectables getCollectables() { + return collectables; + } + + public Player getPlayer() { + return player; + } + + public TexturePack getTextures() { + return textures; + } + + public ParticleSystem getParticleSystem() { + return particleSystem; + } + + public Camera getCamera() { + return camera; + } +} diff --git a/app/src/main/java/de/frajul/endlessroll/main/game/StartScene.java b/app/src/main/java/de/frajul/endlessroll/main/game/StartScene.java new file mode 100644 index 0000000..bf55be8 --- /dev/null +++ b/app/src/main/java/de/frajul/endlessroll/main/game/StartScene.java @@ -0,0 +1,17 @@ +package de.frajul.endlessroll.main.game; + +import de.frajul.endlessroll.entities.particles.ParticleSystem; +import de.frajul.endlessroll.entities.shapes.PlayerShape; +import de.frajul.endlessroll.entities.textures.TexturePack; +import de.frajul.endlessroll.levels.worlds.World; + +public class StartScene extends Scene { + + public StartScene(TexturePack texturePack, ParticleSystem particleSystem) { + super(texturePack, particleSystem); + terrain.createEndless(World.ICY_MOUNTAINS, -.8f); + player.init(PlayerShape.BALL, terrain.getEdge(), 0.5f, 0.5f, null); + uncategorizedEntities.add(player); + } + +} \ No newline at end of file diff --git a/app/src/main/java/de/frajul/endlessroll/main/game/Timer.java b/app/src/main/java/de/frajul/endlessroll/main/game/Timer.java new file mode 100644 index 0000000..35aece4 --- /dev/null +++ b/app/src/main/java/de/frajul/endlessroll/main/game/Timer.java @@ -0,0 +1,46 @@ +package de.frajul.endlessroll.main.game; + +/** + * Created by Julian on 22.11.2015. + */ +public class Timer { + + private long lastFpsTime; + private int fpsCounter; + private int fps; + + private long lastTime; + private long delta; + + + public Timer() { + lastTime = System.currentTimeMillis(); + lastFpsTime = lastTime; + } + + public void update() { + long currentTime = System.currentTimeMillis(); + delta = currentTime - lastTime; + lastTime = currentTime; + + fpsCounter++; + if (currentTime - lastFpsTime > 1000) { + fps = fpsCounter; + lastFpsTime += 1000; + fpsCounter = 0; + } + } + + public float getFrameTimeSeconds() { + return delta; + } + + public int getFps() { + return fps; + } + + public long getCurrentTime() { + return System.currentTimeMillis(); + } + +} diff --git a/app/src/main/java/de/frajul/endlessroll/main/physics/Physics.java b/app/src/main/java/de/frajul/endlessroll/main/physics/Physics.java new file mode 100644 index 0000000..ddc032c --- /dev/null +++ b/app/src/main/java/de/frajul/endlessroll/main/physics/Physics.java @@ -0,0 +1,199 @@ +package de.frajul.endlessroll.main.physics; + +import android.support.annotation.Nullable; + +import java.util.ArrayList; +import java.util.List; + +import de.frajul.endlessroll.entities.Entity; +import de.frajul.endlessroll.entities.Obstacle; +import de.frajul.endlessroll.entities.collectables.Collectables; +import de.frajul.endlessroll.entities.collectables.Energy; +import de.frajul.endlessroll.entities.collectables.Star; +import de.frajul.endlessroll.entities.collision.CollisionDetector; +import de.frajul.endlessroll.entities.collision.collisionData.EntityCollisionData; +import de.frajul.endlessroll.entities.collision.collisionData.ObstacleCollisionData; +import de.frajul.endlessroll.entities.collision.collisionData.PlayerCollisionData; +import de.frajul.endlessroll.entities.collision.collisionData.ToolCollisionData; +import de.frajul.endlessroll.entities.collision.geometry.Circle; +import de.frajul.endlessroll.entities.tileLists.Ceiling; +import de.frajul.endlessroll.entities.tileLists.Terrain; +import de.frajul.endlessroll.entities.tileLists.Tile; +import de.frajul.endlessroll.entities.tools.Bomb; +import de.frajul.endlessroll.entities.tools.Tool; +import de.frajul.endlessroll.main.game.GameScene; +import de.frajul.endlessroll.main.game.Scene; +import de.frajul.endlessroll.main.game.Timer; + +/** + * Created by Julian on 27.11.2015. + */ +public class Physics { + + public final float GRAVITY_FORCE = .0000025f; + private final float TOOL_ON_OBSTACLE_LEFT_EDGE_TOLERANCE = 0.05f; + private CollisionDetector detector; + + public Physics() { + detector = new CollisionDetector(); + } + + public void applyGravity(GameScene scene, Timer timer) { + float gravity = GRAVITY_FORCE * timer.getFrameTimeSeconds(); + + scene.getPlayer().setGravityForce(-gravity); + + synchronized (scene.getTools()) { + for (Tool tool : scene.getTools()) { + if (tool.isFloating()) + continue; + tool.getMovement().y -= gravity * 2; + } + } + } + + public synchronized void checkToolCollision(Scene scene) { + synchronized (scene.getTools()) { + for (Tool tool : scene.getTools()) { + checkSingleToolCollision(tool, scene); + } + } + } + + public synchronized void checkSingleToolCollision(Tool tool, Scene scene) { + if(tool.isFloating()) + return; + float terrainEdge = getTerrainEdge(tool, scene.getTerrain()); + Obstacle toolIsCollidingWith = getHighestObstacleToolIsCollidingWith(tool, scene); + + if (toolIsCollidingWith != null) { + float distObstTool = tool.getRightEdge() - toolIsCollidingWith.getLeftEdge(); + if (distObstTool < TOOL_ON_OBSTACLE_LEFT_EDGE_TOLERANCE) { + tool.getPosition().x -= TOOL_ON_OBSTACLE_LEFT_EDGE_TOLERANCE; + terrainEdge = getTerrainEdge(tool, scene.getTerrain()); + toolIsCollidingWith = getHighestObstacleToolIsCollidingWith(tool, scene); + } + } + + float orientingHeight = terrainEdge; + if (toolIsCollidingWith != null) + orientingHeight = Math.max(toolIsCollidingWith.getTopEdge(), terrainEdge); + + if (tool.getBottomEdge() <= orientingHeight) { + tool.getMovement().y = 0; + if (tool instanceof Bomb) + tool.setFloating(true); + else + tool.setToTerrain(orientingHeight); + } + } + + @Nullable + private Obstacle getHighestObstacleToolIsCollidingWith(Tool tool, Scene scene) { + List collisionObstacles = new ArrayList<>(); + synchronized (scene.getObstacles()) { + for (Obstacle obstacle : scene.getObstacles()) { + if (tool.getWorldCollisionBounds().isCollisionWithQuad(obstacle, detector)) { + collisionObstacles.add(obstacle); + } + } + } + Obstacle highest = null; + for (Obstacle obstacle : collisionObstacles) + if (highest == null || highest.getTopEdge() < obstacle.getTopEdge()) + highest = obstacle; + return highest; + } + + private float getTerrainEdge(Entity tool, Terrain terrain) { + for (Tile instance : terrain) { + if ((tool.getLeftEdge() >= instance.getLeftEdge() && tool.getLeftEdge() <= instance + .getRightEdge()) || (tool.getRightEdge() <= instance.getRightEdge() && tool + .getRightEdge() >= instance.getLeftEdge()) || (instance.getLeftEdge() >= tool + .getLeftEdge() && instance.getLeftEdge() <= tool.getRightEdge()) || (instance + .getRightEdge() <= tool.getRightEdge() && instance.getRightEdge() >= tool + .getLeftEdge())) + return terrain.getEdge(); + } + return -10; + } + + public PlayerCollisionData getPlayerCollisionData(GameScene scene) { + EntityCollisionData terrainData = playerCollidesWithTerrain(scene); + EntityCollisionData ceilingData = playerCollidesWithCeiling(scene); + ObstacleCollisionData obstacleData = playerCollidesWithObstacle(scene); + ToolCollisionData toolData = playerCollidesWithTool(scene); + EntityCollisionData starData = playerCollidesWithStar(scene); + EntityCollisionData energyData = playerCollidesWithEnergy(scene); + return new PlayerCollisionData(terrainData, ceilingData, obstacleData, toolData, starData, + energyData); + } + + private EntityCollisionData playerCollidesWithTerrain(GameScene scene) { + Terrain terrain = scene.getTerrain(); + for (Tile terrainTile : terrain) { + EntityCollisionData data = detector + .playerEntityCollision(scene.getPlayer(), terrainTile); + if (data.isCollision()) + return data; + } + return new EntityCollisionData(null, null); + } + + private EntityCollisionData playerCollidesWithCeiling(GameScene scene) { + Ceiling ceiling = scene.getCeiling(); + for (Tile ceilingTile : ceiling) { + EntityCollisionData data = detector + .playerEntityCollision(scene.getPlayer(), ceilingTile); + if (data.isCollision()) + return data; + } + return new EntityCollisionData(null, null); + } + + private ObstacleCollisionData playerCollidesWithObstacle(GameScene scene) { + List collisions = new ArrayList<>(); + synchronized (scene.getObstacles()) { + for (Obstacle obstacle : scene.getObstacles()) { + EntityCollisionData data = detector + .playerEntityCollision(scene.getPlayer(), obstacle); + if (data.isCollision()) + collisions.add(data); + } + } + return new ObstacleCollisionData(collisions); + } + + private ToolCollisionData playerCollidesWithTool(GameScene scene) { + List tools = new ArrayList<>(); + Circle circle = new Circle(scene.getPlayer()); + synchronized (scene.getTools()) { + for (Tool tool : scene.getTools()) { + if (tool.getPlayerCollisionBounds().isCollisionWithCircle(circle, detector)) + tools.add(tool); + } + } + return new ToolCollisionData(tools); + } + + private EntityCollisionData playerCollidesWithStar(GameScene scene) { + Collectables collectables = scene.getCollectables(); + synchronized (collectables.getStars()) { + for (Star star : collectables.getStars()) { + EntityCollisionData data = detector.playerEntityCollision(scene.getPlayer(), star); + if (data.isCollision()) + return data; + } + } + return new EntityCollisionData(null, null); + } + + private EntityCollisionData playerCollidesWithEnergy(GameScene scene) { + Energy energy = scene.getCollectables().getEnergy(); + if (energy != null) { + EntityCollisionData data = detector.playerEntityCollision(scene.getPlayer(), energy); + return data; + } else + return new EntityCollisionData(null, null); + } +} diff --git a/app/src/main/java/de/frajul/endlessroll/main/screens/GLScreen.java b/app/src/main/java/de/frajul/endlessroll/main/screens/GLScreen.java new file mode 100644 index 0000000..2045e45 --- /dev/null +++ b/app/src/main/java/de/frajul/endlessroll/main/screens/GLScreen.java @@ -0,0 +1,21 @@ +package de.frajul.endlessroll.main.screens; + +import android.support.annotation.LayoutRes; +import android.view.ViewGroup; + +import de.frajul.endlessroll.main.GameActivity; +import de.frajul.endlessroll.main.MyGlSurfaceView; + +/** + * Created by Julian on 30.07.2016. + */ +public abstract class GLScreen extends Screen { + + protected MyGlSurfaceView glView; + + public GLScreen(ScreenType type, GameActivity gameActivity, @LayoutRes int layoutId, MyGlSurfaceView glView) { + super(type, gameActivity, layoutId); + this.glView = glView; + } + +} diff --git a/app/src/main/java/de/frajul/endlessroll/main/screens/GameScreen.java b/app/src/main/java/de/frajul/endlessroll/main/screens/GameScreen.java new file mode 100644 index 0000000..fc834ad --- /dev/null +++ b/app/src/main/java/de/frajul/endlessroll/main/screens/GameScreen.java @@ -0,0 +1,88 @@ +package de.frajul.endlessroll.main.screens; + +import android.widget.RelativeLayout; + +import java.util.List; + +import de.frajul.endlessroll.R; +import de.frajul.endlessroll.levels.Level; +import de.frajul.endlessroll.levels.LevelPack; +import de.frajul.endlessroll.main.GameActivity; +import de.frajul.endlessroll.main.GameHandler; +import de.frajul.endlessroll.main.MyGlSurfaceView; +import de.frajul.endlessroll.main.game.Game; +import de.frajul.endlessroll.main.game.GameState; +import de.frajul.endlessroll.main.tutorial.BreakPoint; + +/** + * Created by Julian on 08.02.2016. + */ +public class GameScreen extends GLScreen { + + private Game game; + + public GameScreen(GameActivity gameActivity, MyGlSurfaceView glSurfaceView) throws Exception { + super(ScreenType.GAME, gameActivity, R.layout.game, glSurfaceView); + game = new Game(gameViewHandler, gameActivity); + glView.addRendering(game); + } + + @Override + public void prepareToBeShown() { + glView.setCurrentRendering(game); + } + + public void onPause() { + game.tryToPause(); + } + + public void onResume() { + game.setRunning(); + } + + public boolean isLevelFinished() { + return game.getGameState() == GameState.LEVEL_FINISHED; + } + + @Override + public void onBackKeyDown() { + game.tryToPause(); + if(isLevelFinished()) + game.onGoalMessageKeyBack(); + } + + public void startGame(LevelPack levelPack, Level level) { + game.resetViews(); + game.startGame(levelPack, level); + } + + private GameHandler gameViewHandler = new GameHandler() { + + @Override + public void startInUiThread(Runnable runnable) { + gameActivity.runOnUiThread(runnable); + } + + @Override + public void toScreen(ScreenType screen) { + glView.setCurrentRendering(null); + gameActivity.flipToScreen(screen); + } + + @Override + public RelativeLayout getRootLayout() { + return layout; + } + + @Override + public void showTutorialScreen(List breakPoints) { + gameActivity.showTutorialScreen(breakPoints); + } + + @Override + public void onException(Exception e) { + gameActivity.onException(e); + } + }; + +} diff --git a/app/src/main/java/de/frajul/endlessroll/main/screens/LevelsScreen.java b/app/src/main/java/de/frajul/endlessroll/main/screens/LevelsScreen.java new file mode 100644 index 0000000..f850e05 --- /dev/null +++ b/app/src/main/java/de/frajul/endlessroll/main/screens/LevelsScreen.java @@ -0,0 +1,80 @@ +package de.frajul.endlessroll.main.screens; + +import android.view.ViewGroup; +import android.widget.LinearLayout; + +import de.frajul.endlessroll.R; +import de.frajul.endlessroll.levels.Level; +import de.frajul.endlessroll.levels.LevelPack; +import de.frajul.endlessroll.main.GameActivity; +import de.frajul.endlessroll.views.LevelButton; +import de.frajul.endlessroll.views.LevelButtonOnClickListener; +import de.frajul.endlessroll.views.TopBar; + +/** + * Created by Julian on 23.04.2016. + */ +public class LevelsScreen extends Screen implements LevelButtonOnClickListener { + + private LevelPack levelPack; + + private TopBar topBar; + private LinearLayout topRow; + private LinearLayout bottomRow; + + public LevelsScreen(GameActivity gameActivity) { + super(ScreenType.LEVELS, gameActivity, R.layout.levels); + topBar = super.createTopBar(R.id.levels_topbar); + topRow = (LinearLayout) layout.findViewById(R.id.levels_top_row); + bottomRow = (LinearLayout) layout.findViewById(R.id.levels_bottom_row); + } + + public void onLevelPackSelected(LevelPack levelPack) { + this.levelPack = levelPack; + } + + private void build() { + topRow.removeAllViews(); + bottomRow.removeAllViews(); + int levelCount = levelPack.getLevels().size(); + + LinearLayout.LayoutParams params = new LinearLayout.LayoutParams( + ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT); + params.setMargins(15, 15, 15, 15); + + for (Level level : levelPack.getLevels()) + createButton(level, levelCount, params); + } + + private void createButton(Level level, int levelCount, LinearLayout.LayoutParams params) { + LevelButton button = new LevelButton(gameActivity, this, R.layout.levelbutton); + button.init(level); + + int halfLevelCount = levelCount / 2; + if (levelCount % 2 == 1) + halfLevelCount++; + + if (level.getId() <= halfLevelCount) + topRow.addView(button.getView(), params); + else + bottomRow.addView(button.getView(), params); + } + + @Override + public void prepareToBeShown() { + topBar.update(); + build(); + } + + @Override + public void onBackKeyDown() { + flipTo(ScreenType.WORLDS); + } + + @Override + public void onClick(LevelButton levelButton) { + Level level = levelButton.getLevel(); + if (!level.isLocked()) + gameActivity.startGame(levelPack, level); + } +} diff --git a/app/src/main/java/de/frajul/endlessroll/main/screens/Screen.java b/app/src/main/java/de/frajul/endlessroll/main/screens/Screen.java new file mode 100644 index 0000000..fa8ac63 --- /dev/null +++ b/app/src/main/java/de/frajul/endlessroll/main/screens/Screen.java @@ -0,0 +1,85 @@ +package de.frajul.endlessroll.main.screens; + +import android.content.Context; +import android.support.annotation.IdRes; +import android.support.annotation.LayoutRes; +import android.view.LayoutInflater; +import android.view.ViewGroup; + +import de.frajul.endlessroll.main.GameActivity; +import de.frajul.endlessroll.views.TopBar; + +/** + * Created by Julian on 13.02.2016. + */ +public abstract class Screen { + + public enum ScreenType { + NONE(-1), + PRE_START(0), + START(1), + WORLDS(2), + LEVELS(3), + GAME(4), + TOOL_SHOP(5), + GL_TEST(6), + SETTINGS(7), + SHAPE_SHOP(8); + + private int inFlipperPosition; + + ScreenType(int inFlipperPosition) { + this.inFlipperPosition = inFlipperPosition; + } + + public int getInFlipperPosition() { + return inFlipperPosition; + } + } + + private ScreenType type; + protected ScreenType caller; + protected V layout; + protected GameActivity gameActivity; + + public Screen(ScreenType type, GameActivity gameActivity, @LayoutRes int layoutId) { + this.type = type; + this.gameActivity = gameActivity; + layout = inflateLayout(gameActivity, layoutId); + } + + private V inflateLayout(Context context, @LayoutRes int layoutId) { + LayoutInflater inflater = LayoutInflater.from(context); + return (V) inflater.inflate(layoutId, null); + } + + protected TopBar createTopBar(@IdRes int id) { + return new TopBar(gameActivity, type, layout.findViewById(id)); + } + + public void setCaller(ScreenType caller) { + this.caller = caller; + } + + public abstract void prepareToBeShown(); + + public abstract void onBackKeyDown(); + + protected void flipToCaller() { + if (caller != null) + gameActivity.flipToScreen(caller); + } + + protected void flipTo(ScreenType type) { + gameActivity.flipToScreen(type); + } + + public ScreenType getType() { + return type; + } + + public V get() { + return layout; + } + +} diff --git a/app/src/main/java/de/frajul/endlessroll/main/screens/ScreenFlipper.java b/app/src/main/java/de/frajul/endlessroll/main/screens/ScreenFlipper.java new file mode 100644 index 0000000..63934ec --- /dev/null +++ b/app/src/main/java/de/frajul/endlessroll/main/screens/ScreenFlipper.java @@ -0,0 +1,54 @@ +package de.frajul.endlessroll.main.screens; + +import android.content.Context; +import android.widget.ViewFlipper; + +/** + * Created by Julian on 13.02.2016. + */ +public class ScreenFlipper extends ViewFlipper { + + private Screen[] screens; + private Screen currentScreen; + + public ScreenFlipper(Context context, Screen... screens) { + super(context); + this.screens = screens; + for (Screen screen : screens) + addView(screen); + currentScreen = screens[0]; + showScreen(currentScreen.getType(), Screen.ScreenType.NONE); + } + + private void addView(Screen screen) { + super.addView(screen.get(), screen.getType().getInFlipperPosition()); + } + + public Screen getCurrentScreen() { + return currentScreen; + } + + public void showScreen(Screen.ScreenType type, Screen.ScreenType caller) { + Screen screen = findScreen(type); + screen.setCaller(caller); + screen.prepareToBeShown(); + + int positionDifference = type.getInFlipperPosition() - currentScreen.getType().getInFlipperPosition(); + if (positionDifference < 0) + for (; positionDifference != 0; positionDifference++) + super.showPrevious(); + else if (positionDifference > 0) + for (; positionDifference != 0; positionDifference--) + super.showNext(); + currentScreen = screen; + } + + private Screen findScreen(Screen.ScreenType type) { + for (Screen screen : screens) + if (screen.getType().equals(type)) { + return screen; + } + return null; + } + +} diff --git a/app/src/main/java/de/frajul/endlessroll/main/screens/StartScreen.java b/app/src/main/java/de/frajul/endlessroll/main/screens/StartScreen.java new file mode 100644 index 0000000..238e696 --- /dev/null +++ b/app/src/main/java/de/frajul/endlessroll/main/screens/StartScreen.java @@ -0,0 +1,87 @@ +package de.frajul.endlessroll.main.screens; + +import android.app.AlertDialog; +import android.app.Dialog; +import android.graphics.Typeface; +import android.support.annotation.IdRes; +import android.view.View; +import android.view.animation.AnimationUtils; +import android.widget.Button; +import android.widget.RelativeLayout; +import android.widget.ToggleButton; + +import de.frajul.endlessroll.R; +import de.frajul.endlessroll.main.GameActivity; +import de.frajul.endlessroll.main.MyGlSurfaceView; +import de.frajul.endlessroll.rendering.Rendering; +import de.frajul.endlessroll.views.ExitConfirmDialog; + +/** + * Created by Julian on 07.07.2016. + */ +public class StartScreen extends GLScreen implements View.OnClickListener { + + private Rendering rendering; + + private Button play; + private Button unlockLevels; + private Button gain90EP; + private Button toGlTestScreen; + private Button settings; + + private ExitConfirmDialog exitConfirmDialog; + + public StartScreen(GameActivity gameActivity, MyGlSurfaceView glSurfaceView) throws Exception { + super(ScreenType.START, gameActivity, R.layout.start_screen, glSurfaceView); + + Typeface typeface = gameActivity.getTypeface(); + 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); + toGlTestScreen = createButton(R.id.startscreen_to_gl_test_screen, typeface); + settings = (Button) layout.findViewById(R.id.startscreen_settings); + settings.setOnClickListener(this); + + exitConfirmDialog = new ExitConfirmDialog(gameActivity); + + rendering = new StartScreenRendering(gameActivity); + glView.addRendering(rendering); + } + + private Button createButton(@IdRes int id, Typeface typeface) { + Button button = (Button) layout.findViewById(id); + button.setTypeface(typeface); + button.setOnClickListener(this); + return button; + } + + @Override + public void prepareToBeShown() { + glView.setCurrentRendering(rendering); + } + + @Override + public void onBackKeyDown() { + exitConfirmDialog.show(); + } + + @Override + public void onClick(View v) { + if (v.equals(play)) { + gameActivity.flipToScreen(ScreenType.WORLDS); + glView.setCurrentRendering(null); + } else if (v.equals(settings)) { + gameActivity.flipToScreen(ScreenType.SETTINGS); + glView.setCurrentRendering(null); + } else if (v.equals(gain90EP)) { + gameActivity.getUser().gainEp(90); + } else if (v.equals(unlockLevels)) { + gameActivity.getLevelManager().unlockAllLevels(); + gameActivity.getLevelManager().unlockAllPacks(); + } else if (v.equals(toGlTestScreen)) + gameActivity.flipToScreen(ScreenType.GL_TEST); + } + + +} diff --git a/app/src/main/java/de/frajul/endlessroll/main/screens/StartScreenRendering.java b/app/src/main/java/de/frajul/endlessroll/main/screens/StartScreenRendering.java new file mode 100644 index 0000000..d57a0c2 --- /dev/null +++ b/app/src/main/java/de/frajul/endlessroll/main/screens/StartScreenRendering.java @@ -0,0 +1,53 @@ +package de.frajul.endlessroll.main.screens; + +import android.view.MotionEvent; +import android.view.View; + +import de.frajul.endlessroll.entities.particles.ParticleSystem; +import de.frajul.endlessroll.entities.textures.TexturePack; +import de.frajul.endlessroll.main.GameActivity; +import de.frajul.endlessroll.main.GameLog; +import de.frajul.endlessroll.main.game.StartScene; +import de.frajul.endlessroll.main.game.Timer; +import de.frajul.endlessroll.rendering.Rendering; + +/** + * Created by Julian on 20.07.2016. + */ +public class StartScreenRendering extends Rendering { + + private Timer timer; + private ParticleSystem particleSystem; + + public StartScreenRendering(GameActivity gameActivity) throws Exception { + super(gameActivity); + this.particleSystem = new ParticleSystem(gameActivity); + } + + @Override + public StartScene init(TexturePack texturePack, Timer timer, boolean isFirstTime) { + GameLog.d("init Start Screen Rendering"); + this.timer = timer; + if (isFirstTime) + scene = new StartScene(texturePack, particleSystem); + else + scene.setTexturePack(texturePack); + try { + particleSystem.loadTextures(); + } catch (Exception e) { + } + return scene; + } + + @Override + public void update() { + particleSystem.update(timer); + scene.update(timer); + } + + @Override + public boolean onTouch(View v, MotionEvent event) { + return false; + } + +} diff --git a/app/src/main/java/de/frajul/endlessroll/main/screens/ToolShopScreen.java b/app/src/main/java/de/frajul/endlessroll/main/screens/ToolShopScreen.java new file mode 100644 index 0000000..8d39af0 --- /dev/null +++ b/app/src/main/java/de/frajul/endlessroll/main/screens/ToolShopScreen.java @@ -0,0 +1,171 @@ +package de.frajul.endlessroll.main.screens; + +import android.view.View; +import android.view.ViewGroup; +import android.widget.FrameLayout; +import android.widget.ImageView; +import android.widget.LinearLayout; +import android.widget.RelativeLayout; + +import java.util.ArrayList; +import java.util.List; + +import de.frajul.endlessroll.R; +import de.frajul.endlessroll.entities.tools.ToolSlot; +import de.frajul.endlessroll.entities.tools.ToolType; +import de.frajul.endlessroll.main.DataStorageHandler; +import de.frajul.endlessroll.main.GameActivity; +import de.frajul.endlessroll.main.tutorial.ToolShopTutorial; +import de.frajul.endlessroll.user.LevelUpBounties; +import de.frajul.endlessroll.user.ToolSlotSettings; +import de.frajul.endlessroll.views.ToolInspector; +import de.frajul.endlessroll.views.ToolOfferSlot; +import de.frajul.endlessroll.views.TopBar; + +/** + * Created by Julian on 08.07.2016. + */ +public class ToolShopScreen extends Screen implements View.OnClickListener { + + private LevelUpBounties levelUpBounties; + private ToolSlotSettings slotSettings; + private ToolOfferSlot selectedToolOfferSlot; + + private TopBar topBar; + private LinearLayout toolOfferTopRow; + private LinearLayout toolOfferBottomRow; + private List toolSlotViews = new ArrayList<>(); + private List toolOfferSlots = new ArrayList<>(); + + private ToolInspector toolInspector; + private ToolShopTutorial tutorial; + + public ToolShopScreen(GameActivity gameActivity) { + super(ScreenType.TOOL_SHOP, gameActivity, R.layout.toolshop); + this.levelUpBounties = new LevelUpBounties(0); + this.slotSettings = gameActivity.getUser().getToolSlotSettings(); + this.tutorial = gameActivity.getTutorialManager().getToolShopTutorial(); + tutorial.setFirstPartShown( + gameActivity.getDataStorageHandler().readToolShopTutorialPart1Finished()); + + topBar = super.createTopBar(R.id.toolshop_topbar); + toolSlotViews.add(getToolSlotView(R.id.toolshop_slot1)); + toolSlotViews.add(getToolSlotView(R.id.toolshop_slot2)); + toolSlotViews.add(getToolSlotView(R.id.toolshop_slot3)); + toolSlotViews.add(getToolSlotView(R.id.toolshop_slot4)); + toolOfferTopRow = (LinearLayout) layout.findViewById(R.id.toolshop_tool_offer_top_row); + toolOfferBottomRow = (LinearLayout) layout + .findViewById(R.id.toolshop_tool_offer_bottom_row); + + toolInspector = new ToolInspector(this, gameActivity, + layout.findViewById(R.id.toolshop_toolinspector)); + + LinearLayout.LayoutParams params = new LinearLayout.LayoutParams( + ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT); + params.setMargins(10, 0, 10, 0); + + int i = 0; + for (ToolType type : ToolType.values()) { + i++; + ToolOfferSlot slot = new ToolOfferSlot(this, gameActivity, gameActivity.getTypeface(), + type); + toolOfferSlots.add(slot); + if (i > 5) + toolOfferBottomRow.addView(slot.getLayout(), params); + else + toolOfferTopRow.addView(slot.getLayout(), params); + } + } + + private ImageView getToolSlotView(int id) { + FrameLayout slotLayout = (FrameLayout) layout.findViewById(id); + ImageView imageView = (ImageView) slotLayout.findViewById(R.id.toolslot_image); + imageView.setOnClickListener(this); + return imageView; + } + + @Override + public void prepareToBeShown() { + topBar.update(); + levelUpBounties.loadAllForLevel(gameActivity.getUser().getLevel()); + slotSettings.unlockSlotsIfLevelReached(levelUpBounties); + onToolOfferSlotSelected(toolOfferSlots.get(0)); + + for (int i = 0; i < toolSlotViews.size(); i++) { + ToolSlot toolSlot = slotSettings.get(i); + ImageView toolSlotView = toolSlotViews.get(i); + toolSlotView.setImageResource(toolSlot.getDrawable()); + } + for (ToolOfferSlot toolOfferSlot : toolOfferSlots) { + boolean locked = levelUpBounties.isToolLocked(toolOfferSlot.getToolType()); + toolOfferSlot.setLocked(locked); + toolOfferSlot.updateBackgroundColor(); + } + tutorial.onToolShopPrepare(!levelUpBounties.isToolLocked(ToolType.SPRING)); + if (tutorial.isOverNewBreakPoints()) { + gameActivity.showTutorialScreen(tutorial.getCurrentBreakPoints()); + gameActivity.getDataStorageHandler() + .writeToolShopTutorialPart1Finished(tutorial.isFirstPartShown()); + } + } + + public void onToolBought(int price, ToolType toolType) { + topBar.showStarcountDecrease(-price); + gameActivity.getUser().increaseStarCount(-price, false); + topBar.update(); + DataStorageHandler dataStorageHandler = gameActivity.getDataStorageHandler(); + dataStorageHandler.getDatabase().open(); + dataStorageHandler.getDatabase().writeToolData(); + dataStorageHandler.getDatabase().close(); + for (ToolOfferSlot toolOfferSlot : toolOfferSlots) { + toolOfferSlot.updateBackgroundColor(); + } + tutorial.onToolBought(toolType); + if (tutorial.isOverNewBreakPoints()) + gameActivity.showTutorialScreen(tutorial.getCurrentBreakPoints()); + } + + public void onToolUpgraded(int price) { + topBar.showEnergycountDecrease(-price); + gameActivity.getUser().increaseEnergyCount(-price, false); + topBar.update(); + DataStorageHandler dataStorageHandler = gameActivity.getDataStorageHandler(); + dataStorageHandler.getDatabase().open(); + dataStorageHandler.getDatabase().writeToolData(); + dataStorageHandler.getDatabase().close(); + } + + + public void onToolOfferSlotSelected(ToolOfferSlot slot) { + selectedToolOfferSlot = slot; + for (ToolOfferSlot toolOfferSlot : toolOfferSlots) + toolOfferSlot.setSelected(toolOfferSlot.equals(slot)); + toolInspector.update(slot.getToolType(), slot.isLocked()); + } + + @Override + public void onBackKeyDown() { + gameActivity.getDataStorageHandler().writeUserData(gameActivity.getUser()); + flipToCaller(); + } + + @Override + public void onClick(View v) { + ImageView toolSlotView = (ImageView) v; + int index = toolSlotViews.indexOf(toolSlotView); + if (canSelectedToolBePutInSlot(index)) { + slotSettings.changeToolSlotType(index, selectedToolOfferSlot.getToolType()); + for (int i = 0; i < toolSlotViews.size(); i++) { + ToolSlot toolSlot = slotSettings.get(i); + ImageView view = toolSlotViews.get(i); + view.setImageResource(toolSlot.getDrawable()); + } + } + } + + private boolean canSelectedToolBePutInSlot(int slotIndex) { + return slotIndex != -1 && !slotSettings.get(slotIndex) + .isLocked() && selectedToolOfferSlot != null && selectedToolOfferSlot.getToolType() + .isBought(); + } +} diff --git a/app/src/main/java/de/frajul/endlessroll/main/screens/WorldsScreen.java b/app/src/main/java/de/frajul/endlessroll/main/screens/WorldsScreen.java new file mode 100644 index 0000000..475ca36 --- /dev/null +++ b/app/src/main/java/de/frajul/endlessroll/main/screens/WorldsScreen.java @@ -0,0 +1,61 @@ +package de.frajul.endlessroll.main.screens; + +import android.view.ViewGroup; +import android.widget.LinearLayout; +import android.widget.RelativeLayout; + +import java.util.ArrayList; +import java.util.List; + +import de.frajul.endlessroll.R; +import de.frajul.endlessroll.levels.LevelPack; +import de.frajul.endlessroll.main.GameActivity; +import de.frajul.endlessroll.views.TopBar; +import de.frajul.endlessroll.views.WorldButton; +import de.frajul.endlessroll.views.WorldButtonOnClickListener; + +/** + * Created by Julian on 07.07.2016. + */ +public class WorldsScreen extends Screen implements WorldButtonOnClickListener { + + private List worldButtons = new ArrayList<>(); + private TopBar topBar; + private LinearLayout buttonLayout; + + public WorldsScreen(GameActivity gameActivity) { + super(ScreenType.WORLDS, gameActivity, R.layout.worlds); + topBar = super.createTopBar(R.id.worlds_topbar); + buttonLayout = (LinearLayout) layout.findViewById(R.id.worlds_layout); + LinearLayout.LayoutParams params = new LinearLayout.LayoutParams( + ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT); + params.setMargins(25, 0, 25, 0); + + for (LevelPack levelPack : gameActivity.getLevelManager()) { + WorldButton button = new WorldButton(gameActivity, levelPack, this); + buttonLayout.addView(button.getView(), params); + worldButtons.add(button); + } + } + + @Override + public void prepareToBeShown() { + topBar.update(); + for (WorldButton button : worldButtons) + button.update(); + } + + @Override + public void onBackKeyDown() { + flipTo(ScreenType.START); + } + + @Override + public void onClick(WorldButton worldButton) { + LevelPack levelPack = worldButton.getLevelPack(); + if (!levelPack.isLocked()) { + gameActivity.onWorldSelected(levelPack); + gameActivity.flipToScreen(ScreenType.LEVELS); + } + } +} diff --git a/app/src/main/java/de/frajul/endlessroll/main/tutorial/BreakPoint.java b/app/src/main/java/de/frajul/endlessroll/main/tutorial/BreakPoint.java new file mode 100644 index 0000000..a4eeee6 --- /dev/null +++ b/app/src/main/java/de/frajul/endlessroll/main/tutorial/BreakPoint.java @@ -0,0 +1,47 @@ +package de.frajul.endlessroll.main.tutorial; + +import android.support.annotation.DrawableRes; +import android.support.annotation.StringRes; + +/** + * Created by Julian on 14.03.2017. + */ + +public class BreakPoint { + + public final static float LEVEL_FINISHED_X = -1; + + private float x; + private boolean alreadyShown = false; + @StringRes + private int textId; + @DrawableRes + private int imageId; + + public BreakPoint(float x, @StringRes int textId, @DrawableRes int imageId) { + this.x = x; + this.textId = textId; + this.imageId = imageId; + } + + public float getX() { + return x; + } + + public int getTextId() { + return textId; + } + + public int getImageId() { + return imageId; + } + + public void setAlreadyShown(boolean alreadyShown) { + this.alreadyShown = alreadyShown; + } + + public boolean isAlreadyShown() { + return alreadyShown; + } + +} diff --git a/app/src/main/java/de/frajul/endlessroll/main/tutorial/Tutorial.java b/app/src/main/java/de/frajul/endlessroll/main/tutorial/Tutorial.java new file mode 100644 index 0000000..6118407 --- /dev/null +++ b/app/src/main/java/de/frajul/endlessroll/main/tutorial/Tutorial.java @@ -0,0 +1,72 @@ +package de.frajul.endlessroll.main.tutorial; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; + +/** + * Created by Julian on 14.03.2017. + */ + +public class Tutorial { + + private int levelId, levelPackId; + private List breakPoints; + protected List currentBreakPoints = new ArrayList<>(); + + public Tutorial(int levelId, int levelPackId, BreakPoint... breakPoints) { + this.levelId = levelId; + this.levelPackId = levelPackId; + this.breakPoints = Arrays.asList(breakPoints); + } + + public void reset() { + for (BreakPoint breakPoint : breakPoints) + breakPoint.setAlreadyShown(false); + currentBreakPoints.clear(); + } + + public void onLevelFinished() { + currentBreakPoints.clear(); + + for (BreakPoint breakPoint : breakPoints) { + if (breakPoint.getX() == BreakPoint.LEVEL_FINISHED_X) { + breakPoint.setAlreadyShown(true); + currentBreakPoints.add(breakPoint); + } + } + } + + public void update(float playerProgress) { + playerProgress *= 2f; + currentBreakPoints.clear(); + + for (BreakPoint breakPoint : breakPoints) { + if (!breakPoint.isAlreadyShown() && playerProgress >= breakPoint.getX() && breakPoint + .getX() != BreakPoint.LEVEL_FINISHED_X) { + breakPoint.setAlreadyShown(true); + currentBreakPoints.add(breakPoint); + } + } + } + + public boolean isOverNewBreakPoints() { + return !currentBreakPoints.isEmpty(); + } + + public List getCurrentBreakPoints() { + return currentBreakPoints; + } + + public List getBreakPoints() { + return breakPoints; + } + + public int getLevelId() { + return levelId; + } + + public int getLevelPackId() { + return levelPackId; + } +} \ No newline at end of file diff --git a/app/src/main/java/de/frajul/endlessroll/main/tutorial/TutorialManager.java b/app/src/main/java/de/frajul/endlessroll/main/tutorial/TutorialManager.java new file mode 100644 index 0000000..e02913c --- /dev/null +++ b/app/src/main/java/de/frajul/endlessroll/main/tutorial/TutorialManager.java @@ -0,0 +1,56 @@ +package de.frajul.endlessroll.main.tutorial; + +import java.util.Arrays; +import java.util.List; + +import de.frajul.endlessroll.R; +import de.frajul.endlessroll.levels.Level; + +/** + * Created by Julian on 17.03.2017. + */ + +public class TutorialManager { + + private List gameTutorials; + private ToolShopTutorial toolShopTutorial; + + public TutorialManager() { + Tutorial t11 = new Tutorial(1, 1, new BreakPoint(0, R.string.tutorial_welcome, -1), + new BreakPoint(0, R.string.tutorial_place_tools, R.drawable.tutorial_place_tools), + new BreakPoint(7, R.string.tutorial_place_ramp_gap, + R.drawable.tutorial_place_ramp_gap), + new BreakPoint(21, R.string.tutorial_place_ramp_obstacle, + R.drawable.tutorial_place_ramp_obstacle)); + Tutorial t21 = new Tutorial(2, 1, new BreakPoint(11, R.string.tutorial_place_ramp_air, + R.drawable.tutorial_place_ramp_air_1), + new BreakPoint(33, R.string.tutorial_place_ramp_air_2, + R.drawable.tutorial_place_ramp_air_2)); + Tutorial t51 = new Tutorial(5, 1, + new BreakPoint(BreakPoint.LEVEL_FINISHED_X, R.string.tutorial_leveled_up, -1), + new BreakPoint(BreakPoint.LEVEL_FINISHED_X, R.string.tutorial_to_toolshop, + R.drawable.tutorial_to_toolshop)); + + gameTutorials = Arrays.asList(t11, t21, t51); + + toolShopTutorial = new ToolShopTutorial(); + } + + public void resetGameTutorials() { + for (Tutorial tutorial : gameTutorials) + tutorial.reset(); + } + + public Tutorial getGameTutorial(Level level) { + for (Tutorial tutorial : gameTutorials) { + if (tutorial.getLevelPackId() == level.getPackId() && tutorial.getLevelId() == level + .getId()) + return tutorial; + } + return null; + } + + public ToolShopTutorial getToolShopTutorial() { + return toolShopTutorial; + } +} diff --git a/app/src/main/java/de/frajul/endlessroll/main/tutorial/TutorialView.java b/app/src/main/java/de/frajul/endlessroll/main/tutorial/TutorialView.java new file mode 100644 index 0000000..289c0dc --- /dev/null +++ b/app/src/main/java/de/frajul/endlessroll/main/tutorial/TutorialView.java @@ -0,0 +1,85 @@ +package de.frajul.endlessroll.main.tutorial; + +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.ImageView; +import android.widget.TextView; + +import java.util.List; + +import de.frajul.endlessroll.R; +import de.frajul.endlessroll.main.GameActivity; + +/** + * Created by Julian on 24.02.2017. + */ + +public class TutorialView implements View.OnClickListener { + + private View layout; + private TextView textView; + private ImageView imageView; + private GameActivity activity; + + private List breakPoints; + + public TutorialView(GameActivity activity) { + this.activity = activity; + LayoutInflater inflater = LayoutInflater.from(activity); + layout = inflater.inflate(R.layout.tutorial, null); + layout.setVisibility(View.GONE); + layout.setOnClickListener(this); + layout.setLayoutParams(new ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, + ViewGroup.LayoutParams.MATCH_PARENT)); + textView = (TextView) layout.findViewById(R.id.tutorial_text_view); + textView.setTypeface(activity.getTypeface()); + imageView = (ImageView) layout.findViewById(R.id.tutorial_image_view); + } + + public View getLayout() { + return layout; + } + + public void show(List breakPoints) { + this.breakPoints = breakPoints; + if(!breakPoints.isEmpty()) + showFirstBreakPoint(); + } + + public boolean isShowingTutorial() { + return layout.getVisibility() == View.VISIBLE; + } + + private void showFirstBreakPoint() { + int textId = breakPoints.get(0).getTextId(); + int imageId = breakPoints.get(0).getImageId(); + + if (textId == -1) + textView.setVisibility(View.INVISIBLE); + else { + textView.setVisibility(View.VISIBLE); + textView.setText(textId); + } + if (imageId == -1) + imageView.setVisibility(View.INVISIBLE); + else { + imageView.setVisibility(View.VISIBLE); + imageView.setImageResource(imageId); + } + layout.setVisibility(View.VISIBLE); + } + + @Override + public void onClick(View v) { + if(breakPoints.size() == 0) + return; + breakPoints.remove(0); + if (!breakPoints.isEmpty()) { + showFirstBreakPoint(); + } else { + layout.setVisibility(View.GONE); + activity.onTutorialViewHidden(); + } + } +} diff --git a/app/src/main/java/de/frajul/endlessroll/rendering/Fbo.java b/app/src/main/java/de/frajul/endlessroll/rendering/Fbo.java new file mode 100644 index 0000000..1f9a860 --- /dev/null +++ b/app/src/main/java/de/frajul/endlessroll/rendering/Fbo.java @@ -0,0 +1,47 @@ +package de.frajul.endlessroll.rendering; + +import android.opengl.GLES20; + +import javax.microedition.khronos.opengles.GL11; + +/** + * Created by Julian on 06.08.2016. + */ +public class Fbo { + + private int frameBuffer; + private int texture; + + public Fbo(int width, int height) { + int[] frameBuffers = new int[1]; + GLES20.glGenFramebuffers(1, frameBuffers, 0); + this.frameBuffer = frameBuffers[0]; + bind(); + + int[] textures = new int[1]; + GLES20.glGenTextures(1, textures, 0); + this.texture = textures[0]; + GLES20.glBindTexture(GLES20.GL_TEXTURE_2D, texture); + GLES20.glTexImage2D(GLES20.GL_TEXTURE_2D, 0, GLES20.GL_RGBA, width, height, 0, GLES20.GL_RGBA, GL11.GL_UNSIGNED_BYTE, null); + GLES20.glTexParameteri(GLES20.GL_TEXTURE_2D, GLES20.GL_TEXTURE_MIN_FILTER, GLES20.GL_LINEAR); + GLES20.glTexParameteri(GLES20.GL_TEXTURE_2D, GLES20.GL_TEXTURE_MAG_FILTER, GLES20.GL_LINEAR); + GLES20.glTexParameteri(GLES20.GL_TEXTURE_2D, GLES20.GL_TEXTURE_WRAP_S, GLES20.GL_NONE); + GLES20.glTexParameteri(GLES20.GL_TEXTURE_2D, GLES20.GL_TEXTURE_WRAP_T, GLES20.GL_NONE); + GLES20.glFramebufferTexture2D(GLES20.GL_FRAMEBUFFER, GLES20.GL_COLOR_ATTACHMENT0, GLES20.GL_TEXTURE_2D, texture, 0); + + unbind(); + } + + public void bind() { + GLES20.glBindFramebuffer(GLES20.GL_FRAMEBUFFER, frameBuffer); + } + + public void unbind() { + GLES20.glBindFramebuffer(GLES20.GL_FRAMEBUFFER, 0); + GLES20.glBindTexture(GLES20.GL_TEXTURE_2D, 0); + } + + public int getTexture() { + return texture; + } +} diff --git a/app/src/main/java/de/frajul/endlessroll/rendering/Lock.java b/app/src/main/java/de/frajul/endlessroll/rendering/Lock.java new file mode 100644 index 0000000..c09a2c3 --- /dev/null +++ b/app/src/main/java/de/frajul/endlessroll/rendering/Lock.java @@ -0,0 +1,22 @@ +package de.frajul.endlessroll.rendering; + +public class Lock { + + private boolean isLocked = false; + + public synchronized void lock() { + while (isLocked) { + try { + wait(); + } catch (Exception e) { + e.printStackTrace(); + } + } + isLocked = true; + } + + public synchronized void unlock() { + isLocked = false; + notify(); + } +} \ No newline at end of file diff --git a/app/src/main/java/de/frajul/endlessroll/rendering/MatrixCreator.java b/app/src/main/java/de/frajul/endlessroll/rendering/MatrixCreator.java new file mode 100644 index 0000000..9b21be8 --- /dev/null +++ b/app/src/main/java/de/frajul/endlessroll/rendering/MatrixCreator.java @@ -0,0 +1,50 @@ +package de.frajul.endlessroll.rendering; + +import android.opengl.Matrix; + +import de.frajul.endlessroll.data.Vector; +import de.frajul.endlessroll.entities.Entity; +import de.frajul.endlessroll.main.game.Camera; + +/** + * Created by Julian on 23.11.2015. + */ +public class MatrixCreator { + + private float width, height; + + public void setMVPMSize(float width, float height) { + this.width = width; + this.height = height; + } + + public float[] createModelViewProjectionMatrix(Camera camera) { + float[] mvpMatrix = new float[16]; + float[] projectionMatrix = new float[16]; + float[] viewMatrix = new float[16]; + + float ratio = width / height; + Matrix.frustumM(projectionMatrix, 0, -ratio + camera.getX(), ratio + camera.getX(), -1 + camera.getY(), 1 + camera.getY(), 1, 2); + Matrix.setLookAtM(viewMatrix, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0); + Matrix.multiplyMM(mvpMatrix, 0, projectionMatrix, 0, viewMatrix, 0); + return mvpMatrix; + } + + public float[] createTransformationMatrix(Entity entity) { + float width = entity.getWidth(); + float height = entity.getHeight(); + float rotation = entity.getRotation(); + Vector position = entity.getPosition(); + return createTransformationMatrix(width, height, rotation, position); + } + + public float[] createTransformationMatrix(float width, float height, float rotation, Vector position) { + float[] transformationMatrix = new float[16]; + Matrix.setIdentityM(transformationMatrix, 0); + Matrix.translateM(transformationMatrix, 0, position.x, position.y, 0); + Matrix.rotateM(transformationMatrix, 0, rotation, 0, 0, 1); + Matrix.scaleM(transformationMatrix, 0, width * .5f, height * .5f, 0); + return transformationMatrix; + } + +} diff --git a/app/src/main/java/de/frajul/endlessroll/rendering/Quad.java b/app/src/main/java/de/frajul/endlessroll/rendering/Quad.java new file mode 100644 index 0000000..8daa0b2 --- /dev/null +++ b/app/src/main/java/de/frajul/endlessroll/rendering/Quad.java @@ -0,0 +1,49 @@ +package de.frajul.endlessroll.rendering; + +import android.opengl.GLES20; + +import java.nio.ByteBuffer; +import java.nio.ByteOrder; +import java.nio.FloatBuffer; + +/** + * Created by Julian on 26.11.2015. + */ +public class Quad { + + private FloatBuffer vertexBuffer; + private FloatBuffer textureBuffer; + + private float vertices[] = {1.0f, 1.0f, -1.0f, -1.0f, 1.0f, -1.0f, + 1.0f, 1.0f, -1.0f, 1.0f, -1.0f, -1.0f}; + + private float textures[] = {1.0f, 0.0f, 0.0f, 1.0f, 1.0f, 1.0f, + 1.0f, 0.0f, 0.0f, 0.0f, 0.0f, 1.0f}; + + public Quad() { + vertexBuffer = createEmptyFloatBuffer(); + vertexBuffer.put(vertices); + vertexBuffer.position(0); + + textureBuffer = createEmptyFloatBuffer(); + textureBuffer.put(textures); + textureBuffer.position(0); + } + + private FloatBuffer createEmptyFloatBuffer() { + ByteBuffer bb = ByteBuffer.allocateDirect(vertices.length * 4); + bb.order(ByteOrder.nativeOrder()); + return bb.asFloatBuffer(); + } + + public void draw() { + GLES20.glEnableVertexAttribArray(0); + GLES20.glEnableVertexAttribArray(1); + GLES20.glVertexAttribPointer(0, 2, GLES20.GL_FLOAT, false, 0, vertexBuffer); + GLES20.glVertexAttribPointer(1, 2, GLES20.GL_FLOAT, false, 0, textureBuffer); + GLES20.glDrawArrays(GLES20.GL_TRIANGLES, 0, vertices.length / 2); + GLES20.glDisableVertexAttribArray(1); + GLES20.glDisableVertexAttribArray(0); + } + +} diff --git a/app/src/main/java/de/frajul/endlessroll/rendering/Rendering.java b/app/src/main/java/de/frajul/endlessroll/rendering/Rendering.java new file mode 100644 index 0000000..eaefeac --- /dev/null +++ b/app/src/main/java/de/frajul/endlessroll/rendering/Rendering.java @@ -0,0 +1,51 @@ +package de.frajul.endlessroll.rendering; + +import android.content.Context; +import android.view.View; + +import de.frajul.endlessroll.data.Vector; +import de.frajul.endlessroll.entities.textures.TexturePack; +import de.frajul.endlessroll.main.GameActivity; +import de.frajul.endlessroll.main.game.Scene; +import de.frajul.endlessroll.main.game.Timer; + +/** + * Created by Julian on 26.11.2015. + */ +public abstract class Rendering implements View.OnTouchListener { + + protected S scene; + private GameActivity gameActivity; + private boolean alreadyInitiated = false; + + public Rendering(GameActivity gameActivity) { + this.gameActivity = gameActivity; + } + + public void initiate(TexturePack texturePack, Timer timer) { + this.scene = init(texturePack, timer, !alreadyInitiated); + alreadyInitiated = true; + } + + protected abstract S init(TexturePack texturePack, Timer timer, boolean isFirstTime); + + public abstract void update(); + + public void onException(Exception e) { + gameActivity.onException(e); + } + + public void setScreenSize(int width, int height) { + if (scene != null) + scene.setScreenSize(new Vector(width, height)); + } + + public Scene getScene() { + return scene; + } + + public Context getContext() { + return gameActivity; + } + +} diff --git a/app/src/main/java/de/frajul/endlessroll/rendering/renderer/GameRenderer.java b/app/src/main/java/de/frajul/endlessroll/rendering/renderer/GameRenderer.java new file mode 100644 index 0000000..8c1555e --- /dev/null +++ b/app/src/main/java/de/frajul/endlessroll/rendering/renderer/GameRenderer.java @@ -0,0 +1,212 @@ +package de.frajul.endlessroll.rendering.renderer; + +import android.opengl.GLES20; +import android.opengl.GLSurfaceView; + +import java.util.ArrayList; +import java.util.List; + +import javax.microedition.khronos.egl.EGLConfig; +import javax.microedition.khronos.opengles.GL10; + +import de.frajul.endlessroll.entities.Entity; +import de.frajul.endlessroll.entities.Obstacle; +import de.frajul.endlessroll.entities.textures.TexturePack; +import de.frajul.endlessroll.entities.tileLists.Tile; +import de.frajul.endlessroll.entities.tileLists.TileList; +import de.frajul.endlessroll.main.GameActivity; +import de.frajul.endlessroll.main.GameLog; +import de.frajul.endlessroll.main.game.Camera; +import de.frajul.endlessroll.main.game.Scene; +import de.frajul.endlessroll.main.game.Timer; +import de.frajul.endlessroll.rendering.MatrixCreator; +import de.frajul.endlessroll.rendering.Quad; +import de.frajul.endlessroll.rendering.Rendering; +import de.frajul.endlessroll.rendering.shader.EntityShader; +import de.frajul.endlessroll.rendering.shader.ObstacleShader; +import de.frajul.endlessroll.rendering.shader.SimpleShader; +import de.frajul.endlessroll.rendering.shader.TerrainShader; + +/** + * Created by Julian on 22.11.2015. + */ +public class GameRenderer implements GLSurfaceView.Renderer { + + private List renderTargets = new ArrayList<>(); + private Rendering currentRendering; + private MatrixCreator matrixCreator; + + private GameActivity activity; + private Quad quad; + + private ParticleRenderer particleRenderer; + + private EntityShader entityShader; + private ObstacleShader obstacleShader; + private TerrainShader terrainShader; + private SimpleShader simpleShader; + + private TexturePack texturePack; + private Timer timer; + + public GameRenderer(GameActivity activity) { + this.activity = activity; + matrixCreator = new MatrixCreator(); + quad = new Quad(); + particleRenderer = new ParticleRenderer(activity, quad, matrixCreator); + } + + public void addRendering(Rendering rendering) { + renderTargets.add(rendering); + } + + public synchronized void setCurrentRendering(Rendering currentRendering) { + this.currentRendering = currentRendering; + } + + @Override + public void onSurfaceCreated(GL10 gl, EGLConfig config) { + GameLog.d("onSurfaceCreated"); + GLES20.glClearColor(1, 1, 1, 1.0f); + gl.glEnable(GL10.GL_BLEND); + gl.glBlendFunc(GL10.GL_SRC_ALPHA, GL10.GL_ONE_MINUS_SRC_ALPHA); + + try { + particleRenderer.createContext(); + entityShader = new EntityShader(activity); + obstacleShader = new ObstacleShader(activity); + terrainShader = new TerrainShader(activity); + simpleShader = new SimpleShader(activity); + texturePack = new TexturePack(activity); + timer = new Timer(); + } catch (Exception e) { + for (Rendering rendering : renderTargets) + rendering.onException(e); + } + for (Rendering rendering : renderTargets) { + rendering.initiate(texturePack, timer); + } + } + + @Override + public void onSurfaceChanged(GL10 gl, int width, int height) { + GameLog.d("onSurfaceChanged: width=" + width + ", height=" + height); + particleRenderer.createFbo(width, height); + GLES20.glViewport(0, 0, width, height); + matrixCreator.setMVPMSize(width, height); + for (Rendering rendering : renderTargets) + rendering.setScreenSize(width, height); + activity.onSurfaceChanged(); + } + + @Override + public synchronized void onDrawFrame(GL10 gl) { + timer.update(); + if (currentRendering != null) { + currentRendering.update(); + Scene scene = currentRendering.getScene(); + + particleRenderer.renderParticlesToFbo(gl, scene); + + GLES20.glClearColor(1, 1, 1, 1.0f); + GLES20.glClear(GLES20.GL_COLOR_BUFFER_BIT); + + renderBackground(gl, scene); + renderTileList(gl, scene.getTerrain(), scene); + renderTileList(gl, scene.getCeiling(), scene); + renderEntityList(gl, scene.getCollectables(), scene.getCamera()); + renderObstacles(gl, scene); + renderEntityList(gl, scene.getTools(), scene.getCamera()); + + renderEntityList(gl, scene.getUncategorizedEntities(), scene.getCamera()); + + renderFbo(gl); + } + } + + private void renderBackground(GL10 gl, Scene scene) { + entityShader.start(); + entityShader.loadMVPMatrix(matrixCreator, scene.getCamera()); + synchronized (scene.getBackground()) { + for (Entity backgroundPart : scene.getBackground()) + renderEntity(gl, backgroundPart); + } + entityShader.stop(); + } + + private void renderObstacles(GL10 gl, Scene scene) { + List obstacles = scene.getObstacles(); + obstacleShader.start(); + obstacleShader.loadMVPMatrix(matrixCreator, scene.getCamera()); + synchronized (obstacles) { + for (Obstacle obstacle : obstacles) + renderObstacle(gl, obstacle); + } + obstacleShader.stop(); + } + + + private void renderObstacle(GL10 gl, Obstacle obstacle) { + gl.glActiveTexture(GL10.GL_TEXTURE0); + gl.glBindTexture(GL10.GL_TEXTURE_2D, obstacle.getTexture().getId()); + obstacleShader.loadTransformationMatrix(matrixCreator, obstacle); + obstacleShader.loadAlpha(obstacle.getAlpha()); + obstacleShader.loadTextureAtlasInfos(obstacle.getTexture()); + obstacleShader.loadGridSize(obstacle.getGridSize()); + obstacleShader.loadDeadly(obstacle.isDeadly()); + obstacleShader.loadFloating(obstacle.isFloating()); + quad.draw(); + } + + private void renderEntityList(GL10 gl, List list, Camera camera) { + entityShader.start(); + entityShader.loadMVPMatrix(matrixCreator, camera); + synchronized (list) { + for (Entity entity : list) { + renderEntity(gl, entity); + } + } + entityShader.stop(); + } + + private void renderEntity(GL10 gl, Entity entity) { + if (!entity.isVisible()) + return; + + gl.glActiveTexture(GL10.GL_TEXTURE0); + gl.glBindTexture(GL10.GL_TEXTURE_2D, entity.getTexture().getId()); + entityShader.loadTransformationMatrix(matrixCreator, entity); + entityShader.loadAlpha(entity.getAlpha()); + entityShader.loadTextureAtlasInfos(entity.getTexture(), entity.getTextureAtlasIndex()); + float texScaleX = entity.getMaxTexSize().x == 0 ? 1 : entity.getWidth() / entity + .getMaxTexSize().x; + float texScaleY = entity.getMaxTexSize().y == 0 ? 1 : entity.getHeight() / entity + .getMaxTexSize().y; + entityShader.loadTexCoordScaling(texScaleX, texScaleY); + quad.draw(); + } + + private void renderTileList(GL10 gl, TileList tileList, Scene scene) { + terrainShader.start(); + terrainShader.loadMVPMatrix(matrixCreator, scene.getCamera()); + synchronized (tileList) { + for (Tile tile : tileList) { + gl.glActiveTexture(GL10.GL_TEXTURE0); + gl.glBindTexture(GL10.GL_TEXTURE_2D, tile.getTexture().getId()); + terrainShader.loadTransformationMatrix(matrixCreator, tile); + quad.draw(); + } + } + terrainShader.stop(); + } + + private void renderFbo(GL10 gl) { + simpleShader.start(); + gl.glActiveTexture(GL10.GL_TEXTURE0); + gl.glBindTexture(GL10.GL_TEXTURE_2D, particleRenderer.getFboTexture()); + quad.draw(); + simpleShader.stop(); + } + + +} diff --git a/app/src/main/java/de/frajul/endlessroll/rendering/renderer/ParticleRenderer.java b/app/src/main/java/de/frajul/endlessroll/rendering/renderer/ParticleRenderer.java new file mode 100644 index 0000000..368a384 --- /dev/null +++ b/app/src/main/java/de/frajul/endlessroll/rendering/renderer/ParticleRenderer.java @@ -0,0 +1,106 @@ +package de.frajul.endlessroll.rendering.renderer; + +import android.content.Context; +import android.opengl.GLES20; + +import de.frajul.endlessroll.entities.particles.Particle; +import de.frajul.endlessroll.entities.particles.ParticleEffect; +import de.frajul.endlessroll.entities.particles.ParticleSource; +import de.frajul.endlessroll.main.GameLog; +import de.frajul.endlessroll.main.game.Scene; +import de.frajul.endlessroll.rendering.Fbo; +import de.frajul.endlessroll.rendering.MatrixCreator; +import de.frajul.endlessroll.rendering.Quad; +import de.frajul.endlessroll.rendering.shader.ParticleShader; + +import javax.microedition.khronos.opengles.GL10; + +/** + * Created by Julian on 10.08.2016. + */ +public class ParticleRenderer { + + private Context context; + private Quad quad; + private MatrixCreator matrixCreator; + private boolean additiveBlending = false; + + private ParticleShader particleShader; + private Fbo fbo; + + public ParticleRenderer(Context context, Quad quad, MatrixCreator matrixCreator) { + this.context = context; + this.quad = quad; + this.matrixCreator = matrixCreator; + } + + public void createContext() throws Exception { + particleShader = new ParticleShader(context); + } + + public void createFbo(int width, int height) { + fbo = new Fbo(width, height); + } + + public void renderParticlesToFbo(GL10 gl, Scene scene) { + fbo.bind(); + GLES20.glClearColor(0, 0, 0, 0.0f); + GLES20.glClear(GLES20.GL_COLOR_BUFFER_BIT); + + particleShader.start(); + particleShader.loadMVPMatrix(matrixCreator, scene.getCamera()); + synchronized (scene.getParticleSystem().getEffects()) { + for (ParticleEffect effect : scene.getParticleSystem().getEffects()) { + gl.glActiveTexture(GL10.GL_TEXTURE0); + gl.glBindTexture(GL10.GL_TEXTURE_2D, effect.getTexture().getId()); + + switchAdditiveBlending(gl, effect.getOptions().isAdditive()); + synchronized (effect.getSources()) { + for (ParticleSource source : effect.getSources()) { + source.getActiveParticleLock().lock(); + for (Particle particle : source.getActiveParticles()) + renderParticle(particle); + source.getActiveParticleLock().unlock(); + } + } + } + } + disableAdditiveBlending(gl); + + particleShader.stop(); + fbo.unbind(); + } + + + private void renderParticle(Particle particle) { + particleShader.loadTransformationMatrix(matrixCreator, particle); + particleShader.loadColor(particle.getColor()); + particleShader.loadAlpha(particle.getAlpha()); + quad.draw(); + } + + private void switchAdditiveBlending(GL10 gl, boolean additive) { + if (additive && !additiveBlending) + enableAdditiveBlending(gl); + if (!additive && additiveBlending) + disableAdditiveBlending(gl); + } + + private void enableAdditiveBlending(GL10 gl) { + if (!additiveBlending) { + additiveBlending = true; + gl.glBlendFunc(GL10.GL_SRC_ALPHA, GL10.GL_ONE); + } + } + + private void disableAdditiveBlending(GL10 gl) { + if (additiveBlending) { + additiveBlending = false; + gl.glBlendFunc(GL10.GL_SRC_ALPHA, GL10.GL_ONE_MINUS_SRC_ALPHA); + } + } + + public int getFboTexture() { + return fbo.getTexture(); + } +} diff --git a/app/src/main/java/de/frajul/endlessroll/rendering/shader/EntityShader.java b/app/src/main/java/de/frajul/endlessroll/rendering/shader/EntityShader.java new file mode 100644 index 0000000..0c16c71 --- /dev/null +++ b/app/src/main/java/de/frajul/endlessroll/rendering/shader/EntityShader.java @@ -0,0 +1,60 @@ +package de.frajul.endlessroll.rendering.shader; + +import android.content.Context; +import android.opengl.GLES20; + +import de.frajul.endlessroll.entities.Entity; +import de.frajul.endlessroll.entities.textures.Texture; +import de.frajul.endlessroll.main.game.Camera; +import de.frajul.endlessroll.rendering.MatrixCreator; + +/** + * Created by Julian on 10.08.2016. + */ +public class EntityShader extends ShaderProgram { + + private int location_mvpMatrix; + private int location_transformationMatrix; + private int location_alpha; + private int location_texAtlasSize; + private int location_texAtlasIndex; + private int location_texCoordScaling; + + public EntityShader(Context context) throws Exception { + super(context, "shader/entityVertexShader.glsl", "shader/entityFragmentShader.glsl"); + } + + @Override + protected void loadUniformLocations() { + location_mvpMatrix = super.getUniformLocation("mvpMatrix"); + location_transformationMatrix = super.getUniformLocation("transformationMatrix"); + location_alpha = super.getUniformLocation("alpha"); + location_texAtlasSize = super.getUniformLocation("texAtlasSize"); + location_texAtlasIndex = super.getUniformLocation("texAtlasIndex"); + location_texCoordScaling = super.getUniformLocation("texCoordScaling"); + } + + public void loadMVPMatrix(MatrixCreator matrixCreator, Camera camera) { + float[] mvpMatrix = matrixCreator.createModelViewProjectionMatrix(camera); + GLES20.glUniformMatrix4fv(location_mvpMatrix, 1, false, mvpMatrix, 0); + } + + public void loadTransformationMatrix(MatrixCreator matrixCreator, Entity entity) { + float[] transformationMatrix = matrixCreator.createTransformationMatrix(entity); + GLES20.glUniformMatrix4fv(location_transformationMatrix, 1, false, transformationMatrix, 0); + } + + public void loadAlpha(float alpha) { + GLES20.glUniform1f(location_alpha, alpha); + } + + public void loadTextureAtlasInfos(Texture texture, int atlasIndex) { + GLES20.glUniform2f(location_texAtlasSize, texture.getAtlasWidth(), texture.getAtlasHeight()); + GLES20.glUniform1f(location_texAtlasIndex, atlasIndex); + } + + public void loadTexCoordScaling(float scalingX, float scalingY){ + GLES20.glUniform2f(location_texCoordScaling, scalingX, scalingY); + } + +} diff --git a/app/src/main/java/de/frajul/endlessroll/rendering/shader/ParticleShader.java b/app/src/main/java/de/frajul/endlessroll/rendering/shader/ParticleShader.java new file mode 100644 index 0000000..fab4e05 --- /dev/null +++ b/app/src/main/java/de/frajul/endlessroll/rendering/shader/ParticleShader.java @@ -0,0 +1,51 @@ +package de.frajul.endlessroll.rendering.shader; + +import android.content.Context; +import android.opengl.GLES20; + +import de.frajul.endlessroll.data.Color; +import de.frajul.endlessroll.entities.Entity; +import de.frajul.endlessroll.main.game.Camera; +import de.frajul.endlessroll.rendering.MatrixCreator; + +/** + * Created by Julian on 10.08.2016. + */ +public class ParticleShader extends ShaderProgram { + + private int location_mvpMatrix; + private int location_transformationMatrix; + private int location_color; + private int location_alpha; + + public ParticleShader(Context context) throws Exception { + super(context, "shader/entityVertexShader.glsl", "shader/particleFragmentShader.glsl"); + } + + @Override + protected void loadUniformLocations() { + location_mvpMatrix = super.getUniformLocation("mvpMatrix"); + location_transformationMatrix = super.getUniformLocation("transformationMatrix"); + location_color = super.getUniformLocation("color"); + location_alpha = super.getUniformLocation("alpha"); + } + + public void loadMVPMatrix(MatrixCreator matrixCreator, Camera camera) { + float[] mvpMatrix = matrixCreator.createModelViewProjectionMatrix(camera); + GLES20.glUniformMatrix4fv(location_mvpMatrix, 1, false, mvpMatrix, 0); + } + + public void loadTransformationMatrix(MatrixCreator matrixCreator, Entity entity) { + float[] transformationMatrix = matrixCreator.createTransformationMatrix(entity); + GLES20.glUniformMatrix4fv(location_transformationMatrix, 1, false, transformationMatrix, 0); + } + + public void loadAlpha(float alpha){ + GLES20.glUniform1f(location_alpha, alpha); + } + + public void loadColor(Color color) { + GLES20.glUniform3f(location_color, color.getR(), color.getG(), color.getB()); + } + +} diff --git a/app/src/main/java/de/frajul/endlessroll/rendering/shader/ShaderProgram.java b/app/src/main/java/de/frajul/endlessroll/rendering/shader/ShaderProgram.java new file mode 100644 index 0000000..dd85816 --- /dev/null +++ b/app/src/main/java/de/frajul/endlessroll/rendering/shader/ShaderProgram.java @@ -0,0 +1,89 @@ +package de.frajul.endlessroll.rendering.shader; + +import android.content.Context; +import android.opengl.GLES20; + +import de.frajul.endlessroll.main.GameLog; + +import java.io.BufferedReader; +import java.io.InputStream; +import java.io.InputStreamReader; + +/** + * Created by Julian on 23.11.2015. + */ +public abstract class ShaderProgram { + + private Context context; + private int vertexShader, fragmentShader, program; + + public ShaderProgram(Context context, String vertexShaderPath, String fragmentShaderPath) throws Exception { + this.context = context; + vertexShader = loadShader(GLES20.GL_VERTEX_SHADER, vertexShaderPath); + fragmentShader = loadShader(GLES20.GL_FRAGMENT_SHADER, fragmentShaderPath); + program = GLES20.glCreateProgram(); + GLES20.glAttachShader(program, vertexShader); + GLES20.glAttachShader(program, fragmentShader); + GLES20.glLinkProgram(program); + int[] linkStatus = new int[1]; + GLES20.glGetProgramiv(program, GLES20.GL_LINK_STATUS, linkStatus, 0); + if (linkStatus[0] == GLES20.GL_FALSE) { + GLES20.glDeleteProgram(program); + throw new Exception("Could not link program: " + + GLES20.glGetProgramInfoLog(program)); + } + + bindAttribLocations(); + loadUniformLocations(); + GameLog.d("ShaderProgram successfully loaded"); + } + + private void bindAttribLocations() { + GLES20.glBindAttribLocation(program, 0, "position"); + GLES20.glBindAttribLocation(program, 1, "texCoords"); + } + + protected abstract void loadUniformLocations(); + + protected int getUniformLocation(String name) { + return GLES20.glGetUniformLocation(program, name); + } + + public void start() { + GLES20.glUseProgram(program); + } + + public void stop() { + GLES20.glUseProgram(0); + } + + + private int loadShader(int type, String shaderName) throws Exception { + try { + InputStream is = context.getAssets().open(shaderName); + InputStreamReader isReader = new InputStreamReader(is); + BufferedReader reader = new BufferedReader(isReader); + StringBuilder source = new StringBuilder(); + String line; + while ((line = reader.readLine()) != null) + source.append(line); + + int shader = GLES20.glCreateShader(type); + GLES20.glShaderSource(shader, source.toString()); + GLES20.glCompileShader(shader); + + int[] compiled = new int[1]; + GLES20.glGetShaderiv(shader, GLES20.GL_COMPILE_STATUS, compiled, 0); + if (compiled[0] == GLES20.GL_FALSE) { + GLES20.glDeleteShader(shader); + throw new Exception("Could not compile shader \"" + shaderName + "\": " + + GLES20.glGetShaderInfoLog(shader)); + } + GameLog.d("Shader \"" + shaderName + "\" successfully loaded"); + return shader; + } catch (Exception e) { + throw new Exception("Could not load Shader \"" + shaderName + "\"", e); + } + } + +} diff --git a/app/src/main/java/de/frajul/endlessroll/rendering/shader/SimpleShader.java b/app/src/main/java/de/frajul/endlessroll/rendering/shader/SimpleShader.java new file mode 100644 index 0000000..a30e545 --- /dev/null +++ b/app/src/main/java/de/frajul/endlessroll/rendering/shader/SimpleShader.java @@ -0,0 +1,17 @@ +package de.frajul.endlessroll.rendering.shader; + +import android.content.Context; + +/** + * Created by Julian on 10.08.2016. + */ +public class SimpleShader extends ShaderProgram { + + public SimpleShader(Context context) throws Exception { + super(context, "shader/simpleVertexShader.glsl", "shader/simpleFragmentShader.glsl"); + } + + @Override + protected void loadUniformLocations() { + } +} diff --git a/app/src/main/java/de/frajul/endlessroll/rendering/shader/TerrainShader.java b/app/src/main/java/de/frajul/endlessroll/rendering/shader/TerrainShader.java new file mode 100644 index 0000000..07c527e --- /dev/null +++ b/app/src/main/java/de/frajul/endlessroll/rendering/shader/TerrainShader.java @@ -0,0 +1,38 @@ +package de.frajul.endlessroll.rendering.shader; + +import android.content.Context; +import android.opengl.GLES20; + +import de.frajul.endlessroll.entities.Entity; +import de.frajul.endlessroll.main.game.Camera; +import de.frajul.endlessroll.rendering.MatrixCreator; + +/** + * Created by Julian on 10.08.2016. + */ +public class TerrainShader extends ShaderProgram { + + private int location_mvpMatrix; + private int location_transformationMatrix; + + public TerrainShader(Context context) throws Exception { + super(context, "shader/terrainVertexShader.glsl", "shader/simpleFragmentShader.glsl"); + } + + @Override + protected void loadUniformLocations() { + location_mvpMatrix = super.getUniformLocation("mvpMatrix"); + location_transformationMatrix = super.getUniformLocation("transformationMatrix"); + } + + public void loadMVPMatrix(MatrixCreator matrixCreator, Camera camera) { + float[] mvpMatrix = matrixCreator.createModelViewProjectionMatrix(camera); + GLES20.glUniformMatrix4fv(location_mvpMatrix, 1, false, mvpMatrix, 0); + } + + public void loadTransformationMatrix(MatrixCreator matrixCreator, Entity entity) { + float[] transformationMatrix = matrixCreator.createTransformationMatrix(entity); + GLES20.glUniformMatrix4fv(location_transformationMatrix, 1, false, transformationMatrix, 0); + } + +} diff --git a/app/src/main/java/de/frajul/endlessroll/sounds/Music.java b/app/src/main/java/de/frajul/endlessroll/sounds/Music.java new file mode 100644 index 0000000..810105f --- /dev/null +++ b/app/src/main/java/de/frajul/endlessroll/sounds/Music.java @@ -0,0 +1,79 @@ +package de.frajul.endlessroll.sounds; + +import android.content.Context; +import android.media.MediaPlayer; + +import de.frajul.endlessroll.main.ExceptionHandler; + +/** + * Created by Julian on 18.12.2015. + */ +public class Music { + + private ExceptionHandler handler; + private MediaPlayer player; + private boolean mute; + private boolean paused = true; + private int pausedPosition; + + public Music(ExceptionHandler handler, Context context, int id) { + this.handler = handler; + player = MediaPlayer.create(context, id); + } + + public void setMute(boolean mute) { + this.mute = mute; + if (mute && !paused) { + stop(); + paused = false; + } + if (!mute && !paused) + start(); + } + + public void pause() { + try { + player.pause(); + paused = true; + pausedPosition = player.getCurrentPosition(); + } catch (Exception e) { + handler.onException(e); + } + } + + public void start() { + try { + if (!mute) + player.start(); + paused = false; + } catch (Exception e) { + handler.onException(e); + } + } + + public void stop() { + try { + player.pause(); + player.seekTo(0); + paused = true; + } catch (Exception e) { + handler.onException(e); + } + } + + + public void resume() { + try { + if (paused) { + player.seekTo(pausedPosition); + start(); + } + } catch (Exception e) { + handler.onException(e); + } + } + + public MediaPlayer getPlayer() { + return player; + } +} diff --git a/app/src/main/java/de/frajul/endlessroll/sounds/SoundManager.java b/app/src/main/java/de/frajul/endlessroll/sounds/SoundManager.java new file mode 100644 index 0000000..6af479f --- /dev/null +++ b/app/src/main/java/de/frajul/endlessroll/sounds/SoundManager.java @@ -0,0 +1,78 @@ +package de.frajul.endlessroll.sounds; + +import android.content.Context; +import android.media.AudioManager; +import android.media.SoundPool; + +import de.frajul.endlessroll.R; +import de.frajul.endlessroll.entities.tools.ToolType; +import de.frajul.endlessroll.main.GameActivity; +import de.frajul.endlessroll.main.GameLog; + +/** + * Created by Julian on 18.12.2015. + */ +public class SoundManager { + + private Context context; + private SoundPool soundPool; + private boolean soundOn; + + public final Music backgroundMusic; + + public SoundManager(GameActivity activity) { + this.context = activity; + soundPool = new SoundPool(2, AudioManager.STREAM_MUSIC, 0); + + backgroundMusic = new Music(activity, activity, R.raw.background); + ToolType.loadAllPlacingSounds(this); + } + + public void setSoundOn(boolean on) { + this.soundOn = on; + backgroundMusic.setMute(!on); + } + + public boolean isSoundOn() { + return soundOn; + } + + public void pause() { + soundPool.autoPause(); + backgroundMusic.pause(); + } + + public void resume() { + soundPool.autoResume(); + backgroundMusic.resume(); + } + + public void destroy() { + backgroundMusic.getPlayer().release(); + soundPool.release(); + } + + public int loadSound(int id) { + int sound = soundPool.load(context, id, 1); + return sound; + } + + public void playSound(int id) { + float volume = getVolume(); + int feedback = soundPool.play(id, volume, volume, 1, 0, 1); + if (feedback == 0) + GameLog.e("SoundId: " + id + " cannot be played"); + } + + private float getVolume() { + if (soundOn) { + AudioManager manager = (AudioManager) context.getSystemService(Context.AUDIO_SERVICE); + float volume = + manager.getStreamVolume(AudioManager.STREAM_MUSIC); + float maxVolume = manager.getStreamMaxVolume(AudioManager.STREAM_MUSIC); + return volume / maxVolume; + } + return 0; + } + +} diff --git a/app/src/main/java/de/frajul/endlessroll/sqlDatabase/DatabaseAdapter.java b/app/src/main/java/de/frajul/endlessroll/sqlDatabase/DatabaseAdapter.java new file mode 100644 index 0000000..91b532c --- /dev/null +++ b/app/src/main/java/de/frajul/endlessroll/sqlDatabase/DatabaseAdapter.java @@ -0,0 +1,88 @@ +package de.frajul.endlessroll.sqlDatabase; + +import android.content.ContentValues; +import android.content.Context; +import android.database.Cursor; +import android.database.SQLException; +import android.database.sqlite.SQLiteDatabase; +import android.database.sqlite.SQLiteOpenHelper; + +import de.frajul.endlessroll.main.GameLog; + +/** + * Created by Julian on 07.06.2016. + */ +public abstract class DatabaseAdapter extends SQLiteOpenHelper { + + private SQLTable[] tables; + private SQLiteDatabase database; + + public DatabaseAdapter(Context context, String databaseName, int version) { + super(context, databaseName, null, version); + createColumns(); + this.tables = createTables(); + } + + protected abstract void createColumns(); + + protected abstract SQLTable[] createTables(); + + @Override + public void onCreate(SQLiteDatabase db) { + GameLog.i("DATABASE CREATE"); + for (SQLTable table : tables) + db.execSQL(table.getSqlCreateTable()); + } + + @Override + public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { + for (SQLTable table : tables) + db.execSQL(table.getSqlDeleteTable()); + onCreate(db); + } + + @Override + public void onDowngrade(SQLiteDatabase db, int oldVersion, int newVersion) { + onUpgrade(db, oldVersion, newVersion); + } + + public void open() throws SQLException { + database = getWritableDatabase(); + } + + protected void deleteTableEntry(SQLTable table, SQLTableColumn c0, int c0Condition, SQLTableColumn c1, int c1Condition) { + database.execSQL("DELETE FROM " + table.getName() + " WHERE " + c0.getKey() + " = " + c0Condition + " AND " + c1.getKey() + " = " + c1Condition); + } + + protected void clearTable(SQLTable table) { + database.execSQL(table.getSqlClearTable()); + } + + protected long insertData(SQLTable table, ContentValues data) { + return database.insert(table.getName(), null, data); + } + + protected long update(SQLTable table, ContentValues data, SQLTableColumn c0, int c0Condition, SQLTableColumn c1, int c1Condition) { + int reached = database.delete(table.getName(), c0.getKey() + "=" + c0Condition + " and " + c1.getKey() + "=" + c1Condition, null); + return insertData(table, data); + } + + protected long update(SQLTable table, ContentValues data, SQLTableColumn c0, int c0Condition) { + int reached = database.delete(table.getName(), c0.getKey() + "=" + c0Condition, null); + return insertData(table, data); + } + + protected Cursor getCursor(SQLTable table) { + return database.rawQuery(table.getSqlGetCursor(), null); + } + + protected Cursor getCursor(SQLTable table, SQLTableColumn c0, int c0Condition, SQLTableColumn c1, int c1Condition) { + return database.rawQuery(table.getSqlGetCursor() + " where " + c0.getKey() + "=" + c0Condition + " and " + c1.getKey() + "=" + c1Condition, null); + } + + protected Cursor getCursor(SQLTable table, SQLTableColumn c, int cCondition) { + return database.rawQuery(table.getSqlGetCursor() + " where " + c.getKey() + "=" + cCondition, null); + } + + +} diff --git a/app/src/main/java/de/frajul/endlessroll/sqlDatabase/MyDatabase.java b/app/src/main/java/de/frajul/endlessroll/sqlDatabase/MyDatabase.java new file mode 100644 index 0000000..c5774ba --- /dev/null +++ b/app/src/main/java/de/frajul/endlessroll/sqlDatabase/MyDatabase.java @@ -0,0 +1,131 @@ +package de.frajul.endlessroll.sqlDatabase; + +import android.content.ContentValues; +import android.content.Context; +import android.database.Cursor; + +import de.frajul.endlessroll.entities.tools.ToolType; +import de.frajul.endlessroll.levels.Level; +import de.frajul.endlessroll.levels.LevelPack; + +/** + * Created by Julian on 10.05.2016. + */ +public class MyDatabase extends DatabaseAdapter { + + private final static int VERSION = 9; + private final static String DATABASE_NAME = "DATABASE"; + private SQLTableColumn levelPackIdColumn, lockedColumn; + private SQLTableColumn levelIdColumn, levelFinishedColumn, collectedStarsColumn, collectedEnergyColumn; + private SQLTableColumn toolIdColumn, boughtColumn, toolLevelColumn; + private SQLTable levelPackTable, levelTable, toolTable; + + public MyDatabase(Context context) { + super(context, DATABASE_NAME, VERSION); + } + + @Override + protected void createColumns() { + levelPackIdColumn = new SQLTableColumn("LEVELPACK_ID", SQLTableColumn.ColumnType.INTEGER); + lockedColumn = new SQLTableColumn("LOCKED", SQLTableColumn.ColumnType.INTEGER); + + levelIdColumn = new SQLTableColumn("LEVEL_ID", SQLTableColumn.ColumnType.INTEGER); + levelFinishedColumn = new SQLTableColumn("FINISHED", SQLTableColumn.ColumnType.INTEGER); + collectedStarsColumn = new SQLTableColumn("STARS", SQLTableColumn.ColumnType.TEXT); + collectedEnergyColumn = new SQLTableColumn("ENERGY", SQLTableColumn.ColumnType.INTEGER); + + toolIdColumn = new SQLTableColumn("TOOL_ID", SQLTableColumn.ColumnType.INTEGER); + boughtColumn = new SQLTableColumn("BOUGHT", SQLTableColumn.ColumnType.INTEGER); + toolLevelColumn = new SQLTableColumn("TOOL_LEVEL", SQLTableColumn.ColumnType.INTEGER); + } + + @Override + protected SQLTable[] createTables() { + levelPackTable = new SQLTable("LEVELPACK_TABLE", levelPackIdColumn, lockedColumn); + levelTable = new SQLTable("LEVEL_TABLE", levelPackIdColumn, levelIdColumn, lockedColumn, + levelFinishedColumn, collectedStarsColumn, collectedEnergyColumn); + toolTable = new SQLTable("TOOL_TABLE", toolIdColumn, boughtColumn, toolLevelColumn); + return new SQLTable[]{levelPackTable, levelTable, toolTable}; + } + + public void writeLevelPackLocked(LevelPack levelPack) { + ContentValues values = new ContentValues(); + values.put(levelPackIdColumn.getKey(), levelPack.getId()); + values.put(lockedColumn.getKey(), levelPack.isLocked() ? 1 : 0); + super.update(levelPackTable, values, levelPackIdColumn, levelPack.getId()); + } + + public void readLevelPackLocked(LevelPack levelPack) { + Cursor cursor = super.getCursor(levelPackTable, levelPackIdColumn, levelPack.getId()); + if (cursor.moveToFirst()) { + boolean locked = cursor.getInt(1) == 1; + levelPack.setLocked(locked); + } + cursor.close(); + } + + public void clearLevelPackLocked() { + super.clearTable(levelPackTable); + } + + public void writeLevelProgress(Level level) { + ContentValues values = new ContentValues(); + values.put(levelPackIdColumn.getKey(), level.getPackId()); + values.put(levelIdColumn.getKey(), level.getId()); + values.put(lockedColumn.getKey(), level.isLocked() ? 1 : 0); + values.put(levelFinishedColumn.getKey(), level.isFinished() ? 1 : 0); + values.put(collectedStarsColumn.getKey(), level.getCollectedStarCodeForSQL()); + values.put(collectedEnergyColumn.getKey(), level.isEnergyCollected()); + super.update(levelTable, values, levelPackIdColumn, level.getPackId(), levelIdColumn, + level.getId()); + } + + public void readLevelProgress(Level level) { + Cursor cursor = super + .getCursor(levelTable, levelPackIdColumn, level.getPackId(), levelIdColumn, + level.getId()); + if (cursor.moveToFirst()) { + boolean locked = cursor.getInt(2) == 1; + boolean finished = cursor.getInt(3) == 1; + String stars = cursor.getString(4); + boolean energy = cursor.getInt(5) == 1; + + level.setLocked(locked); + level.setFinished(finished); + level.setCollectedStarsFromSQL(stars); + level.setEnergyCollected(energy); + } + cursor.close(); + } + + public void clearLevelProgess() { + super.clearTable(levelTable); + } + + public void writeToolData() { + for (ToolType tool : ToolType.values()) { + ContentValues values = new ContentValues(); + values.put(toolIdColumn.getKey(), tool.ordinal()); + values.put(boughtColumn.getKey(), tool.isBought() ? 1 : 0); + values.put(toolLevelColumn.getKey(), tool.getCurrentUpgradeLevel()); + super.update(toolTable, values, toolIdColumn, tool.ordinal()); + } + } + + public void readToolData() { + Cursor cursor = super.getCursor(toolTable); + if (cursor.moveToFirst()) { + do { + int id = cursor.getInt(0); + boolean bought = cursor.getInt(1) == 1; + int toolLevel = cursor.getInt(2); + + ToolType tool = ToolType.values()[id]; + tool.setBought(bought); + tool.setCurrentUpgradeLevel(toolLevel); + } while (cursor.moveToNext()); + } + cursor.close(); + } + +} diff --git a/app/src/main/java/de/frajul/endlessroll/sqlDatabase/SQLTable.java b/app/src/main/java/de/frajul/endlessroll/sqlDatabase/SQLTable.java new file mode 100644 index 0000000..7054754 --- /dev/null +++ b/app/src/main/java/de/frajul/endlessroll/sqlDatabase/SQLTable.java @@ -0,0 +1,38 @@ +package de.frajul.endlessroll.sqlDatabase; + +public class SQLTable { + + private final String name; + private final String columnsAsText; + + public SQLTable(String name, SQLTableColumn... columns) { + this.name = name; + StringBuilder builder = new StringBuilder(); + for (int i = 0; i < columns.length; i++) { + builder.append(columns[i].toString()); + if (i != columns.length - 1) + builder.append(", "); + } + columnsAsText = builder.toString(); + } + + public String getName() { + return name; + } + + public String getSqlCreateTable() { + return "CREATE TABLE " + name + "(" + columnsAsText + ");"; + } + + public String getSqlDeleteTable() { + return "DROP TABLE IF EXISTS " + name; + } + + public String getSqlClearTable() { + return "DELETE FROM " + name; + } + + public String getSqlGetCursor() { + return "SELECT * FROM " + name; + } +} \ No newline at end of file diff --git a/app/src/main/java/de/frajul/endlessroll/sqlDatabase/SQLTableColumn.java b/app/src/main/java/de/frajul/endlessroll/sqlDatabase/SQLTableColumn.java new file mode 100644 index 0000000..a878e96 --- /dev/null +++ b/app/src/main/java/de/frajul/endlessroll/sqlDatabase/SQLTableColumn.java @@ -0,0 +1,48 @@ +package de.frajul.endlessroll.sqlDatabase; + +public class SQLTableColumn { + + public enum ColumnType { + TEXT, INTEGER, REAL; + } + + public enum ColumnExtra { + NONE(""), PRIMARY_KEY("PRIMARY KEY"), NOT_NULL("NOT NULL"); + + private String name; + + ColumnExtra(String name) { + this.name = name; + } + + @Override + public String toString() { + return name; + } + } + + private String title; + private ColumnType type; + private ColumnExtra extra; + + public SQLTableColumn(String title, ColumnType type, ColumnExtra extra) { + this.title = title; + this.type = type; + this.extra = extra; + } + + public SQLTableColumn(String title, ColumnType type) { + this.title = title; + this.type = type; + this.extra = ColumnExtra.NOT_NULL; + } + + public String getKey() { + return title; + } + + @Override + public String toString() { + return title + " " + type.toString() + " " + extra.toString(); + } +} \ No newline at end of file diff --git a/app/src/main/java/de/frajul/endlessroll/sqlDatabase/SQLTablePrimaryKeyColumn.java b/app/src/main/java/de/frajul/endlessroll/sqlDatabase/SQLTablePrimaryKeyColumn.java new file mode 100644 index 0000000..0c35792 --- /dev/null +++ b/app/src/main/java/de/frajul/endlessroll/sqlDatabase/SQLTablePrimaryKeyColumn.java @@ -0,0 +1,21 @@ +package de.frajul.endlessroll.sqlDatabase; + +/** + * Created by Julian on 30.05.2016. + */ +public class SQLTablePrimaryKeyColumn extends SQLTableColumn { + + private boolean autoincrement; + + public SQLTablePrimaryKeyColumn(boolean autoincrement) { + super("_ID", ColumnType.INTEGER, ColumnExtra.PRIMARY_KEY); + this.autoincrement = autoincrement; + } + + @Override + public String toString() { + if (autoincrement) + return super.toString() + " AUTOINCREMENT"; + return super.toString(); + } +} diff --git a/app/src/main/java/de/frajul/endlessroll/user/LevelBounty.java b/app/src/main/java/de/frajul/endlessroll/user/LevelBounty.java new file mode 100644 index 0000000..16beee0 --- /dev/null +++ b/app/src/main/java/de/frajul/endlessroll/user/LevelBounty.java @@ -0,0 +1,63 @@ +package de.frajul.endlessroll.user; + +import android.content.Context; + +import java.util.ArrayList; +import java.util.List; + +import de.frajul.endlessroll.R; +import de.frajul.endlessroll.entities.tools.ToolType; +import de.frajul.endlessroll.main.GameActivity; +import de.frajul.endlessroll.views.BountyMessage; + +/** + * Created by Julian on 26.01.2017. + */ + +public class LevelBounty { + + private int starCount = 0; + private int energyCount = 0; + private ToolType toolType; + private boolean toolSlot = false; + + public LevelBounty(int starCount, int energyCount, ToolType toolType, boolean toolSlot) { + this.starCount = starCount; + this.energyCount = energyCount; + this.toolType = toolType; + this.toolSlot = toolSlot; + } + + public List createBountyMessages(GameActivity gameActivity, BountyMessage.ScreenSwitchCaller caller) { + List list = new ArrayList(); + if (starCount != 0) + list.add(new BountyMessage(gameActivity, BountyMessage.MessageType.STARS, starCount + "", + caller, R.drawable.currency_star)); + if (energyCount != 0) + list.add(new BountyMessage(gameActivity, BountyMessage.MessageType.ENERGY, energyCount + "", + caller, R.drawable.currency_energy)); + if (toolType != null) + list.add(new BountyMessage(gameActivity, BountyMessage.MessageType.TOOL, gameActivity.getString(toolType.getName()), + caller, toolType.getButtonDrawable())); + if (toolSlot) + list.add(new BountyMessage(gameActivity, BountyMessage.MessageType.TOOL_SLOT, null, caller, + R.drawable.tools_button_unlocked)); + return list; + } + + public ToolType getToolType() { + return toolType; + } + + public boolean isToolSlot() { + return toolSlot; + } + + public int getStarCount() { + return starCount; + } + + public int getEnergyCount() { + return energyCount; + } +} diff --git a/app/src/main/java/de/frajul/endlessroll/user/LevelUpBounties.java b/app/src/main/java/de/frajul/endlessroll/user/LevelUpBounties.java new file mode 100644 index 0000000..d118503 --- /dev/null +++ b/app/src/main/java/de/frajul/endlessroll/user/LevelUpBounties.java @@ -0,0 +1,63 @@ +package de.frajul.endlessroll.user; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; + +import de.frajul.endlessroll.entities.tools.ToolType; + +/** + * Created by Julian on 17.07.2016. + */ +public class LevelUpBounties extends HashMap { + + private List unlockedTools = new ArrayList<>(); + private int unlockedToolSlots; + + public LevelUpBounties(int level) { + super.put(1, new LevelBounty(0, 0, ToolType.RAMP, true)); + super.put(2, new LevelBounty(5, 0, ToolType.SPRING, false)); + super.put(3, new LevelBounty(6, 0, ToolType.POWER_MUSHROOM, true)); + super.put(4, new LevelBounty(7, 0, ToolType.BOMB, false)); + super.put(5, new LevelBounty(8, 2, ToolType.MAGNET, false)); + super.put(6, new LevelBounty(8, 1, null, true)); + super.put(7, new LevelBounty(8, 1, ToolType.STASIS, false)); + super.put(8, new LevelBounty(100, 100, null, false)); + super.put(9, new LevelBounty(0, 0, null, true)); + loadAllForLevel(level); + } + + public void loadAllForLevel(int level) { + unlockedTools.clear(); + unlockedToolSlots = 0; + for (int i = level; i > 0; i--) + loadBounty(super.get(i)); + } + + private void loadBounty(LevelBounty bounty) { + if (bounty != null) { + if (bounty.getToolType() != null) + unlockedTools.add(bounty.getToolType()); + if (bounty.isToolSlot()) + unlockedToolSlots++; + } + } + + public int getLevelToolIsUnlocked(ToolType tool) { + for (int level : this.keySet()) { + LevelBounty bounty = this.get(level); + if (tool.equals(bounty.getToolType())) + return level; + } + return -1; + } + + public boolean isToolLocked(ToolType tool) { + return !unlockedTools.contains(tool); + } + + public boolean isToolSlotLocked(int index) { + return index >= unlockedToolSlots; + } + +} diff --git a/app/src/main/java/de/frajul/endlessroll/user/ToolSlotSettings.java b/app/src/main/java/de/frajul/endlessroll/user/ToolSlotSettings.java new file mode 100644 index 0000000..2a3901d --- /dev/null +++ b/app/src/main/java/de/frajul/endlessroll/user/ToolSlotSettings.java @@ -0,0 +1,49 @@ +package de.frajul.endlessroll.user; + +import de.frajul.endlessroll.entities.tools.ToolSlot; +import de.frajul.endlessroll.entities.tools.ToolType; + +import java.util.ArrayList; + +/** + * Created by Julian on 15.07.2016. + */ +public class ToolSlotSettings extends ArrayList { + + public ToolSlotSettings(String slot1, String slot2, String slot3, String slot4, int slotsLocked) throws Exception { + super.add(new ToolSlot(slot1.equals("null") ? null : ToolType.valueOf(slot1), false)); + super.add(new ToolSlot(slot2.equals("null") ? null : ToolType.valueOf(slot2), slotsLocked >= 3)); + super.add(new ToolSlot(slot3.equals("null") ? null : ToolType.valueOf(slot3), slotsLocked >= 2)); + super.add(new ToolSlot(slot4.equals("null") ? null : ToolType.valueOf(slot4), slotsLocked >= 1)); + } + + public void reset() { + super.set(0, new ToolSlot(ToolType.RAMP, false)); + super.set(1, new ToolSlot(null, true)); + super.set(2, new ToolSlot(null, true)); + super.set(3, new ToolSlot(null, true)); + } + + public void changeToolSlotType(int slot, ToolType newType) { + for (ToolSlot toolSlot : this) { + if (super.indexOf(toolSlot) == slot) + toolSlot.setToolType(newType); + else if (toolSlot.getToolType() == newType) + toolSlot.setToolType(null); + } + } + + public void unlockSlotsIfLevelReached(LevelUpBounties levelUpBounties) { + for (int i = 0; i < 4; i++) + super.get(i).setLocked(levelUpBounties.isToolSlotLocked(i)); + } + + public int getLockedSlotCount() { + int count = 0; + for (ToolSlot slot : this) + if(slot.isLocked()) + count ++; + return count; + } + +} diff --git a/app/src/main/java/de/frajul/endlessroll/user/User.java b/app/src/main/java/de/frajul/endlessroll/user/User.java new file mode 100644 index 0000000..f3d4a40 --- /dev/null +++ b/app/src/main/java/de/frajul/endlessroll/user/User.java @@ -0,0 +1,146 @@ +package de.frajul.endlessroll.user; + +import de.frajul.endlessroll.entities.shapes.PlayerShape; + +/** + * Created by Julian on 10.07.2016. + */ +public class User { + + public interface LvUpListener { + public void onLvUp(int level); + } + + private final int LV_DONE_EP = 20; + private final int STAR_EP = 2; + private final int ENERGY_EP = 10; + //MAX EP IN ONE LEVEL: 36 (20 + 3*2 + 10) + + private LvUpListener lvUpListener; + private int ep; + private int level; + private int starCount; + private int energyCount; + private ToolSlotSettings toolSlotSettings; + private PlayerShape currentPlayerShape; + + private LevelUpBounties levelUpBounties; + + private int inLevelCollectedStars; + private int inLevelCollectedEnergy; + + public User(LvUpListener lvUpListener, int ep, int level, int starCount, int energyCount, ToolSlotSettings toolSlotSettings, PlayerShape playerShape) { + this.lvUpListener = lvUpListener; + this.ep = ep; + this.level = level; + this.starCount = starCount; + this.energyCount = energyCount; + this.toolSlotSettings = toolSlotSettings; + this.currentPlayerShape = playerShape; + + levelUpBounties = new LevelUpBounties(level); + } + + public void clearData() { + ep = 0; + level = 1; + starCount = 0; + energyCount = 0; + toolSlotSettings.reset(); + currentPlayerShape = PlayerShape.BALL; + } + + public void onStarCollected() { + increaseStarCount(1, true); + } + + public void increaseStarCount(int starCount, boolean gainEp) { + this.starCount += starCount; + if(gainEp) + gainEp(STAR_EP * starCount); + } + + public void onEnergyCollected() { + increaseEnergyCount(1, true); + } + + public void increaseEnergyCount(int energyCount, boolean gainEp) { + this.energyCount += energyCount; + if(gainEp) + gainEp(ENERGY_EP * energyCount); + } + + public void gainLvFinishedEp() { + gainEp(LV_DONE_EP); + } + + public void gainEp(int amount) { + ep += amount; + if (ep >= 100) { + ep -= 100; + levelUp(); + } + } + + private void levelUp() { + level++; + levelUpBounties.loadAllForLevel(level); + + toolSlotSettings.unlockSlotsIfLevelReached(levelUpBounties); + LevelBounty bounty = levelUpBounties.get(level); + if (bounty != null) { + increaseStarCount(bounty.getStarCount(), false); + increaseEnergyCount(bounty.getEnergyCount(), false); + } + lvUpListener.onLvUp(level); + } + + public int getEp() { + return ep; + } + + public int getLevel() { + return level; + } + + public int getStarCount() { + return starCount; + } + + public int getEnergyCount() { + return energyCount; + } + + public ToolSlotSettings getToolSlotSettings() { + return toolSlotSettings; + } + + public PlayerShape getCurrentPlayerShape() { + return currentPlayerShape; + } + + public void setCurrentPlayerShape(PlayerShape currentPlayerShape) { + this.currentPlayerShape = currentPlayerShape; + } + + public LevelUpBounties getLevelUpBounties() { + return levelUpBounties; + } + + public int getInLevelCollectedEnergy() { + return inLevelCollectedEnergy; + } + + public int getInLevelCollectedStars() { + return inLevelCollectedStars; + } + + //CHEAT + public void setLevel(int level) { + this.level = level; + } + + public void setStarCount(int starCount) { + this.starCount = starCount; + } +} diff --git a/app/src/main/java/de/frajul/endlessroll/views/BountyMessage.java b/app/src/main/java/de/frajul/endlessroll/views/BountyMessage.java new file mode 100644 index 0000000..345b9f3 --- /dev/null +++ b/app/src/main/java/de/frajul/endlessroll/views/BountyMessage.java @@ -0,0 +1,89 @@ +package de.frajul.endlessroll.views; + +import android.content.Context; +import android.support.annotation.DrawableRes; +import android.support.annotation.Nullable; +import android.support.annotation.StringRes; +import android.view.LayoutInflater; +import android.view.View; +import android.widget.ImageView; +import android.widget.LinearLayout; +import android.widget.TextView; + +import de.frajul.endlessroll.R; +import de.frajul.endlessroll.main.GameActivity; +import de.frajul.endlessroll.main.screens.Screen; + +/** + * Created by Julian on 15.07.2016. + */ +public class BountyMessage implements View.OnClickListener { + + public interface ScreenSwitchCaller { + public void switchScreen(Screen.ScreenType screenType); + } + + public enum MessageType { + STARS(R.string.bounty_message_resource_format_s, Screen.ScreenType.NONE), + ENERGY(R.string.bounty_message_resource_format_s, Screen.ScreenType.NONE), + TOOL(R.string.bounty_message_tool_format_s, Screen.ScreenType.TOOL_SHOP), + TOOL_SLOT(R.string.bounty_message_tool_slot, Screen.ScreenType.TOOL_SHOP), + SHAPE_UNLOCKED(R.string.bounty_message_shape_unlocked, Screen.ScreenType.SHAPE_SHOP); + + @StringRes + private int textId; + private Screen.ScreenType goalScreenType; + + MessageType(@StringRes int textId, Screen.ScreenType goalScreenType) { + this.textId = textId; + this.goalScreenType = goalScreenType; + } + + public String formatText(Context context, @Nullable String textArgs) { + String text = context.getString(textId); + if (textArgs == null) + return text; + return String.format(text, textArgs); + } + + + public Screen.ScreenType getGoalScreenType() { + return goalScreenType; + } + + } + + private LinearLayout layout; + private ImageView image; + private TextView text; + + private MessageType messageType; + private ScreenSwitchCaller screenSwitchCaller; + + public BountyMessage(GameActivity gameActivity, MessageType messageType, @Nullable String textArgs, ScreenSwitchCaller screenSwitchCaller, @DrawableRes int drawableId) { + findViews(gameActivity); + this.image.setImageResource(drawableId); + this.text.setText(messageType.formatText(gameActivity, textArgs)); + this.text.setTypeface(gameActivity.getTypeface()); + this.messageType = messageType; + this.screenSwitchCaller = screenSwitchCaller; + } + + private void findViews(Context context) { + LayoutInflater inflater = LayoutInflater.from(context); + layout = (LinearLayout) inflater.inflate(R.layout.unlock_message, null); + layout.setOnClickListener(this); + image = (ImageView) layout.findViewById(R.id.unlockmessage_toolimage); + text = (TextView) layout.findViewById(R.id.unlockmessage_message); + } + + @Override + public void onClick(View v) { + if (messageType.getGoalScreenType() != Screen.ScreenType.NONE) + screenSwitchCaller.switchScreen(messageType.getGoalScreenType()); + } + + public LinearLayout getLayout() { + return layout; + } +} diff --git a/app/src/main/java/de/frajul/endlessroll/views/Countdown.java b/app/src/main/java/de/frajul/endlessroll/views/Countdown.java new file mode 100644 index 0000000..572176d --- /dev/null +++ b/app/src/main/java/de/frajul/endlessroll/views/Countdown.java @@ -0,0 +1,69 @@ +package de.frajul.endlessroll.views; + +import android.graphics.Typeface; +import android.view.animation.Animation; +import android.view.animation.AnimationSet; +import android.view.animation.AnimationUtils; +import android.widget.TextView; + +import de.frajul.endlessroll.R; +import de.frajul.endlessroll.main.game.Game; + +/** + * Created by Julian on 31.07.2016. + */ +public class Countdown implements Animation.AnimationListener { + + private Game game; + private AnimationSet animations; + private TextView textView; + + private boolean firstHalfRepeated = true; + private int repeatCount = 0; + + public Countdown(Game game, Typeface typeface, TextView textView) { + this.game = game; + this.textView = textView; + this.textView.setTypeface(typeface); + animations = (AnimationSet) AnimationUtils.loadAnimation(game.getContext(), R.anim.countdown); + for (Animation animation : animations.getAnimations()) + animation.setAnimationListener(this); + } + + public void start() { + reset(); + textView.startAnimation(animations); + } + + public void stop() { + textView.clearAnimation(); + } + + private void reset() { + repeatCount = 0; + textView.setText("3"); + textView.setTextColor(game.getContext().getResources().getColor(R.color.countdown3)); + } + + @Override + public void onAnimationStart(Animation animation) { + } + + @Override + public void onAnimationEnd(Animation animation) { + game.countdownFinished(); + } + + @Override + public void onAnimationRepeat(Animation animation) { + if (!firstHalfRepeated) + repeatCount++; + firstHalfRepeated = !firstHalfRepeated; + textView.setText((3 - repeatCount) + ""); + if (repeatCount == 1) { + textView.setTextColor(game.getContext().getResources().getColor(R.color.countdown2)); + } else if (repeatCount == 2) { + textView.setTextColor(game.getContext().getResources().getColor(R.color.countdown1)); + } + } +} diff --git a/app/src/main/java/de/frajul/endlessroll/views/GameOverMessage.java b/app/src/main/java/de/frajul/endlessroll/views/GameOverMessage.java new file mode 100644 index 0000000..4e84dec --- /dev/null +++ b/app/src/main/java/de/frajul/endlessroll/views/GameOverMessage.java @@ -0,0 +1,68 @@ +package de.frajul.endlessroll.views; + +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.TextView; + +import de.frajul.endlessroll.R; +import de.frajul.endlessroll.main.GameActivity; +import de.frajul.endlessroll.main.game.Game; +import de.frajul.endlessroll.main.screens.Screen; + +/** + * Created by Julian on 09.07.2016. + */ +public class GameOverMessage implements View.OnClickListener { + + private Animation fadeIn; + private Game game; + + private View layout; + private TopBar topBar; + private Button tryAgain; + private Button toMenu; + + public GameOverMessage(Game game, GameActivity gameActivity, View layout) { + this.game = game; + this.layout = layout; + layout.setVisibility(View.GONE); + Typeface typeface = gameActivity.getTypeface(); + fadeIn = AnimationUtils.loadAnimation(gameActivity, R.anim.fade_in); + topBar = new TopBar(gameActivity, Screen.ScreenType.GAME, + layout.findViewById(R.id.game_over_message_topbar)); + topBar.setShopsEnabled(true); + TextView title = (TextView) layout.findViewById(R.id.game_over_message_title); + title.setTypeface(typeface); + tryAgain = (Button) layout.findViewById(R.id.game_over_message_try_again); + tryAgain.setTypeface(typeface); + tryAgain.setOnClickListener(this); + toMenu = (Button) layout.findViewById(R.id.game_over_message_to_menu); + toMenu.setTypeface(typeface); + toMenu.setOnClickListener(this); + } + + public void fadeIn() { + topBar.update(); + layout.startAnimation(fadeIn); + layout.setVisibility(View.VISIBLE); + } + + private void hide() { + layout.clearAnimation(); + layout.setVisibility(View.GONE); + } + + @Override + public void onClick(View v) { + if (v.equals(tryAgain)) { + hide(); + game.restartLevel(); + } else if (v.equals(toMenu)) { + hide(); + game.toLevelsScreen(); + } + } +} diff --git a/app/src/main/java/de/frajul/endlessroll/views/LevelButton.java b/app/src/main/java/de/frajul/endlessroll/views/LevelButton.java new file mode 100644 index 0000000..1a8adb5 --- /dev/null +++ b/app/src/main/java/de/frajul/endlessroll/views/LevelButton.java @@ -0,0 +1,84 @@ +package de.frajul.endlessroll.views; + +import android.support.annotation.LayoutRes; +import android.view.LayoutInflater; +import android.view.View; +import android.widget.ImageView; +import android.widget.TextView; + +import de.frajul.endlessroll.R; +import de.frajul.endlessroll.levels.Level; +import de.frajul.endlessroll.main.GameActivity; + +/** + * Created by Julian on 23.04.2016. + */ +public class LevelButton implements View.OnClickListener { + + private GameActivity gameActivity; + private LevelButtonOnClickListener clickListener; + private Level level; + + private View layout; + private TextView text; + private ImageView star1; + private ImageView star2; + private ImageView star3; + private ImageView energy; + private ImageView lockImage; + + public LevelButton(GameActivity gameActivity, LevelButtonOnClickListener clickListener, @LayoutRes int layoutId) { + this.gameActivity = gameActivity; + this.clickListener = clickListener; + LayoutInflater inflater = LayoutInflater.from(gameActivity); + layout = inflater.inflate(layoutId, null); + layout.setOnClickListener(this); + findViews(layout); + } + + private void findViews(View layout) { + text = (TextView) layout.findViewById(R.id.levelbutton_textview); + text.setTypeface(gameActivity.getTypeface()); + star1 = (ImageView) layout.findViewById(R.id.levelbutton_star1); + star2 = (ImageView) layout.findViewById(R.id.levelbutton_star2); + star3 = (ImageView) layout.findViewById(R.id.levelbutton_star3); + energy = (ImageView) layout.findViewById(R.id.levelbutton_energy); + lockImage = (ImageView) layout.findViewById(R.id.levelbutton_lock); + } + + public void init(Level level) { + this.level = level; + setLockVisible(level.isLocked()); + text.setText(gameActivity.getString(R.string.level_button_format_d, level.getId())); + showCollectedCurrency(level.getCollectedStars(), level.isEnergyCollected()); + } + + private void setLockVisible(boolean locked) { + int visibility = locked ? View.VISIBLE : View.GONE; + lockImage.setVisibility(visibility); + } + + private void showCollectedCurrency(boolean[] stars, boolean energy) { + if (stars[0]) + this.star1.setImageResource(R.drawable.currency_star); + if (stars[1]) + this.star2.setImageResource(R.drawable.currency_star); + if (stars[2]) + this.star3.setImageResource(R.drawable.currency_star); + if (energy) + this.energy.setImageResource(R.drawable.currency_energy); + } + + public Level getLevel() { + return level; + } + + public View getView(){ + return layout; + } + + @Override + public void onClick(View v) { + clickListener.onClick(this); + } +} diff --git a/app/src/main/java/de/frajul/endlessroll/views/LevelupMessage.java b/app/src/main/java/de/frajul/endlessroll/views/LevelupMessage.java new file mode 100644 index 0000000..7fd32a0 --- /dev/null +++ b/app/src/main/java/de/frajul/endlessroll/views/LevelupMessage.java @@ -0,0 +1,80 @@ +package de.frajul.endlessroll.views; + +import android.graphics.Typeface; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.FrameLayout; +import android.widget.LinearLayout; +import android.widget.TextView; + +import de.frajul.endlessroll.R; +import de.frajul.endlessroll.entities.tileLists.TileList; +import de.frajul.endlessroll.main.GameActivity; +import de.frajul.endlessroll.main.screens.Screen; +import de.frajul.endlessroll.user.LevelBounty; +import de.frajul.endlessroll.user.User; + +/** + * Created by Julian on 15.07.2016. + */ +public class LevelupMessage implements View.OnClickListener, BountyMessage.ScreenSwitchCaller { + + private GameActivity gameActivity; + private FrameLayout layout; + + private TextView levelView; + private TextView text; + private LinearLayout unlockMessages; + + public LevelupMessage(GameActivity gameActivity) { + this.gameActivity = gameActivity; + + Typeface typeface = gameActivity.getTypeface(); + LayoutInflater inflater = LayoutInflater.from(gameActivity); + layout = (FrameLayout) inflater.inflate(R.layout.levelup_message, null); + layout.setOnClickListener(this); + layout.setLayoutParams(new ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT)); + layout.setVisibility(View.GONE); + levelView = (TextView) layout.findViewById(R.id.levelup_level); + levelView.setTypeface(typeface); + text = (TextView) layout.findViewById(R.id.levelup_text); + text.setTypeface(typeface); + unlockMessages = (LinearLayout) layout.findViewById(R.id.levelup_unlocklist); + } + + public void show(int level) { + LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT); + params.setMargins(0, 5, 0, 5); + + levelView.setText(level + ""); + + LevelBounty bounty = gameActivity.getUser().getLevelUpBounties().get(level); + if (bounty != null) + for (BountyMessage message : bounty.createBountyMessages(gameActivity, this)) + unlockMessages.addView(message.getLayout(), params); + + layout.setVisibility(View.VISIBLE); + } + + private void hide() { + layout.setVisibility(View.GONE); + unlockMessages.removeAllViews(); + } + + public FrameLayout getLayout() { + return layout; + } + + @Override + public void onClick(View v) { + hide(); + } + + + @Override + public void switchScreen(Screen.ScreenType screenType) { + gameActivity.flipToScreen(screenType); + hide(); + } +} diff --git a/app/src/main/java/de/frajul/endlessroll/views/ShortMenu.java b/app/src/main/java/de/frajul/endlessroll/views/ShortMenu.java new file mode 100644 index 0000000..bcd684c --- /dev/null +++ b/app/src/main/java/de/frajul/endlessroll/views/ShortMenu.java @@ -0,0 +1,93 @@ +package de.frajul.endlessroll.views; + +import android.content.Context; +import android.graphics.Typeface; +import android.view.View; +import android.view.animation.Animation; +import android.view.animation.AnimationUtils; +import android.widget.FrameLayout; +import android.widget.RelativeLayout; +import android.widget.TextView; + +import java.util.Random; + +import de.frajul.endlessroll.R; +import de.frajul.endlessroll.main.GameActivity; +import de.frajul.endlessroll.main.game.Game; +import de.frajul.endlessroll.main.screens.Screen; + +/** + * Created by Julian on 23.01.2016. + */ +public class ShortMenu implements View.OnClickListener { + + private Game game; + private Random random; + private Animation slideLeft; + private Animation slideRight; + private Animation slideTop; + + private View layout; + private TopBar topBar; + private TextView continueView; + private TextView restartView; + private TextView exitView; + + public ShortMenu(final Game game, GameActivity gameActivity, View layout) { + this.game = game; + this.layout = layout; + Typeface typeface = gameActivity.getTypeface(); + topBar = new TopBar(gameActivity, Screen.ScreenType.GAME, + layout.findViewById(R.id.shortmenu_topbar)); + continueView = (TextView) layout.findViewById(R.id.shortmenu_continue); + continueView.setTypeface(typeface); + continueView.setOnClickListener(this); + restartView = (TextView) layout.findViewById(R.id.shortmenu_restart); + restartView.setTypeface(typeface); + restartView.setOnClickListener(this); + exitView = (TextView) layout.findViewById(R.id.shortmenu_exit); + exitView.setTypeface(typeface); + exitView.setOnClickListener(this); + + random = new Random(); + Context context = game.getContext(); + slideLeft = AnimationUtils.loadAnimation(context, R.anim.slide_in_left); + slideRight = AnimationUtils.loadAnimation(context, R.anim.slide_in_right); + slideTop = AnimationUtils.loadAnimation(context, R.anim.slide_in_top); + } + + public void startAnims() { + startRandomAnimation(continueView); + startRandomAnimation(restartView); + startRandomAnimation(exitView); + topBar.startAnimation(slideTop); + } + + public void setVisible(boolean visible) { + layout.setVisibility(visible ? View.VISIBLE : View.INVISIBLE); + if (visible) + topBar.update(); + } + + private void startRandomAnimation(View view) { + float r = random.nextFloat(); + if (r >= 0.5) + view.startAnimation(slideRight); + else + view.startAnimation(slideLeft); + } + + @Override + public void onClick(View v) { + if (v.equals(continueView)) { + setVisible(false); + game.continueGame(); + } else if (v.equals(restartView)) { + setVisible(false); + game.restartLevel(); + } else if (v.equals(exitView)) { + setVisible(false); + game.toLevelsScreen(); + } + } +} diff --git a/app/src/main/java/de/frajul/endlessroll/views/ToolButton.java b/app/src/main/java/de/frajul/endlessroll/views/ToolButton.java new file mode 100644 index 0000000..1eecdac --- /dev/null +++ b/app/src/main/java/de/frajul/endlessroll/views/ToolButton.java @@ -0,0 +1,126 @@ +package de.frajul.endlessroll.views; + +import android.content.Context; +import android.graphics.drawable.Drawable; +import android.graphics.drawable.GradientDrawable; +import android.view.animation.Animation; +import android.view.animation.AnimationUtils; +import android.widget.ImageView; +import android.widget.ProgressBar; +import android.widget.RelativeLayout; + +import de.frajul.endlessroll.R; +import de.frajul.endlessroll.entities.tools.ToolSlot; +import de.frajul.endlessroll.entities.tools.ToolType; +import de.frajul.endlessroll.entities.tools.ToolUpgradeType; + +/** + * Created by Julian on 15.01.2016. + */ +public class ToolButton { + + private boolean locked; + private ToolType toolType; + private Context context; + private float progress = 100; + private boolean active = false; + + private RelativeLayout layout; + private ProgressBar progressBar; + private ImageView backgroundView; + private ImageView animationView; + private Animation scaleAnimation; + + public ToolButton(ToolSlot slot, Context context, RelativeLayout layout) { + this.context = context; + this.layout = layout; + progressBar = (ProgressBar) layout.findViewById(R.id.tool_button_progress_bar); + + scaleAnimation = AnimationUtils.loadAnimation(context, R.anim.scale_up); + changeToolSlot(slot); + } + + public void changeToolSlot(ToolSlot toolSlot) { + this.toolType = toolSlot.getToolType(); + this.locked = toolSlot.isLocked(); + backgroundView = createImageView(toolType, R.id.tool_button_background_layer); + animationView = createImageView(toolType, R.id.tool_button_animation_layer); + } + + private ImageView createImageView(ToolType type, int id) { + ImageView view = (ImageView) layout.findViewById(id); + if (locked) + view.setImageResource(R.drawable.tools_button_locked); + else if (type != null) + view.setImageResource(type.getButtonDrawable()); + else + view.setImageResource(R.drawable.tools_button_empty); + view.setBackgroundDrawable(createColoredBackground()); + return view; + } + + private Drawable createColoredBackground() { + GradientDrawable gd = new GradientDrawable(); + gd.setColor(context.getResources().getColor(R.color.toolbuttonInactiveNotReady)); + if (locked || toolType == null) { + gd.setColor(context.getResources().getColor(R.color.toolbuttonLocked)); + } + gd.setCornerRadius(15); + return gd; + } + + public void update(float frameTime) { + if (progress != 100) { + progress += (frameTime) / (toolType + .getCurrentUpgradeValue(ToolUpgradeType.COOLDOWN) / 100); + progress = Math.min(progress, 100); + if (progress == 100) + animationView.startAnimation(scaleAnimation); + } + progressBar.setProgress(100 - (int) progress); + if (!locked && toolType != null) { + if (active) { + if (progress == 100) + setColor(R.color.toolbuttonActiveReady); + else + setColor(R.color.toolbuttonActiveNotReady); + } else { + if (progress == 100) + setColor(R.color.toolbuttonInactiveReady); + else + setColor(R.color.toolbuttonInactiveNotReady); + } + } + } + + private void setColor(int id) { + GradientDrawable gd = (GradientDrawable) backgroundView.getBackground(); + GradientDrawable animGd = (GradientDrawable) animationView.getBackground(); + gd.setColor(context.getResources().getColor(id)); + animGd.setColor(context.getResources().getColor(id)); + } + + public void setActive(boolean active) { + this.active = active; + } + + public boolean isActive() { + return active; + } + + public void setProgress(int progress) { + this.progress = progress; + } + + public boolean finishedLoading() { + return progress == 100; + } + + public ToolType getToolType() { + return toolType; + } + + public boolean isLocked() { + return locked; + } +} diff --git a/app/src/main/java/de/frajul/endlessroll/views/ToolButtonBar.java b/app/src/main/java/de/frajul/endlessroll/views/ToolButtonBar.java new file mode 100644 index 0000000..75bbe4a --- /dev/null +++ b/app/src/main/java/de/frajul/endlessroll/views/ToolButtonBar.java @@ -0,0 +1,149 @@ +package de.frajul.endlessroll.views; + +import android.content.Context; +import android.view.View; +import android.view.animation.Animation; +import android.view.animation.AnimationUtils; +import android.widget.LinearLayout; +import android.widget.RelativeLayout; + +import java.util.ArrayList; +import java.util.List; + +import de.frajul.endlessroll.R; +import de.frajul.endlessroll.entities.tools.ToolType; +import de.frajul.endlessroll.main.GameLog; +import de.frajul.endlessroll.main.game.Game; +import de.frajul.endlessroll.main.game.GameState; +import de.frajul.endlessroll.user.ToolSlotSettings; + +/** + * Created by Julian on 16.01.2016. + */ +public class ToolButtonBar implements View.OnClickListener, Animation.AnimationListener { + + @Override + public void onAnimationStart(Animation animation) { + } + + @Override + public void onAnimationEnd(Animation animation) { + } + + @Override + public void onAnimationRepeat(Animation animation) { + + } + + private Animation fadeIn, fadeOut; + private Game game; + private List buttons = new ArrayList<>(4); + private RelativeLayout button1; + private RelativeLayout button2; + private RelativeLayout button3; + private RelativeLayout button4; + + + public ToolButtonBar(Game game, ToolSlotSettings toolSlotSettings, LinearLayout layout1) { + this.game = game; + Context context = game.getContext(); + fadeIn = AnimationUtils.loadAnimation(game.getContext(), R.anim.fade_in); + fadeIn.setAnimationListener(this); + fadeOut = AnimationUtils.loadAnimation(game.getContext(), R.anim.fade_out); + + button1 = (RelativeLayout) layout1.findViewById(R.id.toolbutton_1); + button1.setOnClickListener(this); + button2 = (RelativeLayout) layout1.findViewById(R.id.toolbutton_2); + button2.setOnClickListener(this); + button3 = (RelativeLayout) layout1.findViewById(R.id.toolbutton_3); + button3.setOnClickListener(this); + button4 = (RelativeLayout) layout1.findViewById(R.id.toolbutton_4); + button4.setOnClickListener(this); + buttons.add(new ToolButton(toolSlotSettings.get(0), context, button1)); + buttons.add(new ToolButton(toolSlotSettings.get(1), context, button2)); + buttons.add(new ToolButton(toolSlotSettings.get(2), context, button3)); + buttons.add(new ToolButton(toolSlotSettings.get(3), context, button4)); + } + + public void setTopPrimary() { + button1.startAnimation(fadeIn); + button2.startAnimation(fadeIn); + button3.startAnimation(fadeIn); + button4.startAnimation(fadeIn); + } + + public void setBottomPrimary() { + button1.startAnimation(fadeOut); + button2.startAnimation(fadeOut); + button3.startAnimation(fadeOut); + button4.startAnimation(fadeOut); + } + + public void changeToolButtonTypes(ToolSlotSettings toolSlotSettings) { + for (int i = 0; i < 4; i++) { + buttons.get(i).changeToolSlot(toolSlotSettings.get(i)); + } + } + + public void reset(ToolSlotSettings toolSlotSettings) { + GameLog.i("Reset toolbuttonBar"); + changeToolButtonTypes(toolSlotSettings); + for (int i = 0; i < 4; i++) { + if (toolSlotSettings.get(i).getToolType() != null) { + setActive(i); + break; + } + } + for (ToolButton button : buttons) + button.setProgress(100); + } + + public void update(float frameTime) { + for (ToolButton button : buttons) + button.update(frameTime); + } + + public void setActive(ToolType activeType) { + for (ToolButton button : buttons) + button.setActive(button.getToolType() == activeType); + } + + private void setActive(int index) { + for (ToolButton button : buttons) + button.setActive(buttons.indexOf(button) == index); + } + + public ToolButton getByToolType(ToolType type) { + for (ToolButton button : buttons) + if (button.getToolType() == type) + return button; + return null; + } + + public ToolButton getActiveButton() { + for (ToolButton button : buttons) + if (button.isActive()) + return button; + return null; + } + + @Override + public void onClick(View v) { + if (game.getGameState() == GameState.RUNNING) { + ToolType clickedType = null; + if (v.equals(button1) && !buttons.get(0).isLocked()) { + clickedType = buttons.get(0).getToolType(); + } else if (v.equals(button2) && !buttons.get(1).isLocked()) { + clickedType = buttons.get(1).getToolType(); + } else if (v.equals(button3) && !buttons.get(2).isLocked()) { + clickedType = buttons.get(2).getToolType(); + } else if (v.equals(button4) && !buttons.get(3).isLocked()) { + clickedType = buttons.get(3).getToolType(); + } + if (clickedType != null) { + game.setCurrentTool(clickedType); + setActive(clickedType); + } + } + } +} diff --git a/app/src/main/java/de/frajul/endlessroll/views/ToolOfferSlot.java b/app/src/main/java/de/frajul/endlessroll/views/ToolOfferSlot.java new file mode 100644 index 0000000..55ce70c --- /dev/null +++ b/app/src/main/java/de/frajul/endlessroll/views/ToolOfferSlot.java @@ -0,0 +1,101 @@ +package de.frajul.endlessroll.views; + +import android.content.Context; +import android.graphics.Typeface; +import android.graphics.drawable.Drawable; +import android.graphics.drawable.GradientDrawable; +import android.view.LayoutInflater; +import android.view.View; +import android.widget.FrameLayout; +import android.widget.ImageView; +import android.widget.LinearLayout; +import android.widget.TextView; + +import de.frajul.endlessroll.R; +import de.frajul.endlessroll.entities.tools.ToolType; +import de.frajul.endlessroll.main.screens.ToolShopScreen; + +/** + * Created by Julian on 16.07.2016. + */ +public class ToolOfferSlot implements View.OnClickListener { + + private ToolShopScreen toolShopScreen; + private ToolType toolType; + private boolean locked; + private boolean selected; + + private int colorDisabled; + private int colorDisabledSelected; + private int colorEnabled; + private int colorEnabledSelected; + + private LinearLayout layout; + private TextView title; + private ImageView image; + + public ToolOfferSlot(ToolShopScreen toolShopScreen, Context context, Typeface typeface, ToolType toolType) { + this.toolShopScreen = toolShopScreen; + this.toolType = toolType; + LayoutInflater inflater = LayoutInflater.from(context); + layout = (LinearLayout) inflater.inflate(R.layout.tool_offer_slot, null); + layout.setOnClickListener(this); + FrameLayout slotLayout = (FrameLayout) layout.findViewById(R.id.toolofferslot_slot); + title = (TextView) layout.findViewById(R.id.toolofferslot_title); + title.setTypeface(typeface); + image = (ImageView) slotLayout.findViewById(R.id.toolslot_image); + image.setBackgroundDrawable(createImageBackground()); + + colorDisabled = context.getResources().getColor(R.color.toolslotDisabled); + colorDisabledSelected = context.getResources().getColor(R.color.toolslotDisabledSelected); + colorEnabled = context.getResources().getColor(R.color.toolslotEnabled); + colorEnabledSelected = context.getResources().getColor(R.color.toolslotEnabledSelected); + } + + private Drawable createImageBackground() { + GradientDrawable gd = new GradientDrawable(); + gd.setCornerRadius(10); + return gd; + } + + public void setLocked(boolean locked) { + this.locked = locked; + if (locked) { + title.setText(R.string.tool_name_locked); + image.setImageResource(R.drawable.tools_button_locked); + } else { + title.setText(toolType.getName()); + image.setImageResource(toolType.getButtonDrawable()); + } + } + + public void updateBackgroundColor() { + GradientDrawable gd = (GradientDrawable) image.getBackground(); + if (toolType.isBought()) + gd.setColor(selected ? colorEnabledSelected : colorEnabled); + else + gd.setColor(selected ? colorDisabledSelected : colorDisabled); + } + + public void setSelected(boolean selected) { + this.selected = selected; + updateBackgroundColor(); + } + + public boolean isLocked() { + return locked; + } + + public ToolType getToolType() { + return toolType; + } + + public LinearLayout getLayout() { + return layout; + } + + @Override + public void onClick(View v) { + toolShopScreen.onToolOfferSlotSelected(this); + } +} diff --git a/app/src/main/java/de/frajul/endlessroll/views/TopBar.java b/app/src/main/java/de/frajul/endlessroll/views/TopBar.java new file mode 100644 index 0000000..1ef6ea6 --- /dev/null +++ b/app/src/main/java/de/frajul/endlessroll/views/TopBar.java @@ -0,0 +1,121 @@ +package de.frajul.endlessroll.views; + +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.ProgressBar; +import android.widget.TextView; + +import de.frajul.endlessroll.R; +import de.frajul.endlessroll.main.GameActivity; +import de.frajul.endlessroll.main.screens.Screen; +import de.frajul.endlessroll.main.tutorial.ToolShopTutorial; +import de.frajul.endlessroll.user.User; + +/** + * Created by Julian on 08.07.2016. + */ +public class TopBar implements View.OnClickListener { + + private GameActivity gameActivity; + private View layout; + + private Animation starDecreaseAnimation; + private Animation energyDecreaseAnimation; + private Animation toolShopPulse; + + private TextView levelDisplay; + private ProgressBar levelProgress; + private TextView starCount; + private TextView energyCount; + private Button settingsButton; + private Button toolshopButton; + private Button shapeshopButton; + private TextView starCountDecrease; + private TextView energyCountDecrease; + + public TopBar(GameActivity gameActivity, Screen.ScreenType parent, View layout) { + this.gameActivity = gameActivity; + this.layout = layout; + + starDecreaseAnimation = AnimationUtils.loadAnimation(gameActivity, R.anim.decrease); + energyDecreaseAnimation = AnimationUtils.loadAnimation(gameActivity, R.anim.decrease); + toolShopPulse = AnimationUtils.loadAnimation(gameActivity, R.anim.pulse); + + Typeface typeface = gameActivity.getTypeface(); + levelDisplay = (TextView) layout.findViewById(R.id.topbar_leveldisplay); + levelDisplay.setTypeface(typeface); + levelProgress = (ProgressBar) layout.findViewById(R.id.topbar_levelprogress); + starCount = (TextView) layout.findViewById(R.id.topbar_starcount); + starCount.setTypeface(typeface); + energyCount = (TextView) layout.findViewById(R.id.topbar_energycount); + energyCount.setTypeface(typeface); + settingsButton = (Button) layout.findViewById(R.id.topbar_settings); + settingsButton.setOnClickListener(this); + toolshopButton = (Button) layout.findViewById(R.id.topbar_toolshop); + toolshopButton.setOnClickListener(this); + shapeshopButton = (Button) layout.findViewById(R.id.topbar_shapeshop); + shapeshopButton.setOnClickListener(this); + if (parent == Screen.ScreenType.TOOL_SHOP || parent == Screen.ScreenType.SHAPE_SHOP || parent == Screen.ScreenType.SETTINGS) { + toolshopButton.setEnabled(false); + shapeshopButton.setEnabled(false); + settingsButton.setEnabled(false); + } + if (parent == Screen.ScreenType.GAME) { + toolshopButton.setEnabled(false); + shapeshopButton.setEnabled(false); + } + starCountDecrease = (TextView) layout.findViewById(R.id.topbar_starcount_decrease); + starCountDecrease.setTypeface(typeface); + energyCountDecrease = (TextView) layout.findViewById(R.id.topbar_energycount_decrease); + energyCountDecrease.setTypeface(typeface); + } + + public void setShopsEnabled(boolean enabled) { + toolshopButton.setEnabled(enabled); + shapeshopButton.setEnabled(enabled); + } + + public void startAnimation(Animation animation) { + layout.startAnimation(animation); + } + + public void update() { + toolshopButton.clearAnimation(); + + User user = gameActivity.getUser(); + levelDisplay + .setText(gameActivity.getString(R.string.topbar_level_format_d, user.getLevel())); + levelProgress.setProgress(user.getEp()); + starCount.setText(user.getStarCount() + ""); + energyCount.setText(user.getEnergyCount() + ""); + + if (gameActivity.getTutorialManager().getToolShopTutorial() + .getState() == ToolShopTutorial.ToolShopTutorialState.TO_TOOLSHOP && toolshopButton + .isEnabled()) + toolshopButton.startAnimation(toolShopPulse); + } + + public void showStarcountDecrease(int decrease) { + starCountDecrease.setText(decrease + ""); + starCountDecrease.startAnimation(starDecreaseAnimation); + } + + public void showEnergycountDecrease(int decrease) { + energyCountDecrease.setText(decrease + ""); + energyCountDecrease.startAnimation(energyDecreaseAnimation); + } + + @Override + public void onClick(View v) { + if (v.equals(toolshopButton)) { + gameActivity.flipToScreen(Screen.ScreenType.TOOL_SHOP); + } else if (v.equals(shapeshopButton)) { + gameActivity.flipToScreen(Screen.ScreenType.SHAPE_SHOP); + } else if (v.equals(settingsButton)) { + gameActivity.flipToScreen(Screen.ScreenType.SETTINGS); + } + } +} diff --git a/app/src/main/java/de/frajul/endlessroll/views/ViewManager.java b/app/src/main/java/de/frajul/endlessroll/views/ViewManager.java new file mode 100644 index 0000000..e49edf4 --- /dev/null +++ b/app/src/main/java/de/frajul/endlessroll/views/ViewManager.java @@ -0,0 +1,144 @@ +package de.frajul.endlessroll.views; + +import android.view.View; +import android.widget.ImageView; +import android.widget.LinearLayout; +import android.widget.RelativeLayout; +import android.widget.TextView; + +import de.frajul.endlessroll.R; +import de.frajul.endlessroll.levels.Level; +import de.frajul.endlessroll.levels.LevelPack; +import de.frajul.endlessroll.main.GameActivity; +import de.frajul.endlessroll.main.GameHandler; +import de.frajul.endlessroll.main.game.Game; +import de.frajul.endlessroll.main.game.Timer; +import de.frajul.endlessroll.user.User; + +/** + * Created by Julian on 11.12.2015. + */ +public class ViewManager implements View.OnClickListener { + + private GameHandler gameViewHandler; + private Game game; + + private TextView fpsView; + private TextView playerProgress; + private TextView playerSpeed; + private ImageView pauseButton; + private GameOverMessage gameOverMessage; + private GoalMessage goalMessage; + public ToolButtonBar toolButtonBar; + public ShortMenu shortMenu; + private Countdown countdown; + + private String fpsFormat, playerProgressFormat, playerSpeedFormat; + + public ViewManager(final Game game, final GameHandler gameViewHandler, final GameActivity gameActivity) { + this.game = game; + this.gameViewHandler = gameViewHandler; + + final RelativeLayout layout = gameViewHandler.getRootLayout(); + gameViewHandler.startInUiThread(new Runnable() { + @Override + public void run() { + toolButtonBar = new ToolButtonBar(game, + gameActivity.getUser().getToolSlotSettings(), + (LinearLayout) layout.findViewById(R.id.game_toolbuttonbar)); + shortMenu = new ShortMenu(game, gameActivity, + (LinearLayout) layout.findViewById(R.id.game_shortmenu)); + gameOverMessage = new GameOverMessage(game, gameActivity, + layout.findViewById(R.id.game_game_over_message)); + goalMessage = new GoalMessage(game, gameActivity, layout.findViewById(R.id.game_goal_message)); + countdown = new Countdown(game, gameActivity.getTypeface(), + (TextView) layout.findViewById(R.id.game_countdown)); + } + }); + pauseButton = (ImageView) layout.findViewById(R.id.game_pausebutton); + pauseButton.setOnClickListener(this); + playerProgress = (TextView) layout.findViewById(R.id.game_playerprogress); + playerSpeed = (TextView) layout.findViewById(R.id.game_playerspeed); + fpsView = (TextView) layout.findViewById(R.id.game_fps); + + fpsFormat = game.getContext().getString(R.string.game_fps_format_d); + playerProgressFormat = game.getContext().getString(R.string.game_playerprogress_format_f); + playerSpeedFormat = game.getContext().getString(R.string.game_playerspeed_format_f); + } + + @Override + public void onClick(View v) { + game.tryToPause(); + } + + public void resetViews(final User user) { + gameViewHandler.startInUiThread(new Runnable() { + @Override + public void run() { + toolButtonBar.reset(user.getToolSlotSettings()); + toolButtonBar.update(0); + playerProgress.setText(R.string.game_playerprogress_placeholder); + playerSpeed.setText(R.string.game_playerspeed_placeholder); + } + }); + } + + public void onGoalMessageKeyBack(){ + goalMessage.onKeyBack(); + } + + public void showGameOverMessage() { + gameViewHandler.startInUiThread(new Runnable() { + @Override + public void run() { + gameOverMessage.fadeIn(); + } + }); + } + + public void showGoalMessage(final LevelPack levelPack, final Level level){ + gameViewHandler.startInUiThread(new Runnable() { + @Override + public void run() { + goalMessage.fadeInWithDelay(levelPack, level); + } + }); + } + + public void showShortMenu() { + shortMenu.startAnims(); + shortMenu.setVisible(true); + } + + public void hideShortMenu() { + shortMenu.setVisible(false); + } + + public void startCountdown() { + countdown.start(); + } + + public void stopCountdown() { + countdown.stop(); + } + + public void update(final boolean gameRunning, final Timer timer, final float playerX, final float playerXMov) { + gameViewHandler.startInUiThread(new Runnable() { + @Override + public void run() { + fpsView.setText(String.format(fpsFormat, timer.getFps())); + if (gameRunning) { + playerProgress.setText(String.format(playerProgressFormat, toMeters(playerX))); + playerSpeed + .setText(String.format(playerSpeedFormat, toMeters(playerXMov * 1000))); + toolButtonBar.update(timer.getFrameTimeSeconds()); + } + } + }); + } + + private float toMeters(float value) { + return ((int) (value * 20)) / 10f; + } + +} diff --git a/app/src/main/java/de/frajul/endlessroll/views/WorldButton.java b/app/src/main/java/de/frajul/endlessroll/views/WorldButton.java new file mode 100644 index 0000000..78abc77 --- /dev/null +++ b/app/src/main/java/de/frajul/endlessroll/views/WorldButton.java @@ -0,0 +1,86 @@ +package de.frajul.endlessroll.views; + +import android.graphics.Typeface; +import android.view.LayoutInflater; +import android.view.View; +import android.widget.ImageView; +import android.widget.TextView; + +import de.frajul.endlessroll.R; +import de.frajul.endlessroll.levels.LevelPack; +import de.frajul.endlessroll.main.GameActivity; + +/** + * Created by Julian on 01.08.2016. + */ +public class WorldButton implements View.OnClickListener { + + private GameActivity gameActivity; + private LevelPack levelPack; + private WorldButtonOnClickListener clickListener; + + private View layout; + private TextView title; + private ImageView previewImage; + private View lock; + private TextView levelCount; + private TextView starCount; + private TextView energyCount; + + public WorldButton(GameActivity gameActivity, LevelPack levelPack, WorldButtonOnClickListener clickListener) { + this.gameActivity = gameActivity; + this.levelPack = levelPack; + this.clickListener = clickListener; + + LayoutInflater inflater = LayoutInflater.from(gameActivity); + layout = inflater.inflate(R.layout.world_button, null); + layout.setOnClickListener(this); + + Typeface typeface = gameActivity.getTypeface(); + title = (TextView) layout.findViewById(R.id.worldbutton_title); + title.setTypeface(typeface); + previewImage = (ImageView) layout.findViewById(R.id.worldbutton_preview); + lock = layout.findViewById(R.id.worldbutton_lock); + levelCount = (TextView) layout.findViewById(R.id.worldbutton_levelcount); + levelCount.setTypeface(typeface); + starCount = (TextView) layout.findViewById(R.id.worldbutton_starcount); + starCount.setTypeface(typeface); + energyCount = (TextView) layout.findViewById(R.id.worldbutton_energycount); + energyCount.setTypeface(typeface); + + update(); + } + + public void update() { + title.setText(levelPack.getName()); + previewImage.setImageDrawable( + gameActivity.getResources().getDrawable(levelPack.getWorld().getPreviewId())); + levelCount.setText(gameActivity + .getString(R.string.world_button_count_format_dd, levelPack.getFinishedLevelCount(), + levelPack.getLevels().size())); + starCount.setText(gameActivity + .getString(R.string.world_button_count_format_dd, levelPack.getCollectedStarCount(), + levelPack.getAvailableStars())); + energyCount.setText(gameActivity.getString(R.string.world_button_count_format_dd, + levelPack.getCollectedEnergyCount(), levelPack.getAvailableEnergy())); + setLockVisible(levelPack.isLocked()); + } + + public void setLockVisible(boolean locked) { + int visibility = locked ? View.VISIBLE : View.GONE; + lock.setVisibility(visibility); + } + + public LevelPack getLevelPack() { + return levelPack; + } + + public View getView() { + return layout; + } + + @Override + public void onClick(View v) { + clickListener.onClick(this); + } +} diff --git a/app/src/main/res/drawable/backgrounds_game_cave.png b/app/src/main/res/drawable/backgrounds_game_cave.png new file mode 100644 index 0000000000000000000000000000000000000000..8b373c1ac720dcbd8776061fbedc0fa735cfe395 GIT binary patch literal 41157 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 ReLNWOB`c{UQ72{;{6BJImxTZT literal 0 HcmV?d00001 diff --git a/app/src/main/res/drawable/backgrounds_menu_grass.png b/app/src/main/res/drawable/backgrounds_menu_grass.png new file mode 100644 index 0000000000000000000000000000000000000000..5a33827e201e2f402d3895521143cd9a01c3b645 GIT binary patch literal 157133 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⪻xG0>f3(+yc=Cn*UslUdvaW)zivpU`_3G+%p=G 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 UWkxB}-T(jq07*qoM6N<$fIxsd50E!_s``s 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 X$oIwJyzv-t00000NkvXXu0mjf2T*7* literal 0 HcmV?d00001 diff --git a/app/src/main/res/drawable/guis_clock.png b/app/src/main/res/drawable/guis_clock.png new file mode 100644 index 0000000000000000000000000000000000000000..8fd21b1e822da74b1f592b7281340f644c89f743 GIT binary patch literal 2294 zcmVPfr^UJ^x=LN9_B z^`c$`4}wB3O%qL96^m#s$i}p(Shd}K9)8$g({7sCWdF?Uybl(1l4fV#_syF(vu|er z2m}IwKp+qZ1cF*%3bYZ)Mrt$;$#!Zr0?C$YRvO8s>Qxp&PB5yVK*S^d|8tBn?$3g3 z=Wq~-Ur45te_w|%P*fp=gFt+}gx7kX8U!Jn5W+-!{eqBL2w~aC_nUOPu?0uleH8&C z;$1SVeXqb&5&#C3_&SB)IUkzHD#-l0P{)37V$4VjEcnV5@zZmg&9033m zi3FBPB{WS_Isq7lfx50^BoaXYz*sD{|B`}gl(@_8bWC`*$ApR$N5rgVM({vDIaBx;(5g+hTC<;39NAnxA1dx=f^`}@nj zH#Iednxk=g*&IvB2WwSg*YR zS3)PDI{N$j=aWU3yOPOd)!(XD0AUKfyhA>phqGtT!t2+sxxU}n*eFbXB=!C}FgrVo z7cXAqeji}(-n}?9G{pV;UJL^yfEw}O!2@h+YT_b(_3G7l@7_Jz_i$SPNCL2r_wV21 zfddD)d;OU+XYj|5A2r>}?O>3|x4Ck6>Cz=`;yXGzaA07d?)#De1i<6RkFmMAnTz60zu(h?7yVqa4cFniCk^mfpuIqT>#0hTVj~qFI zg{A4prim^y?TZ1?d{yX{_^F^Le-xH zzzM@J@axyF^Z%ckn!;o<$xZyhg9mYJY)rUzxhjC5V0?TWuUxq@KSz&5B4s&^%U#iE z6dyi(D0KTs09DZ2+iPd9zWJ-Sw^xdEH#-7QG9zesc-YqWySlpI?%lhvb?a88?8Lph zr%dSU>*HR`S-*Zg-oJle#@_B;5Gbnvve_)|+qaL~VCT=D$3K7m$m;G%0E^Mn)5F!C z&dyHE<#N)riv+-lxw$!vMxzzm!5G87zCP)Ow0Z?#Z!>$uC6_D+g+g%q_U($FA3l5- zPM)22<9VW2)lQG{`}dp zJSbb!+vSK=2?8z099dx)286@bYhN=nGq7^y${-7XDL({M>iruwYzPGTP7eVrXpJ2i z8L=#HZEX!Y&y0dV0LW&umgU>GZwFPOlmIfBjAi+*UAssCD$E4lzI|(1zGKG@C1(K2 zd4RF8G0XBqBB87Ys3w`fOa-T>ry&xFEGZ9#LNGTs7jzF$a}XGqnZU=7A1%u(Ee)&E z$u)Dmn0V+fDT5+PS0R-V8P(57m2p|w~K&4f{ZQHh~ z9OQG8EB$OB91eqF7)#1ar4p=NyH>gA-|i5=WF7`4CMGP&U$bV7(&Q@>1ipLs&a!;- z=FOlwG^Z61hDMgCMPGMySp2r(I`w$PYY$dAUp(` zoScMcGz#6_-B2tReGA+xrX4Rl#2}GK2$eeB+1Y7X=ciAfN|XM*aCdQz7g=2!0@!jc z>K{f&M(2f_o0czpcAc)
wx^x22b-gT24gltl ziUk+9cMXIP7GB9@QrdF~?3_U27xBy|5%2{lng)eJ0oJWsC#Bkp#UgCnxUpIepRb%S zA3Xtg1g+4#-g7?uj4o|4E1M8%SkUo>3lXLlz6fD4L2mu7=p2Y}W)QO@f`tYa#VgdY zeCvA$6y?w;R*N_IXL!GaAT#lz3BVB{xa}Dncu*tUik_&)#?>T*YDDo0!-Xeu!Y<{? zvc@dyT#!)()e{3Fg{mn8DQy{~6dfensVxAvgh6?11OkCTAP@)y0wF;73$qEZfHk*4 Qa{vGU07*qoM6N<$f?Ov*P5=M^ literal 0 HcmV?d00001 diff --git a/app/src/main/res/drawable/guis_goal.png b/app/src/main/res/drawable/guis_goal.png new file mode 100644 index 0000000000000000000000000000000000000000..f1ad4b15f389995033f410f7b8d17c77ce7f9259 GIT binary patch literal 278 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 literal 0 HcmV?d00001 diff --git a/app/src/main/res/drawable/guis_pausebutton.png b/app/src/main/res/drawable/guis_pausebutton.png new file mode 100644 index 0000000000000000000000000000000000000000..ba46ab0801dd83e91b8e29b61e0c7393db6b8051 GIT binary patch literal 16121 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 literal 0 HcmV?d00001 diff --git a/app/src/main/res/drawable/guis_playerarrow.png b/app/src/main/res/drawable/guis_playerarrow.png new file mode 100644 index 0000000000000000000000000000000000000000..7898595839a13ed70f9d34eaf1a2ef5a59ea4c30 GIT binary patch literal 1249 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 g7=~dOhWUT~1-=q!)-mm;6YNJh&DFSls6Pg zNX52lB8fJkpn+thp$hl_5+joOK=_a^TN*xRC=7R)xqaAcV3>R7&iPp9o^#LH|71sk z+`aGKYu&ZiT6=wDNC&Ec8y-JX1>}={FjXmGfS>sI%SKE!|5 zSf=zH9+WF353IJNE|fyg0SAFjIiyzLRbY<7{1*c-z#)b8p8}eD%zGS|XGsrF0&fGi ziX46?@Hy~6fcdilh~G7W=t)C>7NDb-xtoCrX(aq)U`-!~(>4ACjPOZ_Sqcm=%;z2( zfo(3=cte!c#A6t+0yqP-yF8p0;CH|jAM0&aV1UIw)}0M}@Ts-{UVh#)@c)mSYqJ-?nM1 z6p7#Elju#ac~6v7jdj+g!4zBtTvIr#4&XcBFBJONrztZ)UYt5Tv0ZWgtH9JK+_2@w zX~pk85?BB{-tF%P0KX35dp{^Pd97rNtGzR_uDsJ33$CV`&tGh$ zxJa+mFu)19^DGShCzeY(7{GCy(~8Pq5^xbX7L{FIcI5N<>zLQC$AN*C{`?9!R|yh8 z^RE4`c)s!}C;r~*>gr=rE$)c{vf1n)#kEh0BPWw$;^%>zZEbBq=jqZPMt1X6=rcer zmphDkuAC1nbQ~v0)a<3G?!6cxBNovmKOb&rXy}J|Us(mbjtN5fJN~1XN@4|tFIP7) z{_APL%%-L$ufOJL!UXx0j&{69mOTr5KM^ zgNu150!LEJ0Pok-)b#J;jB0_0F)r`5z&Dt;lxroNVP_o2nXJhG>pgDlIPev)2je!q zkK%6AXDJ>LoR-l+VdBa_U<@X%@EJ@f+_xfe+dW8@HCn`-;fZdpIsX9?wW~G?$ zJ;xGE6!9a#R!ok>S%SqhwqV{X0;3sSe|ugCn%ESQXl~q zELf1iBwrj!&;c9-HUQ6y^)XJE+>tRz{%)51n+@`rq!9m*n3A6GBe4MbO5Tj?*d+>3 z5O;N*%(1J2mCD}}pw_}KF}eDcwCOj|jW_JVB$>OC&f;_6(V!c@5BF)#QI5B8mogR< z^|Dr+&!QERRjg|r2}wEU?Pf(3V>?N)8Q73 z^TIv{2S=38!G|zU`@`{>Ly*M;7i>nS8M6%t3I8d5F(!y7l%$cYh_j98cIUJqVgAy? z_G7~HYKbUIs2?Uk@k?w_XfcEl6#6m68(Bt*Fsh0sAuuG2K#*8wO4-DaLc~5XL>pl! zi8eK?M==OV!;2MaFbRt%u*soa2rD_X6_bb?8;r!HDz{+M!@Cf6dUzh#E~)vEB7-SX za1L7_B5cuLY`ljl(h&*9io@Y7<*OfPOT-k`1bn&N8>|xT_7lw8fh`ghjmNM1_(BSI zl?4MaCCM%koqyYwi7Ol*QilEx<3z+=Ci*Jkwoqi@*hGjGLZ^t|IY)d_n{27r!f{H< z`l@0CrU3B`;+NlMi$xbc5bZ!Q0%-!K^myF+2H0}(caLo-H2iuL({#W#jHt|p5v`b} zAHL9tX*beYVVkxsWA3gZ-i⋙|aroe^PnvVoF8HyeY(-DPsJ4;?t;-KiA9uTQ2|h zKtlGO$HW1SkcMCd+I=xh2mT=kW04Hh$Pc=}j46h5V(b5$sEZL>Xkaz4w>SH~Hw=@z zZ>l}NipB{_G>9$*Vp)bE3-7ezI z8XWW_!Gb+5V4jQ*0$VXPg&Tn-mgu*~EKGEDo%r*21D`3(tJXJgO*iiBYqX03`7N*y zcm|k_$&MXZ#MEUngzSuPx-(Vty z761>^M^1cAO-+B`{S-665n!SV5;S05VwVCZfzy3RjdI@(})*#kFnvucOW2jSRs*1oKd;i}a z`y9s^8U+!ek^l`PvlN_PjP2;?7@H;rxCPv6>3$o7DMLtioETuXrkgTC1x^bCiKvWR zR3X(nfbT2LcMcdRCIF+xA)>?(q@33F54PR^QG_5dCy!v`1Ct)zTaLW8hq0LFa}?(B>#Wim?@(EF5Ike3+@%_a^$MkPz5+2m03LL)R;?lf zxT*77FH-4BfOW0|uO(Rm1kJG7H;1Ytngt!e}uo6!^H{=u-V7DQ!wfDZui+P3g8M% z;7#ID4ZPvq!1HCdoFc2L5d=4=m9~*@dKFj z`eHtbTfp0xu=~_w9))4g&EjqiibDa2uhH#u4)7{>GOar?VPMZ;`!*I}wH(r6m!_T@ zEDOK@Ta>;-Bk-v(!HeP$v*-mia(`-JcmM{Nqx?Ol$I(2CtJ#=WoXc+?;(IWz>%=0i zcTiq=uCIN3?rPGBA7=*8hM&$O+w5(e9E|XB|38+7gGozLh95m3@%KN#{{cZ`BN&Z2 R|K$Jx002ovPDHLkV1npe#Pk3F literal 0 HcmV?d00001 diff --git a/app/src/main/res/drawable/guis_settings_enabled.png b/app/src/main/res/drawable/guis_settings_enabled.png new file mode 100644 index 0000000000000000000000000000000000000000..e234ed876d018f2fa706d11fa6c7231e9bf3d5e0 GIT binary patch literal 3631 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 B;eh}E literal 0 HcmV?d00001 diff --git a/app/src/main/res/drawable/guis_shape_shop_disabled.png b/app/src/main/res/drawable/guis_shape_shop_disabled.png new file mode 100644 index 0000000000000000000000000000000000000000..b31d48c918ed58527d90e12d7156e18f76757bda GIT binary patch literal 6099 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 Z`G0*9`?uQTB8dP1002ovPDHLkV1hnam3ROE literal 0 HcmV?d00001 diff --git a/app/src/main/res/drawable/guis_shape_shop_enabled.png b/app/src/main/res/drawable/guis_shape_shop_enabled.png new file mode 100644 index 0000000000000000000000000000000000000000..79847bc73b311d2113a14d260261006376cd43c8 GIT binary patch literal 6538 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 literal 0 HcmV?d00001 diff --git a/app/src/main/res/drawable/guis_sound_off.png b/app/src/main/res/drawable/guis_sound_off.png new file mode 100644 index 0000000000000000000000000000000000000000..151e850393d259551ab0b48e8e198124cf7dcca8 GIT binary patch literal 1387 zcmV-x1(f=UP)qEGdsAeq^uA7W5T3)V%OwAr~n%$;UBz4O(%J3DoAV3?hmow?`# zzvtY0&$$QIWKGs&P1dAy#VDXYraYH`E}#iq>BP>t6PN|==|u4B02>g}B05UCfKw8@ zD5QoKR3=)}GbP{~ANWKB2rwL_-sYL%@3k>Ym~!Tt8DanAH;AhyX8E-JHD%z|UJSCR#Of#5H^iB z4v(e)FL0NFVi$;6a0&rF0|}2vUrtOw6-pAkXa)F8FCPc76HfQSWnjA@0~dMT-V2v^ z!s+8KmJAZ^BsvCVzsDce{kPHyo})X$R~v;3LK3(SGtVr}Jhx28cou;K>Q#wSXl6><4zq#!dNqf8amo<-0#XRiX0(az=5o>R4_i z0iHV$Fm2BrygB&A2%n$6*~|^#K3$!cW*s21n3>AIFUoUI_<-l>C<1!S0Z#&d0Lz87 zfH+I&QJ8%Id|0P#)U}Aqg#bSZ2Jor^Jiwd4$z-4F)}>d+<=op!z##BeNbduDAlLs1 z400nt71*d`Dj5k4Nq})%5D*4_TplS&aDYqlTx|7{0qh%cbCcE_GB)W(53Sir9h$%doq}Pn8cOHm@@CTSI+$gaDP;hMw$}7M04pP82`du!VN=9 zAyZuzISjlU@~i~B0DKsnMy1&w^Meu4EW^D5{@$Xy(9(u&vJ_26&j&l=XoLks=`Ch{zm^~Qu2em+<%-M*Dx z8^vEPU+zQ#x^PYUD>PJrWS$0d7Q>BoST7SE*Kn&rIzn>y_o8i$b$2oWhORW%?M#62 tzxTNqamcy&v52#Pxf>(qA8L#- z(eyzZ@q(8qC{h)r0^Xy=I7p%G&{F7>na-R!bI#dke?IL0ch1*im3B(zoU@aieP;Ha z%lfbX`meRVZ*60(WiyX7O<7-GXL)&RWbJ39*y0AoNCFhEP6-BHmqDG=&@3M4wy z^ZhMj3;eo?Gb}DHvbea&%F0Ur0C30t{rlOwcP|3q zw2avX+zf01t^~FNC7=w%`q5LsW56Ncgn(!Y1nYwUkR%C>MuS?d#`5wq%gf8uYPHP= zz!*ai1Vm9p9LG#eO}Sf%yf_KG1K1@1MrC|K#uxRyD}grxdw}l(hXu;&`NG0lOOhni z>vdLFSEO#O#xG9gefV^TK0TT#-9l#sJjGKTffCquc zfuq2ZrxP6(xKOCq>#VJFCd;OqK40qj*xP*pW}82FR4V_c$mjVq;{AUY8o z2mpXD$&mkb+~s|41K&|>M+$-W$;+-p{V=%_t0epJ{KmG*)U?p;o$=HH4V3)ky77PBVYXO*2K~;1m z@urKQ6!<39?;H9RN^PNPgQvs-BawTPyd3HK3tm$+rW8BkG@#jRZVmwQI_lpazm#7k zBO=uTN5uf-5>yp;FhH!gXRubkQQ{jM&JjW4n|&*Z^yM9r%EXoKyy`Ne2RH z!B%T#(mZllDQX?s|lIr9-!RJfr)en6WGX5{1E>R+>M30*_r)&+D<-Yt1L zaTYk@Ws4D=!NBwa7kPvVDI>2smABrSVO2tCRT&=jK#C=l!9cXb8`Oa-Wk_2Fw)Fi_ zEEtiutvvsd05H0Lxnut@0uTs*$TP6*-781~T%0#OkPvWJ0m1$E-#@efZ1Yl~zZqf_ z0^_;{0;jHUaXPVGY#G`RnD+j6>j4nRz^bl>?jEA`LSWml1K_GX=wsKOftL0F6w0>13k^J$3{N3+f%6O2^EO_* z<1qm58RI?=D+8K62Adu>v~}8^5OHgYtzi#=70{9XB* z_e9NAeapH!mgIX%<9`FK0|yQaB>-)8cP)9h;CZ**!vNzoN1<04J`c1Dg~HGRupj^e z6-AL39zFn&ZH#WAyD8EpTQYCQaXhpda8jPktMMs##;toIi28!<0?HRbhLr&c*}i`w z0Im=KM#isciL6C;A@n*iz-5S4fP6lG;fs{kTC?He-I%Rfmdd?GA+RcgOLX`Dk#Q$g zC#3p&qq-kS7$0%rkItE|?xsNa2-Y=CN60F=d$vH)8n z8?H+B?c2AxAz-b2o@{F>y~Gmur}Cg{YfJL9TLFGi*Fat0waNl*G2|aW(~ahAss>nV zpC+3Ey%hRCB_Q(he%Vw1GoC)=1km+*rVcz!wx>ugmm`oUEQ4q-XcSrqW(PD zGI^lfzgzTgDJ=c~H159pZgRQY=7&HJ2nWcfye?z~$c@uKAY*gD)v5uUcaNyRX^0&& zWSg;7iQ^+;N83%N^^E}@2w#y`Uk!jZ@JSiq1|n|tyn7P(qt_))12<^xFqJMmBoQQv zBBChj|A>r0xDWX9t2}lO@GTh|lg$XsN!*sC?9Ye^Rn-P>7C>i#C&+e*8*_7WL{Yc= z8I(%!)4=}!bN{P!SAWZ7Q(=<=Ai$ji!2q$q0v`u{ zbiVtC4ju9rL$3xtDCfPbx?o=Pc4==`-ai8zRQp?>nVBIBL!u}m3_}KLb5tPQ3H+w_ z-kv>sP$|2UY=XR^a`<83cLJiMrssCCU|sBZR6rz7{QP5}njvd#8+bR_q_{7FW#Bg8 zw=#5%Y)h#4(;ao2l=0U{ z6le7OX*Eg*=}v~7V|+fJr%)(REEXvii^OrsH_!o~R4P%aRH#%cnekE7e*n@n<@oXAc+1xXZ@DW}Rd<7ok94oD zGuKxanyj+rD?&azgv7oLF zutj$gq%)-&MG>V^iLtRUrl+Two}Q*!t#;bsz5@^h0o%51a{x5tS-%ThB6~sF6>jbo zTkEY8a=xWD_u725T4i!_k}X@dFf}#B`1m-5LV++0`422-`qS{;vuFSS002ovPDHLk FV1kzbJKF#N literal 0 HcmV?d00001 diff --git a/app/src/main/res/drawable/guis_splitter.png b/app/src/main/res/drawable/guis_splitter.png new file mode 100644 index 0000000000000000000000000000000000000000..c171f797c385a822f1fbd5997e32452d7ef82d8b GIT binary patch literal 459 zcmV;+0W|)JP)JZ?`bw$oHe#qX%7C+;{-O4^g?SZ`Gv`P;2*&!U)D)bpBtalL3T4j}{Cx$&n!8|a#PF7|u5?EObT1V|GYl~x0W-)hpR%3*j zZGR5TOmpDNDdb_Ci)f75KAY>dCagAa0*ruj-~zZbjcu|HSAQKhiN+K9DR5>QS*_!) z8if$zSjf%j=D-{9Zu%%Otfe!`a0fdBrogl51$eb}eVT#&i-8P*Yv2~R18&R|u55X1 zlYLwJSO_8ZnzfnI6qo={W;PSx9(VvA&5(YeD|;b?5L>+i*%Up(5<-aWvbT@0_Q?SC z5?zSnLNCz|><&ci=DyWuy!wn+pYaMIgb-r4_y&aAD;bqU;!ywq002ovPDHLkV1my! B)p`H` literal 0 HcmV?d00001 diff --git a/app/src/main/res/drawable/guis_tick.png b/app/src/main/res/drawable/guis_tick.png new file mode 100644 index 0000000000000000000000000000000000000000..14092c2938fe37f15c2cc5a9fa0dc713bf863ceb GIT binary patch literal 7431 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 literal 0 HcmV?d00001 diff --git a/app/src/main/res/drawable/playershapes_ball.png b/app/src/main/res/drawable/playershapes_ball.png new file mode 100644 index 0000000000000000000000000000000000000000..2a42ac4d28e979c826d973d0f6efda54462fe793 GIT binary patch literal 8922 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 Z=v1x~Th?-B9RFK7xus{STdnOB^*?+#DdqqG literal 0 HcmV?d00001 diff --git a/app/src/main/res/drawable/playershapes_clock.png b/app/src/main/res/drawable/playershapes_clock.png new file mode 100644 index 0000000000000000000000000000000000000000..85ae88afa1835b5a07daaf882348db98ffee2bcb GIT binary patch literal 6052 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 E2N(58w*UYD literal 0 HcmV?d00001 diff --git a/app/src/main/res/drawable/playershapes_pacman.png b/app/src/main/res/drawable/playershapes_pacman.png new file mode 100644 index 0000000000000000000000000000000000000000..d0f89a37aaca896613987900c24b29e0b0f9f9bc GIT binary patch literal 6360 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 XWA1Rn-+tUb7J#Fjvu&F-HtYWYJA#0m literal 0 HcmV?d00001 diff --git a/app/src/main/res/drawable/terrain_t_grass.png b/app/src/main/res/drawable/terrain_t_grass.png new file mode 100644 index 0000000000000000000000000000000000000000..069be8f37dbeb618c3168540b9de86fba76925a7 GIT binary patch literal 35152 zcmV)1K+V62P)s=BKXss>shK@DgIJ!uBa8KIV7goFe?p(Q5#3Vs1< z2226XDh1ugZJxIcr6@83Q+WH}`m~So?AA&FWm4`|h*%UXKWO zH?z+^d(n6QG5y_t_3sTo_|4y983I&-5&%d5lt4;=FjQHQ{sIU=m9h0u_g%Z+Vfg@6 z1^)N{X2!qrPp159>fVEJ{80acT%q%4z+e2q4f+Q3<_*y>65nn*@(3CS5C(t%ULr1X z!`GwecUAB`D8K`LN(22h5BQ*p0HztDEChf+svs3W)Bgzsf`Skr00>IJ0$>JohLBL? zx3~_U(EH(AG!Nflgm(Zg00MwFJto z={vs>z=3eN0Po&0KKT~mPyhJ>S%5$MZ_{hQ_1(kQ0A(PI00uy%Ud8em0I3%?eG0t$ zM*v^a&)@q;!|uk&7r+nyhe!y(XaBE4KLd0ryGjTE6iN!<3e_J2^m_miKnzTOADI6I zh~EJi0UFX56Cm%?J|d)RF5mOpt2;akAWQl_eT@_sRoG`R6G8yO0DONM5dZ`N{`_Ce z7%ypa|Ky+AZqI-yz?`lFZ1S=FSJ3hkCHVq@FHjmuX;AsvuQMtb;kQ-s76MR6+f7rt zJ{s&mL(}G870XW)^xglO|Ep=H|LGIPpM3H){^A?oqBy+)VpJL~q{@I&`Dzq_5>z)1 z^JhO0s6fB*o2>oe{t$q_xsXQkx4bF*bRhUD5m*-Bi_b*o8-OpA<9mI(h<=wqzX8JU zP{6kV1P&k~ObGavDt;Y=-vsb&03gOs0Q@uek!rG8es~XH zR*@@IW?W^)4~g(+bfLcvZ}9~NEaMxxg?Du2w{)dfZl#6&?^u>Q`Ik^ zm+u9Qf2jKYk7ituc6NBHgc0E;%F3W&g1otqeE)l+j3yXA{j;cYBQU1}|CfI{$Sp96pO&lbcF0DS=H zd%*B1aQU|g8iD1fO5y8(e1=hefp25Mr%HH70Tj~uuw5&Gp_+b2L?GfMq);dkKt#}4 z2{T9+2muQbz5wG&gex4zP^oC>_NHG8)RYlqaH4#v1E&qqVQM~ykiMMEx($_5j zLcr%E!6|Jr4M7Sb7uzQ7=o>i!S;NiTDi)^mmEz_c7w{k>c+l z;1jdCY4IZh2oo^|fPx+A2*M4D2!$ddDoikwCMVSvbz}{oqzVBLp@<+XP`To!AM|e^ z_zO||Ko|U2qyC(je!z?$(tscH*XU<*(?zdPeoI%LaOHt!p6H68GXnJX6Q%j*N<@ek zCAs~z()c;>`TwUpj)0D!Fd%3EYXApEoJLwMBV-y$ub(N+pF{Nus6xN~You>~Cy0h* z0DkyKH~jd&FLIx(*aCd=pC?4{oqultheL%-XAl|y#TB@H4t)M|RSbYmfXvGBg|)i-7(he{RRXD!Dlw&Ly6n4vMP;~)Kxl8}R#a?q-Pzx9s;mMCD`1bwFf6Nm`mTOdrp*FGU& z1e7r-(?th-pGN!x9q}K5@ehgU6C!XDN-t4q-2x{`qVoF$>s1soE9kfX+4KbzGj8~7 z{#^c&KGXjP5r2f6{uCedFLA}6Uw|LIeM7%^_l|B~{}$cY5X&%tVtEzaFto#%Z#4`_%Q)L5Y-<*5D_tp;3vfR5eNDijreO0`t$IHKI4(z6L7<< zO3X`8Ren#<_fYzU5N=>ag2za(R)-7eWP7s+5F@a}q@-p6ZVFXVZ~)%F710b)$$c?l zx-jLRrwfQD5ETerS0$e-wSyg{E|Hkh)CkBgK=OrNZdZMy7kU@o;v#{*OVHnf;&%c3 zE{*s;0)CqYd>@Rj6Cr>oWH+eUsQO(Y35mk(2N3{C2n(tLkf`Vk!D3%G68r*@{t65J zOa(u}j76f}WT77b_zQymC@%T|sxvD-3ln}mT=>0?G>bqf0(?{OLWn_?7X=Ft6c{ym zJAXBZW<_A@1!8~#RqM>A-~vD+5I{#_;f`v88Q7{5cz z@0ijqsA~Em1%>3PGLxYTs;)}@w<<&x^gDm>_Li4aqRg1}eZ0wMc(1>Z&+s$-96!|e z@)tDYj|brYe*2dG0O$;N=S)=ZH5^@K#2Q^oBTmgXi!KRs=(7$(J65 za1q5f!So3Q`X)#}Rp3)7z760F7(#&}F-S?@CeH~YfmEO)0pA4h4G`Wz@diLpXdt5O z9YT{jR46nV4a)jaJNso!N0IAf)sv$`c8t~*FT*VYfryBx>Ju&hTU4M>2%;`B;|nbM zUZP$VdZmb2BR$Hc*N&2>vbU9!X;cOV$nsS%qlWNXerQ1 z(=BKuN=g|~gFu5W2ys!C1w&lGn(k=Pph^L%M4IdeM2U!4BZx>8Oz9jE0%AJ2P-4n= zNbY~AcnJ(nI|l+W(V#bc7c+hr!0*u;`YykvZ⪼0{B!J-)7)z04^ZB0Wh3&Ha6ji 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%0Dlu8ptI~(%CjF$0EV)%glPcF9UEM@0a4Y^Vb(SJm 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 UwTl7rqW}N^07*qoM6N<$g1nwROaK4? literal 0 HcmV?d00001 diff --git a/app/src/main/res/drawable/tools_bomb.png b/app/src/main/res/drawable/tools_bomb.png new file mode 100644 index 0000000000000000000000000000000000000000..da77e11a9e7a01ce447a29886648cd31a19ac32d GIT binary patch literal 135356 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 je=lQ@RDnc5$`9rM_;>omh5rhUxkUaS`KY-V literal 0 HcmV?d00001 diff --git a/app/src/main/res/drawable/tools_bomb_button.png b/app/src/main/res/drawable/tools_bomb_button.png new file mode 100644 index 0000000000000000000000000000000000000000..0a41ebff73012fcbb4d9b01f1193885735687801 GIT binary patch literal 39042 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 KMNUMnLSTYY_r*Z~ literal 0 HcmV?d00001 diff --git a/app/src/main/res/drawable/tools_button_empty.png b/app/src/main/res/drawable/tools_button_empty.png new file mode 100644 index 0000000000000000000000000000000000000000..4ace29170500b496762205c1ae15edade17f7e0f GIT binary patch literal 9734 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 P00000NkvXXu0mjfEgJBa literal 0 HcmV?d00001 diff --git a/app/src/main/res/drawable/tools_button_unlocked.png b/app/src/main/res/drawable/tools_button_unlocked.png new file mode 100644 index 0000000000000000000000000000000000000000..c657a9a0e35a67f09cb7b3e0d281f9271658268a GIT binary patch literal 17590 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

6vO}VY)7LpvGeV#+sD+EeV{BF((*Tu?gByF$gVF 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 literal 0 HcmV?d00001 diff --git a/app/src/main/res/drawable/tools_magnet.png b/app/src/main/res/drawable/tools_magnet.png new file mode 100644 index 0000000000000000000000000000000000000000..0d6c0e2f0d51a05a8e507facf87aa3a257664801 GIT binary patch literal 46686 zcmcFq_dnI|`+vR8G>*NuY+1)%agK;W2xVj(*(rOKb&Nt;4XcbJAr(mqWgMd@;z%Kh zW5kK9tb>E^>HYZ|zCWDD>zwmA=f3Xy8qe##uKRhX+gO>gFbOgN0KjtQw23VMK<6b1mSUH@KSPtX%D z0C>G|#>B`z+HKht8O!}`PxIr?v(}W4{drO;S+*t>$z%GFCdYE!VBGHpeMhSjVqUOc zKX;CshbQL6Sj?&jyQ196QPD?B;StbQ>*K(msL9n9{da|~kt3~P0|zTn?eB`Q;_M7C zNaFwd!zc->Fm(6zkTVlSc8k+MWYGI^g|pVU7S53W!<1f9YsXJwS8{p7x=7YnE6O|f zNvE#;#wI`8o=uCR9~WG&``_GaUy5C9d6=umQ^b@7*?D)W`jEWcc>Fxm=68A64b zMOj24U%3Auw&Cv*;W*JTL_er*^Z?SuPB!TNpFV9aVxK=Vqkc;&O`jdXag1?gBMAn; zbK-iT-$Iggl1k#Ujz;26hc!`!_<}gtk?jFYDj1r_ge^c{e?tQ*oxllZ=$ZzKcn=L& zW9!6_Vo))-7(xsbgRCMQ@O|Qc!a8nu%yxvXp@V~hfhGgL0!YzAW}hU(oS{Uojlcgh zDLeb$#dGmzGAWJ3Sx9hrvzd@SUSTm=0wV0{|2!7j4MP2}FQ~fYyNsoB@icqAmAY6w(UP zL?##x;eoeiO2v=1g?cwe@ft|?q}4@e2EcU7R3eC<@k_C7ONp$D6(TE z<3Ej%T`AIUH9M^}?`=CL9ZUPm>K6sq4N734>QDuH*$)Q^(p2GZc5AwiqPTaiolPRN6Z~6 z;0`P%$w<8nE#f6nW&;0Dun0C5cv-}I>C%i1xyn7*KbT!p*CF!0f&Jo2c2 zc)QXUAp8-i10Zm?rQW%$-*;Y(KVd*&VF==xxg~Q!h$(9?25ZXAFHLUf5F$&m@9p|o zo5gVJ@c&_Y0~O#w|AqIzu=+2ccfh1R@9TyPalFnxf1(hnzl)Z)7Jy?DUd@c;?3KP2MK{1mk>QQf@&i+@_}ibo07d5^(29@7 zq!vZ?Tysi05b+x{)`u)B`*q=1vjjMDs=A%d#kUJ@u4Rv0pQYl2kB~jgMzuo;Y%~N7P7`^&rhhBkQ;oq?2>0C`mIHl! z&7k)i%sT1SF`D8@6Gs8U)gt~s%?paL4=qZ^Nt-GiN-!MZ8tm4E)%Qx_HQup#Yx+zfVXEVRr78KXCLD#-4C`n%^08V}GAq@ax(OXeoe!I5nhp zit&}l$-eCe92+VTelW)@s>mA1fC*qky$@ly$}2Yn{AV>*cB_CNu7SP7Je}=q;~Q9? zt#;@kU`u@%5#O%$Tou^w0#JC6vX%`teRPVQO~3HoXr3V!+Tp8|_};HjjI?o~V*F9= zt)&0v!Y{rly!FZrV|D=6sptsIoj6h;HxgdooH`dgn>mEQ9Y+y$(SSp97kyGsQK7qJ zS@J#hI4kBq%)H5*EdK!4=m1#vy@@eCoXC9v?frB3%;@I6Q+a~H*pu`7g2`40vI{@{ z*-vlav;v0ctk?UKaW!$x8W!{OslC3GYhF%57J^Tid zPQ9spds_Hf?)cku@h66XCPfJQS%ot>LwM~DeQ`SOvEmf?A?FX=9si41A@M9zO$?gv z4{99)QCiq@dYdn_)g2L;a8&@&=mm&B2(02^p~B}xq1h*CgEy#bfF>!sM@?FM4F&Op z$|ruptLUf}+|sgB84i1`R`dG8Q+S9=M&89tHjs@iW27=%$5!8S&23p(^r!m%qMhc{ z>wKRl&w}h1B{rFBpA-V3dKT42WY$-?$6?U0+{@}_)x6Qlo}zmsF2ho1Y5hp176^mn z!u~KRw5M&79KObpbDpL%Di*c0yJQgqBeV14JzMEM=ll)UY)d}1rk93ULU1QdggRQ{ ziMb4C8Ksf3umkp;E3GGkGWRclCh=ws`(+8)M*2J_;4MJ*i&K5Ja|*=$kl3JghUF5Y z{rM?_rw#+IXduchuPiVXbj)Z|V{74wo4vetX|0`{PSLg_ss$(1iH-485}ue>x7;xQ zrF`x<%fhbV=C0R+vt&bpr~TkgwwBhaz^!ey9C%zCqS-0?nepLJg9HG*f*{AP3IJbj zA?olXA#!okx!lB`Aw|re7);4bFj=_WW~c$zK_g3d8`p|m%uF<*H-<-B;38`q>Tk(= zXQ=?}if$*5d4|hf;a=Lry4-RAKi=AO=hL;-hS;eeXdtKqKquzC)|`YpU0IS`GhT~Z zySiD(hm{!%4a(~4c;x~6khI@#ds((tdoS7*s_ z8wn!c^cVQ}@vrkMo@t_ifFZF0lYOB**jaT+zY&CM0$I1V!9#2h>~SymcE2vV97l$% zxttJXF|HFDUw(G~i;qHX+&kMgvp7T5@gypwyJTtKX(DywK%}FbC@p?_k7V%9$2GyV z5QiX2oCP)@P3Gi~oUjsOtcZ4v#)j`Pb`9pv;jWK~A&HB+v`_JYJzc* zs`T7k(Zd~Ei=8=0AHExrWfghC{5E}OVDL6-K!zXRu59h_5C>?LsgM-)w?uB!-We6W z<9O^u@W**unWA*QMT$iW?0qe8GGAtl^!CD)*$PB;q9$bQf|BMDdPWf;rJOa=MRt!&x1=yQz zm5s@is4fG4v0%>Lzcbd!{YLc&Db;k-$VcFqEJp3EgVo$-tUC-rI3`V0vcsLHxTLmi z@{ErT)na3g?K$e|z!aa@9*=6aJ!FeDRD~o}BK7d+zh}=(afvKPH)JQ4Cf7ctIJna{ z2CoJ1ztO-^K#j!c^(i0+6%d-*u^OCwU10gMADih9upjp8gOs0rLwjAEE#U-V)7*gT zkr*uML!6&R@0Xe9n)QM-ra4@SB(1>8IP&C_*d=vf0I+mx4|M`C)z~A2+82ml0%Aw>lsdWTOG1 zT-%rikl8T(>T1f#-kTMSrm#QrJ|iv1c}>BB$fKhYq(W`OkXoGyg(-X-8v+H(9PuKhRc*$W4diqyntUs9ln0vOwh;n~^?C z+#SZa!Nj5;zVn92W0``9D7*$R!c9yN90E-4m=euD9B|KZPbi@wW&;wgU z%(VaXec~8aZw2FW>BMQ3q2@bd5E9cySoNgVs~ykx;=Q!e$}~WSRH8t1DSAO_cLQI5 zPO)irP$y=uYqjEe_#gAVr9Aa| z{ux8T{k{YJCbb3P@rsjZ@a}yDKb^I5-)ruHi*{*w9tm#)Z;o?b{u(69f`82<-XRG@ zI?LcU?)MQ@bt)PCSoQ*QTL2>^e21wmHQMuQ>5aA#j%+8ZB7p?qLq&_T`MfhS`%rXIz)oiXG~AV+em;(N)l)p;%Ujg^jE=bT(p6X^>T6M z?e0^$>w?faZ4`De0fpb)53;IfO?(}S|At&GsjwHY#P-0=y$z4;f=O=yOysSE;{`~y z?>ED)GU_ijs$W+D(t)p}2do4}+$Az+nqdH87=~80F_nav!DJCm4pPWJta;_7A-YrV z2)Vvp_sQrg+|dW|PU60?hE zrUaiu1R}%!u&4JX2+&2D3>UBxGgF5_4X~UP2@k`{izq%ZYIOQ}7cvWpZ*>VuJ$F<~ zaX*5(1MSel2|kD9ED8fL!2_tx!pshuCo7J>|5RMW>zHV$6Y|E^HSc(Cn@i;^>>@Ot z5}%{lP`Es}8{adK^W-r|wiQ?I$nm9h4Tnny~3^bWI^G}J(OxDLONBY7qtSfXs zDLtAUnHEbF4(|R{e@Pa~-ot|x;6N`%5C&fskaAz$ACIWDttrhrfWxe?vJKlC3sz43 z4H17B()&M400+-lu#ge(2}?~kHczt{y1o$ExxB6ey)R^w^k{AFr1EMxb>Y(2Dd>*y zz*g9fP1c^1om60zU`^X9Clu>E96B++FS*(Nj>Km1>^{@f>_$2V9}OCA;zJ7)U9oB4 z+@6AH-v-7|#E45kk>4*^Ff0^0-b!RINbI=;;bgylW2MJHMr?xR;J4`-lyv;Z(%8bx zjSDcG911IdA{MR(0g9oo0d288M69q3nfl%QD#oGuxzpVu1vJw^#)uk8KI&xOXLVtH z{95TbEan~PCyl@{H<*em3iU5rtAJ7O&&r8ezRx^8FUbY_p)yvoaZt^_g$ya3UMbtb zyC+QqO!4HJ)U>rf^9Ke(v*|gxjVeh+>`lI>Bpc%ZXG6(nFit+Ihfv=Eq#}{s`R#g& z;+ow>JyW0?xN_U&(WVlWKTvPttC#Ntew>i|E0Gb>>N1$J76nv25;K6P&82&&yGyGexGNPk4OVx>dMk6Z=vF)B>w;ir`1350zbzs~o zSB`W`wuc+>gj2;mM`HFkGPGGt{ZQam7;T#QsEi+fefYTRr#n3-(~j;mtv4W>)v$lT z6KPpTqpI>Y0=-GpRR*`T!ws$82NJcyerP1#n^+@^5BnP%SbO9_PotbJ>4%PtkuAp6 z_8XW|VjniOLG7>yk8#9=PLIeV2u2NeAr8q7Gap{*Kbh9yxqt06+c6#8-sKqi!(>vB zTLZ~9>oYsWJ>xF5Aky{SaVvt|J{7qrow((QT5kk@`Xz2fC^_lORO2~$tuh#q;DOm zLeusK^qe>VRbZ#K}DX0&+KUv3b+Dz-VjiLmwZJoAKz$2{QJDHPVYSBP~-!#9L; zMN|jU^ByN7w+krWbbGoVk|1yD?qQHHu%rEBCGMrnep@cg(GzeH1=A$T!!VC9hB41< zWy_Xz-K!@Wy$cE2z>swZTeI{yho5(Af`Q*DKnIR?`6qxRc@HuL^G$r0EEuR)uR*F{ z$YQH6In5U=-5cCqrNw?*88%nOfH&GS5Da?&j4VeBX8Y2!C9+^Yu>gpIVsOvK*z#vv z5TEY0U(eA71@Xnw5O(HJ-7nVS3!;PFELCjX?b6Opf)q8_2gKcwpx-wQ>zOv^2FkJ! z#ETrjmj|q5QHXUJrlj|2;zsT#XPF`09Z2y#i$jeyCYwdt=)Fj&I0wEUN0L?f)LSm? zhqetLDvhG80=1Nl2x>&0Qy#%^%J-C+&nPV0>M7un-yDp9F-$zvxteEN+_5<-%}F+- zROspZ2^9c&WG@a@2j5vO*=t-BIfQuLoITK}9LL-us{OEaXg)c9BG&7;_`tc?cvbCf z|Ma#H*KqfB!EzS-OD5uvgOX=Ze#U72gL=-Z>sQSyYPWYEyT64~r|Z84Ww|}tG3gus z!MPU%yazOxba{wEpVj@Wp;6r-%5rvK2y3g$Lc`2QtGM?8UQ@o1x}Sg)w%u0>9|2iO zX5>%Q(ztjF-VCJ<$&`gvmMH=G$@G!LwY7noZlF6Wfjr+?k=Qqs1-l*Gbq49(z>!L6 zt9!RT1>ebMv^wa%O|NSvSjW)7GG`~iuM1ML6=z$ymyPJv9P-oMpV3IugA0^)$TA-x z8-jbQ(75=01Oijrqz@^ikkHL79@{P4sHbh9*8L0PhaaMNz z0594`o7&){3TI*-$X`@|z&|!R5{TtK2>GK}!4#A)0-I&KUVUx}!#BZ(ad{hlhIX4n z32NiY)RfDQ9~&NjLGxaV4d$!kDY++fR=u3k@MwG2-f*bqT*~E&vuxb#(!|40XIfK=J&7Ny$AZF0v>96E^ zjk;@iu_xy@Q}=1=micv71_&>MFs4I9uo9Jvo}=mAWNkDsg&M;g{pdn8?D?36j7RY` zT)?>As~q`h-}+w3toCt1;>~;7{DHii+$l%)!DbUznw)YnG#)Tqzfn?|zlb_$hwE+S zrW|7d0`O_{qF^pD^Kr8LL?Z6&gMO7OtiNTKg=(JJeT&Xn6M+^0x^@CZwBUPl;h6{E*mo$IBTyeeoWlC_+jjFShb>|| zuioQ<6b9SF*D?H8`Mqvn(;*saN%xZF*^jiSKc^V=whB{b<`Lo-QCLkUF`N<=<_O^; zIDCAHuY|`JDeiSWm?+vmLf!9fe|u+&&upJNEHJ{^F1qLdQ5d_$cZDRhun;G{s1+5U7 za)8`9yy;E1N4}RUs8fDdStwtFIB(In$}$L|_?~1rpvcoNVh~hZ^Oaa(?p=sEW@JaG zoLlum=&E#sdLr-!~Ct$g#cJd(rMX!)R zr4N>?IfnBzt;_wIzn}h^uBKP~OW8h~a5aNWmjfD4KndcYJ7jr%KA z*TtktISZwsYladW8iboaQKkwnoD^HwX_n_)*uo&LCC?hpYbP!w%aY&CA!IFM^n_2a zPcUcSOiacBdr`W!OZvE@NPV&K7pF=+^(%J_U(~!2rP{`hSvMb zLlvZoM?*~xq;f7{geOFVfo(7buW{b;sbZ&qkquk+m%nd?3#V$2+OGZ(9?@>x`kEzB zGZ45i*s5mdJw&>2Q z;xixl*Iavk+k)-xoDd;q%Hw{T^=RK_AT`kt@riOI=G-~Rfm+zcz)BH()B5@>O8Mrj z@R*qpRsPNp(J|J!2MfHo+B12W&tKPF`Gm_WA`DKbM35)1#-^^`eO4L%$=>&JwS4~E zNG$^b&MYFCTMX?n3V$F%5>4I~T!XK1<&?Xc!n+x0#y16YBRb`Xs5-vhw}9HGv}1JG zvm7#KdDSP6wz_kMIwi#d+{Qco1LC7cnmlX5Ivg_MvH5hxi*9myZd#Y^vB{OaO*lR6 ztA(-1Yhwx3?p_M9dk9;}oOSc-@)MZv?@+C>X}ZSw8+zc=H^Fo_MnMW`8lW2XiXwgn zr$#ZW@&|cmq8Y~3jZEPMDmVc!Qn89P->=~ju+b5>9{1Z%Amq+D(+qZgE;1!Sj5dz} zi}x-_+?AoMvX4ciyzw7x-8fWUEj-xyeyy$j#o7Eefm8FEaV!IfsE5z&`%c-)G=<=^ zE`Ou7v&>Dr8P3+e<5x4aVBd=rzi}iOYwbx|VT$Ys(MJpQJTEwXrz-vOHd?Ja!wyj- z!$5ArjNj`xuTx2`fmXc1Zf&XiCY=LhoVS56Bl^YxD3d>Sf!2rg{yv3)6LoUPOl4bT zoL7}lL}z+yk;mZGXz{&;iwS4n-XVOViKs%v_oUmArl8x~^VPG&EM|`{l4?Bc7YX<3 zU)7)F%l|F4cN4Q6j2T_QFi%3Ph&#s9t0{S92PjgiXBK7lFETx=oRnDKA)bXy^qr<& zTVu}YW8{i+#+#;9`YAWb7NoAqeWUHcSnzI_`wzlim70iJu8ljHWbW8oiNu5TyuC5> zK5djxSt|%#Gd-34N1J{I+br{$sua)s<#Cv9kvD?#JA0iLF^c^N{%XjqW2Di7Tl@{y z>{lg5Fuq`7)m`sOL`9pnQI=c5$3e7@L&G(kOxA&)>mBq>*6!b+3|nZ{JA)>^lG#Nt zu&rZ{ntnowxa6ZuoF(hTYP($Rn6o&8xB}d=k~bgv)R0G!?aw{a-Hn+v)4`J)jyWJz z!N2nK&3DYFN4Rt?B!W!G;)^&SP*;CYn;C%v<71*`w0jNyIwU_oSXXzx06*LNR;+2e z-AFmijfD#x#=A#RtN6m#XYcw4FDA86jZ98IvDavN5dPa5OI8`S*pv)uk$f_%YJ9*Q z@9@?-TwjN!#q6u>pSuF1%y*19IOVj}X^U?%n^0Lf=_T zLx-N8UNE@-ELm<(A*8(^b=y2g6KnNhwwkQNkFT#a^DmG3`R=DG-Rh<#xvN6gBHjun zPE9f}{8aVpd1S!Yenw_3TA_VIxGo>VYzeXy^FXL|0WW-G6T}bHtKL11yvZi=BSj1-C zJpoL*6o@x-PC@hS)Phc4hJ59k_UtOMnhSNPy}N#0W5}>^kR8K}H^46~JWU<$2+=V- zsqk&v_?^O-*aSy*6hq!+R~(?n^5fmv)LSLrmj_1<;0``di8Y3~7(Pg<;rQh;Tip%Z z=>@Vj<8-;MNaoba)#(7x((m~!XN5(B-hYI_3&WbN9_vEl$iDFVWGW$k! zrj|D)chr853;gw6h!dD|K9nSFLpF@&Pf>A@6I;f{vT7Gl_zXliGW*oRb=EnWq;Y1t z4R!o<&1E?wx5Fo-^v7x(E|-=Q4MlHDgI`Bz)%d(BtW(GWkj zo5UUHyX56{7ydzioIbC~m%dHj#FvSGg40W08>g4N9BsQgd_2ahszl6u!@aQPYo~oK z?NOH-^>$pFSKuAyu$*L$U|*WyPFGMa&q;yzo|Pw-;-hsFb4K4&kmW!Z)`^3inT-78 z9Z)no&o=(MXXX6g`R*jcDZF*k!b}Xg-mrF-?rkN9iPQ5PGbf$InVCeg23`w$oicj6 zY@!CXgw#L(doq^II3(<|kphB{#gN6UcI*xR!Oa^li}s3se2lsIT8$DH%u~CQz`nq9HNzCsHAhO;MNFR$Ih&-dj})@>DuGY``btImq|fOqWsYr@o_G^sZ;(A zG&i%E#&`TQAiHpQ=35$`0}f=TG9G`R!uXB_8DEDw!T@>)P7c86!_SesE z4dj_6N8z9Ed(3T-$J9-M(M!J|bx8}gXsnXk_O6siV;hm}dn#)mnrES|D1OsTsw=9+ zO=e&9OzP{sD1^XYYb2L4h!Q!@DDnyU28=S1ea9UuX8E`x$tCjrr}T;N^nLW>LicO} zFTE*^I%>owyycDSt)6PmZE<%TP8poutA&{1yrx91{vcAZf+nT=A{tA04=t2JLC0>$ z=5#vsU^01XJ)huvVVC?MTEuePn;QqIRS&P4Tly+SH3~Z;Wbs|*(-%y@oHbv9tX{Cd z_~f5nzhPpE=vJ9=NV9m?tyWS;!Ie$kUd@l`btmzrseKapvk!J)%~xzq`Cgk$``=KM z9+(jDA?j}#Xy4sAm9>ZIeyucOv6=1{^&t%-))|yRy*;Ry_3ZTYhGFT08&k?nT=DHk z9jm)MYka~n6>MQnWNq?U;phG5kGnEKzd@ObA(_YLy69haM!^; z7i(DYUWw4h9Qu*83VAYEw29Aj7oMn^sEA%MD`tMS!@!6~lA~Hs4VWJni#U=$6y8-yx<}u+`_}1wACx{7_kgLA5eM&3 z7C#F_@y~_hedoCvu@8h-9!KlemOhj8+PLF<@&!7N^A$eNZYqqcCJ`bjurobLJeLsU z;x3dywYzPl68gFIlHuOEL`5j6G=|*RU#&Ec2>wp^v9B5?WQbJx@R~wak{;t7leKr7p1THw3Ku?2K}P%Sn8uus z@!Sb{E3LdcsjVT|U$;UHT4#?U!e2AS4lh_-A6u|HZ~nTZ;wuL=4ug7Y(6M8^IT%G; z56k_esdC;%h}`oTqOBOVFGBe$&~h^J^1RN8^rhmIyo)=b1Es@a5{It=y@FgWB6=o* z65X#j@AAm5Y7?T%Li~KUwsR{~6F&!Dfl@47PR-8G(F5Q}wD#8#+LHgN1LYe3Zq>@$ zK!-sSyxaP&E!x><{Y4y+hb)+*2`$<)YPoj~FSfS(;zqUq(OX62bCETuFSYbz!o>FI z(sY8)TI~nT(xgbfhKcvt7k55oSFmDb%jt(Mp#jsOsw%%FO$f z^0R-CnC|ki>51!*;tXw;3n*0Ca3<)EEIjw;tLjgythBc7*KRl7Fx;QY zgfdwvl0RT#2tmyeqZm^x=7Xlo^IZQp@k6DPT*i#&9OuE(?EOTqGV9eFkv#FU!e{lj zZZydl>LVqz9m-1El!k$eNMYsC!!TAFBqz+xs<@NcE3nJF)kG{kukWB>U8V353rz2# zn%+ejddK8BZ*MH1GJ+)grIkOD?Qmgs)ubSvwLY zJ$rcc9O@49ow*+MVe5kI!N<_{0zf2d7qFBPOqxZKz9i~LST^1p1|~wcY|wl?fA`ZN zru~9@-z*4rn2e~yjQuX#U@;dnx8PXxF^f<2w?r+mLbMOf*+9Z-tr|#e=|6R;A@C2R zqQ1Y6(*%kM&s*##vL!g=Kz^H!wkfIo&bAOLyx(1XaI(e6X@&11;nnWYZ%6qTFr|f0 ztxXy^cUX9ZcEy}U?oZ{gOwV>QNzNNmJc}-eE#6-5-y+YFhuDv7f^A7tzi(MF2CRv0 z?b<%Q&(v?b$W5DU{yM68&LGw;58;M9oT_O;Y}|znku0{nXk@3|teA)+lwJf%``)*A zO&x<6BtNYLre>CQ$~gr4XE+wf4NNz5_l6|f3exUU{}^Bo4aA!*$vE z)A`E`Mw1H=9F$MN>fkC`M5NG)c ziXY%T@{pk=VD)fS1JgdCtw-wQk2v>- zo=6lM3h%AsQ;oYY6!zz_vUE_=1n)H_xxNg`@TMkcd3tNdH-cS4hM6s`xtUEH@AtNKD+Qp9)$AVqG#csN`Lf-vp{}^K57e$Z z*0D{*2{q8W&0d7A^_zFV`b(26l#~gp(afdvMw39jzar!B34v~ro#i;wM7D!vxt!Np zMSET?cizXxgQXwhJcL)+MELhsgWZsfd}d|l@?v}HJ1k9z_T4SN**46>(xF=;H~K9& z9Eog(a14!?%t3)oJ){TQ<2%!Wa}Gu_hs(DEP|3erd^Y~VGZ}t7@lXjTI(*KejGc2m z9iS^-r87P&_)8lO>wy(s4AZ0JnLnZxO$;B|*0s}>jp#voe;ngQTUUqEMv&9mM<`0( ztQF6{W4W4Qnvy$kWLqxp9Fr zK|BmIBOMcHN({+@F;Ow+uVQVGoZQB3U`5(vQ$6r-_GYdLEn}iG8ot78=83a;lD~9! z@FkC8N_AWh{zK5`MH2}ZLTMwQYTD3JsS@jFFV$*gH|mO$0^O4sTX4?V_4+)2ugPwj7B z6M#T4G*pg$-)InJDhC-8e5x9Nn_l#)N zW{!8q>+WUqUGd7F>-+7@?J?TV*HpFEJADntT410az=9R+J*W2SSFzshhknaHT@7~J z<6K*@S%=;$RfSlOZokBf3xR9{re-v7^CUNZlt`L6XsUJd` z?p?pD>-*A%tC!YnTJ1-Z?s2}F2#V{FBMMi9uD>gV#b-^$w=6)=JCuNl)XE3>;#gT5 z9C8goVrIlY^gYb?L*kDKS3S&E^phdWbhrR4#la`WwTIqHCr4lO(wOzm*@sA7k-$Y? zFL;<9fpkb(F9N88l+tHB<_#kB{miqA=d}e6MmeJ7ew9|(ThmsWIb|lx0gWXL`Blm5 z)76$6oSZ_`_5C46MrQ_*FQ6`GU#QJwGs+WaSbCr!V>cKLK#d&!fB2O8WH zioGrz#5hP(XHRuPH`len!l-9oq3G_?WADQ2RP?&^2|u`in&)ml;ts#1_ZVC*B6H4U z&8*AOp zTz}m?N7og$EtB&RFJE|2pfAWfVyg$&Bn@YW(MqkKvrC(Z*%*Pj32HnAC58`lY<#Er z<-0oVNH|)#Hh|v}E9(65PbL=uT8UR8G42?>6Wl!MAf=w#Oq_hc7cg9UF~nF8=5z19M<#y)k%Q zbW9(uCH@hoN|a=`+gxxZ%97Y-u0^n6gq9*L+g+=>tx#rWxGw{&|)EXM7!(-mGGSniG~Wdg=WfrTWYKVHas(=9>07tFy6LgV!qPodEU+!guG|`7b#|6lVugkgNC*T^9VH z8FUTVv^HWg*(p?vR{#pc%|;I^zv~w1WnS!UHdyfv=Fwr7!3%t}-PX2BWbO6GTLuGq z^GL#vDzJ%@9MItV*_?O>z9$%P)$-Jo=gn5TqYUI<(Vf~0Pd{UYQW$ggjWZIb;`JGp zE^Xdu`ZGv%DT0vA@u~B2-@eht(vi0$$5<7Oe5s^A!dAr}l;$QTFS~sH=qGTP|0yAa zbwZKW

h~>!q|FU84P*MR#VGV>IOFm5R=$Hz`a?OWt}8Tp^>Mqg^4ry9u>c(X2aZ z#&o_hV|$pVC*kS!WI`c@d3~Z(peBavAe?9&pK!?vER(E*q4SrEnBICU)YjYyi zQ|%hK@27X@em7=Dn1VN)P-GH+uuyJX`!d2t`>y2e*W^$aI|p=GUS8QCPubv4=!Xq^ ziF+xl-z+volJ6ylCiubn9gg!HTytMDyEv7mO^-3wjK>wy4Il*;%7!n+R&L|x91 z5;+SEGUne{HYGrv`@kr()L6Fg7$=-EJXUB_9c5YI477@^oQ0AE;#Qr|ZuvlH4zcw} z_f&yHuuCF}T@cJJv+e@IyH}62HsMS)c9?WzeXzrC14H*qD`27(7K-Cp365a_29{p} zq(YpTP5qH8B;)?DQ6TFkK)Gq~zR^_1aH#iB=0l54uL8c$ismEcnXZ6SlD;SlfZ>wl z5}OXoVzNinf6i7;Q{}gP@l^TmRssdN?#!O10P=$c^=LZ0&`I0Yr&1}5p`#~!Ncs`N zjXCLNE}wKn@9!q?d1$3@BJk;W?MI%q*^5sCB^$Nl#YWYHEeoXV;~v#+suc^}3W;&8 zI{ZFCr<pK$UKm!v?v(cOIz?Rvs)(>*2mKm04NbvYwlb@~kJVL{7 ziVVqLNL+8ZMlWawK8paQ9b3W~Z+PUU4f5#%U)^UaQ!h!h`n?@TpD6k62T$B(wSJ4u z6Puwwv+rz)Qlea}=yCk;VT;+CXb%hiChP;;YiY`~+ohtOROQ4@k^Sc(bSQ6)wvt$x zOdogv^P%7QI$0GhoU!m(|IMj^sW~1uc&jyU$4&X z&9H?S%m#a&DNrj%1BwunjROwKKZzPZf0*;FeYa9_v=c}wD0pG7x3}d%VG}#GmE9!1 zCnpI!H@x1LWHQk@tO0zdG{ltIoq)dm4g?3TB7;?X(T}Bow+!rk+~K`>er5#Y5BpY^ zen?aSh9JG%bAFglxklkZ0~J*F2x+S-!*RM^9h3Kep2h7X%`$uKw3~MSU97;zl!-mp zdOuSALPKG_x#{YFa^7~@#M~M`qb>g}oKrM{#@_qNhyn1`S$4a;WK~RcD>A@G4C$0bm6B}T(=otJy z51WC>7>8_q_ zN_6R1)2jUiYj{tPqBb#bpFu;5Ut*$VDf4%U6Kv#*4UPEa5LZTy%Qr#4^us9DJ-3z- zu4#?w{OjrQ58R#x%=hqWa87RTIx^#8HWPVpEhF3Hh3jwx4!Pke%SsZk#VY6Pi_*Bm z-+@ouAiW}hg%=~?2QXv_jVUu8FkYIkNxWt^9S<;fDB~{i&H|U9tk`M@uOJ@1HzCkj>F<_tFJGGB)*Gr`CV# zFkIX90~~+MMsD7S{`}jcVI|Yad@EgQ{3ezH(*SOecX20Hr&{Uv%<2%t;oxn_23yG& zM)Nx^h;S3JF|hcrIq5Tk=U$p5WGLcV~{YUZbvE_vo~Sf>LTYFa04 zbQ`m#j%?{te$LacJD`up8CqkZWay9N{N(GPM-U%w0#$kC1&F0A89c3;9XQ&ed2^FX*U#u4%% zz*dEYNDnl3Jwx+E&RU&sU4j@VOP_&#id+2=BhD%-o_pJhB8ISIRsG zn*`=Wzti(1ix&*X(i{3=KatTc?z06p)t-_8_Zy_sl1ZQ6B1i#CDC^IErp^N$ z8E=8X@+1KPP!5}Vf@@iu@Q?)viXME35I=Uy_PYeIeg$ZnD6|7OK|imS_FZmliy07U z{#6Pqh}R`NY=rpquFK|J6dVQ`&?@K15(MK)yhjd#9AF~>C?~o3*h4a+pv2`)X$T2M zC29Z^=Yif(s(|?yP3`h z@?ZUI5~Cm8&N&F;=Zj!i zcSk0E1eYnQ#jf~%m1=6nlU&s!ZrI8g}MF1 zOYk&>0bn7XAbsWlCWD(Y)*}N=l3lJY`PYU z51k+>IV;;fg$5|d+e2(kOKvV^z~tFA2K)~efLUM&2xg)m)+@vG9`i{8$y_oJn-wM~ zQ5f&JW!swjpSP{jsmy$v$xWI7c}fGw09x|!2z(64jdx3<|Ct>4PoZ$Vas$YkE@hrR zLqHO^1k9w;?-0DCKEDJA3b;6A8{$j=Vp93_oW zNdU&2AAtM61t>Akq3lx}c+RW0+@4xI3YMI;+c5zq|Cu%hMqECF*8rjt_meIGE)3zO zfu~rY8x13QtH7o$O2ICVJJ_S279-`M|^{|II1r42<}b0~nzm^185o z0lXgO%LQ|g1eQ7Q)<%s&`0iUkcRPrKk)gqya>*&CH{+PFD6BBOzTp4@k$-OdTUZsa zji}%xFeeW1U!|iM^Uye&LlXE+iP28_=Zyj+lZMc2KQBiPU=vh^W-Q3#8~uS2bJBUh zgR~q0JZJbf0{E)mg1d=cp`{&55A+pr2J-w+0@Kq+UKcu5!# zT}nNzF!W(5_pJ$|kU)DO0-%Qo-Ee_)^vXdYj9!=ken2F$BJ3SICBrQPkg{aOGgksn zS%`jDliZFW2roMx>un}Bl|lf2U~lp^n6^8_1*I@#0ROYMIldnpW9irUFB~P+AncIV zyHK1ZC}j>Ky1>~7?Eqo9Sdd?(HH=2ZcLf&{=O9Sp;Py_)s^p-xXFh+`$%*yuIV zO+Z&3k%4%-sTmCsr?1>728LbXI1A7Y^^*hBfIs!N5hbX1!5OTr_;Q=q^5UPA21M~!dwu&3|L_EBn^nvh zXl5b?Z~%gM6S{A1s9`5%4OR2NJPR1%<@6hK{4>r5R{SXax?V>Lf5J$Q%8CAzM!hjiFMtX3bP2-C-bT|d%Ne6QhenJ(n*4L zKsq-VoDAli2hPH1hs{j5V|$%@I$D6KH1P-L82u7GgqZbNicUWR3H<;3Z|D^V-pTx0 z+dwq#3jQJZ{)n6Ivoc^6UNfBWskTu(XI{MaPl6ae*fZXBY96-L2%8PWMJB*Vs z2WT9#gx0ZV>@yHgrUN>Wg4(28zy$JtpzoxAg5m#|d-H#&-|v6?F^e(wJtB-HyX@H+ z*&<6(5@JMBvP5K`u~bBqB`W)xO7yg68>OgZi74yPLe{a5ZRT@LulM(V`2NtXU(Dli zJ+5=EbMEI{=iE=YEbw6u1h@z)z)6I@LYx+caU%NXNUGR<>O~${qwW9XTWb#O#{JJ0 zBm!$ve+~k@4U$aN1MY|5f%jpJnjPn10ae$_ZGNKG?!3DURImU>{=c)|$_uL=ft_SU zoNg5k&=Z2#c?}ro{=kuJD-4~NgdMXa$wENu>5}^Q%_1yz>wItaQ$JzexPbDNER|~jR3mSVnNgTQiJR~z|d*x0mG#Lv! z*{uT&dtrgDoD_z#fE?SHNfP}m^op%jV+;886OEp_xI~Bm{vhF>0|v{xggrZvj+7}S zJVjCtZW$Q{7$b4zeB7{rMF3^^U=M&nLgbzSZs5*KIH$=wMHCcub5=Ua00<<*0ZEEJ z%}O{G(<=k^@Ldi(;R*s*g_J=RFkunUhe{an%JawYP(7eIEr)=FNtX(Y=~@{J9?zxx z+zUxE178J4fESw?KC6QfwP{6zVKy&k7p{pzsnXs^;;CS|fIdSPfjgk90PnetR+K5U z!QJ|#^o)A`t#E5$87_hpDwtE7Gt$ zsJI(V6f#3%U~C`e)EG zUIWY+<>`%MtT40Hr>$*|_RHCUJAVT9Yb2bxfLSlJc}e`8uO4p;>!p+towg6+@2Og7 zn$e#H%k;G5?I0b^drZDi3-DWVpcASQ*jMoRDvmCUQK|OOVyex-&|}V^dl8==WSsm; zEa?tG)CWn@%*s|WMXu@=Rjx<)=BhIE$188c=i;MJ`yj9#sec>;oX-H;@zWh*S8=m< zjX*r;w+G(a(Sq)`yXF3g%mLOYpztcL?ffhnGT$HDtYbPTC^@-C@_fhnK<`hGhF1YT zSV)FNt8L2R|F$sr9%Pba7={d`9xsB}K+B~h3}`a}JoGt|zEMD-fXR9Ux5+_cuTF?V ztb4OZvh5}2j!dZinp*3B^suFP{o0>{_0*54wK^^5Bz@XnCitJvzhThF2b_LFNx4un ztVmS78#+DIWz_GVpfhCyn$Qq)tUw6e|b?a5+jNuwtSdTn!@Wvqq#` zSM%fjkiZ!16q48kpeHws4AEgH`I8@^J+ANPpEU1a$dNg8%pN-GRPw$<@!FsLtH^oP zs{C74c|X_3NM_Ze&`D&01!2mN1*VA7B-9;;to}5kW20+#vOmV~ZVDBq& zSg5+u0{CkzCqMRzC(zw7nDmezLExNoFjNolyLaB>gW);1rRPV?sVY*2SpYM038o=W zA_8t$TKha}{DiRLcU3AqmGM z2o

YtSJ8yXS{?|7TSnK+o1n-|uMOlT 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 AE&u=k literal 0 HcmV?d00001 diff --git a/app/src/main/res/drawable/tools_ramp_button.png b/app/src/main/res/drawable/tools_ramp_button.png new file mode 100644 index 0000000000000000000000000000000000000000..fea06ee7c7c4cf8ae7ad060be9cff544022b86f0 GIT binary patch literal 48757 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⪚JwE#$kn@d&@ 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 literal 0 HcmV?d00001 diff --git a/app/src/main/res/drawable/tools_spring.png b/app/src/main/res/drawable/tools_spring.png new file mode 100644 index 0000000000000000000000000000000000000000..23271f67d9d0d6014ebbfc02e4c53e7d5440969e GIT binary patch literal 62208 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Ö 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

(pWX|H}Zenyy@svheJC!+R&g=d0;{aE!cO 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 P0ssv4%yi#tJ4gQygGab4 literal 0 HcmV?d00001 diff --git a/app/src/main/res/drawable/world_previews_grass.png b/app/src/main/res/drawable/world_previews_grass.png new file mode 100644 index 0000000000000000000000000000000000000000..498940ee86c0cfc3f64d1561adb7faea65fb9d90 GIT binary patch literal 91065 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 Ze*qF(@#Un-{Qdv{002ovPDHLkV1njg#bN*e literal 0 HcmV?d00001 diff --git a/app/src/main/res/drawable/xml_background_bountymessage.xml b/app/src/main/res/drawable/xml_background_bountymessage.xml new file mode 100644 index 0000000..8710c08 --- /dev/null +++ b/app/src/main/res/drawable/xml_background_bountymessage.xml @@ -0,0 +1,20 @@ + + + + + + + diff --git a/app/src/main/res/drawable/xml_background_levelbutton.xml b/app/src/main/res/drawable/xml_background_levelbutton.xml new file mode 100644 index 0000000..55ab491 --- /dev/null +++ b/app/src/main/res/drawable/xml_background_levelbutton.xml @@ -0,0 +1,14 @@ + + + + + + + diff --git a/app/src/main/res/drawable/xml_background_toolslot.xml b/app/src/main/res/drawable/xml_background_toolslot.xml new file mode 100644 index 0000000..29dbf0b --- /dev/null +++ b/app/src/main/res/drawable/xml_background_toolslot.xml @@ -0,0 +1,6 @@ + + + + + diff --git a/app/src/main/res/drawable/xml_background_worldbutton.xml b/app/src/main/res/drawable/xml_background_worldbutton.xml new file mode 100644 index 0000000..c2f3a75 --- /dev/null +++ b/app/src/main/res/drawable/xml_background_worldbutton.xml @@ -0,0 +1,20 @@ + + + + + + + diff --git a/app/src/main/res/drawable/xml_layers_toolprogressbar.xml b/app/src/main/res/drawable/xml_layers_toolprogressbar.xml new file mode 100644 index 0000000..c0318d1 --- /dev/null +++ b/app/src/main/res/drawable/xml_layers_toolprogressbar.xml @@ -0,0 +1,21 @@ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/xml_selector_gamebutton.xml b/app/src/main/res/drawable/xml_selector_gamebutton.xml new file mode 100644 index 0000000..b4e0d6b --- /dev/null +++ b/app/src/main/res/drawable/xml_selector_gamebutton.xml @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/xml_selector_sound.xml b/app/src/main/res/drawable/xml_selector_sound.xml new file mode 100644 index 0000000..61f796c --- /dev/null +++ b/app/src/main/res/drawable/xml_selector_sound.xml @@ -0,0 +1,10 @@ + + + + + + + + \ No newline at end of file diff --git a/particlelab/src/androidTest/java/de/frajul/particlelab/ApplicationTest.java b/particlelab/src/androidTest/java/de/frajul/particlelab/ApplicationTest.java new file mode 100644 index 0000000..788c0ba --- /dev/null +++ b/particlelab/src/androidTest/java/de/frajul/particlelab/ApplicationTest.java @@ -0,0 +1,13 @@ +package com.example.particlelab; + +import android.app.Application; +import android.test.ApplicationTestCase; + +/** + * Testing Fundamentals + */ +public class ApplicationTest extends ApplicationTestCase { + public ApplicationTest() { + super(Application.class); + } +} \ No newline at end of file diff --git a/particlelab/src/main/java/de/frajul/particlelab/data/Color.java b/particlelab/src/main/java/de/frajul/particlelab/data/Color.java new file mode 100644 index 0000000..098fcbd --- /dev/null +++ b/particlelab/src/main/java/de/frajul/particlelab/data/Color.java @@ -0,0 +1,69 @@ +package de.frajul.particlelab.data; + +/** + * Created by Julian on 02.08.2016. + */ +public class Color { + + private float r, g, b; + + public Color() { + } + + public Color(float r, float g, float b){ + this.r = r; + this.g = g; + this.b = b; + } + + public Color(Color other) { + this.r = other.getR(); + this.g = other.getG(); + this.b = other.getB(); + } + + public Color mix(float leftValue, float rightValue, Color color2) { + Color mySelf = new Color(this); + Color second = new Color(color2); + mySelf.mul(leftValue); + second.mul(rightValue); + mySelf.add(second); + return mySelf; + } + + private void mul(float a) { + r *= a; + g *= a; + b *= a; + } + + private void add(Color other) { + r += other.getR(); + g += other.getG(); + b += other.getB(); + } + + public float getR() { + return r; + } + + public void setR(float r) { + this.r = r; + } + + public float getG() { + return g; + } + + public void setG(float g) { + this.g = g; + } + + public float getB() { + return b; + } + + public void setB(float b) { + this.b = b; + } +} diff --git a/particlelab/src/main/java/de/frajul/particlelab/data/Vector.java b/particlelab/src/main/java/de/frajul/particlelab/data/Vector.java new file mode 100644 index 0000000..9580bd7 --- /dev/null +++ b/particlelab/src/main/java/de/frajul/particlelab/data/Vector.java @@ -0,0 +1,101 @@ +package de.frajul.particlelab.data; + +/** + * Created by Julian on 01.12.2015. + */ +public class Vector { + + public float x, y; + + public Vector() { + this(0, 0); + } + + public Vector(Vector other) { + this(other.x, other.y); + } + + public Vector(float x, float y) { + set(x, y); + } + + @Override + public String toString() { + return "Vector(" + x + ", " + y + ")"; + } + + public Vector set(float x, float y) { + this.x = x; + this.y = y; + return this; + } + + public float length() { + return (float) Math.sqrt(x * x + y * y); + } + + public Vector normalize() { + float length = this.length(); + x /= length; + y /= length; + return this; + } + + public Vector translate(Vector other) { + this.x += other.x; + this.y += other.y; + return this; + } + + public Vector translate(float x, float y) { + this.x += x; + this.y += y; + return this; + } + + public Vector mul(float z) { + x *= z; + y *= z; + return this; + } + + public Vector mul(Vector other) { + this.x *= other.x; + this.y *= other.y; + return this; + } + + public Vector mul(float x, float y) { + this.x *= x; + this.y *= y; + return this; + } + + public Vector negate() { + this.x *= -1; + this.y *= -1; + return this; + } + + public Vector vectorTo(Vector other) { + float x = other.x - this.x; + float y = other.y - this.y; + return new Vector(x, y); + } + + public void setX(float x) { + this.x = x; + } + + public void setY(float y) { + this.y = y; + } + + public float getX() { + return x; + } + + public float getY() { + return y; + } +} diff --git a/particlelab/src/main/java/de/frajul/particlelab/entities/Entity.java b/particlelab/src/main/java/de/frajul/particlelab/entities/Entity.java new file mode 100644 index 0000000..790b8c7 --- /dev/null +++ b/particlelab/src/main/java/de/frajul/particlelab/entities/Entity.java @@ -0,0 +1,80 @@ +package de.frajul.particlelab.entities; + +import de.frajul.particlelab.data.Color; +import de.frajul.particlelab.entities.textures.Texture; +import de.frajul.particlelab.data.Vector; + +/** + * Created by Julian on 20.11.2015. + */ +public class Entity extends Quad { + + private Color color; + private Texture texture; + private Vector movement; + private float rotation; + private float dynamicRotation; + private float alpha = 1.0f; + private boolean destroyed; + + public Entity(Texture texture, Vector position, float width, float height) { + super(position, width, height); + this.texture = texture; + this.movement = new Vector(); + } + + public Entity(Texture texture, Color color, Vector position, float width, float height) { + super(position, width, height); + this.texture = texture; + this.color = color; + this.movement = new Vector(); + } + + public void move(Vector movement) { + position.translate(movement); + } + + public void rotate(float factor) { + rotation += factor; + } + + public Texture getTexture() { + return texture; + } + + public void setTexture(Texture texture) { + this.texture = texture; + } + + public Vector getMovement() { + return movement; + } + + public void setMovement(Vector movement) { + this.movement = movement; + } + + public float getRotation() { + return rotation; + } + + public void setRotation(float rotation) { + this.rotation = rotation; + } + + public void setAlpha(float alpha) { + this.alpha = alpha; + } + + public float getAlpha() { + return alpha; + } + + public void setColor(Color color) { + this.color = color; + } + + public Color getColor() { + return color; + } +} diff --git a/particlelab/src/main/java/de/frajul/particlelab/entities/Quad.java b/particlelab/src/main/java/de/frajul/particlelab/entities/Quad.java new file mode 100644 index 0000000..aae8a86 --- /dev/null +++ b/particlelab/src/main/java/de/frajul/particlelab/entities/Quad.java @@ -0,0 +1,59 @@ +package de.frajul.particlelab.entities; + +import de.frajul.particlelab.data.Vector; + +/** + * Created by Julian on 01.12.2015. + */ +public class Quad { + + protected Vector position; + protected float width, height; + + public Quad(Vector position, float width, float height) { + this.position = position; + this.width = width; + this.height = height; + } + + public float getRightEdge() { + return position.x + width / 2; + } + + public float getLeftEdge() { + return position.x - width / 2; + } + + public float getTopEdge() { + return position.y + height / 2; + } + + public float getBottomEdge() { + return position.y - height / 2; + } + + public Vector getPosition() { + return position; + } + + public void setPosition(Vector position) { + this.position = position; + } + + public float getWidth() { + return width; + } + + public void setWidth(float width) { + this.width = width; + } + + public float getHeight() { + return height; + } + + public void setHeight(float height) { + this.height = height; + } + +} diff --git a/particlelab/src/main/java/de/frajul/particlelab/entities/particles/Particle.java b/particlelab/src/main/java/de/frajul/particlelab/entities/particles/Particle.java new file mode 100644 index 0000000..21ffd64 --- /dev/null +++ b/particlelab/src/main/java/de/frajul/particlelab/entities/particles/Particle.java @@ -0,0 +1,89 @@ +package de.frajul.particlelab.entities.particles; + +import de.frajul.particlelab.data.Vector; +import de.frajul.particlelab.entities.Entity; +import de.frajul.particlelab.entities.particles.attributes.attributeValues.Range; +import de.frajul.particlelab.entities.particles.attributes.attributeValues.Timeline; +import de.frajul.particlelab.entities.particles.attributes.attributeValues.TintTimeline; +import de.frajul.particlelab.main.GameLog; +import de.frajul.particlelab.rendering.Timer; + +import java.util.Random; + +/** + * Created by Julian on 02.08.2016. + */ +public class Particle extends Entity { + + private Random random; + private boolean active; + private float maxLife; + private float passedLifetime; + + private Timeline scaleTimeline; + private Range scale; + private Timeline velocityTimeline; + private Range velocity; + private Timeline angleTimeline; + private Range angle; + private Timeline rotationTimeline; + private Range rotation; + private Timeline transparencyTimeline; + private TintTimeline tintTimeline; + + public Particle(Random random) { + super(null, new Vector(), 1, 1); + this.random = random; + } + + public void activate(Vector position, float liveValue, ParticleData particleData) { + active = true; + passedLifetime = 0; + super.setPosition(position); + maxLife = particleData.getLife().createValue(random, liveValue); + scaleTimeline = particleData.getScaleTR().getTimeline(); + scale = particleData.getScaleTR().getRange().createNormalizedInstance(random); + velocityTimeline = particleData.getVelocityTR().getTimeline(); + velocity = particleData.getVelocityTR().getRange().createNormalizedInstance(random); + angleTimeline = particleData.getAngleTR().getTimeline(); + angle = particleData.getAngleTR().getRange().createNormalizedInstance(random); + rotationTimeline = particleData.getRotationTR().getTimeline(); + rotation = particleData.getRotationTR().getRange().createNormalizedInstance(random); + transparencyTimeline = particleData.getTransparencyT(); + tintTimeline = particleData.getTint(); + } + + public void update(Timer timer, float windStrength, float gravityStrength) { + if (active) { + passedLifetime += timer.getFrameTime(); + if (passedLifetime >= maxLife) + active = false; + float lifetimePercent = passedLifetime / maxLife; + setScale(scale.createValue(random, scaleTimeline.getValueAtTime(lifetimePercent))); + setMovement(velocity.createValue(random, velocityTimeline.getValueAtTime(lifetimePercent)), + angle.createValue(random, angleTimeline.getValueAtTime(lifetimePercent)), windStrength, gravityStrength); + super.setRotation(-rotation.createValue(random, rotationTimeline.getValueAtTime(lifetimePercent))); + super.setAlpha(transparencyTimeline.getValueAtTime(lifetimePercent)); + super.setColor(tintTimeline.getValueAtTime(lifetimePercent)); + } + } + + private void setScale(float scale) { + super.setWidth(scale * ParticleSystem.TRANSFER_VALUE); + super.setHeight(scale * ParticleSystem.TRANSFER_VALUE); + } + + private void setMovement(float velocity, float angle, float windStrength, float gravityStrength) { + float radians = (float) Math.toRadians(angle); + Vector normalMovement = new Vector(); + normalMovement.setX((float) Math.cos(radians)); + normalMovement.setY((float) Math.sin(radians)); + normalMovement.mul(velocity * ParticleSystem.TRANSFER_VALUE); + normalMovement.translate(windStrength * ParticleSystem.TRANSFER_VALUE, gravityStrength * ParticleSystem.TRANSFER_VALUE); + super.setMovement(normalMovement); + } + + public boolean isActive() { + return active; + } +} diff --git a/particlelab/src/main/java/de/frajul/particlelab/entities/particles/ParticleData.java b/particlelab/src/main/java/de/frajul/particlelab/entities/particles/ParticleData.java new file mode 100644 index 0000000..af7e29c --- /dev/null +++ b/particlelab/src/main/java/de/frajul/particlelab/entities/particles/ParticleData.java @@ -0,0 +1,59 @@ +package de.frajul.particlelab.entities.particles; + +import de.frajul.particlelab.entities.particles.attributes.attributeValues.Range; +import de.frajul.particlelab.entities.particles.attributes.attributeValues.Timeline; +import de.frajul.particlelab.entities.particles.attributes.attributeValues.TimelineRange; +import de.frajul.particlelab.entities.particles.attributes.attributeValues.TintTimeline; +import de.frajul.particlelab.entities.textures.Texture; + +/** + * Created by Julian on 03.08.2016. + */ +public class ParticleData { + + private Range life; + private TimelineRange scaleTR; + private TimelineRange velocityTR; + private TimelineRange angleTR; + private TimelineRange rotationTR; + private Timeline transparencyT; + private TintTimeline tint; + + public ParticleData(Range life, TimelineRange scaleTR, TimelineRange velocityTR, TimelineRange angleTR, TimelineRange rotationTR, Timeline transparencyT, TintTimeline tint) { + this.life = life; + this.scaleTR = scaleTR; + this.velocityTR = velocityTR; + this.angleTR = angleTR; + this.rotationTR = rotationTR; + this.transparencyT = transparencyT; + this.tint = tint; + } + + public Range getLife() { + return life; + } + + public TimelineRange getScaleTR() { + return scaleTR; + } + + public TimelineRange getVelocityTR() { + return velocityTR; + } + + public TimelineRange getAngleTR() { + return angleTR; + } + + public TimelineRange getRotationTR() { + return rotationTR; + } + + public Timeline getTransparencyT() { + return transparencyT; + } + + public TintTimeline getTint() { + return tint; + } +} diff --git a/particlelab/src/main/java/de/frajul/particlelab/entities/particles/ParticleEffect.java b/particlelab/src/main/java/de/frajul/particlelab/entities/particles/ParticleEffect.java new file mode 100644 index 0000000..34a40c4 --- /dev/null +++ b/particlelab/src/main/java/de/frajul/particlelab/entities/particles/ParticleEffect.java @@ -0,0 +1,218 @@ +package de.frajul.particlelab.entities.particles; + +import de.frajul.particlelab.entities.particles.attributes.attributeValues.Options; +import de.frajul.particlelab.entities.particles.attributes.attributeValues.Range; +import de.frajul.particlelab.entities.particles.attributes.attributeValues.SpawnShape; +import de.frajul.particlelab.entities.particles.attributes.attributeValues.Timeline; +import de.frajul.particlelab.entities.particles.attributes.attributeValues.TimelineRange; +import de.frajul.particlelab.entities.particles.attributes.attributeValues.TintTimeline; +import de.frajul.particlelab.entities.textures.Texture; +import de.frajul.particlelab.rendering.Timer; + +import java.util.ArrayList; +import java.util.List; +import java.util.Random; + +/** + * Created by Julian on 05.08.2016. + */ +public class ParticleEffect { + + private TimelineRange life; + //Particle Timeline + private TimelineRange scale; + private TimelineRange velocity; + private TimelineRange angle; + private TimelineRange rotation; + private Timeline transparency; + private TintTimeline tint; + + //Source Timeline + private Range delay; + private Range duration; + private TimelineRange emission; + private Range xOffset; + private Range yOffset; + private SpawnShape.Shape spawnShape; + private TimelineRange spawnWidth; + private TimelineRange spawnHeight; + private TimelineRange wind; + private TimelineRange gravity; + + private Options options; + private Texture texture; + private String textureName; + + private Random random; + private List sources = new ArrayList<>(); + + public ParticleEffect() { + this.random = new Random(); + } + + public void update(Timer timer) { + for (ParticleSource source : sources) + source.update(timer); + } + + public ParticleData createParticleData(){ + return new ParticleData(life.getRange(), scale, velocity, angle, rotation, transparency, tint); + } + + public Random getRandom() { + return random; + } + + public void addSource(ParticleSource source) { + sources.add(source); + } + + public void setDelay(Range delay) { + this.delay = delay; + } + + public void setDuration(Range duration) { + this.duration = duration; + } + + public void setEmission(TimelineRange emission) { + this.emission = emission; + } + + public void setLife(TimelineRange life) { + this.life = life; + } + + public void setxOffset(Range xOffset) { + this.xOffset = xOffset; + } + + public void setyOffset(Range yOffset) { + this.yOffset = yOffset; + } + + public void setSpawnShape(SpawnShape.Shape spawnShape) { + this.spawnShape = spawnShape; + } + + public void setSpawnWidth(TimelineRange spawnWidth) { + this.spawnWidth = spawnWidth; + } + + public void setSpawnHeight(TimelineRange spawnHeight) { + this.spawnHeight = spawnHeight; + } + + public void setScale(TimelineRange scale) { + this.scale = scale; + } + + public void setVelocity(TimelineRange velocity) { + this.velocity = velocity; + } + + public void setAngle(TimelineRange angle) { + this.angle = angle; + } + + public void setRotation(TimelineRange rotation) { + this.rotation = rotation; + } + + public void setWind(TimelineRange wind) { + this.wind = wind; + } + + public void setGravity(TimelineRange gravity) { + this.gravity = gravity; + } + + public void setTint(TintTimeline tint) { + this.tint = tint; + } + + public void setTransparency(Timeline transparency) { + this.transparency = transparency; + } + + public Timeline getTransparency() { + return transparency; + } + + public TintTimeline getTint() { + return tint; + } + + public void setOptions(Options options) { + this.options = options; + } + + public void setTexture(Texture texture) { + this.texture = texture; + } + + public void setTextureName(String textureName) { + this.textureName = textureName; + } + + public String getTextureName() { + return textureName; + } + + public Texture getTexture() { + return texture; + } + + public Range getDelay() { + return delay; + } + + public Range getDuration() { + return duration; + } + + public TimelineRange getEmission() { + return emission; + } + + public Options getOptions() { + return options; + } + + public TimelineRange getWind() { + return wind; + } + + public TimelineRange getGravity() { + return gravity; + } + + public Range getxOffset() { + return xOffset; + } + + public Range getyOffset() { + return yOffset; + } + + public List getSources() { + return sources; + } + + public TimelineRange getLife() { + return life; + } + + public SpawnShape.Shape getSpawnShape() { + return spawnShape; + } + + public TimelineRange getSpawnHeight() { + return spawnHeight; + } + + public TimelineRange getSpawnWidth() { + return spawnWidth; + } +} + diff --git a/particlelab/src/main/java/de/frajul/particlelab/entities/particles/ParticleReader.java b/particlelab/src/main/java/de/frajul/particlelab/entities/particles/ParticleReader.java new file mode 100644 index 0000000..5a3c3fb --- /dev/null +++ b/particlelab/src/main/java/de/frajul/particlelab/entities/particles/ParticleReader.java @@ -0,0 +1,164 @@ +package de.frajul.particlelab.entities.particles; + +import android.content.Context; + +import de.frajul.particlelab.entities.particles.attributes.Attribute; +import de.frajul.particlelab.entities.particles.attributes.AttributeValueReader; +import de.frajul.particlelab.entities.particles.attributes.ParticleAttributeType; +import de.frajul.particlelab.entities.particles.attributes.attributeValues.ImagePath; +import de.frajul.particlelab.entities.particles.attributes.attributeValues.Options; +import de.frajul.particlelab.entities.particles.attributes.attributeValues.ParticleAttributeValueType; +import de.frajul.particlelab.entities.particles.attributes.attributeValues.Range; +import de.frajul.particlelab.entities.particles.attributes.attributeValues.SpawnShape; +import de.frajul.particlelab.entities.particles.attributes.attributeValues.Timeline; +import de.frajul.particlelab.entities.particles.attributes.attributeValues.TimelineRange; +import de.frajul.particlelab.entities.particles.attributes.attributeValues.TintTimeline; +import de.frajul.particlelab.main.GameLog; + +import java.io.BufferedReader; +import java.io.InputStream; +import java.io.InputStreamReader; +import java.util.ArrayList; +import java.util.List; + +/** + * Created by Julian on 02.08.2016. + */ +public class ParticleReader { + + private Context context; + private AttributeValueReader attributeValueReader; + + private List attributes; + private Attribute currentAttribute; + + public ParticleReader(Context context) { + this.context = context; + attributeValueReader = new AttributeValueReader(); + } + + /** + * reads ParticleEffect from *.pe files + * !Ignores COUNT, LIFE_OFFSET! + */ + public ParticleEffect read(String filename) throws Exception { + try { + attributes = new ArrayList<>(); + currentAttribute = null; + InputStream is = context.getAssets().open(filename); + BufferedReader reader = new BufferedReader(new InputStreamReader(is)); + String line; + while ((line = reader.readLine()) != null) { + line = line.trim(); + handleLine(line); + } + reader.close(); + return createParticleEffect(); + } catch (Exception e) { + throw new Exception("Could not read particleFile: ", e); + } + } + + private void handleLine(String line) throws Exception { + if (line.startsWith("- ")) { + Attribute attrib = ParticleAttributeType.getByInFileTitle(line).createInstance(); + attributes.add(attrib); + currentAttribute = attrib; + } else if (currentAttribute != null) + attributeValueReader.addValueForAttribute(currentAttribute, line); + } + + private ParticleEffect createParticleEffect() throws Exception { + ParticleEffect effect = new ParticleEffect(); + Timeline timeline = null; + Range range = null; + for (Attribute attribute : attributes) { + switch (attribute.getType()) { + case DELAY: + effect.setDelay((Range) attribute.get(ParticleAttributeValueType.RANGE)); + break; + case DURATION: + effect.setDuration((Range) attribute.get(ParticleAttributeValueType.RANGE)); + break; + case COUNT: + break; + case EMISSION: + timeline = (Timeline) attribute.get(ParticleAttributeValueType.TIMELINE); + range = (Range) attribute.get(ParticleAttributeValueType.RANGE); + effect.setEmission(new TimelineRange(timeline, range)); + break; + case LIFE: + timeline = (Timeline) attribute.get(ParticleAttributeValueType.TIMELINE); + range = (Range) attribute.get(ParticleAttributeValueType.RANGE); + effect.setLife(new TimelineRange(timeline, range)); + break; + case LIFE_OFFSET: + break; + case X_OFFSET: + effect.setxOffset((Range) attribute.get(ParticleAttributeValueType.RANGE)); + break; + case Y_OFFSET: + effect.setyOffset((Range) attribute.get(ParticleAttributeValueType.RANGE)); + break; + case SPAWN_SHAPE: + effect.setSpawnShape(((SpawnShape) attribute.get(ParticleAttributeValueType.SPAWN_SHAPE)).getShape()); + break; + case SPAWN_WIDTH: + timeline = (Timeline) attribute.get(ParticleAttributeValueType.TIMELINE); + range = (Range) attribute.get(ParticleAttributeValueType.RANGE); + effect.setSpawnWidth(new TimelineRange(timeline, range)); + break; + case SPAWN_HEIGHT: + timeline = (Timeline) attribute.get(ParticleAttributeValueType.TIMELINE); + range = (Range) attribute.get(ParticleAttributeValueType.RANGE); + effect.setSpawnHeight(new TimelineRange(timeline, range)); + break; + case SCALE: + timeline = (Timeline) attribute.get(ParticleAttributeValueType.TIMELINE); + range = (Range) attribute.get(ParticleAttributeValueType.RANGE); + effect.setScale(new TimelineRange(timeline, range)); + break; + case VELOCITY: + timeline = (Timeline) attribute.get(ParticleAttributeValueType.TIMELINE); + range = (Range) attribute.get(ParticleAttributeValueType.RANGE); + effect.setVelocity(new TimelineRange(timeline, range)); + break; + case ANGLE: + timeline = (Timeline) attribute.get(ParticleAttributeValueType.TIMELINE); + range = (Range) attribute.get(ParticleAttributeValueType.RANGE); + effect.setAngle(new TimelineRange(timeline, range)); + break; + case ROTATION: + timeline = (Timeline) attribute.get(ParticleAttributeValueType.TIMELINE); + range = (Range) attribute.get(ParticleAttributeValueType.RANGE); + effect.setRotation(new TimelineRange(timeline, range)); + break; + case WIND: + timeline = (Timeline) attribute.get(ParticleAttributeValueType.TIMELINE); + range = (Range) attribute.get(ParticleAttributeValueType.RANGE); + effect.setWind(new TimelineRange(timeline, range)); + break; + case GRAVITY: + timeline = (Timeline) attribute.get(ParticleAttributeValueType.TIMELINE); + range = (Range) attribute.get(ParticleAttributeValueType.RANGE); + effect.setGravity(new TimelineRange(timeline, range)); + break; + case TINT: + effect.setTint((TintTimeline) attribute.get(ParticleAttributeValueType.TINT_TIMELINE)); + break; + case TRANSPARENCY: + timeline = (Timeline) attribute.get(ParticleAttributeValueType.TIMELINE); + effect.setTransparency(timeline); + break; + case OPTIONS: + effect.setOptions((Options) attribute.get(ParticleAttributeValueType.OPTIONS)); + break; + case IMAGE_PATH: + String path = ((ImagePath) attribute.get(ParticleAttributeValueType.IMAGE_PATH)).getImagePath(); + effect.setTextureName(path); + break; + } + } + return effect; + } +} diff --git a/particlelab/src/main/java/de/frajul/particlelab/entities/particles/ParticleSource.java b/particlelab/src/main/java/de/frajul/particlelab/entities/particles/ParticleSource.java new file mode 100644 index 0000000..951dff4 --- /dev/null +++ b/particlelab/src/main/java/de/frajul/particlelab/entities/particles/ParticleSource.java @@ -0,0 +1,150 @@ +package de.frajul.particlelab.entities.particles; + +import de.frajul.particlelab.data.Vector; +import de.frajul.particlelab.entities.particles.attributes.attributeValues.SpawnShape; +import de.frajul.particlelab.main.GameLog; +import de.frajul.particlelab.rendering.Lock; +import de.frajul.particlelab.rendering.Timer; + +import java.util.ArrayList; +import java.util.Iterator; +import java.util.List; +import java.util.Random; + +/** + * Created by Julian on 02.08.2016. + */ +public class ParticleSource { + + private Vector position; + private ParticleEffect effect; + private Random random; + + private boolean alife; + private float currentDelay; + private float lifePercent; + private float maxTime = -1; + private float passedTime; + private float emittPause; + private float passedEmittPause; + private float passedSecond; + private float windStrength; + private float gravityStrength; + private Vector spawnSize = null; + + private ParticleData particleData; + private List activeParticles = new ArrayList<>(); + private List inactiveParticles = new ArrayList<>(); + private Lock activeParticleLock = new Lock(); + + public ParticleSource(Vector position, ParticleEffect effect) { + this.position = position; + this.effect = effect; + random = effect.getRandom(); + effect.addSource(this); + } + + public void start() { + alife = true; + currentDelay = effect.getDelay().createValue(random, 0); + maxTime = effect.getDuration().createValue(random, 0) + currentDelay; + passedTime = 0; + emittPause = calcEmittPause(); + passedEmittPause = 0; + passedSecond = 0; + lifePercent = 0; + } + + public void update(Timer timer) { + if (alife) { + passedTime += timer.getFrameTime(); + lifePercent = passedTime / maxTime; + + if (passedTime >= currentDelay) { + passedEmittPause += timer.getFrameTime(); + calcWindAndGravity(); + while (passedEmittPause >= emittPause) { + passedEmittPause -= emittPause; + emitt(); + } + + passedSecond += timer.getFrameTime(); + if (passedSecond >= 1000) { + passedSecond -= 1000; + calcEmittPause(); + } + } + if (passedTime >= maxTime) + die(); + } + updateParticles(timer); + } + + private void updateParticles(Timer timer) { + activeParticleLock.lock(); + Iterator iter = activeParticles.iterator(); + while (iter.hasNext()) { + Particle particle = iter.next(); + particle.update(timer, windStrength, gravityStrength); + if (!particle.isActive()) { + inactiveParticles.add(particle); + iter.remove(); + } else { + particle.move(new Vector(particle.getMovement()).mul(timer.getFrameTime() / 1000)); + } + } + activeParticleLock.unlock(); + } + + private void die() { + alife = false; + if (effect.getOptions().isContinuous()) + start(); + } + + public void emitt() { + if (particleData == null) + particleData = effect.createParticleData(); + float xOff = effect.getxOffset().createValue(random, 0) * ParticleSystem.TRANSFER_VALUE; + float yOff = effect.getyOffset().createValue(random, 0) * ParticleSystem.TRANSFER_VALUE; + if (effect.getSpawnShape() == SpawnShape.Shape.SQUARE) { + float width = effect.getSpawnWidth().getRange().createValue(random, effect.getSpawnWidth().getTimeline().getValueAtTime(lifePercent)); + float height = effect.getSpawnHeight().getRange().createValue(random, effect.getSpawnHeight().getTimeline().getValueAtTime(lifePercent)); + xOff += (random.nextFloat() * width - width * 0.5f)*ParticleSystem.TRANSFER_VALUE; + yOff += (random.nextFloat() * height - height * 0.5f)*ParticleSystem.TRANSFER_VALUE; + } + setUpParticle(new Vector(position).translate(xOff, yOff)); + } + + private Particle setUpParticle(Vector position) { + Particle particle; + if (inactiveParticles.size() > 0) + particle = inactiveParticles.remove(0); + else + particle = new Particle(random); + + particle.activate(position, effect.getLife().getTimeline().getValueAtTime(lifePercent), particleData); + activeParticleLock.lock(); + activeParticles.add(particle); + activeParticleLock.unlock(); + return particle; + } + + private void calcWindAndGravity() { + windStrength = effect.getWind().getRange().createValue(random, effect.getWind().getTimeline().getValueAtTime(lifePercent)); + gravityStrength = effect.getGravity().getRange().createValue(random, effect.getGravity().getTimeline().getValueAtTime(lifePercent)); + } + + private float calcEmittPause() { + float emittedPerSecond = effect.getEmission().getRange().createValue(random, effect.getEmission().getTimeline().getValueAtTime(passedTime / maxTime)); + return 1000 / emittedPerSecond; + } + + public Lock getActiveParticleLock() { + return activeParticleLock; + } + + public List getActiveParticles() { + return activeParticles; + } +} diff --git a/particlelab/src/main/java/de/frajul/particlelab/entities/particles/ParticleSystem.java b/particlelab/src/main/java/de/frajul/particlelab/entities/particles/ParticleSystem.java new file mode 100644 index 0000000..652144b --- /dev/null +++ b/particlelab/src/main/java/de/frajul/particlelab/entities/particles/ParticleSystem.java @@ -0,0 +1,42 @@ +package de.frajul.particlelab.entities.particles; + +import android.content.Context; + +import de.frajul.particlelab.entities.textures.TextureLoader; +import de.frajul.particlelab.rendering.Timer; + +/** + * Created by Julian on 02.08.2016. + */ +public class ParticleSystem { + + public static final float TRANSFER_VALUE = 0.002f; + public final ParticleEffect explosion; + public final ParticleEffect firework; + private ParticleEffect[] effects; + + private TextureLoader textureLoader; + + public ParticleSystem(Context context) throws Exception { + this.textureLoader = new TextureLoader(context); + ParticleReader reader = new ParticleReader(context); + explosion = reader.read("explosion.pe"); + firework = reader.read("firework.pe"); + + effects = new ParticleEffect[]{explosion, firework}; + } + + public void update(Timer timer) { + for (ParticleEffect effect : effects) + effect.update(timer); + } + + public void loadTextures() throws Exception { + for (ParticleEffect effect : effects) + effect.setTexture(textureLoader.loadTexture(effect.getTextureName())); + } + + public ParticleEffect[] getEffects() { + return effects; + } +} diff --git a/particlelab/src/main/java/de/frajul/particlelab/entities/particles/attributes/Attribute.java b/particlelab/src/main/java/de/frajul/particlelab/entities/particles/attributes/Attribute.java new file mode 100644 index 0000000..8caaa7e --- /dev/null +++ b/particlelab/src/main/java/de/frajul/particlelab/entities/particles/attributes/Attribute.java @@ -0,0 +1,33 @@ +package de.frajul.particlelab.entities.particles.attributes; + +import de.frajul.particlelab.entities.particles.attributes.attributeValues.ParticleAttributeValue; +import de.frajul.particlelab.entities.particles.attributes.attributeValues.ParticleAttributeValueType; + +import java.util.ArrayList; +import java.util.List; + +/** + * Created by Julian on 02.08.2016. + */ +public class Attribute { + + private ParticleAttributeType type; + private List values = new ArrayList<>(); + + public Attribute(ParticleAttributeType type, ParticleAttributeValueType... valueTypes) { + this.type = type; + for (ParticleAttributeValueType valueType : valueTypes) + values.add(valueType.createInstance()); + } + + public ParticleAttributeValue get(ParticleAttributeValueType valueType) throws Exception { + for (ParticleAttributeValue v : values) + if (v.getType() == valueType) + return v; + throw new Exception("ParticleAttributeValue with type: " + valueType + " does not exist in Attribute "+type); + } + + public ParticleAttributeType getType() { + return type; + } +} diff --git a/particlelab/src/main/java/de/frajul/particlelab/entities/particles/attributes/AttributeValueReader.java b/particlelab/src/main/java/de/frajul/particlelab/entities/particles/attributes/AttributeValueReader.java new file mode 100644 index 0000000..fc0f83c --- /dev/null +++ b/particlelab/src/main/java/de/frajul/particlelab/entities/particles/attributes/AttributeValueReader.java @@ -0,0 +1,77 @@ +package de.frajul.particlelab.entities.particles.attributes; + +import de.frajul.particlelab.entities.particles.attributes.attributeValues.ImagePath; +import de.frajul.particlelab.entities.particles.attributes.attributeValues.Options; +import de.frajul.particlelab.entities.particles.attributes.attributeValues.ParticleAttributeValueType; +import de.frajul.particlelab.entities.particles.attributes.attributeValues.Range; +import de.frajul.particlelab.entities.particles.attributes.attributeValues.SpawnShape; +import de.frajul.particlelab.entities.particles.attributes.attributeValues.Timeline; +import de.frajul.particlelab.entities.particles.attributes.attributeValues.TintTimeline; + +/** + * Created by Julian on 02.08.2016. + */ +public class AttributeValueReader { + + public void addValueForAttribute(Attribute attribute, String line) throws Exception { + //RANGE + if (line.startsWith("lowMin:") || line.startsWith("min:")) + ((Range) attribute.get(ParticleAttributeValueType.RANGE)).setLowMin(parseFloat(line)); + else if (line.startsWith("lowMax:") || line.startsWith("max:")) + ((Range) attribute.get(ParticleAttributeValueType.RANGE)).setLowMax(parseFloat(line)); + else if (line.startsWith("highMin:")) + ((Range) attribute.get(ParticleAttributeValueType.RANGE)).setHighMin(parseFloat(line)); + else if (line.startsWith("highMax:")) + ((Range) attribute.get(ParticleAttributeValueType.RANGE)).setHighMax(parseFloat(line)); + //TIMELINE + else if (!line.startsWith("scalingCount") && line.startsWith("scaling")) + ((Timeline) attribute.get(ParticleAttributeValueType.TIMELINE)).setValueOfPoint(parseTimeLineIndex("scaling", line), parseFloat(line)); + else if (!line.startsWith("timelineCount") && line.startsWith("timeline") && attribute.getType() != ParticleAttributeType.TINT) + ((Timeline) attribute.get(ParticleAttributeValueType.TIMELINE)).setTimeOfPoint(parseTimeLineIndex("timeline", line), parseFloat(line)); + //TINT_TIMELINE + else if (!line.startsWith("colorsCount") && line.startsWith("colors")) { + int index = parseTimeLineIndex("colors", line); + ((TintTimeline) attribute.get(ParticleAttributeValueType.TINT_TIMELINE)).setValueOfPoint((int) (index / 3f), index % 3, parseFloat(line)); + } else if (!line.startsWith("timelineCount") && line.startsWith("timeline") && attribute.getType() == ParticleAttributeType.TINT) + ((TintTimeline) attribute.get(ParticleAttributeValueType.TINT_TIMELINE)).setTimeOfPoint(parseTimeLineIndex("timeline", line), parseFloat(line)); + //SPAWN_SHAPE + else if (line.startsWith("shape:")) + ((SpawnShape) attribute.get(ParticleAttributeValueType.SPAWN_SHAPE)).setShape(SpawnShape.Shape.byName(parseString(line))); + //OPTIONS + else if (line.startsWith("attached:")) + ((Options) attribute.get(ParticleAttributeValueType.OPTIONS)).setAttached(parseBoolean(line)); + else if (line.startsWith("continuous:")) + ((Options) attribute.get(ParticleAttributeValueType.OPTIONS)).setContinuous(parseBoolean(line)); + else if (line.startsWith("aligned:")) + ((Options) attribute.get(ParticleAttributeValueType.OPTIONS)).setAligned(parseBoolean(line)); + else if (line.startsWith("additive:")) + ((Options) attribute.get(ParticleAttributeValueType.OPTIONS)).setAdditive(parseBoolean(line)); + else if (line.startsWith("behind:")) + ((Options) attribute.get(ParticleAttributeValueType.OPTIONS)).setBehind(parseBoolean(line)); + else if (line.startsWith("premultipliedAlpha:")) + ((Options) attribute.get(ParticleAttributeValueType.OPTIONS)).setPremultipliedAlpha(parseBoolean(line)); + //IMAGE PATH + else if (attribute.getType() == ParticleAttributeType.IMAGE_PATH) + ((ImagePath) attribute.get(ParticleAttributeValueType.IMAGE_PATH)).setImagePath(line); + } + + private int parseTimeLineIndex(String start, String line) throws Exception { + String asString = line.split(start)[1].split(":")[0]; + return Integer.parseInt(asString); + } + + private float parseFloat(String line) throws Exception { + String asString = line.split(" ")[1]; + return Float.parseFloat(asString); + } + + private String parseString(String line) throws Exception { + return line.split(" ")[1]; + } + + private boolean parseBoolean(String line) throws Exception { + String asString = line.split(" ")[1]; + return Boolean.parseBoolean(asString); + } + +} diff --git a/particlelab/src/main/java/de/frajul/particlelab/entities/particles/attributes/ParticleAttributeType.java b/particlelab/src/main/java/de/frajul/particlelab/entities/particles/attributes/ParticleAttributeType.java new file mode 100644 index 0000000..d63939d --- /dev/null +++ b/particlelab/src/main/java/de/frajul/particlelab/entities/particles/attributes/ParticleAttributeType.java @@ -0,0 +1,55 @@ +package de.frajul.particlelab.entities.particles.attributes; + +import de.frajul.particlelab.entities.particles.attributes.attributeValues.ParticleAttributeValueType; + +public enum ParticleAttributeType { + NONE(""), + DELAY("Delay", ParticleAttributeValueType.RANGE), + DURATION("Duration", ParticleAttributeValueType.RANGE), + COUNT("Count", ParticleAttributeValueType.RANGE), + EMISSION("Emission", ParticleAttributeValueType.RANGE, ParticleAttributeValueType.TIMELINE), + LIFE("Life", ParticleAttributeValueType.RANGE, ParticleAttributeValueType.TIMELINE), + LIFE_OFFSET("Life Offset", ParticleAttributeValueType.RANGE, ParticleAttributeValueType.TIMELINE), + X_OFFSET("X Offset", ParticleAttributeValueType.RANGE, ParticleAttributeValueType.TIMELINE), + Y_OFFSET("Y Offset", ParticleAttributeValueType.RANGE, ParticleAttributeValueType.TIMELINE), + SPAWN_SHAPE("Spawn Shape", ParticleAttributeValueType.SPAWN_SHAPE), + SPAWN_WIDTH("Spawn Width", ParticleAttributeValueType.RANGE, ParticleAttributeValueType.TIMELINE), + SPAWN_HEIGHT("Spawn Height", ParticleAttributeValueType.RANGE, ParticleAttributeValueType.TIMELINE), + SCALE("Scale", ParticleAttributeValueType.RANGE, ParticleAttributeValueType.TIMELINE), + VELOCITY("Velocity", ParticleAttributeValueType.RANGE, ParticleAttributeValueType.TIMELINE), + ANGLE("Angle", ParticleAttributeValueType.RANGE, ParticleAttributeValueType.TIMELINE), + ROTATION("Rotation", ParticleAttributeValueType.RANGE, ParticleAttributeValueType.TIMELINE), + WIND("Wind", ParticleAttributeValueType.RANGE, ParticleAttributeValueType.TIMELINE), + GRAVITY("Gravity", ParticleAttributeValueType.RANGE, ParticleAttributeValueType.TIMELINE), + TINT("Tint", ParticleAttributeValueType.TINT_TIMELINE), + TRANSPARENCY("Transparency", ParticleAttributeValueType.RANGE, ParticleAttributeValueType.TIMELINE), + OPTIONS("Options", ParticleAttributeValueType.OPTIONS), + IMAGE_PATH("Image Path", ParticleAttributeValueType.IMAGE_PATH); + + private String name; + private ParticleAttributeValueType[] valueTypes; + + ParticleAttributeType(String name, ParticleAttributeValueType... valueTypes) { + this.name = name; + this.valueTypes = valueTypes; + } + + private String getInFileTitle() { + return "- " + name + " -"; + } + + public static ParticleAttributeType getByInFileTitle(String title) throws Exception { + for (ParticleAttributeType setting : values()) { + if (setting != NONE && setting.getInFileTitle().equals(title)) + return setting; + } + throw new Exception("Could not find ParticleAttributeType by title: " + title); + } + + public Attribute createInstance() throws Exception { + if (this == NONE) + throw new Exception("Cannot create Instance from Attribute NONE"); + return new Attribute(this, valueTypes); + } + +} \ No newline at end of file diff --git a/particlelab/src/main/java/de/frajul/particlelab/entities/particles/attributes/attributeValues/ImagePath.java b/particlelab/src/main/java/de/frajul/particlelab/entities/particles/attributes/attributeValues/ImagePath.java new file mode 100644 index 0000000..37cd812 --- /dev/null +++ b/particlelab/src/main/java/de/frajul/particlelab/entities/particles/attributes/attributeValues/ImagePath.java @@ -0,0 +1,21 @@ +package de.frajul.particlelab.entities.particles.attributes.attributeValues; + +/** + * Created by Julian on 02.08.2016. + */ +public class ImagePath extends ParticleAttributeValue { + + private String imagePath; + + public ImagePath() { + super(ParticleAttributeValueType.IMAGE_PATH); + } + + public String getImagePath() { + return imagePath; + } + + public void setImagePath(String imagePath) { + this.imagePath = imagePath; + } +} diff --git a/particlelab/src/main/java/de/frajul/particlelab/entities/particles/attributes/attributeValues/Options.java b/particlelab/src/main/java/de/frajul/particlelab/entities/particles/attributes/attributeValues/Options.java new file mode 100644 index 0000000..04e2348 --- /dev/null +++ b/particlelab/src/main/java/de/frajul/particlelab/entities/particles/attributes/attributeValues/Options.java @@ -0,0 +1,66 @@ +package de.frajul.particlelab.entities.particles.attributes.attributeValues; + +/** + * Created by Julian on 02.08.2016. + */ +public class Options extends ParticleAttributeValue { + + private boolean attached; + private boolean continuous; + private boolean aligned; + private boolean additive; + private boolean behind; + private boolean premultipliedAlpha; + + public Options() { + super(ParticleAttributeValueType.OPTIONS); + } + + public boolean isAttached() { + return attached; + } + + public void setAttached(boolean attached) { + this.attached = attached; + } + + public boolean isContinuous() { + return continuous; + } + + public void setContinuous(boolean continuous) { + this.continuous = continuous; + } + + public boolean isAligned() { + return aligned; + } + + public void setAligned(boolean aligned) { + this.aligned = aligned; + } + + public boolean isAdditive() { + return additive; + } + + public void setAdditive(boolean additive) { + this.additive = additive; + } + + public boolean isBehind() { + return behind; + } + + public void setBehind(boolean behind) { + this.behind = behind; + } + + public boolean isPremultipliedAlpha() { + return premultipliedAlpha; + } + + public void setPremultipliedAlpha(boolean premultipliedAlpha) { + this.premultipliedAlpha = premultipliedAlpha; + } +} diff --git a/particlelab/src/main/java/de/frajul/particlelab/entities/particles/attributes/attributeValues/ParticleAttributeValue.java b/particlelab/src/main/java/de/frajul/particlelab/entities/particles/attributes/attributeValues/ParticleAttributeValue.java new file mode 100644 index 0000000..85bb595 --- /dev/null +++ b/particlelab/src/main/java/de/frajul/particlelab/entities/particles/attributes/attributeValues/ParticleAttributeValue.java @@ -0,0 +1,17 @@ +package de.frajul.particlelab.entities.particles.attributes.attributeValues; + +/** + * Created by Julian on 02.08.2016. + */ +public abstract class ParticleAttributeValue { + + private ParticleAttributeValueType type; + + public ParticleAttributeValue(ParticleAttributeValueType type){ + this.type = type; + } + + public ParticleAttributeValueType getType() { + return type; + } +} diff --git a/particlelab/src/main/java/de/frajul/particlelab/entities/particles/attributes/attributeValues/ParticleAttributeValueType.java b/particlelab/src/main/java/de/frajul/particlelab/entities/particles/attributes/attributeValues/ParticleAttributeValueType.java new file mode 100644 index 0000000..b27154b --- /dev/null +++ b/particlelab/src/main/java/de/frajul/particlelab/entities/particles/attributes/attributeValues/ParticleAttributeValueType.java @@ -0,0 +1,28 @@ +package de.frajul.particlelab.entities.particles.attributes.attributeValues; + +/** + * Created by Julian on 02.08.2016. + */ +public enum ParticleAttributeValueType { + + RANGE, TIMELINE, TINT_TIMELINE, SPAWN_SHAPE, OPTIONS, IMAGE_PATH; + + public ParticleAttributeValue createInstance(){ + switch (this){ + case RANGE: + return new Range(); + case TIMELINE: + return new Timeline(); + case TINT_TIMELINE: + return new TintTimeline(); + case SPAWN_SHAPE: + return new SpawnShape(); + case OPTIONS: + return new Options(); + case IMAGE_PATH: + return new ImagePath(); + } + return null; + } + +} diff --git a/particlelab/src/main/java/de/frajul/particlelab/entities/particles/attributes/attributeValues/Range.java b/particlelab/src/main/java/de/frajul/particlelab/entities/particles/attributes/attributeValues/Range.java new file mode 100644 index 0000000..f744117 --- /dev/null +++ b/particlelab/src/main/java/de/frajul/particlelab/entities/particles/attributes/attributeValues/Range.java @@ -0,0 +1,82 @@ +package de.frajul.particlelab.entities.particles.attributes.attributeValues; + +import java.util.Random; + +/** + * Created by Julian on 02.08.2016. + */ +public class Range extends ParticleAttributeValue { + + private float lowMin; + private float lowMax; + private float highMin; + private float highMax; + + public Range() { + super(ParticleAttributeValueType.RANGE); + } + + public Range createNormalizedInstance(Random random) { + Range range = new Range(); + float high = createHighValue(random); + range.setHighMax(high); + range.setHighMin(high); + float low = createLowValue(random); + range.setLowMax(low); + range.setLowMin(low); + return range; + } + + public float createValue(Random random, float mix) { + if (mix == 1) + return createHighValue(random); + else if (mix == 0) + return createLowValue(random); + else { + float highValue = createHighValue(random); + float lowValue = createLowValue(random); + return mix * (highValue - lowValue) + lowValue; + } + } + + private float createHighValue(Random random) { + float min = highMin; + float max = highMax; + if (min == max) + return min; + return random.nextFloat() * (max - min) + min; + } + + private float createLowValue(Random random) { + float min = lowMin; + float max = lowMax; + if (min == max) + return min; + return random.nextFloat() * (max - min) + min; + } + + public void setLowMin(float lowMin) { + this.lowMin = lowMin; + } + + public void setLowMax(float lowMax) { + this.lowMax = lowMax; + } + + public void setHighMin(float highMin) { + this.highMin = highMin; + } + + public void setHighMax(float highMax) { + this.highMax = highMax; + } + + private boolean isLowDifference() { + return lowMin - lowMax != 0; + } + + private boolean isHighDifference() { + return highMin - highMax != 0; + } + +} diff --git a/particlelab/src/main/java/de/frajul/particlelab/entities/particles/attributes/attributeValues/SpawnShape.java b/particlelab/src/main/java/de/frajul/particlelab/entities/particles/attributes/attributeValues/SpawnShape.java new file mode 100644 index 0000000..1e87f72 --- /dev/null +++ b/particlelab/src/main/java/de/frajul/particlelab/entities/particles/attributes/attributeValues/SpawnShape.java @@ -0,0 +1,38 @@ +package de.frajul.particlelab.entities.particles.attributes.attributeValues; + +/** + * Created by Julian on 02.08.2016. + */ +public class SpawnShape extends ParticleAttributeValue { + + public enum Shape { + POINT("point"), SQUARE("square"); + + private String name; + + Shape(String name) { + this.name = name; + } + + public static Shape byName(String text) throws Exception{ + for(Shape shape : values()) + if(shape.name.equals(text)) + return shape; + throw new Exception("Shape with name \""+text+"\" does not exist"); + } + } + + private Shape shape; + + public SpawnShape() { + super(ParticleAttributeValueType.SPAWN_SHAPE); + } + + public Shape getShape() { + return shape; + } + + public void setShape(Shape shape) { + this.shape = shape; + } +} diff --git a/particlelab/src/main/java/de/frajul/particlelab/entities/particles/attributes/attributeValues/Timeline.java b/particlelab/src/main/java/de/frajul/particlelab/entities/particles/attributes/attributeValues/Timeline.java new file mode 100644 index 0000000..166a36b --- /dev/null +++ b/particlelab/src/main/java/de/frajul/particlelab/entities/particles/attributes/attributeValues/Timeline.java @@ -0,0 +1,52 @@ +package de.frajul.particlelab.entities.particles.attributes.attributeValues; + +import java.util.ArrayList; +import java.util.List; + +/** + * Created by Julian on 02.08.2016. + */ +public class Timeline extends ParticleAttributeValue { + + private List points = new ArrayList<>(); + + public Timeline() { + super(ParticleAttributeValueType.TIMELINE); + } + + public void setValueOfPoint(int index, float value) { + if (points.size() <= index) { + points.add(new TimelinePoint()); + } + points.get(index).setValue(value); + } + + public void setTimeOfPoint(int index, float time) { + if (points.size() <= index) { + points.add(new TimelinePoint()); + } + points.get(index).setTime(time); + } + + public float getValueAtTime(float time) { + TimelinePoint left = null, right = null; + for (TimelinePoint point : points) { + if (point.getTime() <= time) { + if (left == null || left.getTime() < point.getTime()) + left = point; + } else if (right == null || right.getTime() > point.getTime()) + right = point; + } + if (left != null) { + if (right != null) { + float leftDist = 1 - Math.abs(left.getTime() - time); + float rightDist = 1 - Math.abs(right.getTime() - time); + float totalDist = leftDist + rightDist; + return left.getValue() * (leftDist / totalDist) + right.getValue() * (rightDist / totalDist); + } + return left.getValue(); + } + return 0; + } + +} \ No newline at end of file diff --git a/particlelab/src/main/java/de/frajul/particlelab/entities/particles/attributes/attributeValues/TimelinePoint.java b/particlelab/src/main/java/de/frajul/particlelab/entities/particles/attributes/attributeValues/TimelinePoint.java new file mode 100644 index 0000000..093ee65 --- /dev/null +++ b/particlelab/src/main/java/de/frajul/particlelab/entities/particles/attributes/attributeValues/TimelinePoint.java @@ -0,0 +1,23 @@ +package de.frajul.particlelab.entities.particles.attributes.attributeValues; + +public class TimelinePoint { + + private float time, value; + + public float getTime() { + return time; + } + + public void setTime(float time) { + this.time = time; + } + + public float getValue() { + return value; + } + + public void setValue(float value) { + this.value = value; + } + +} \ No newline at end of file diff --git a/particlelab/src/main/java/de/frajul/particlelab/entities/particles/attributes/attributeValues/TimelineRange.java b/particlelab/src/main/java/de/frajul/particlelab/entities/particles/attributes/attributeValues/TimelineRange.java new file mode 100644 index 0000000..c07aea5 --- /dev/null +++ b/particlelab/src/main/java/de/frajul/particlelab/entities/particles/attributes/attributeValues/TimelineRange.java @@ -0,0 +1,34 @@ +package de.frajul.particlelab.entities.particles.attributes.attributeValues; + +import de.frajul.particlelab.entities.particles.attributes.attributeValues.Range; +import de.frajul.particlelab.entities.particles.attributes.attributeValues.Timeline; + +/** + * Created by Julian on 02.08.2016. + */ +public class TimelineRange { + + private Timeline timeline; + private Range range; + + public TimelineRange(Timeline timeline, Range range) { + this.timeline = timeline; + this.range = range; + } + + public Timeline getTimeline() { + return timeline; + } + + public void setTimeline(Timeline timeline) { + this.timeline = timeline; + } + + public Range getRange() { + return range; + } + + public void setRange(Range range) { + this.range = range; + } +} diff --git a/particlelab/src/main/java/de/frajul/particlelab/entities/particles/attributes/attributeValues/TintTimeline.java b/particlelab/src/main/java/de/frajul/particlelab/entities/particles/attributes/attributeValues/TintTimeline.java new file mode 100644 index 0000000..e4750a3 --- /dev/null +++ b/particlelab/src/main/java/de/frajul/particlelab/entities/particles/attributes/attributeValues/TintTimeline.java @@ -0,0 +1,57 @@ +package de.frajul.particlelab.entities.particles.attributes.attributeValues; + +import de.frajul.particlelab.data.Color; +import de.frajul.particlelab.main.GameLog; + +import java.util.ArrayList; +import java.util.List; + +/** + * Created by Julian on 02.08.2016. + */ +public class TintTimeline extends ParticleAttributeValue { + + private List points = new ArrayList<>(); + + public TintTimeline() { + super(ParticleAttributeValueType.TINT_TIMELINE); + } + + public void setValueOfPoint(int index, int colorIndex, float value) { + GameLog.i("Set value: index="+index+"; colorIndex="+colorIndex+"; value="+value); + if (points.size() <= index) { + points.add(new TintTimelinePoint()); + } + points.get(index).setValue(colorIndex, value); + } + + public void setTimeOfPoint(int index, float time) { + GameLog.i("Set time: index="+index+"; time="+time); + if (points.size() <= index) { + points.add(new TintTimelinePoint()); + } + points.get(index).setTime(time); + } + + public Color getValueAtTime(float time) { + TintTimelinePoint left = null, right = null; + for (TintTimelinePoint point : points) { + if (point.getTime() <= time) { + if (left == null || left.getTime() < point.getTime()) + left = point; + } else if (right == null || right.getTime() > point.getTime()) + right = point; + } + if (left != null) { + if (right != null) { + float leftDist = 1 - Math.abs(left.getTime() - time); + float rightDist = 1 - Math.abs(right.getTime() - time); + float totalDist = leftDist + rightDist; + return left.getColor().mix((leftDist / totalDist), (rightDist / totalDist), right.getColor()); + } + return left.getColor(); + } + return new Color(); + } + +} diff --git a/particlelab/src/main/java/de/frajul/particlelab/entities/particles/attributes/attributeValues/TintTimelinePoint.java b/particlelab/src/main/java/de/frajul/particlelab/entities/particles/attributes/attributeValues/TintTimelinePoint.java new file mode 100644 index 0000000..94bb10b --- /dev/null +++ b/particlelab/src/main/java/de/frajul/particlelab/entities/particles/attributes/attributeValues/TintTimelinePoint.java @@ -0,0 +1,33 @@ +package de.frajul.particlelab.entities.particles.attributes.attributeValues; + +import de.frajul.particlelab.data.Color; + +public class TintTimelinePoint { + + private float time; + private Color color; + + public float getTime() { + return time; + } + + public void setTime(float time) { + this.time = time; + } + + public Color getColor() { + return color; + } + + public void setValue(int colorIndex, float value) { + if (color == null) + color = new Color(); + if (colorIndex == 0) + color.setR(value); + else if (colorIndex == 1) + color.setG(value); + else if (colorIndex == 2) + color.setB(value); + } + +} \ No newline at end of file diff --git a/particlelab/src/main/java/de/frajul/particlelab/entities/textures/Texture.java b/particlelab/src/main/java/de/frajul/particlelab/entities/textures/Texture.java new file mode 100644 index 0000000..4ae3149 --- /dev/null +++ b/particlelab/src/main/java/de/frajul/particlelab/entities/textures/Texture.java @@ -0,0 +1,44 @@ +package de.frajul.particlelab.entities.textures; + +/** + * Created by Julian on 11.12.2015. + */ +public class Texture { + + private int id; + private int atlasWidth; + private int atlasHeight; + private int atlasIndex; + + public Texture(int id, int atlasWidth, int atlasHeight) { + this.id = id; + this.atlasWidth = atlasWidth; + this.atlasHeight = atlasHeight; + } + + public Texture(Texture other) { + this.id = other.getId(); + this.atlasWidth = other.getAtlasWidth(); + this.atlasHeight = other.getAtlasHeight(); + } + + public int getId() { + return id; + } + + public int getAtlasWidth() { + return atlasWidth; + } + + public int getAtlasHeight() { + return atlasHeight; + } + + public int getAtlasIndex() { + return atlasIndex; + } + + public void setAtlasIndex(int atlasIndex) { + this.atlasIndex = atlasIndex; + } +} diff --git a/particlelab/src/main/java/de/frajul/particlelab/entities/textures/TextureLoader.java b/particlelab/src/main/java/de/frajul/particlelab/entities/textures/TextureLoader.java new file mode 100644 index 0000000..017b22b --- /dev/null +++ b/particlelab/src/main/java/de/frajul/particlelab/entities/textures/TextureLoader.java @@ -0,0 +1,62 @@ +package de.frajul.particlelab.entities.textures; + +import android.content.Context; +import android.graphics.Bitmap; +import android.graphics.BitmapFactory; +import android.opengl.GLES20; +import android.opengl.GLUtils; + +import de.frajul.particlelab.main.GameLog; + +import java.io.InputStream; + +/** + * Created by Julian on 26.11.2015. + */ +public class TextureLoader { + + private Context context; + + public TextureLoader(Context context) { + this.context = context; + } + + public int loadTextureId(int texture, boolean isAtlas) { + Bitmap bitmap = BitmapFactory.decodeResource(context.getResources(), texture); + return loadTextureId(bitmap, isAtlas); + } + + public Texture loadTexture(String inAssetsLocation) throws Exception { + InputStream is = context.getAssets().open(inAssetsLocation); + BitmapFactory.Options options = new BitmapFactory.Options(); + options.inScaled = false; + Bitmap bitmap = BitmapFactory.decodeStream(is, null, options); + return new Texture(loadTextureId(bitmap, false), 1, 1); + } + + private int loadTextureId(Bitmap bitmap, boolean isAtlas) { + int id = genTexture(); + + GLES20.glBindTexture(GLES20.GL_TEXTURE_2D, id); + if (!isAtlas) { + GLES20.glTexParameterf(GLES20.GL_TEXTURE_2D, GLES20.GL_TEXTURE_MIN_FILTER, GLES20.GL_NEAREST); + GLES20.glTexParameterf(GLES20.GL_TEXTURE_2D, GLES20.GL_TEXTURE_MAG_FILTER, GLES20.GL_LINEAR); + } else { + GLES20.glTexParameterf(GLES20.GL_TEXTURE_2D, GLES20.GL_TEXTURE_MIN_FILTER, GLES20.GL_NEAREST); + GLES20.glTexParameterf(GLES20.GL_TEXTURE_2D, GLES20.GL_TEXTURE_MAG_FILTER, GLES20.GL_LINEAR); + } + + GLUtils.texImage2D(GLES20.GL_TEXTURE_2D, 0, bitmap, 0); + + bitmap.recycle(); + GameLog.d("Texture " + id + " successfully loaded"); + return id; + } + + private int genTexture() { + int[] idField = new int[1]; + GLES20.glGenTextures(1, idField, 0); + return idField[0]; + } + +} diff --git a/particlelab/src/main/java/de/frajul/particlelab/entities/textures/TexturePack.java b/particlelab/src/main/java/de/frajul/particlelab/entities/textures/TexturePack.java new file mode 100644 index 0000000..e2d2667 --- /dev/null +++ b/particlelab/src/main/java/de/frajul/particlelab/entities/textures/TexturePack.java @@ -0,0 +1,35 @@ +package de.frajul.particlelab.entities.textures; + +import android.content.Context; + +import de.frajul.particlelab.R; + +/** + * Created by Julian on 05.12.2015. + */ +public class TexturePack { + + private TextureLoader loader; + + public final Texture star; + public final Texture yellowParticle; + public final Texture redParticle; + + public TexturePack(Context context) { + loader = new TextureLoader(context); + star = loadTexture(R.drawable.star); + + yellowParticle = loadTexture(R.drawable.yellowparticle); + redParticle = loadTexture(R.drawable.redparticle); + } + + private Texture loadTexture(int id) { + int texId = loader.loadTextureId(id, false); + return new Texture(texId, 1, 1); + } + + public Texture loadAtlas(int id, int atlasWidth, int atlasHeight) { + int texId = loader.loadTextureId(id, true); + return new Texture(texId, atlasWidth, atlasHeight); + } +} diff --git a/particlelab/src/main/java/de/frajul/particlelab/main/GameLog.java b/particlelab/src/main/java/de/frajul/particlelab/main/GameLog.java new file mode 100644 index 0000000..050751c --- /dev/null +++ b/particlelab/src/main/java/de/frajul/particlelab/main/GameLog.java @@ -0,0 +1,44 @@ +package de.frajul.particlelab.main; + +import android.util.Log; + +/** + * Created by Julian on 23.11.2015. + */ +public class GameLog { + + private final static String TAG = "GameLog"; + public static boolean debugging = true; + + public static void i(String message) { + Log.i(TAG + getCallerInfo(), message); + } + + public static void d(String message) { + if (debugging) + Log.d(TAG + getCallerInfo(), message); + } + + public static void e(String message) { + Log.e(TAG + getCallerInfo(), message); + } + + public static void e(Throwable error) { + Log.e(TAG + getCallerInfo(), error.getMessage(), error); + } + + //Possible to get Method which called i, d, e + //Method found at stack[4] + public static void stack() { + StackTraceElement[] stack = Thread.currentThread().getStackTrace(); + Log.i(TAG + "Stack", "StackSize: " + stack.length); + for (int i = 0; i < stack.length; i++) { + Log.i(TAG + "Stack", i + ": " + stack[i]); + } + } + + private static String getCallerInfo() { + StackTraceElement[] stack = Thread.currentThread().getStackTrace(); + return "(" + stack[4].getFileName() + ", " + stack[4].getMethodName() + ", " + stack[4].getLineNumber() + ")"; + } +} diff --git a/particlelab/src/main/java/de/frajul/particlelab/main/MainActivity.java b/particlelab/src/main/java/de/frajul/particlelab/main/MainActivity.java new file mode 100644 index 0000000..b52e1e7 --- /dev/null +++ b/particlelab/src/main/java/de/frajul/particlelab/main/MainActivity.java @@ -0,0 +1,81 @@ +package de.frajul.particlelab.main; + +import android.app.Activity; +import android.app.ActivityManager; +import android.content.Context; +import android.content.pm.ConfigurationInfo; +import android.content.res.Configuration; +import android.os.Bundle; +import android.view.Window; +import android.view.WindowManager; + +import de.frajul.particlelab.entities.particles.ParticleReader; +import de.frajul.particlelab.entities.particles.ParticleSystem; +import de.frajul.particlelab.rendering.GameRenderer; +import de.frajul.particlelab.rendering.Rendering; + +/** + * Created by Julian on 02.08.2016. + */ +public class MainActivity extends Activity { + + private MyGlSurfaceView glSurfaceView; + private ParticleSystem particleSystem; + + @Override + protected void onCreate(Bundle savedInstanceState) { + try { + GameLog.d("OnCreate"); + super.onCreate(savedInstanceState); + super.requestWindowFeature(Window.FEATURE_NO_TITLE); + super.getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, + WindowManager.LayoutParams.FLAG_FULLSCREEN); + if (!hasGLES20()) + throw new Exception("OpenGL ES 2.0 not supported"); + + particleSystem = new ParticleSystem(this); + Rendering rendering = new Rendering(this, particleSystem); + glSurfaceView = new MyGlSurfaceView(this, new GameRenderer(this,rendering)); + super.setContentView(glSurfaceView); + } catch (Exception e) { + onException(e); + } + } + + public void onException(Exception e) { + GameLog.e(e); + super.finish(); + } + + @Override + protected void onPause() { + GameLog.d("OnPause"); + glSurfaceView.onPause(); + super.onPause(); + } + + @Override + protected void onResume() { + GameLog.d("OnResume"); + glSurfaceView.onResume(); + super.onResume(); + } + + @Override + protected void onDestroy() { + GameLog.d("OnDestroy"); + super.onDestroy(); + } + + @Override + public void onConfigurationChanged(Configuration newConfig) { + super.onConfigurationChanged(newConfig); + } + + private boolean hasGLES20() { + ActivityManager am = (ActivityManager) getSystemService(Context.ACTIVITY_SERVICE); + ConfigurationInfo info = am.getDeviceConfigurationInfo(); + return info.reqGlEsVersion >= 0x20000; + } + +} diff --git a/particlelab/src/main/java/de/frajul/particlelab/main/MyGlSurfaceView.java b/particlelab/src/main/java/de/frajul/particlelab/main/MyGlSurfaceView.java new file mode 100644 index 0000000..8062b48 --- /dev/null +++ b/particlelab/src/main/java/de/frajul/particlelab/main/MyGlSurfaceView.java @@ -0,0 +1,35 @@ +package de.frajul.particlelab.main; + +import android.content.Context; +import android.opengl.GLSurfaceView; + +import de.frajul.particlelab.rendering.GameRenderer; + +/** + * Created by Julian on 30.07.2016. + */ +public class MyGlSurfaceView extends GLSurfaceView { + + private boolean rendererSet; + + public MyGlSurfaceView(Context context, GameRenderer gameRenderer) throws Exception { + super(context); + super.setEGLContextClientVersion(2); + super.setRenderer(gameRenderer); + rendererSet = true; + } + + @Override + public void onResume() { + GameLog.i("SurfaceView: onResume"); + if (rendererSet) + super.onResume(); + } + + @Override + public void onPause() { + GameLog.i("SurfaceView: onPause"); + if (rendererSet) + super.onPause(); + } +} diff --git a/particlelab/src/main/java/de/frajul/particlelab/main/Scene.java b/particlelab/src/main/java/de/frajul/particlelab/main/Scene.java new file mode 100644 index 0000000..8247b3a --- /dev/null +++ b/particlelab/src/main/java/de/frajul/particlelab/main/Scene.java @@ -0,0 +1,69 @@ +package de.frajul.particlelab.main; + +import android.content.Context; + +import de.frajul.particlelab.data.Vector; +import de.frajul.particlelab.entities.Entity; +import de.frajul.particlelab.entities.particles.ParticleSource; +import de.frajul.particlelab.entities.particles.ParticleSystem; +import de.frajul.particlelab.entities.textures.TexturePack; +import de.frajul.particlelab.rendering.Timer; + +import java.util.ArrayList; +import java.util.Iterator; + +/** + * Created by Julian on 20.07.2016. + */ +public class Scene extends ArrayList { + + public float cameraX; + + private Vector screenSize; + + private ParticleSystem particleSystem; + private TexturePack textures; + + public Scene(Context context, TexturePack texturePack, ParticleSystem particleSystem) { + this.particleSystem = particleSystem; + setTexturePack(texturePack); + new ParticleSource(new Vector(0, 0), particleSystem.firework).start(); + } + + public void setTexturePack(TexturePack texturePack) { + this.textures = texturePack; + + } + + public void update(Timer timer) { + Iterator iterator = super.iterator(); + while (iterator.hasNext()) { + Entity entity = iterator.next(); + Vector movement = entity.getMovement(); + Vector finalMovement = new Vector(movement).mul(timer.getFrameTime()); + entity.move(finalMovement); + if (entity.getRightEdge() - cameraX < -3f) { + iterator.remove(); + super.remove(entity); + } + } + } + + public Vector calcWorldFromScreenCoords(float screenX, float screenY) throws Exception { + if (screenSize == null) + throw new Exception("ScreenSize not set"); + float glCoordWidth = (2f * screenSize.x / screenSize.y); + float x = ((screenX / screenSize.x) * 2f - 1f) * glCoordWidth / 2; + x += cameraX; + float y = -((screenY / screenSize.y) * 2f - 1f); + return new Vector(x, y); + } + + public void setScreenSize(Vector screenSize) { + this.screenSize = screenSize; + } + + public ParticleSystem getParticleSystem() { + return particleSystem; + } +} diff --git a/particlelab/src/main/java/de/frajul/particlelab/rendering/GameRenderer.java b/particlelab/src/main/java/de/frajul/particlelab/rendering/GameRenderer.java new file mode 100644 index 0000000..90416b0 --- /dev/null +++ b/particlelab/src/main/java/de/frajul/particlelab/rendering/GameRenderer.java @@ -0,0 +1,157 @@ +package de.frajul.particlelab.rendering; + +import android.content.Context; +import android.opengl.GLES20; +import android.opengl.GLSurfaceView; + +import de.frajul.particlelab.data.Color; +import de.frajul.particlelab.entities.Entity; +import de.frajul.particlelab.entities.particles.ParticleEffect; +import de.frajul.particlelab.entities.particles.ParticleSource; +import de.frajul.particlelab.entities.particles.ParticleSystem; +import de.frajul.particlelab.entities.textures.TexturePack; +import de.frajul.particlelab.main.GameLog; +import de.frajul.particlelab.main.Scene; + +import javax.microedition.khronos.egl.EGLConfig; +import javax.microedition.khronos.opengles.GL10; + +/** + * Created by Julian on 22.11.2015. + */ +public class GameRenderer implements GLSurfaceView.Renderer { + + private Rendering rendering; + private MatrixCreator matrixCreator; + private boolean additiveBlending; + + private Color emptyColor; + private Context context; + private Quad quad; + //GL Context + private ShaderProgram shaderProgram; + private TexturePack texturePack; + private Timer timer; + + public GameRenderer(Context context, Rendering rendering) { + this.context = context; + this.rendering = rendering; + emptyColor = new Color(-1, -1, -1); + matrixCreator = new MatrixCreator(); + quad = new Quad(); + } + + @Override + public void onSurfaceCreated(GL10 gl, EGLConfig config) { + GameLog.d("onSurfaceCreated"); + GLES20.glClearColor(0, 0, 0, 1.0f); + gl.glEnable(GL10.GL_BLEND); + gl.glBlendFunc(GL10.GL_SRC_ALPHA, GL10.GL_ONE_MINUS_SRC_ALPHA); + try { + shaderProgram = new ShaderProgram(context); + texturePack = new TexturePack(context); + timer = new Timer(); + } catch (Exception e) { + rendering.onException(e); + } + rendering.initiate(texturePack, timer); + } + + @Override + public void onSurfaceChanged(GL10 gl, int width, int height) { + GameLog.d("onSurfaceChanged: width=" + width + ", height=" + height); + GLES20.glViewport(0, 0, width, height); + matrixCreator.setMVPMSize(width, height); + rendering.setScreenSize(width, height); + } + + @Override + public void onDrawFrame(GL10 gl) { + timer.update(); + rendering.update(); + GLES20.glClear(GLES20.GL_COLOR_BUFFER_BIT); + + Scene scene = rendering.getScene(); + ParticleSystem particleSystem = scene.getParticleSystem(); + +// GLES20.glClearColor(0, 0, 0, 0.0f); +// GLES20.glClear(GLES20.GL_COLOR_BUFFER_BIT); +// +// shaderProgram.start(); +// shaderProgram.loadMVPMatrix(matrixCreator, scene.cameraX); +// synchronized (scene.getParticleSystem().getEffects()) { +// for (ParticleEffect effect : scene.getParticleSystem().getEffects()) { +// gl.glActiveTexture(GL10.GL_TEXTURE0); +// gl.glBindTexture(GL10.GL_TEXTURE_2D, effect.getTexture().getId()); +// shaderProgram.loadTextureAtlasInfos(effect.getTexture()); +// +// switchAdditiveBlending(gl, effect.getOptions().isAdditive()); +// synchronized (effect.getSources()) { +// for (ParticleSource source : effect.getSources()) { +// source.getActiveParticleLock().lock(); +// for (Entity particle : source.getActiveParticles()) +// renderParticle(gl, particle); +// source.getActiveParticleLock().unlock(); +// } +// } +// } +// } +// disableAdditiveBlending(gl); +// +// shaderProgram.stop(); + + shaderProgram.start(); + shaderProgram.loadMVPMatrix(matrixCreator, scene.cameraX); + for (ParticleEffect effect : particleSystem.getEffects()) { + gl.glActiveTexture(GL10.GL_TEXTURE0); + gl.glBindTexture(GL10.GL_TEXTURE_2D, effect.getTexture().getId()); + shaderProgram.loadTextureAtlasInfos(effect.getTexture()); + + if (effect.getOptions().isAdditive() && !additiveBlending) + enableAdditiveBlending(gl); + if (!effect.getOptions().isAdditive() && additiveBlending) + disableAdditiveBlending(gl); + for (ParticleSource source : effect.getSources()) { + source.getActiveParticleLock().lock(); + for (Entity particle : source.getActiveParticles()) + renderParticle(gl, particle); + source.getActiveParticleLock().unlock(); + } + } + shaderProgram.stop(); + } + + private void switchAdditiveBlending(GL10 gl, boolean effectAdditive) { + if (effectAdditive && !additiveBlending) + enableAdditiveBlending(gl); + if (effectAdditive && additiveBlending) + disableAdditiveBlending(gl); + } + + private void renderEntity(GL10 gl, Entity entity) { + gl.glActiveTexture(GL10.GL_TEXTURE0); + gl.glBindTexture(GL10.GL_TEXTURE_2D, entity.getTexture().getId()); + shaderProgram.loadTransformationMatrix(matrixCreator, entity); + shaderProgram.loadAlpha(entity.getAlpha()); + shaderProgram.loadTextureAtlasInfos(entity.getTexture()); + shaderProgram.loadColor(entity.getColor() != null ? entity.getColor() : emptyColor); + quad.draw(); + } + + private void renderParticle(GL10 gl, Entity entity) { + shaderProgram.loadTransformationMatrix(matrixCreator, entity); + shaderProgram.loadAlpha(entity.getAlpha()); + shaderProgram.loadColor(entity.getColor() != null ? entity.getColor() : emptyColor); + quad.draw(); + } + + private void enableAdditiveBlending(GL10 gl) { + additiveBlending = true; + gl.glBlendFunc(GL10.GL_SRC_ALPHA, GL10.GL_ONE); + } + + private void disableAdditiveBlending(GL10 gl) { + additiveBlending = false; + gl.glBlendFunc(GL10.GL_SRC_ALPHA, GL10.GL_ONE_MINUS_SRC_ALPHA); + } +} diff --git a/particlelab/src/main/java/de/frajul/particlelab/rendering/Lock.java b/particlelab/src/main/java/de/frajul/particlelab/rendering/Lock.java new file mode 100644 index 0000000..d70058d --- /dev/null +++ b/particlelab/src/main/java/de/frajul/particlelab/rendering/Lock.java @@ -0,0 +1,22 @@ +package de.frajul.particlelab.rendering; + +public class Lock { + + private boolean isLocked = false; + + public synchronized void lock() { + while (isLocked) { + try { + wait(); + } catch (Exception e) { + e.printStackTrace(); + } + } + isLocked = true; + } + + public synchronized void unlock() { + isLocked = false; + notify(); + } +} \ No newline at end of file diff --git a/particlelab/src/main/java/de/frajul/particlelab/rendering/MatrixCreator.java b/particlelab/src/main/java/de/frajul/particlelab/rendering/MatrixCreator.java new file mode 100644 index 0000000..874d5c0 --- /dev/null +++ b/particlelab/src/main/java/de/frajul/particlelab/rendering/MatrixCreator.java @@ -0,0 +1,49 @@ +package de.frajul.particlelab.rendering; + +import android.opengl.Matrix; + +import de.frajul.particlelab.entities.Entity; +import de.frajul.particlelab.data.Vector; + +/** + * Created by Julian on 23.11.2015. + */ +public class MatrixCreator { + + private float width, height; + + public void setMVPMSize(float width, float height) { + this.width = width; + this.height = height; + } + + public float[] createModelViewProjectionMatrix(float cameraX) { + float[] mvpMatrix = new float[16]; + float[] projectionMatrix = new float[16]; + float[] viewMatrix = new float[16]; + + float ratio = width / height; + Matrix.frustumM(projectionMatrix, 0, -ratio + cameraX, ratio + cameraX, -1, 1, 1, 2); + Matrix.setLookAtM(viewMatrix, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0); + Matrix.multiplyMM(mvpMatrix, 0, projectionMatrix, 0, viewMatrix, 0); + return mvpMatrix; + } + + public float[] createTransformationMatrix(Entity entity) { + float width = entity.getWidth(); + float height = entity.getHeight(); + float rotation = entity.getRotation(); + Vector position = entity.getPosition(); + return createTransformationMatrix(width, height, rotation, position); + } + + public float[] createTransformationMatrix(float width, float height, float rotation, Vector position) { + float[] transformationMatrix = new float[16]; + Matrix.setIdentityM(transformationMatrix, 0); + Matrix.translateM(transformationMatrix, 0, position.x, position.y, 0); + Matrix.rotateM(transformationMatrix, 0, rotation, 0, 0, 1); + Matrix.scaleM(transformationMatrix, 0, width * .5f, height * .5f, 0); + return transformationMatrix; + } + +} diff --git a/particlelab/src/main/java/de/frajul/particlelab/rendering/Quad.java b/particlelab/src/main/java/de/frajul/particlelab/rendering/Quad.java new file mode 100644 index 0000000..04ad520 --- /dev/null +++ b/particlelab/src/main/java/de/frajul/particlelab/rendering/Quad.java @@ -0,0 +1,49 @@ +package de.frajul.particlelab.rendering; + +import android.opengl.GLES20; + +import java.nio.ByteBuffer; +import java.nio.ByteOrder; +import java.nio.FloatBuffer; + +/** + * Created by Julian on 26.11.2015. + */ +public class Quad { + + private FloatBuffer vertexBuffer; + private FloatBuffer textureBuffer; + + private float vertices[] = {1.0f, 1.0f, -1.0f, -1.0f, 1.0f, -1.0f, + 1.0f, 1.0f, -1.0f, 1.0f, -1.0f, -1.0f}; + + private float textures[] = {1.0f, 0.0f, 0.0f, 1.0f, 1.0f, 1.0f, + 1.0f, 0.0f, 0.0f, 0.0f, 0.0f, 1.0f}; + + public Quad() { + vertexBuffer = createEmptyFloatBuffer(); + vertexBuffer.put(vertices); + vertexBuffer.position(0); + + textureBuffer = createEmptyFloatBuffer(); + textureBuffer.put(textures); + textureBuffer.position(0); + } + + private FloatBuffer createEmptyFloatBuffer() { + ByteBuffer bb = ByteBuffer.allocateDirect(vertices.length * 4); + bb.order(ByteOrder.nativeOrder()); + return bb.asFloatBuffer(); + } + + public void draw() { + GLES20.glEnableVertexAttribArray(0); + GLES20.glEnableVertexAttribArray(1); + GLES20.glVertexAttribPointer(0, 2, GLES20.GL_FLOAT, false, 0, vertexBuffer); + GLES20.glVertexAttribPointer(1, 2, GLES20.GL_FLOAT, false, 0, textureBuffer); + GLES20.glDrawArrays(GLES20.GL_TRIANGLES, 0, vertices.length / 2); + GLES20.glDisableVertexAttribArray(1); + GLES20.glDisableVertexAttribArray(0); + } + +} diff --git a/particlelab/src/main/java/de/frajul/particlelab/rendering/Rendering.java b/particlelab/src/main/java/de/frajul/particlelab/rendering/Rendering.java new file mode 100644 index 0000000..3110c5d --- /dev/null +++ b/particlelab/src/main/java/de/frajul/particlelab/rendering/Rendering.java @@ -0,0 +1,57 @@ +package de.frajul.particlelab.rendering; + +import de.frajul.particlelab.entities.particles.ParticleSystem; +import de.frajul.particlelab.entities.textures.TexturePack; +import de.frajul.particlelab.main.MainActivity; +import de.frajul.particlelab.main.Scene; +import de.frajul.particlelab.data.Vector; + +/** + * Created by Julian on 26.11.2015. + */ +public class Rendering { + + private MainActivity mainActivity; + private ParticleSystem particleSystem; + private Timer timer; + private Scene scene; + private boolean alreadyInitiated = false; + + public Rendering(MainActivity mainActivity, ParticleSystem particleSystem) { + this.mainActivity = mainActivity; + this.particleSystem = particleSystem; + } + + public void initiate(TexturePack texturePack, Timer timer) { + this.timer = timer; + if(!alreadyInitiated) + scene = new Scene(mainActivity, texturePack, particleSystem); + else { + scene.setTexturePack(texturePack); + } + try { + particleSystem.loadTextures(); + }catch (Exception e){ + onException(e); + } + alreadyInitiated = true; + } + + public void update() { + particleSystem.update(timer); + scene.update(timer); + } + + public void setScreenSize(int width, int height) { + if (scene != null) + scene.setScreenSize(new Vector(width, height)); + } + + public void onException(Exception e) { + mainActivity.onException(e); + } + + public Scene getScene() { + return scene; + } +} diff --git a/particlelab/src/main/java/de/frajul/particlelab/rendering/ShaderProgram.java b/particlelab/src/main/java/de/frajul/particlelab/rendering/ShaderProgram.java new file mode 100644 index 0000000..7d115db --- /dev/null +++ b/particlelab/src/main/java/de/frajul/particlelab/rendering/ShaderProgram.java @@ -0,0 +1,138 @@ +package de.frajul.particlelab.rendering; + +import android.content.Context; +import android.opengl.GLES20; + +import de.frajul.particlelab.entities.Entity; +import de.frajul.particlelab.data.Color; +import de.frajul.particlelab.entities.textures.Texture; +import de.frajul.particlelab.main.GameLog; + +import java.io.BufferedReader; +import java.io.InputStream; +import java.io.InputStreamReader; + +/** + * Created by Julian on 23.11.2015. + */ +public class ShaderProgram { + + private Context context; + private int vertexShader, fragmentShader, program; + private int location_mvpMatrix; + private int location_transformationMatrix; + private int location_alpha; + private int location_texAtlasSize; + private int location_texAtlasIndex; + private int location_isTerrain; + private int location_color; + + public ShaderProgram(Context context) throws Exception { + this.context = context; + vertexShader = loadShader(GLES20.GL_VERTEX_SHADER, "vertexShader.glsl"); + fragmentShader = loadShader(GLES20.GL_FRAGMENT_SHADER, "fragmentShader.glsl"); + program = GLES20.glCreateProgram(); + GLES20.glAttachShader(program, vertexShader); + GLES20.glAttachShader(program, fragmentShader); + GLES20.glLinkProgram(program); + int[] linkStatus = new int[1]; + GLES20.glGetProgramiv(program, GLES20.GL_LINK_STATUS, linkStatus, 0); + if (linkStatus[0] == GLES20.GL_FALSE) { + GLES20.glDeleteProgram(program); + throw new Exception("Could not link program: " + + GLES20.glGetProgramInfoLog(program)); + } + + bindAttribLocations(); + loadUniformLocations(); + GameLog.d("ShaderProgram successfully loaded"); + } + + private void loadUniformLocations() { + location_mvpMatrix = GLES20.glGetUniformLocation(program, "mvpMatrix"); + location_transformationMatrix = GLES20.glGetUniformLocation(program, "transformationMatrix"); + location_alpha = GLES20.glGetUniformLocation(program, "alpha"); + location_texAtlasSize = GLES20.glGetUniformLocation(program, "texAtlasSize"); + location_texAtlasIndex = GLES20.glGetUniformLocation(program, "texAtlasIndex"); + location_isTerrain = GLES20.glGetUniformLocation(program, "isTerrain"); + location_color = GLES20.glGetUniformLocation(program, "color"); + } + + private void bindAttribLocations() { + GLES20.glBindAttribLocation(program, 0, "position"); + GLES20.glBindAttribLocation(program, 1, "texCoords"); + } + + public void start() { + GLES20.glUseProgram(program); + } + + public void stop() { + GLES20.glUseProgram(0); + } + + public void loadMVPMatrix(MatrixCreator matrixCreator, float cameraX) { + float[] mvpMatrix = matrixCreator.createModelViewProjectionMatrix(cameraX); + GLES20.glUniformMatrix4fv(location_mvpMatrix, 1, false, mvpMatrix, 0); + } + + public void loadTransformationMatrix(MatrixCreator matrixCreator, Entity entity) { + float[] transformationMatrix = matrixCreator.createTransformationMatrix(entity); + GLES20.glUniformMatrix4fv(location_transformationMatrix, 1, false, transformationMatrix, 0); + } + + public void loadColor(Color color){ + GLES20.glUniform3f(location_color, color.getR(), color.getG(), color.getB()); + } + + public void loadAlpha(float alpha) { + GLES20.glUniform1f(location_alpha, alpha); + } + + public void loadTextureAtlasInfos(Texture texture) { + GLES20.glUniform2f(location_texAtlasSize, texture.getAtlasWidth(), texture.getAtlasHeight()); + GLES20.glUniform1f(location_texAtlasIndex, texture.getAtlasIndex()); + } + + public void loadIsTerrain(boolean isTerrain) { + float fIsTerrain = isTerrain ? 1 : 0; + GLES20.glUniform1f(location_isTerrain, fIsTerrain); + } + + public void cleanUp() { + stop(); + GLES20.glDeleteShader(vertexShader); + GLES20.glDeleteShader(fragmentShader); + GLES20.glDeleteProgram(program); + GameLog.d("Shader cleaned"); + } + + private int loadShader(int type, String shaderName) throws Exception { + try { + InputStream is = context.getAssets().open(shaderName); + InputStreamReader isReader = new InputStreamReader(is); + BufferedReader reader = new BufferedReader(isReader); + StringBuilder source = new StringBuilder(); + String line; + while ((line = reader.readLine()) != null) + source.append(line); + + int shader = GLES20.glCreateShader(type); + GLES20.glShaderSource(shader, source.toString()); + GLES20.glCompileShader(shader); + + int[] compiled = new int[1]; + GLES20.glGetShaderiv(shader, GLES20.GL_COMPILE_STATUS, compiled, 0); + if (compiled[0] == GLES20.GL_FALSE) { + GLES20.glDeleteShader(shader); + throw new Exception("Could not compile shader \"" + shaderName + "\": " + + GLES20.glGetShaderInfoLog(shader)); + } + GameLog.d("Shader \"" + shaderName + "\" successfully loaded"); + return shader; + } catch (Exception e) { + throw new Exception("Could not load Shader \"" + shaderName + "\"", e); + } + } + +} diff --git a/particlelab/src/main/java/de/frajul/particlelab/rendering/Timer.java b/particlelab/src/main/java/de/frajul/particlelab/rendering/Timer.java new file mode 100644 index 0000000..7258acf --- /dev/null +++ b/particlelab/src/main/java/de/frajul/particlelab/rendering/Timer.java @@ -0,0 +1,46 @@ +package de.frajul.particlelab.rendering; + +/** + * Created by Julian on 22.11.2015. + */ +public class Timer { + + private long lastFpsTime; + private int fpsCounter; + private int fps; + + private long lastTime; + private long delta; + + + public Timer() { + lastTime = System.currentTimeMillis(); + lastFpsTime = lastTime; + } + + public void update() { + long currentTime = System.currentTimeMillis(); + delta = currentTime - lastTime; + lastTime = currentTime; + + fpsCounter++; + if (currentTime - lastFpsTime > 1000) { + fps = fpsCounter; + lastFpsTime += 1000; + fpsCounter = 0; + } + } + + public float getFrameTime() { + return delta; + } + + public int getFps() { + return fps; + } + + public long getCurrentTime() { + return System.currentTimeMillis(); + } + +}