From 6516a139cf7db6a33938a9ffadb8d67e54181402 Mon Sep 17 00:00:00 2001 From: julian Date: Fri, 18 Sep 2020 10:54:19 +0200 Subject: [PATCH] Changes since migrating to GitTea. --- .gitignore | 24 +- app/build.gradle | 88 +- .../debug/shader/entityFragmentShader.glsl | 70 +- .../debug/shader/entityVertexShader.glsl | 44 +- .../debug/shader/particleFragmentShader.glsl | 52 +- .../debug/shader/simpleFragmentShader.glsl | 22 +- .../debug/shader/simpleVertexShader.glsl | 22 +- app/proguard-rules.pro | 34 +- .../frajul/endlessroll/ApplicationTest.java | 38 +- app/src/main/AndroidManifest.xml | 70 +- .../assets/shader/entityFragmentShader.glsl | 82 +- .../assets/shader/entityVertexShader.glsl | 44 +- .../main/assets/shader/guiFragmentShader.glsl | 104 +-- .../main/assets/shader/guiVertexShader.glsl | 28 +- .../assets/shader/obstacleFragmentShader.glsl | 228 ++--- .../assets/shader/particleFragmentShader.glsl | 52 +- .../assets/shader/simpleFragmentShader.glsl | 22 +- .../assets/shader/simpleVertexShader.glsl | 22 +- .../assets/shader/terrainFragmentShader.glsl | 90 +- .../de/frajul/endlessroll/data/Color3f.java | 148 ++-- .../de/frajul/endlessroll/data/Color4f.java | 130 +-- .../data/SynchronizedArrayList.java | 308 +++---- .../de/frajul/endlessroll/data/Vector.java | 226 ++--- .../endlessroll/entities/AnimatedEntity.java | 64 +- .../endlessroll/entities/Animation.java | 124 +-- .../endlessroll/entities/Background.java | 110 +-- .../endlessroll/entities/BackgroundLayer.java | 108 +-- .../endlessroll/entities/DestroyEffect.java | 92 +- .../frajul/endlessroll/entities/Entity.java | 276 +++--- .../de/frajul/endlessroll/entities/Goal.java | 46 +- .../frajul/endlessroll/entities/Obstacle.java | 236 ++--- .../frajul/endlessroll/entities/Player.java | 298 +++---- .../frajul/endlessroll/entities/Vertex.java | 102 +-- .../entities/collectables/Collectables.java | 148 ++-- .../entities/collectables/Energy.java | 48 +- .../entities/collectables/Star.java | 56 +- .../CircleTriangleCollisionDetector.java | 164 ++-- .../entities/collision/CollisionDetector.java | 712 +++++++-------- .../entities/collision/CollisionManager.java | 218 ++--- .../endlessroll/entities/collision/Edge.java | 22 +- .../collisionData/EntityCollisionData.java | 74 +- .../collisionData/ObstacleCollisionData.java | 60 +- .../collisionData/PlayerCollisionData.java | 156 ++-- .../collisionData/ToolCollisionData.java | 64 +- .../entities/collision/geometry/Circle.java | 124 +-- .../entities/collision/geometry/Geometry.java | 46 +- .../entities/collision/geometry/Quad.java | 140 +-- .../entities/collision/geometry/Triangle.java | 76 +- .../endlessroll/entities/guis/Countdown.java | 202 ++--- .../frajul/endlessroll/entities/guis/Gui.java | 62 +- .../entities/guis/Progressbar.java | 96 +-- .../endlessroll/entities/guis/ToolButton.java | 314 +++---- .../guis/ToolButtonAnimationLayer.java | 116 +-- .../entities/guis/ToolButtonBar.java | 202 ++--- .../entities/particles/Firework.java | 100 +-- .../entities/particles/Particle.java | 236 ++--- .../entities/particles/ParticleData.java | 154 ++-- .../entities/particles/ParticleEffect.java | 472 +++++----- .../entities/particles/ParticleReader.java | 340 ++++---- .../entities/particles/ParticleSource.java | 366 ++++---- .../entities/particles/ParticleSystem.java | 156 ++-- .../particles/attributes/Attribute.java | 80 +- .../attributes/AttributeValueReader.java | 168 ++-- .../attributes/ParticleAttributeType.java | 122 +-- .../attributes/attributeValues/ImagePath.java | 56 +- .../attributes/attributeValues/Options.java | 146 ++-- .../ParticleAttributeValue.java | 48 +- .../ParticleAttributeValueType.java | 70 +- .../attributes/attributeValues/Range.java | 178 ++-- .../attributeValues/SpawnShape.java | 90 +- .../attributes/attributeValues/Timeline.java | 120 +-- .../attributeValues/TimelinePoint.java | 58 +- .../attributeValues/TimelineRange.java | 76 +- .../attributeValues/TintTimeline.java | 128 +-- .../attributeValues/TintTimelinePoint.java | 78 +- .../entities/shapes/CollectEnergyTask.java | 76 +- .../entities/shapes/CollectStarTask.java | 76 +- .../entities/shapes/CompleteWorldTask.java | 68 +- .../entities/shapes/EmptyTask.java | 68 +- .../entities/shapes/PlayerShape.java | 198 ++--- .../PlayerShapeButtonOnClickListener.java | 40 +- .../endlessroll/entities/shapes/Task.java | 76 +- .../entities/textures/Texture.java | 86 +- .../entities/textures/TextureLoader.java | 132 +-- .../entities/textures/TexturePack.java | 126 +-- .../entities/tileLists/Ceiling.java | 38 +- .../entities/tileLists/Terrain.java | 38 +- .../endlessroll/entities/tileLists/Tile.java | 92 +- .../entities/tileLists/TileList.java | 212 ++--- .../endlessroll/entities/tools/Bomb.java | 160 ++-- .../endlessroll/entities/tools/Magnet.java | 168 ++-- .../entities/tools/PowerMushroom.java | 94 +- .../endlessroll/entities/tools/Ramp.java | 142 +-- .../endlessroll/entities/tools/Spring.java | 118 +-- .../endlessroll/entities/tools/Stasis.java | 206 ++--- .../endlessroll/entities/tools/Tool.java | 128 +-- .../endlessroll/entities/tools/ToolSlot.java | 98 +-- .../endlessroll/entities/tools/ToolType.java | 388 ++++----- .../entities/tools/ToolUpgrade.java | 68 +- .../entities/tools/ToolUpgradeType.java | 36 +- .../de/frajul/endlessroll/levels/Gap.java | 58 +- .../de/frajul/endlessroll/levels/Level.java | 308 +++---- .../endlessroll/levels/LevelManager.java | 276 +++--- .../frajul/endlessroll/levels/LevelPack.java | 254 +++--- .../endlessroll/levels/MoveComponent.java | 188 ++-- .../endlessroll/levels/ObstacleData.java | 200 ++--- .../endlessroll/levels/PositionData.java | 60 +- .../frajul/endlessroll/levels/TileData.java | 52 +- .../endlessroll/levels/worlds/World.java | 186 ++-- .../endlessroll/main/DataStorageHandler.java | 270 +++--- .../endlessroll/main/ExceptionHandler.java | 34 +- .../frajul/endlessroll/main/GameActivity.java | 698 +++++++-------- .../frajul/endlessroll/main/GameHandler.java | 60 +- .../de/frajul/endlessroll/main/GameLog.java | 102 +-- .../endlessroll/main/MyGlSurfaceView.java | 108 +-- .../main/ads/AdLoadingListener.java | 32 +- .../main/ads/CustomAdListener.java | 60 +- .../frajul/endlessroll/main/game/Camera.java | 104 +-- .../de/frajul/endlessroll/main/game/Game.java | 810 +++++++++--------- .../endlessroll/main/game/GameScene.java | 338 ++++---- .../endlessroll/main/game/GameState.java | 34 +- .../frajul/endlessroll/main/game/Scene.java | 462 +++++----- .../endlessroll/main/game/StartScene.java | 108 +-- .../main/game/TestScreenScene.java | 88 +- .../frajul/endlessroll/main/game/Timer.java | 106 +-- .../endlessroll/main/physics/Physics.java | 404 ++++----- .../endlessroll/main/screens/GLScreen.java | 62 +- .../main/screens/GLTestScreen.java | 82 +- .../endlessroll/main/screens/GameScreen.java | 216 ++--- .../main/screens/LevelsScreen.java | 262 +++--- .../main/screens/PlayerShapeShopScreen.java | 192 ++--- .../main/screens/PreStartScreen.java | 74 +- .../endlessroll/main/screens/Screen.java | 184 ++-- .../main/screens/ScreenFlipper.java | 124 +-- .../main/screens/SettingsScreen.java | 232 ++--- .../endlessroll/main/screens/StartScreen.java | 188 ++-- .../main/screens/StartScreenRendering.java | 118 +-- .../main/screens/TestScreenRendering.java | 124 +-- .../main/screens/ToolShopScreen.java | 434 +++++----- .../main/screens/WorldsScreen.java | 140 +-- .../endlessroll/main/tutorial/BreakPoint.java | 108 +-- .../main/tutorial/ToolShopTutorial.java | 202 ++--- .../endlessroll/main/tutorial/Tutorial.java | 134 +-- .../main/tutorial/TutorialManager.java | 198 ++--- .../main/tutorial/TutorialView.java | 184 ++-- .../de/frajul/endlessroll/rendering/Fbo.java | 108 +-- .../de/frajul/endlessroll/rendering/Lock.java | 56 +- .../endlessroll/rendering/MatrixCreator.java | 138 +-- .../de/frajul/endlessroll/rendering/Quad.java | 112 +-- .../endlessroll/rendering/Rendering.java | 112 +-- .../rendering/renderer/GameRenderer.java | 554 ++++++------ .../rendering/renderer/ParticleRenderer.java | 224 ++--- .../rendering/shader/EntityShader.java | 158 ++-- .../rendering/shader/GuiShader.java | 148 ++-- .../rendering/shader/ObstacleShader.java | 180 ++-- .../rendering/shader/ParticleShader.java | 116 +-- .../rendering/shader/ShaderProgram.java | 192 ++--- .../rendering/shader/SimpleShader.java | 48 +- .../rendering/shader/TerrainShader.java | 114 +-- .../de/frajul/endlessroll/sounds/Music.java | 180 ++-- .../de/frajul/endlessroll/sounds/Sound.java | 124 +-- .../endlessroll/sounds/SoundManager.java | 408 ++++----- .../endlessroll/sounds/SoundStream.java | 88 +- .../sqlDatabase/DatabaseAdapter.java | 190 ++-- .../endlessroll/sqlDatabase/MyDatabase.java | 296 +++---- .../endlessroll/sqlDatabase/SQLTable.java | 88 +- .../sqlDatabase/SQLTableColumn.java | 108 +-- .../sqlDatabase/SQLTablePrimaryKeyColumn.java | 56 +- .../endlessroll/user/LevelUpBounties.java | 146 ++-- .../endlessroll/user/ToolSlotSettings.java | 112 +-- .../java/de/frajul/endlessroll/user/User.java | 286 +++---- .../endlessroll/views/BombErrorMessage.java | 126 +-- .../endlessroll/views/BountyMessage.java | 192 ++--- .../endlessroll/views/ConfirmDialog.java | 144 ++-- .../endlessroll/views/CreditsDialog.java | 226 ++--- .../endlessroll/views/DevToolsDialog.java | 212 ++--- .../endlessroll/views/GameOverMessage.java | 172 ++-- .../frajul/endlessroll/views/GoalMessage.java | 244 +++--- .../views/GoalMessageLevelButton.java | 232 ++--- ...GoalMessageLevelButtonOnClickListener.java | 36 +- .../frajul/endlessroll/views/LevelButton.java | 182 ++-- .../views/LevelButtonOnClickListener.java | 36 +- .../endlessroll/views/LevelupMessage.java | 170 ++-- .../endlessroll/views/PlayerShapeButton.java | 152 ++-- .../frajul/endlessroll/views/PriceButton.java | 134 +-- .../endlessroll/views/ShapeInspector.java | 106 +-- .../views/ShapeInspectorCheckbox.java | 114 +-- .../frajul/endlessroll/views/ShortMenu.java | 254 +++--- .../views/TaskCompletedMessage.java | 166 ++-- .../endlessroll/views/ToolInspector.java | 216 ++--- .../endlessroll/views/ToolOfferSlot.java | 216 ++--- .../de/frajul/endlessroll/views/TopBar.java | 314 +++---- .../frajul/endlessroll/views/ViewManager.java | 358 ++++---- .../frajul/endlessroll/views/WorldButton.java | 186 ++-- .../views/WorldButtonOnClickListener.java | 36 +- app/src/main/res/anim/decrease.xml | 48 +- app/src/main/res/anim/fade_in.xml | 28 +- .../main/res/anim/fade_out_accelerating.xml | 30 +- app/src/main/res/anim/pulse.xml | 38 +- app/src/main/res/anim/rotate.xml | 38 +- .../main/res/anim/shape_button_rotation.xml | 36 +- app/src/main/res/anim/slide_in_left.xml | 36 +- app/src/main/res/anim/slide_in_right.xml | 36 +- app/src/main/res/anim/slide_in_top.xml | 36 +- .../drawable/xml_background_bountymessage.xml | 54 +- .../drawable/xml_background_dialog_button.xml | 48 +- .../xml_background_exit_confirm_dialog.xml | 34 +- ...ml_background_game_over_message_button.xml | 48 +- .../drawable/xml_background_levelbutton.xml | 54 +- .../res/drawable/xml_background_toolslot.xml | 26 +- .../res/drawable/xml_background_topbar.xml | 42 +- .../xml_background_tutorialimageview.xml | 28 +- .../xml_background_tutorialtextview.xml | 42 +- .../drawable/xml_background_worldbutton.xml | 54 +- .../drawable/xml_layers_levelprogressbar.xml | 50 +- .../res/drawable/xml_selector_backbutton.xml | 30 +- .../res/drawable/xml_selector_gamebutton.xml | 66 +- .../main/res/drawable/xml_selector_music.xml | 32 +- .../res/drawable/xml_selector_pricebutton.xml | 66 +- .../drawable/xml_selector_settings_button.xml | 84 +- .../drawable/xml_selector_settingsbutton.xml | 30 +- .../drawable/xml_selector_shapeshopbutton.xml | 30 +- .../main/res/drawable/xml_selector_sound.xml | 32 +- .../drawable/xml_selector_toolshopbutton.xml | 30 +- .../main/res/layout/bomb_error_message.xml | 28 +- app/src/main/res/layout/confirm_dialog.xml | 96 +-- app/src/main/res/layout/credits_dialog.xml | 268 +++--- app/src/main/res/layout/game.xml | 146 ++-- app/src/main/res/layout/game_over_message.xml | 138 +-- app/src/main/res/layout/gl_test_screen.xml | 22 +- app/src/main/res/layout/goal_message.xml | 154 ++-- .../res/layout/goal_message_levelbutton.xml | 122 +-- app/src/main/res/layout/levelbutton.xml | 148 ++-- app/src/main/res/layout/levels.xml | 142 +-- app/src/main/res/layout/levelup_message.xml | 116 +-- app/src/main/res/layout/pre_start_screen.xml | 40 +- app/src/main/res/layout/price_button.xml | 96 +-- app/src/main/res/layout/settings.xml | 306 +++---- app/src/main/res/layout/shape_button.xml | 70 +- app/src/main/res/layout/shape_inspector.xml | 116 +-- .../res/layout/shape_inspector_check_box.xml | 60 +- app/src/main/res/layout/shape_shop.xml | 172 ++-- app/src/main/res/layout/short_menu.xml | 142 +-- app/src/main/res/layout/start_screen.xml | 100 +-- .../res/layout/task_completed_message.xml | 38 +- app/src/main/res/layout/tool_inspector.xml | 142 +-- app/src/main/res/layout/tool_offer_slot.xml | 58 +- app/src/main/res/layout/tool_slot.xml | 40 +- app/src/main/res/layout/toolshop.xml | 280 +++--- app/src/main/res/layout/topbar.xml | 306 +++---- app/src/main/res/layout/tutorial.xml | 86 +- app/src/main/res/layout/unlock_message.xml | 60 +- app/src/main/res/layout/world_button.xml | 202 ++--- app/src/main/res/layout/worlds.xml | 88 +- app/src/main/res/values-de/strings.xml | 184 ++-- app/src/main/res/values/attr.xml | 18 +- app/src/main/res/values/colors.xml | 70 +- app/src/main/res/values/dimens.xml | 28 +- app/src/main/res/values/strings.xml | 274 +++--- app/src/main/res/values/styles.xml | 94 +- .../frajul/endlessroll/ExampleUnitTest.java | 52 +- build.gradle | 64 +- gradle.properties | 38 +- gradlew.bat | 180 ++-- particlelab/.gitignore | 2 +- particlelab/build.gradle | 66 +- particlelab/proguard-rules.pro | 34 +- .../frajul/particlelab/ApplicationTest.java | 38 +- particlelab/src/main/AndroidManifest.xml | 68 +- .../src/main/assets/fragmentShader.glsl | 64 +- particlelab/src/main/assets/vertexShader.glsl | 38 +- .../de/frajul/particlelab/data/Color.java | 152 ++-- .../de/frajul/particlelab/data/Vector.java | 216 ++--- .../frajul/particlelab/entities/Entity.java | 174 ++-- .../de/frajul/particlelab/entities/Quad.java | 132 +-- .../entities/particles/Particle.java | 190 ++-- .../entities/particles/ParticleData.java | 130 +-- .../entities/particles/ParticleEffect.java | 450 +++++----- .../entities/particles/ParticleReader.java | 340 ++++---- .../entities/particles/ParticleSource.java | 312 +++---- .../entities/particles/ParticleSystem.java | 98 +-- .../particles/attributes/Attribute.java | 80 +- .../attributes/AttributeValueReader.java | 168 ++-- .../attributes/ParticleAttributeType.java | 122 +-- .../attributes/attributeValues/ImagePath.java | 56 +- .../attributes/attributeValues/Options.java | 146 ++-- .../ParticleAttributeValue.java | 48 +- .../ParticleAttributeValueType.java | 70 +- .../attributes/attributeValues/Range.java | 178 ++-- .../attributeValues/SpawnShape.java | 90 +- .../attributes/attributeValues/Timeline.java | 116 +-- .../attributeValues/TimelinePoint.java | 58 +- .../attributeValues/TimelineRange.java | 76 +- .../attributeValues/TintTimeline.java | 128 +-- .../attributeValues/TintTimelinePoint.java | 78 +- .../entities/textures/Texture.java | 102 +-- .../entities/textures/TextureLoader.java | 138 +-- .../entities/textures/TexturePack.java | 84 +- .../de/frajul/particlelab/main/GameLog.java | 102 +-- .../frajul/particlelab/main/MainActivity.java | 174 ++-- .../particlelab/main/MyGlSurfaceView.java | 84 +- .../de/frajul/particlelab/main/Scene.java | 152 ++-- .../particlelab/rendering/GameRenderer.java | 330 +++---- .../de/frajul/particlelab/rendering/Lock.java | 56 +- .../particlelab/rendering/MatrixCreator.java | 112 +-- .../de/frajul/particlelab/rendering/Quad.java | 112 +-- .../particlelab/rendering/Rendering.java | 128 +-- .../particlelab/rendering/ShaderProgram.java | 290 +++---- .../frajul/particlelab/rendering/Timer.java | 106 +-- particlelab/src/main/res/values/colors.xml | 26 +- particlelab/src/main/res/values/strings.xml | 20 +- particlelab/src/main/res/values/styles.xml | 36 +- .../example/particlelab/ExampleUnitTest.java | 42 +- settings.gradle | 16 +- 314 files changed, 20960 insertions(+), 20960 deletions(-) diff --git a/.gitignore b/.gitignore index 367f50f..afac906 100644 --- a/.gitignore +++ b/.gitignore @@ -1,12 +1,12 @@ -.gradle -*.apk -output.json -/local.properties -/.idea/workspace.xml -/.idea/libraries -.DS_Store -/build -/captures -/app/build -/app/release -*.iml +.gradle +*.apk +output.json +/local.properties +/.idea/workspace.xml +/.idea/libraries +.DS_Store +/build +/captures +/app/build +/app/release +*.iml diff --git a/app/build.gradle b/app/build.gradle index 78b6839..860cd45 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -1,44 +1,44 @@ -/* - * Created by Julian Mutter on 7/10/18 3:58 PM - * Copyright (c) 2018. All rights reserved. - * Last modified 7/10/18 3:55 PM - * - */ - -apply plugin: 'com.android.application' - -android { - signingConfigs { - } - compileSdkVersion 26 - defaultConfig { - applicationId 'de.frajul.endlessroll' - minSdkVersion 14 - targetSdkVersion 26 - versionCode 9 - versionName '1.0' - } - buildTypes { - release { - minifyEnabled false - proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' - } - } - flavorDimensions 'releaseTargetGroup' - productFlavors { - flavorStoreRelease { - dimension 'releaseTargetGroup' - } - flavorTest { - dimension 'releaseTargetGroup' - } - } -} - -dependencies { - compile fileTree(include: ['*.jar'], dir: 'libs') - testCompile 'junit:junit:4.12' - compile 'com.android.support:appcompat-v7:26.1.0' - compile 'com.google.android.gms:play-services-ads:15.0.1' - compile files('libs/simple-xml-2.7.1.jar') -} +/* + * Created by Julian Mutter on 7/10/18 3:58 PM + * Copyright (c) 2018. All rights reserved. + * Last modified 7/10/18 3:55 PM + * + */ + +apply plugin: 'com.android.application' + +android { + signingConfigs { + } + compileSdkVersion 26 + defaultConfig { + applicationId 'de.frajul.endlessroll' + minSdkVersion 14 + targetSdkVersion 26 + versionCode 9 + versionName '1.0' + } + buildTypes { + release { + minifyEnabled false + proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' + } + } + flavorDimensions 'releaseTargetGroup' + productFlavors { + flavorStoreRelease { + dimension 'releaseTargetGroup' + } + flavorTest { + dimension 'releaseTargetGroup' + } + } +} + +dependencies { + compile fileTree(include: ['*.jar'], dir: 'libs') + testCompile 'junit:junit:4.12' + compile 'com.android.support:appcompat-v7:26.1.0' + compile 'com.google.android.gms:play-services-ads:15.0.1' + compile files('libs/simple-xml-2.7.1.jar') +} diff --git a/app/build/intermediates/assets/debug/shader/entityFragmentShader.glsl b/app/build/intermediates/assets/debug/shader/entityFragmentShader.glsl index 8aa6426..3529ba3 100644 --- a/app/build/intermediates/assets/debug/shader/entityFragmentShader.glsl +++ b/app/build/intermediates/assets/debug/shader/entityFragmentShader.glsl @@ -1,36 +1,36 @@ -precision mediump float; - -uniform sampler2D texture; -uniform float alpha; -uniform vec2 texAtlasSize; -uniform float texAtlasIndex; - -const float clampBorder = 0.005; - -varying vec2 pass_TexCoords; - -vec2 getTexCoordsInAtlas(in vec2 clampedTexCoords, in float atlasIndex); - -void main() { - - vec2 clampedTexCoords = pass_TexCoords; - if(texAtlasSize.x > 1.0 || texAtlasSize.y > 1.0) - clampedTexCoords = clamp(pass_TexCoords, clampBorder, 1.0 - clampBorder); - - vec2 texAtlasCoords = getTexCoordsInAtlas(clampedTexCoords, texAtlasIndex); - gl_FragColor = texture2D(texture, texAtlasCoords); - gl_FragColor.a = min(gl_FragColor.a, alpha); - gl_FragColor.rgb = gl_FragColor.rgb / gl_FragColor.a; - -} - -vec2 getTexCoordsInAtlas(in vec2 clampedTexCoords, in float atlasIndex){ - - vec2 texAtlasCoords = vec2(0.0, 0.0); - texAtlasCoords.x = mod(clampedTexCoords.x, 1.0) / texAtlasSize.x; - texAtlasCoords.x += mod(atlasIndex, texAtlasSize.x) / texAtlasSize.x; - texAtlasCoords.y = mod(clampedTexCoords.y, 1.0) / texAtlasSize.y; - texAtlasCoords.y += floor(atlasIndex / texAtlasSize.y) / texAtlasSize.y; - return texAtlasCoords; - +precision mediump float; + +uniform sampler2D texture; +uniform float alpha; +uniform vec2 texAtlasSize; +uniform float texAtlasIndex; + +const float clampBorder = 0.005; + +varying vec2 pass_TexCoords; + +vec2 getTexCoordsInAtlas(in vec2 clampedTexCoords, in float atlasIndex); + +void main() { + + vec2 clampedTexCoords = pass_TexCoords; + if(texAtlasSize.x > 1.0 || texAtlasSize.y > 1.0) + clampedTexCoords = clamp(pass_TexCoords, clampBorder, 1.0 - clampBorder); + + vec2 texAtlasCoords = getTexCoordsInAtlas(clampedTexCoords, texAtlasIndex); + gl_FragColor = texture2D(texture, texAtlasCoords); + gl_FragColor.a = min(gl_FragColor.a, alpha); + gl_FragColor.rgb = gl_FragColor.rgb / gl_FragColor.a; + +} + +vec2 getTexCoordsInAtlas(in vec2 clampedTexCoords, in float atlasIndex){ + + vec2 texAtlasCoords = vec2(0.0, 0.0); + texAtlasCoords.x = mod(clampedTexCoords.x, 1.0) / texAtlasSize.x; + texAtlasCoords.x += mod(atlasIndex, texAtlasSize.x) / texAtlasSize.x; + texAtlasCoords.y = mod(clampedTexCoords.y, 1.0) / texAtlasSize.y; + texAtlasCoords.y += floor(atlasIndex / texAtlasSize.y) / texAtlasSize.y; + return texAtlasCoords; + } \ No newline at end of file diff --git a/app/build/intermediates/assets/debug/shader/entityVertexShader.glsl b/app/build/intermediates/assets/debug/shader/entityVertexShader.glsl index 5f7af0d..f8f0233 100644 --- a/app/build/intermediates/assets/debug/shader/entityVertexShader.glsl +++ b/app/build/intermediates/assets/debug/shader/entityVertexShader.glsl @@ -1,23 +1,23 @@ -uniform mat4 mvpMatrix; -uniform mat4 transformationMatrix; -uniform vec2 texCoordScaling; - -attribute vec4 position; -attribute vec2 texCoords; - -varying vec2 pass_TexCoords; - -void main() { - - - vec2 scale = vec2(1.0, 1.0); - if(texCoordScaling.x != 0.0) - scale.x = texCoordScaling.x; - if(texCoordScaling.y != 0.0) - scale.y *= texCoordScaling.y; - - vec4 transformatedPosition = transformationMatrix * position; - gl_Position = mvpMatrix * transformatedPosition; - pass_TexCoords = scale * texCoords; - +uniform mat4 mvpMatrix; +uniform mat4 transformationMatrix; +uniform vec2 texCoordScaling; + +attribute vec4 position; +attribute vec2 texCoords; + +varying vec2 pass_TexCoords; + +void main() { + + + vec2 scale = vec2(1.0, 1.0); + if(texCoordScaling.x != 0.0) + scale.x = texCoordScaling.x; + if(texCoordScaling.y != 0.0) + scale.y *= texCoordScaling.y; + + vec4 transformatedPosition = transformationMatrix * position; + gl_Position = mvpMatrix * transformatedPosition; + pass_TexCoords = scale * texCoords; + } \ No newline at end of file diff --git a/app/build/intermediates/assets/debug/shader/particleFragmentShader.glsl b/app/build/intermediates/assets/debug/shader/particleFragmentShader.glsl index cb7b5e6..56ecd93 100644 --- a/app/build/intermediates/assets/debug/shader/particleFragmentShader.glsl +++ b/app/build/intermediates/assets/debug/shader/particleFragmentShader.glsl @@ -1,27 +1,27 @@ -precision mediump float; - -uniform sampler2D texture; -uniform vec3 color; -uniform float alpha; - -varying vec2 pass_TexCoords; - -vec3 saturateColor(in vec3 color, in float a); - -void main() { - - float a = texture2D(texture, pass_TexCoords).a * alpha; - vec3 black = vec3(0.0, 0.0, 0.0); - gl_FragColor.rgb = mix(color, black, 1.0 - a); - gl_FragColor.a = a; - -} - -vec3 saturateColor(in vec3 color, in float a){ - - float grayscale = (color.r * 0.299 + color.g * 0.587 + color. b * 0.114); - float alpha = ((1.1 - a) * 0.5) * 40.0; - - return alpha * color + (1.0 - alpha) * vec3(grayscale, grayscale, grayscale); - +precision mediump float; + +uniform sampler2D texture; +uniform vec3 color; +uniform float alpha; + +varying vec2 pass_TexCoords; + +vec3 saturateColor(in vec3 color, in float a); + +void main() { + + float a = texture2D(texture, pass_TexCoords).a * alpha; + vec3 black = vec3(0.0, 0.0, 0.0); + gl_FragColor.rgb = mix(color, black, 1.0 - a); + gl_FragColor.a = a; + +} + +vec3 saturateColor(in vec3 color, in float a){ + + float grayscale = (color.r * 0.299 + color.g * 0.587 + color. b * 0.114); + float alpha = ((1.1 - a) * 0.5) * 40.0; + + return alpha * color + (1.0 - alpha) * vec3(grayscale, grayscale, grayscale); + } \ No newline at end of file diff --git a/app/build/intermediates/assets/debug/shader/simpleFragmentShader.glsl b/app/build/intermediates/assets/debug/shader/simpleFragmentShader.glsl index a60842a..c785f46 100644 --- a/app/build/intermediates/assets/debug/shader/simpleFragmentShader.glsl +++ b/app/build/intermediates/assets/debug/shader/simpleFragmentShader.glsl @@ -1,12 +1,12 @@ -precision mediump float; - -uniform sampler2D texture; - -varying vec2 pass_TexCoords; - -void main() { - - gl_FragColor = texture2D(texture, pass_TexCoords); - gl_FragColor.rgb = gl_FragColor.rgb / gl_FragColor.a; - +precision mediump float; + +uniform sampler2D texture; + +varying vec2 pass_TexCoords; + +void main() { + + gl_FragColor = texture2D(texture, pass_TexCoords); + gl_FragColor.rgb = gl_FragColor.rgb / gl_FragColor.a; + } \ No newline at end of file diff --git a/app/build/intermediates/assets/debug/shader/simpleVertexShader.glsl b/app/build/intermediates/assets/debug/shader/simpleVertexShader.glsl index 7fee205..e2b0586 100644 --- a/app/build/intermediates/assets/debug/shader/simpleVertexShader.glsl +++ b/app/build/intermediates/assets/debug/shader/simpleVertexShader.glsl @@ -1,12 +1,12 @@ -attribute vec4 position; -attribute vec2 texCoords; - -varying vec2 pass_TexCoords; - -void main() { - - gl_Position = position; - pass_TexCoords.x = texCoords.x; - pass_TexCoords.y = -texCoords.y; - +attribute vec4 position; +attribute vec2 texCoords; + +varying vec2 pass_TexCoords; + +void main() { + + gl_Position = position; + pass_TexCoords.x = texCoords.x; + pass_TexCoords.y = -texCoords.y; + } \ No newline at end of file diff --git a/app/proguard-rules.pro b/app/proguard-rules.pro index 0550155..598c2c8 100644 --- a/app/proguard-rules.pro +++ b/app/proguard-rules.pro @@ -1,17 +1,17 @@ -# Add project specific ProGuard rules here. -# By default, the flags in this file are appended to flags specified -# in C:\Users\Julian\AppData\Local\Android\sdk/tools/proguard/proguard-android.txt -# You can edit the include path and order by changing the proguardFiles -# directive in build.gradle. -# -# For more details, see -# http://developer.android.com/guide/developing/tools/proguard.html - -# Add any project specific keep options here: - -# If your project uses WebView with JS, uncomment the following -# and specify the fully qualified class name to the JavaScript interface -# class: -#-keepclassmembers class fqcn.of.javascript.interface.for.webview { -# public *; -#} +# Add project specific ProGuard rules here. +# By default, the flags in this file are appended to flags specified +# in C:\Users\Julian\AppData\Local\Android\sdk/tools/proguard/proguard-android.txt +# You can edit the include path and order by changing the proguardFiles +# directive in build.gradle. +# +# For more details, see +# http://developer.android.com/guide/developing/tools/proguard.html + +# Add any project specific keep options here: + +# If your project uses WebView with JS, uncomment the following +# and specify the fully qualified class name to the JavaScript interface +# class: +#-keepclassmembers class fqcn.of.javascript.interface.for.webview { +# public *; +#} diff --git a/app/src/androidTest/java/de/frajul/endlessroll/ApplicationTest.java b/app/src/androidTest/java/de/frajul/endlessroll/ApplicationTest.java index c927f3e..98e009c 100644 --- a/app/src/androidTest/java/de/frajul/endlessroll/ApplicationTest.java +++ b/app/src/androidTest/java/de/frajul/endlessroll/ApplicationTest.java @@ -1,20 +1,20 @@ -/* - * Created by Julian Mutter on 7/10/18 3:58 PM - * Copyright (c) 2018. All rights reserved. - * Last modified 7/10/18 3:54 PM - * - */ - -package de.frajul.endlessroll; - -import android.app.Application; -import android.test.ApplicationTestCase; - -/** - * Testing Fundamentals - */ -public class ApplicationTest extends ApplicationTestCase { - public ApplicationTest() { - super(Application.class); - } +/* + * Created by Julian Mutter on 7/10/18 3:58 PM + * Copyright (c) 2018. All rights reserved. + * Last modified 7/10/18 3:54 PM + * + */ + +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/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index c2afe6a..53d76d4 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -1,36 +1,36 @@ - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/assets/shader/entityFragmentShader.glsl b/app/src/main/assets/shader/entityFragmentShader.glsl index bddc330..fb20eb2 100644 --- a/app/src/main/assets/shader/entityFragmentShader.glsl +++ b/app/src/main/assets/shader/entityFragmentShader.glsl @@ -1,42 +1,42 @@ -precision mediump float; - -uniform sampler2D texture; -uniform float alpha; -uniform vec2 texAtlasSize; -uniform float texAtlasIndex; -uniform float hasColor; -uniform vec3 color; - -const float clampBorder = 0.005; - -varying vec2 pass_TexCoords; - -vec2 getTexCoordsInAtlas(in vec2 clampedTexCoords, in float atlasIndex); - -void main() { - - vec2 clampedTexCoords = pass_TexCoords; - if(texAtlasSize.x > 1.0 || texAtlasSize.y > 1.0) - clampedTexCoords = clamp(pass_TexCoords, clampBorder, 1.0 - clampBorder); - - vec2 texAtlasCoords = getTexCoordsInAtlas(clampedTexCoords, texAtlasIndex); - gl_FragColor = texture2D(texture, texAtlasCoords); - gl_FragColor.a = min(gl_FragColor.a, alpha); - if(hasColor == 1.0){ - gl_FragColor.rgb = color; - } else { - gl_FragColor.rgb = gl_FragColor.rgb / gl_FragColor.a; - } - -} - -vec2 getTexCoordsInAtlas(in vec2 clampedTexCoords, in float atlasIndex){ - - vec2 texAtlasCoords = vec2(0.0, 0.0); - texAtlasCoords.x = mod(clampedTexCoords.x, 1.0) / texAtlasSize.x; - texAtlasCoords.x += mod(atlasIndex, texAtlasSize.x) / texAtlasSize.x; - texAtlasCoords.y = mod(clampedTexCoords.y, 1.0) / texAtlasSize.y; - texAtlasCoords.y += floor(atlasIndex / texAtlasSize.y) / texAtlasSize.y; - return texAtlasCoords; - +precision mediump float; + +uniform sampler2D texture; +uniform float alpha; +uniform vec2 texAtlasSize; +uniform float texAtlasIndex; +uniform float hasColor; +uniform vec3 color; + +const float clampBorder = 0.005; + +varying vec2 pass_TexCoords; + +vec2 getTexCoordsInAtlas(in vec2 clampedTexCoords, in float atlasIndex); + +void main() { + + vec2 clampedTexCoords = pass_TexCoords; + if(texAtlasSize.x > 1.0 || texAtlasSize.y > 1.0) + clampedTexCoords = clamp(pass_TexCoords, clampBorder, 1.0 - clampBorder); + + vec2 texAtlasCoords = getTexCoordsInAtlas(clampedTexCoords, texAtlasIndex); + gl_FragColor = texture2D(texture, texAtlasCoords); + gl_FragColor.a = min(gl_FragColor.a, alpha); + if(hasColor == 1.0){ + gl_FragColor.rgb = color; + } else { + gl_FragColor.rgb = gl_FragColor.rgb / gl_FragColor.a; + } + +} + +vec2 getTexCoordsInAtlas(in vec2 clampedTexCoords, in float atlasIndex){ + + vec2 texAtlasCoords = vec2(0.0, 0.0); + texAtlasCoords.x = mod(clampedTexCoords.x, 1.0) / texAtlasSize.x; + texAtlasCoords.x += mod(atlasIndex, texAtlasSize.x) / texAtlasSize.x; + texAtlasCoords.y = mod(clampedTexCoords.y, 1.0) / texAtlasSize.y; + texAtlasCoords.y += floor(atlasIndex / texAtlasSize.y) / texAtlasSize.y; + return texAtlasCoords; + } \ No newline at end of file diff --git a/app/src/main/assets/shader/entityVertexShader.glsl b/app/src/main/assets/shader/entityVertexShader.glsl index 5f7af0d..f8f0233 100644 --- a/app/src/main/assets/shader/entityVertexShader.glsl +++ b/app/src/main/assets/shader/entityVertexShader.glsl @@ -1,23 +1,23 @@ -uniform mat4 mvpMatrix; -uniform mat4 transformationMatrix; -uniform vec2 texCoordScaling; - -attribute vec4 position; -attribute vec2 texCoords; - -varying vec2 pass_TexCoords; - -void main() { - - - vec2 scale = vec2(1.0, 1.0); - if(texCoordScaling.x != 0.0) - scale.x = texCoordScaling.x; - if(texCoordScaling.y != 0.0) - scale.y *= texCoordScaling.y; - - vec4 transformatedPosition = transformationMatrix * position; - gl_Position = mvpMatrix * transformatedPosition; - pass_TexCoords = scale * texCoords; - +uniform mat4 mvpMatrix; +uniform mat4 transformationMatrix; +uniform vec2 texCoordScaling; + +attribute vec4 position; +attribute vec2 texCoords; + +varying vec2 pass_TexCoords; + +void main() { + + + vec2 scale = vec2(1.0, 1.0); + if(texCoordScaling.x != 0.0) + scale.x = texCoordScaling.x; + if(texCoordScaling.y != 0.0) + scale.y *= texCoordScaling.y; + + vec4 transformatedPosition = transformationMatrix * position; + gl_Position = mvpMatrix * transformatedPosition; + pass_TexCoords = scale * texCoords; + } \ No newline at end of file diff --git a/app/src/main/assets/shader/guiFragmentShader.glsl b/app/src/main/assets/shader/guiFragmentShader.glsl index 40e8b48..679892a 100644 --- a/app/src/main/assets/shader/guiFragmentShader.glsl +++ b/app/src/main/assets/shader/guiFragmentShader.glsl @@ -1,53 +1,53 @@ -precision mediump float; - -uniform sampler2D texture; -uniform float useCustomColor; -uniform vec3 color; -uniform float alpha; -uniform float roundValue; -uniform float visibleAmount; - -varying vec2 pass_TexCoords; - -float isInRoundedRange(); -float isInVisiblePart(); - -void main() { - - if(isInRoundedRange() == 1.0 && isInVisiblePart() == 1.0){ - if(useCustomColor == 1.0){ - gl_FragColor.rgb = color; - gl_FragColor.a = alpha; - } else { - gl_FragColor = texture2D(texture, pass_TexCoords); - gl_FragColor.a = min(gl_FragColor.a, alpha); - } - gl_FragColor.rgb = gl_FragColor.rgb / gl_FragColor.a; - } else { - gl_FragColor = vec4(0.0, 0.0, 0.0, 0.0); - } - -} - -float isInRoundedRange(){ - if(roundValue == 0.0) - return 1.0; - float relativeX = abs((pass_TexCoords.x- 0.5)); - float relativeY = abs(pass_TexCoords.y - 0.5); - float circleX = abs(roundValue * 0.5 - 0.5); - float circleY = abs(roundValue * 0.5 - 0.5); - if(relativeX < circleX || relativeY < circleY) - return 1.0; - float radius = roundValue * 0.5; - float distX = relativeX - circleX; - float distY = relativeY - circleY; - if(distX * distX + distY * distY > radius * radius) - return 0.0; - return 1.0; -} - -float isInVisiblePart(){ - if(pass_TexCoords.x >= visibleAmount) - return 1.0; - return 0.0; +precision mediump float; + +uniform sampler2D texture; +uniform float useCustomColor; +uniform vec3 color; +uniform float alpha; +uniform float roundValue; +uniform float visibleAmount; + +varying vec2 pass_TexCoords; + +float isInRoundedRange(); +float isInVisiblePart(); + +void main() { + + if(isInRoundedRange() == 1.0 && isInVisiblePart() == 1.0){ + if(useCustomColor == 1.0){ + gl_FragColor.rgb = color; + gl_FragColor.a = alpha; + } else { + gl_FragColor = texture2D(texture, pass_TexCoords); + gl_FragColor.a = min(gl_FragColor.a, alpha); + } + gl_FragColor.rgb = gl_FragColor.rgb / gl_FragColor.a; + } else { + gl_FragColor = vec4(0.0, 0.0, 0.0, 0.0); + } + +} + +float isInRoundedRange(){ + if(roundValue == 0.0) + return 1.0; + float relativeX = abs((pass_TexCoords.x- 0.5)); + float relativeY = abs(pass_TexCoords.y - 0.5); + float circleX = abs(roundValue * 0.5 - 0.5); + float circleY = abs(roundValue * 0.5 - 0.5); + if(relativeX < circleX || relativeY < circleY) + return 1.0; + float radius = roundValue * 0.5; + float distX = relativeX - circleX; + float distY = relativeY - circleY; + if(distX * distX + distY * distY > radius * radius) + return 0.0; + return 1.0; +} + +float isInVisiblePart(){ + if(pass_TexCoords.x >= visibleAmount) + return 1.0; + return 0.0; } \ No newline at end of file diff --git a/app/src/main/assets/shader/guiVertexShader.glsl b/app/src/main/assets/shader/guiVertexShader.glsl index 19da5d9..f2fe821 100644 --- a/app/src/main/assets/shader/guiVertexShader.glsl +++ b/app/src/main/assets/shader/guiVertexShader.glsl @@ -1,15 +1,15 @@ -uniform mat4 mvpMatrix; -uniform mat4 transformationMatrix; - -attribute vec4 position; -attribute vec2 texCoords; - -varying vec2 pass_TexCoords; - -void main() { - - vec4 transformatedPosition = transformationMatrix * position; - gl_Position = mvpMatrix * transformatedPosition; - pass_TexCoords = texCoords; - +uniform mat4 mvpMatrix; +uniform mat4 transformationMatrix; + +attribute vec4 position; +attribute vec2 texCoords; + +varying vec2 pass_TexCoords; + +void main() { + + vec4 transformatedPosition = transformationMatrix * position; + gl_Position = mvpMatrix * transformatedPosition; + pass_TexCoords = texCoords; + } \ No newline at end of file diff --git a/app/src/main/assets/shader/obstacleFragmentShader.glsl b/app/src/main/assets/shader/obstacleFragmentShader.glsl index 20c2110..cbb64d6 100644 --- a/app/src/main/assets/shader/obstacleFragmentShader.glsl +++ b/app/src/main/assets/shader/obstacleFragmentShader.glsl @@ -1,115 +1,115 @@ -precision mediump float; - -uniform sampler2D texture; -uniform float alpha; -uniform vec2 texAtlasSize; -uniform vec2 gridSize; -uniform float deadly; -uniform float floating; -uniform float bombSelected; -uniform float bombExplosionState; - -varying vec2 pass_TexCoords; - -const float clampBorder = 0.05; - -float itermod(in float x, in float y); -vec2 getInGridPos(); -vec2 getTexCoordsInGridSquare(); -vec2 getTexCoordsInAtlas(in vec2 texCoords, in float atlasIndex); - -void main() { - - vec2 gridPos = getInGridPos(); - float index = 0.0; - - bool top = gridPos.y == 0.0; - bool bottom = gridPos.y == gridSize.y - 1.0; - bool left = gridPos.x == 0.0; - bool right = gridPos.x == gridSize.x - 1.0; - - if(top){ - if(left) - index = 5.0 + itermod(gridSize.x, 2.0) + itermod(gridSize.y, 2.0); - else if(right) - index = 21.0 + itermod(gridSize.x, 2.0) + itermod(gridSize.y, 2.0); - else - index = itermod(gridPos.x, 3.0); - if(deadly == 1.0) - index += 8.0; - } else if(bottom){ - if(left) - index = 37.0 + itermod(gridSize.x, 2.0) + itermod(gridSize.y, 2.0); - else if(right) - index = 53.0 + itermod(gridSize.x, 2.0) + itermod(gridSize.y, 2.0); - else - index = 16.0 + itermod(gridPos.x, 3.0); - if(floating == 1.0) - index += 8.0; - } else if(left){ - index = 32.0 + itermod(gridPos.y, 3.0); - } else if(gridPos.x == gridSize.x - 1.0){ - index = 40.0 + itermod(gridPos.y, 3.0); - } else{ - index = 48.0 + itermod(gridPos.x, 2.0) + itermod(gridPos.y, 2.0); - } - - vec2 texCoordsInGridSquare = getTexCoordsInGridSquare(); - texCoordsInGridSquare = clamp(texCoordsInGridSquare, clampBorder, 1.0 - clampBorder); - vec2 texCoordsInAtlas = getTexCoordsInAtlas(texCoordsInGridSquare, index); - gl_FragColor = texture2D(texture, texCoordsInAtlas); - gl_FragColor.a = min(gl_FragColor.a, alpha); - gl_FragColor.rgb = gl_FragColor.rgb / gl_FragColor.a; - - if(bombSelected == 1.0 || bombExplosionState >= 0.0){ - vec3 red = vec3(1.0, 0.0, 0.0); - float mixValue = 0.4; - gl_FragColor.r += 0.2 * bombExplosionState; - gl_FragColor.rgb = mix(gl_FragColor.rgb, red, mixValue); - } - -} - -float itermod(in float x, in float y){ - - while(x - y >= 0.0){ - x -= y; - } - return x; - -} - -vec2 getInGridPos(){ - - float gridX = floor(pass_TexCoords.x * gridSize.x); - float gridY = floor(pass_TexCoords.y * gridSize.y); - if(pass_TexCoords.y == 1.0) - gridY -= 1.0; - if(pass_TexCoords.x == 1.0) - gridX -= 1.0; - return vec2(gridX, gridY); - -} - -vec2 getTexCoordsInGridSquare(){ - - float x = mod(pass_TexCoords.x, 1.0 / gridSize.x) * gridSize.x; - float y = mod(pass_TexCoords.y, 1.0 / gridSize.y) * gridSize.y; - if(pass_TexCoords.x == 1.0) - x = 1.0; - if(pass_TexCoords.y == 1.0) - y = 1.0; - return vec2(x, y); - -} - -vec2 getTexCoordsInAtlas(in vec2 texCoords, in float atlasIndex){ - - vec2 texAtlasCoords = vec2(0.0, 0.0); - texAtlasCoords.x = mod(texCoords.x, 1.0) / texAtlasSize.x; - texAtlasCoords.x += mod(atlasIndex, texAtlasSize.x) / texAtlasSize.x; - texAtlasCoords.y = mod(texCoords.y, 1.0) / texAtlasSize.y; - texAtlasCoords.y += floor(atlasIndex / texAtlasSize.y) / texAtlasSize.y; - return texAtlasCoords; - +precision mediump float; + +uniform sampler2D texture; +uniform float alpha; +uniform vec2 texAtlasSize; +uniform vec2 gridSize; +uniform float deadly; +uniform float floating; +uniform float bombSelected; +uniform float bombExplosionState; + +varying vec2 pass_TexCoords; + +const float clampBorder = 0.05; + +float itermod(in float x, in float y); +vec2 getInGridPos(); +vec2 getTexCoordsInGridSquare(); +vec2 getTexCoordsInAtlas(in vec2 texCoords, in float atlasIndex); + +void main() { + + vec2 gridPos = getInGridPos(); + float index = 0.0; + + bool top = gridPos.y == 0.0; + bool bottom = gridPos.y == gridSize.y - 1.0; + bool left = gridPos.x == 0.0; + bool right = gridPos.x == gridSize.x - 1.0; + + if(top){ + if(left) + index = 5.0 + itermod(gridSize.x, 2.0) + itermod(gridSize.y, 2.0); + else if(right) + index = 21.0 + itermod(gridSize.x, 2.0) + itermod(gridSize.y, 2.0); + else + index = itermod(gridPos.x, 3.0); + if(deadly == 1.0) + index += 8.0; + } else if(bottom){ + if(left) + index = 37.0 + itermod(gridSize.x, 2.0) + itermod(gridSize.y, 2.0); + else if(right) + index = 53.0 + itermod(gridSize.x, 2.0) + itermod(gridSize.y, 2.0); + else + index = 16.0 + itermod(gridPos.x, 3.0); + if(floating == 1.0) + index += 8.0; + } else if(left){ + index = 32.0 + itermod(gridPos.y, 3.0); + } else if(gridPos.x == gridSize.x - 1.0){ + index = 40.0 + itermod(gridPos.y, 3.0); + } else{ + index = 48.0 + itermod(gridPos.x, 2.0) + itermod(gridPos.y, 2.0); + } + + vec2 texCoordsInGridSquare = getTexCoordsInGridSquare(); + texCoordsInGridSquare = clamp(texCoordsInGridSquare, clampBorder, 1.0 - clampBorder); + vec2 texCoordsInAtlas = getTexCoordsInAtlas(texCoordsInGridSquare, index); + gl_FragColor = texture2D(texture, texCoordsInAtlas); + gl_FragColor.a = min(gl_FragColor.a, alpha); + gl_FragColor.rgb = gl_FragColor.rgb / gl_FragColor.a; + + if(bombSelected == 1.0 || bombExplosionState >= 0.0){ + vec3 red = vec3(1.0, 0.0, 0.0); + float mixValue = 0.4; + gl_FragColor.r += 0.2 * bombExplosionState; + gl_FragColor.rgb = mix(gl_FragColor.rgb, red, mixValue); + } + +} + +float itermod(in float x, in float y){ + + while(x - y >= 0.0){ + x -= y; + } + return x; + +} + +vec2 getInGridPos(){ + + float gridX = floor(pass_TexCoords.x * gridSize.x); + float gridY = floor(pass_TexCoords.y * gridSize.y); + if(pass_TexCoords.y == 1.0) + gridY -= 1.0; + if(pass_TexCoords.x == 1.0) + gridX -= 1.0; + return vec2(gridX, gridY); + +} + +vec2 getTexCoordsInGridSquare(){ + + float x = mod(pass_TexCoords.x, 1.0 / gridSize.x) * gridSize.x; + float y = mod(pass_TexCoords.y, 1.0 / gridSize.y) * gridSize.y; + if(pass_TexCoords.x == 1.0) + x = 1.0; + if(pass_TexCoords.y == 1.0) + y = 1.0; + return vec2(x, y); + +} + +vec2 getTexCoordsInAtlas(in vec2 texCoords, in float atlasIndex){ + + vec2 texAtlasCoords = vec2(0.0, 0.0); + texAtlasCoords.x = mod(texCoords.x, 1.0) / texAtlasSize.x; + texAtlasCoords.x += mod(atlasIndex, texAtlasSize.x) / texAtlasSize.x; + texAtlasCoords.y = mod(texCoords.y, 1.0) / texAtlasSize.y; + texAtlasCoords.y += floor(atlasIndex / texAtlasSize.y) / texAtlasSize.y; + return texAtlasCoords; + } \ No newline at end of file diff --git a/app/src/main/assets/shader/particleFragmentShader.glsl b/app/src/main/assets/shader/particleFragmentShader.glsl index cb7b5e6..56ecd93 100644 --- a/app/src/main/assets/shader/particleFragmentShader.glsl +++ b/app/src/main/assets/shader/particleFragmentShader.glsl @@ -1,27 +1,27 @@ -precision mediump float; - -uniform sampler2D texture; -uniform vec3 color; -uniform float alpha; - -varying vec2 pass_TexCoords; - -vec3 saturateColor(in vec3 color, in float a); - -void main() { - - float a = texture2D(texture, pass_TexCoords).a * alpha; - vec3 black = vec3(0.0, 0.0, 0.0); - gl_FragColor.rgb = mix(color, black, 1.0 - a); - gl_FragColor.a = a; - -} - -vec3 saturateColor(in vec3 color, in float a){ - - float grayscale = (color.r * 0.299 + color.g * 0.587 + color. b * 0.114); - float alpha = ((1.1 - a) * 0.5) * 40.0; - - return alpha * color + (1.0 - alpha) * vec3(grayscale, grayscale, grayscale); - +precision mediump float; + +uniform sampler2D texture; +uniform vec3 color; +uniform float alpha; + +varying vec2 pass_TexCoords; + +vec3 saturateColor(in vec3 color, in float a); + +void main() { + + float a = texture2D(texture, pass_TexCoords).a * alpha; + vec3 black = vec3(0.0, 0.0, 0.0); + gl_FragColor.rgb = mix(color, black, 1.0 - a); + gl_FragColor.a = a; + +} + +vec3 saturateColor(in vec3 color, in float a){ + + float grayscale = (color.r * 0.299 + color.g * 0.587 + color. b * 0.114); + float alpha = ((1.1 - a) * 0.5) * 40.0; + + return alpha * color + (1.0 - alpha) * vec3(grayscale, grayscale, grayscale); + } \ No newline at end of file diff --git a/app/src/main/assets/shader/simpleFragmentShader.glsl b/app/src/main/assets/shader/simpleFragmentShader.glsl index a60842a..c785f46 100644 --- a/app/src/main/assets/shader/simpleFragmentShader.glsl +++ b/app/src/main/assets/shader/simpleFragmentShader.glsl @@ -1,12 +1,12 @@ -precision mediump float; - -uniform sampler2D texture; - -varying vec2 pass_TexCoords; - -void main() { - - gl_FragColor = texture2D(texture, pass_TexCoords); - gl_FragColor.rgb = gl_FragColor.rgb / gl_FragColor.a; - +precision mediump float; + +uniform sampler2D texture; + +varying vec2 pass_TexCoords; + +void main() { + + gl_FragColor = texture2D(texture, pass_TexCoords); + gl_FragColor.rgb = gl_FragColor.rgb / gl_FragColor.a; + } \ No newline at end of file diff --git a/app/src/main/assets/shader/simpleVertexShader.glsl b/app/src/main/assets/shader/simpleVertexShader.glsl index 7fee205..e2b0586 100644 --- a/app/src/main/assets/shader/simpleVertexShader.glsl +++ b/app/src/main/assets/shader/simpleVertexShader.glsl @@ -1,12 +1,12 @@ -attribute vec4 position; -attribute vec2 texCoords; - -varying vec2 pass_TexCoords; - -void main() { - - gl_Position = position; - pass_TexCoords.x = texCoords.x; - pass_TexCoords.y = -texCoords.y; - +attribute vec4 position; +attribute vec2 texCoords; + +varying vec2 pass_TexCoords; + +void main() { + + gl_Position = position; + pass_TexCoords.x = texCoords.x; + pass_TexCoords.y = -texCoords.y; + } \ No newline at end of file diff --git a/app/src/main/assets/shader/terrainFragmentShader.glsl b/app/src/main/assets/shader/terrainFragmentShader.glsl index 8685a32..8df0b7a 100644 --- a/app/src/main/assets/shader/terrainFragmentShader.glsl +++ b/app/src/main/assets/shader/terrainFragmentShader.glsl @@ -1,46 +1,46 @@ -precision mediump float; - -uniform sampler2D texture; -uniform float gridColumnCount; -uniform float isEndlessTileList; - -varying vec2 pass_TexCoords; - -const float texAtlasWidth = 3.0; - -float getAtlasIndex(); -vec2 getTexCoordsInAtlas(in vec2 texCoordsInGrid, in float atlasIndex); - -void main() { - - float atlasIndex = getAtlasIndex(); - vec2 texCoordsInGrid = pass_TexCoords; - texCoordsInGrid.x *= gridColumnCount; - texCoordsInGrid.x = mod(texCoordsInGrid.x, 1.0); - vec2 texCoordsInAtlas = getTexCoordsInAtlas(texCoordsInGrid, atlasIndex); - - gl_FragColor = texture2D(texture, texCoordsInAtlas); - gl_FragColor.rgb = gl_FragColor.rgb / gl_FragColor.a; -} - -float getAtlasIndex(){ - - if(isEndlessTileList == 1.0) - return 1.0; - - if(pass_TexCoords.x < 1.0 / gridColumnCount) - return 0.0; - if(pass_TexCoords.x > 1.0 - 1.0 / gridColumnCount) - return 2.0; - return 1.0; - -} - -vec2 getTexCoordsInAtlas(in vec2 texCoordsInGrid, in float atlasIndex){ - - vec2 texAtlasCoords = vec2(0.0, texCoordsInGrid.y); - texAtlasCoords.x = texCoordsInGrid.x / texAtlasWidth; - texAtlasCoords.x += mod(atlasIndex, texAtlasWidth) / texAtlasWidth; - return texAtlasCoords; - +precision mediump float; + +uniform sampler2D texture; +uniform float gridColumnCount; +uniform float isEndlessTileList; + +varying vec2 pass_TexCoords; + +const float texAtlasWidth = 3.0; + +float getAtlasIndex(); +vec2 getTexCoordsInAtlas(in vec2 texCoordsInGrid, in float atlasIndex); + +void main() { + + float atlasIndex = getAtlasIndex(); + vec2 texCoordsInGrid = pass_TexCoords; + texCoordsInGrid.x *= gridColumnCount; + texCoordsInGrid.x = mod(texCoordsInGrid.x, 1.0); + vec2 texCoordsInAtlas = getTexCoordsInAtlas(texCoordsInGrid, atlasIndex); + + gl_FragColor = texture2D(texture, texCoordsInAtlas); + gl_FragColor.rgb = gl_FragColor.rgb / gl_FragColor.a; +} + +float getAtlasIndex(){ + + if(isEndlessTileList == 1.0) + return 1.0; + + if(pass_TexCoords.x < 1.0 / gridColumnCount) + return 0.0; + if(pass_TexCoords.x > 1.0 - 1.0 / gridColumnCount) + return 2.0; + return 1.0; + +} + +vec2 getTexCoordsInAtlas(in vec2 texCoordsInGrid, in float atlasIndex){ + + vec2 texAtlasCoords = vec2(0.0, texCoordsInGrid.y); + texAtlasCoords.x = texCoordsInGrid.x / texAtlasWidth; + texAtlasCoords.x += mod(atlasIndex, texAtlasWidth) / texAtlasWidth; + return texAtlasCoords; + } \ No newline at end of file diff --git a/app/src/main/java/de/frajul/endlessroll/data/Color3f.java b/app/src/main/java/de/frajul/endlessroll/data/Color3f.java index 420463d..31b2a0f 100644 --- a/app/src/main/java/de/frajul/endlessroll/data/Color3f.java +++ b/app/src/main/java/de/frajul/endlessroll/data/Color3f.java @@ -1,74 +1,74 @@ -/* - * Created by Julian Mutter on 7/10/18 3:58 PM - * Copyright (c) 2018. All rights reserved. - * Last modified 7/10/18 3:54 PM - * - */ - -package de.frajul.endlessroll.data; - -/** - * Created by Julian on 02.08.2016. - */ -public class Color3f { - - private float r, g, b; - - public Color3f() { - } - - public Color3f(float r, float g, float b) { - this.r = r; - this.g = g; - this.b = b; - } - - public Color3f(Color3f other) { - this.r = other.getR(); - this.g = other.getG(); - this.b = other.getB(); - } - - public Color3f interpolate(float leftValue, float rightValue, Color3f 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 Color3f(r, g, b); - } - - private void mul(float a) { - r *= a; - g *= a; - b *= a; - } - - private void add(Color3f 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; - } -} +/* + * Created by Julian Mutter on 7/10/18 3:58 PM + * Copyright (c) 2018. All rights reserved. + * Last modified 7/10/18 3:54 PM + * + */ + +package de.frajul.endlessroll.data; + +/** + * Created by Julian on 02.08.2016. + */ +public class Color3f { + + private float r, g, b; + + public Color3f() { + } + + public Color3f(float r, float g, float b) { + this.r = r; + this.g = g; + this.b = b; + } + + public Color3f(Color3f other) { + this.r = other.getR(); + this.g = other.getG(); + this.b = other.getB(); + } + + public Color3f interpolate(float leftValue, float rightValue, Color3f 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 Color3f(r, g, b); + } + + private void mul(float a) { + r *= a; + g *= a; + b *= a; + } + + private void add(Color3f 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/Color4f.java b/app/src/main/java/de/frajul/endlessroll/data/Color4f.java index f11950c..ec3526d 100644 --- a/app/src/main/java/de/frajul/endlessroll/data/Color4f.java +++ b/app/src/main/java/de/frajul/endlessroll/data/Color4f.java @@ -1,65 +1,65 @@ -/* - * Created by Julian Mutter on 7/10/18 3:58 PM - * Copyright (c) 2018. All rights reserved. - * Last modified 7/10/18 3:54 PM - * - */ - -package de.frajul.endlessroll.data; - -/** - * Created by Julian on 02.08.2016. - */ -public class Color4f { - - private float r, g, b, a; - - public Color4f() { - } - - public Color4f(float r, float g, float b, float a) { - this.r = r; - this.g = g; - this.b = b; - this.a = a; - } - - public Color4f(Color4f other) { - this.r = other.getR(); - this.g = other.getG(); - this.b = other.getB(); - this.a = other.getA(); - } - - 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; - } - - public float getA() { - return a; - } - - public void setA(float a) { - this.a = a; - } -} +/* + * Created by Julian Mutter on 7/10/18 3:58 PM + * Copyright (c) 2018. All rights reserved. + * Last modified 7/10/18 3:54 PM + * + */ + +package de.frajul.endlessroll.data; + +/** + * Created by Julian on 02.08.2016. + */ +public class Color4f { + + private float r, g, b, a; + + public Color4f() { + } + + public Color4f(float r, float g, float b, float a) { + this.r = r; + this.g = g; + this.b = b; + this.a = a; + } + + public Color4f(Color4f other) { + this.r = other.getR(); + this.g = other.getG(); + this.b = other.getB(); + this.a = other.getA(); + } + + 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; + } + + public float getA() { + return a; + } + + public void setA(float a) { + this.a = a; + } +} diff --git a/app/src/main/java/de/frajul/endlessroll/data/SynchronizedArrayList.java b/app/src/main/java/de/frajul/endlessroll/data/SynchronizedArrayList.java index 0bc8804..1cfb4b0 100644 --- a/app/src/main/java/de/frajul/endlessroll/data/SynchronizedArrayList.java +++ b/app/src/main/java/de/frajul/endlessroll/data/SynchronizedArrayList.java @@ -1,154 +1,154 @@ -/* - * Created by Julian Mutter on 7/10/18 3:58 PM - * Copyright (c) 2018. All rights reserved. - * Last modified 7/10/18 3:54 PM - * - */ - -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); - } -} +/* + * Created by Julian Mutter on 7/10/18 3:58 PM + * Copyright (c) 2018. All rights reserved. + * Last modified 7/10/18 3:54 PM + * + */ + +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 index 0fae3fa..f2623b7 100644 --- a/app/src/main/java/de/frajul/endlessroll/data/Vector.java +++ b/app/src/main/java/de/frajul/endlessroll/data/Vector.java @@ -1,113 +1,113 @@ -/* - * Created by Julian Mutter on 7/10/18 3:58 PM - * Copyright (c) 2018. All rights reserved. - * Last modified 7/10/18 3:54 PM - * - */ - -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 void set(float x, float y) { - this.x = x; - this.y = y; - } - - 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 abs() { - this.x = Math.abs(x); - this.y = Math.abs(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; - } -} +/* + * Created by Julian Mutter on 7/10/18 3:58 PM + * Copyright (c) 2018. All rights reserved. + * Last modified 7/10/18 3:54 PM + * + */ + +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 void set(float x, float y) { + this.x = x; + this.y = y; + } + + 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 abs() { + this.x = Math.abs(x); + this.y = Math.abs(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 index 7fbbd5d..007177a 100644 --- a/app/src/main/java/de/frajul/endlessroll/entities/AnimatedEntity.java +++ b/app/src/main/java/de/frajul/endlessroll/entities/AnimatedEntity.java @@ -1,32 +1,32 @@ -/* - * Created by Julian Mutter on 7/10/18 3:58 PM - * Copyright (c) 2018. All rights reserved. - * Last modified 7/10/18 3:54 PM - * - */ - -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()); - } - -} +/* + * Created by Julian Mutter on 7/10/18 3:58 PM + * Copyright (c) 2018. All rights reserved. + * Last modified 7/10/18 3:54 PM + * + */ + +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 index d321398..0950a0d 100644 --- a/app/src/main/java/de/frajul/endlessroll/entities/Animation.java +++ b/app/src/main/java/de/frajul/endlessroll/entities/Animation.java @@ -1,62 +1,62 @@ -/* - * Created by Julian Mutter on 7/10/18 3:58 PM - * Copyright (c) 2018. All rights reserved. - * Last modified 7/10/18 3:54 PM - * - */ - -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; - } -} +/* + * Created by Julian Mutter on 7/10/18 3:58 PM + * Copyright (c) 2018. All rights reserved. + * Last modified 7/10/18 3:54 PM + * + */ + +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 index d0352fb..b3182b3 100644 --- a/app/src/main/java/de/frajul/endlessroll/entities/Background.java +++ b/app/src/main/java/de/frajul/endlessroll/entities/Background.java @@ -1,55 +1,55 @@ -/* - * Created by Julian Mutter on 7/10/18 3:58 PM - * Copyright (c) 2018. All rights reserved. - * Last modified 7/10/18 3:54 PM - * - */ - -package de.frajul.endlessroll.entities; - -import java.util.ArrayList; -import java.util.Collections; -import java.util.List; - -import de.frajul.endlessroll.entities.textures.Texture; - -/** - * Created by Julian on 20.07.2016. - */ -public class Background { - - private List layers = Collections - .synchronizedList(new ArrayList()); - - public Background(List textures) { - changeTextures(textures); - } - - public void changeTextures(List textures) { - layers.clear(); - for (int i = 0; i < textures.size(); i++) { - Texture texture = textures.get(i); - float speed = (float) Math.pow(0.95f, Math.pow(i + 1, Math.sqrt(i + 1))); - layers.add(new BackgroundLayer(texture, speed)); - } - } - - public void move(float playerMoveX, float cameraX) { - synchronized (layers) { - for (BackgroundLayer layer : layers) { - layer.move(playerMoveX, cameraX); - } - } - } - - public void resetPosition() { - synchronized (layers) { - for (BackgroundLayer layer : layers) - layer.resetPosition(); - } - } - - public List getLayers() { - return layers; - } -} +/* + * Created by Julian Mutter on 7/10/18 3:58 PM + * Copyright (c) 2018. All rights reserved. + * Last modified 7/10/18 3:54 PM + * + */ + +package de.frajul.endlessroll.entities; + +import java.util.ArrayList; +import java.util.Collections; +import java.util.List; + +import de.frajul.endlessroll.entities.textures.Texture; + +/** + * Created by Julian on 20.07.2016. + */ +public class Background { + + private List layers = Collections + .synchronizedList(new ArrayList()); + + public Background(List textures) { + changeTextures(textures); + } + + public void changeTextures(List textures) { + layers.clear(); + for (int i = 0; i < textures.size(); i++) { + Texture texture = textures.get(i); + float speed = (float) Math.pow(0.95f, Math.pow(i + 1, Math.sqrt(i + 1))); + layers.add(new BackgroundLayer(texture, speed)); + } + } + + public void move(float playerMoveX, float cameraX) { + synchronized (layers) { + for (BackgroundLayer layer : layers) { + layer.move(playerMoveX, cameraX); + } + } + } + + public void resetPosition() { + synchronized (layers) { + for (BackgroundLayer layer : layers) + layer.resetPosition(); + } + } + + public List getLayers() { + return layers; + } +} diff --git a/app/src/main/java/de/frajul/endlessroll/entities/BackgroundLayer.java b/app/src/main/java/de/frajul/endlessroll/entities/BackgroundLayer.java index 22b4dcd..61e2cc4 100644 --- a/app/src/main/java/de/frajul/endlessroll/entities/BackgroundLayer.java +++ b/app/src/main/java/de/frajul/endlessroll/entities/BackgroundLayer.java @@ -1,54 +1,54 @@ -/* - * Created by Julian Mutter on 7/10/18 3:58 PM - * Copyright (c) 2018. All rights reserved. - * Last modified 7/10/18 3:54 PM - * - */ - -package de.frajul.endlessroll.entities; - -import de.frajul.endlessroll.data.SynchronizedArrayList; -import de.frajul.endlessroll.data.Vector; -import de.frajul.endlessroll.entities.textures.Texture; - -public class BackgroundLayer extends SynchronizedArrayList { - - private final float PART_WIDTH = 5; - private final float HALF_PART_WIDTH = PART_WIDTH / 2f; - private final float HEIGHT = 2.5f; - private Texture texture; - private float speed; - - public BackgroundLayer(Texture texture, float speed) { - this.texture = texture; - this.speed = speed; - super.add(createPart(-HALF_PART_WIDTH)); - } - - 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 playerMovX, float cameraX) { - Vector movement = new Vector(playerMovX * speed, 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)); - } - -} +/* + * Created by Julian Mutter on 7/10/18 3:58 PM + * Copyright (c) 2018. All rights reserved. + * Last modified 7/10/18 3:54 PM + * + */ + +package de.frajul.endlessroll.entities; + +import de.frajul.endlessroll.data.SynchronizedArrayList; +import de.frajul.endlessroll.data.Vector; +import de.frajul.endlessroll.entities.textures.Texture; + +public class BackgroundLayer extends SynchronizedArrayList { + + private final float PART_WIDTH = 5; + private final float HALF_PART_WIDTH = PART_WIDTH / 2f; + private final float HEIGHT = 2.5f; + private Texture texture; + private float speed; + + public BackgroundLayer(Texture texture, float speed) { + this.texture = texture; + this.speed = speed; + super.add(createPart(-HALF_PART_WIDTH)); + } + + 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 playerMovX, float cameraX) { + Vector movement = new Vector(playerMovX * speed, 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 index a4789d4..a937031 100644 --- a/app/src/main/java/de/frajul/endlessroll/entities/DestroyEffect.java +++ b/app/src/main/java/de/frajul/endlessroll/entities/DestroyEffect.java @@ -1,46 +1,46 @@ -/* - * Created by Julian Mutter on 7/10/18 3:58 PM - * Copyright (c) 2018. All rights reserved. - * Last modified 7/10/18 3:54 PM - * - */ - -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; - } - } - -} +/* + * Created by Julian Mutter on 7/10/18 3:58 PM + * Copyright (c) 2018. All rights reserved. + * Last modified 7/10/18 3:54 PM + * + */ + +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 index 51385a6..d0b7f53 100644 --- a/app/src/main/java/de/frajul/endlessroll/entities/Entity.java +++ b/app/src/main/java/de/frajul/endlessroll/entities/Entity.java @@ -1,138 +1,138 @@ -/* - * Created by Julian Mutter on 7/10/18 3:58 PM - * Copyright (c) 2018. All rights reserved. - * Last modified 7/10/18 3:54 PM - * - */ - -package de.frajul.endlessroll.entities; - -import de.frajul.endlessroll.data.Color3f; -import de.frajul.endlessroll.data.Vector; -import de.frajul.endlessroll.entities.collision.geometry.Quad; -import de.frajul.endlessroll.entities.textures.Texture; - -/** - * 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; - private Color3f color = null; - - 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 float calcTexScaleX() { - return getMaxTexSize().x == 0 ? 1 : getWidth() / getMaxTexSize().x; - } - - public float calcTexScaleY() { - return getMaxTexSize().y == 0 ? 1 : getHeight() / getMaxTexSize().y; - } - - public void setVisible(boolean visible) { - this.visible = visible; - } - - public boolean isVisible() { - return visible; - } - - public void setColor(Color3f color) { - this.color = color; - } - - public Color3f getColor() { - return color; - } -} +/* + * Created by Julian Mutter on 7/10/18 3:58 PM + * Copyright (c) 2018. All rights reserved. + * Last modified 7/10/18 3:54 PM + * + */ + +package de.frajul.endlessroll.entities; + +import de.frajul.endlessroll.data.Color3f; +import de.frajul.endlessroll.data.Vector; +import de.frajul.endlessroll.entities.collision.geometry.Quad; +import de.frajul.endlessroll.entities.textures.Texture; + +/** + * 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; + private Color3f color = null; + + 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 float calcTexScaleX() { + return getMaxTexSize().x == 0 ? 1 : getWidth() / getMaxTexSize().x; + } + + public float calcTexScaleY() { + return getMaxTexSize().y == 0 ? 1 : getHeight() / getMaxTexSize().y; + } + + public void setVisible(boolean visible) { + this.visible = visible; + } + + public boolean isVisible() { + return visible; + } + + public void setColor(Color3f color) { + this.color = color; + } + + public Color3f getColor() { + return color; + } +} diff --git a/app/src/main/java/de/frajul/endlessroll/entities/Goal.java b/app/src/main/java/de/frajul/endlessroll/entities/Goal.java index 8afab3e..e0f0073 100644 --- a/app/src/main/java/de/frajul/endlessroll/entities/Goal.java +++ b/app/src/main/java/de/frajul/endlessroll/entities/Goal.java @@ -1,23 +1,23 @@ -/* - * Created by Julian Mutter on 7/10/18 3:58 PM - * Copyright (c) 2018. All rights reserved. - * Last modified 7/10/18 3:54 PM - * - */ - -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)); - } -} +/* + * Created by Julian Mutter on 7/10/18 3:58 PM + * Copyright (c) 2018. All rights reserved. + * Last modified 7/10/18 3:54 PM + * + */ + +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/Obstacle.java b/app/src/main/java/de/frajul/endlessroll/entities/Obstacle.java index b06ae51..e7b3e4a 100644 --- a/app/src/main/java/de/frajul/endlessroll/entities/Obstacle.java +++ b/app/src/main/java/de/frajul/endlessroll/entities/Obstacle.java @@ -1,118 +1,118 @@ -/* - * Created by Julian Mutter on 7/10/18 3:58 PM - * Copyright (c) 2018. All rights reserved. - * Last modified 7/10/18 3:54 PM - * - */ - -package de.frajul.endlessroll.entities; - -import de.frajul.endlessroll.data.Vector; -import de.frajul.endlessroll.levels.MoveComponent; -import de.frajul.endlessroll.levels.ObstacleData; -import de.frajul.endlessroll.levels.worlds.World; - -/** - * Created by Julian on 20.11.2015. - */ -public class Obstacle extends Entity { - - private boolean deadly; - private boolean floating; - private boolean moving; - private final float GRID_SQUARE_SIZE = 0.1f; - private Vector gridSize; - private MoveComponent moveComponent; - private float movementMultiplier = 1.0f; - - private float moveProgress; - private float moveDirection; - - private int bombExplosionState = -1; - - public Obstacle(World world, ObstacleData data, float terrainEdge, Player player) { - super(world.getObstacleTexture(), new Vector(data.getX(), data.getY()), data.getWidth(), - data.getHeight()); - this.deadly = data.isDeadly(); - this.floating = data.isFloating(); - this.moving = data.isMoving(); - this.moveComponent = data.getMoveComponent(); - if (!floating) - super.setToTerrain(terrainEdge); - if (moveComponent != null && moving) { - moveComponent.init(super.getPosition()); - moveDirection = moveComponent.getDirection(); - moveProgress = moveComponent.getStartOffset(); - //Constant player speed assumed - float triggerX = super.getPosition().getX() - super.getWidth() / 2 - moveComponent - .getTriggerDistance(); - float timeTillPlayerReachesTrigger = player.getSpeed() * (triggerX - player - .getRightEdge()); - moveDirection *= -1; - moveWithMoveComponent(timeTillPlayerReachesTrigger * 1000 * 1000, player.getSpeed()); - moveDirection *= -1; - } - gridSize = calcGridSize(); - } - - private Vector calcGridSize() { - int gridWidth = (int) (width / GRID_SQUARE_SIZE); - int gridHeight = (int) (height / GRID_SQUARE_SIZE); - gridWidth = Math.max(gridWidth, 2); - gridHeight = Math.max(gridHeight, 2); - return new Vector(gridWidth, gridHeight); - } - - public void slowMovementForOneFrame(float value) { - movementMultiplier *= value; - } - - public void moveWithMoveComponent(float frameTime, float playerSpeed) { - if (moveComponent.isHasPlayerXSpeed()) { - moveComponent.calcSpeedForPlayerSpeed(playerSpeed); - } - float distance = frameTime * moveComponent - .getSpeed() * moveComponent.TRANSITION_VALUE * movementMultiplier; - float newProgress = moveDirection * distance / moveComponent.getLength(); - moveProgress += newProgress; - if (moveProgress < 0) { - moveProgress *= -1; - moveDirection *= -1; - } - while (moveProgress > 1) { - moveProgress -= 2; - if (moveProgress < 0) { - moveProgress *= -1; - moveDirection *= -1; - } - } - - super.setPosition(moveComponent.getPositionForProgress(moveProgress)); - super.setMovement(moveComponent.getMovementVector(moveDirection)); - movementMultiplier = 1.0f; - } - - public boolean isMoving() { - return moving; - } - - public boolean isDeadly() { - return deadly; - } - - public boolean isFloating() { - return floating; - } - - public Vector getGridSize() { - return gridSize; - } - - public int getBombExplosionState() { - return bombExplosionState; - } - - public void setBombExplosionState(int bombExplosionState) { - this.bombExplosionState = bombExplosionState; - } -} +/* + * Created by Julian Mutter on 7/10/18 3:58 PM + * Copyright (c) 2018. All rights reserved. + * Last modified 7/10/18 3:54 PM + * + */ + +package de.frajul.endlessroll.entities; + +import de.frajul.endlessroll.data.Vector; +import de.frajul.endlessroll.levels.MoveComponent; +import de.frajul.endlessroll.levels.ObstacleData; +import de.frajul.endlessroll.levels.worlds.World; + +/** + * Created by Julian on 20.11.2015. + */ +public class Obstacle extends Entity { + + private boolean deadly; + private boolean floating; + private boolean moving; + private final float GRID_SQUARE_SIZE = 0.1f; + private Vector gridSize; + private MoveComponent moveComponent; + private float movementMultiplier = 1.0f; + + private float moveProgress; + private float moveDirection; + + private int bombExplosionState = -1; + + public Obstacle(World world, ObstacleData data, float terrainEdge, Player player) { + super(world.getObstacleTexture(), new Vector(data.getX(), data.getY()), data.getWidth(), + data.getHeight()); + this.deadly = data.isDeadly(); + this.floating = data.isFloating(); + this.moving = data.isMoving(); + this.moveComponent = data.getMoveComponent(); + if (!floating) + super.setToTerrain(terrainEdge); + if (moveComponent != null && moving) { + moveComponent.init(super.getPosition()); + moveDirection = moveComponent.getDirection(); + moveProgress = moveComponent.getStartOffset(); + //Constant player speed assumed + float triggerX = super.getPosition().getX() - super.getWidth() / 2 - moveComponent + .getTriggerDistance(); + float timeTillPlayerReachesTrigger = player.getSpeed() * (triggerX - player + .getRightEdge()); + moveDirection *= -1; + moveWithMoveComponent(timeTillPlayerReachesTrigger * 1000 * 1000, player.getSpeed()); + moveDirection *= -1; + } + gridSize = calcGridSize(); + } + + private Vector calcGridSize() { + int gridWidth = (int) (width / GRID_SQUARE_SIZE); + int gridHeight = (int) (height / GRID_SQUARE_SIZE); + gridWidth = Math.max(gridWidth, 2); + gridHeight = Math.max(gridHeight, 2); + return new Vector(gridWidth, gridHeight); + } + + public void slowMovementForOneFrame(float value) { + movementMultiplier *= value; + } + + public void moveWithMoveComponent(float frameTime, float playerSpeed) { + if (moveComponent.isHasPlayerXSpeed()) { + moveComponent.calcSpeedForPlayerSpeed(playerSpeed); + } + float distance = frameTime * moveComponent + .getSpeed() * moveComponent.TRANSITION_VALUE * movementMultiplier; + float newProgress = moveDirection * distance / moveComponent.getLength(); + moveProgress += newProgress; + if (moveProgress < 0) { + moveProgress *= -1; + moveDirection *= -1; + } + while (moveProgress > 1) { + moveProgress -= 2; + if (moveProgress < 0) { + moveProgress *= -1; + moveDirection *= -1; + } + } + + super.setPosition(moveComponent.getPositionForProgress(moveProgress)); + super.setMovement(moveComponent.getMovementVector(moveDirection)); + movementMultiplier = 1.0f; + } + + public boolean isMoving() { + return moving; + } + + public boolean isDeadly() { + return deadly; + } + + public boolean isFloating() { + return floating; + } + + public Vector getGridSize() { + return gridSize; + } + + public int getBombExplosionState() { + return bombExplosionState; + } + + public void setBombExplosionState(int bombExplosionState) { + this.bombExplosionState = bombExplosionState; + } +} diff --git a/app/src/main/java/de/frajul/endlessroll/entities/Player.java b/app/src/main/java/de/frajul/endlessroll/entities/Player.java index 4a09f36..f9cc258 100644 --- a/app/src/main/java/de/frajul/endlessroll/entities/Player.java +++ b/app/src/main/java/de/frajul/endlessroll/entities/Player.java @@ -1,149 +1,149 @@ -/* - * Created by Julian Mutter on 7/10/18 3:58 PM - * Copyright (c) 2018. All rights reserved. - * Last modified 7/10/18 3:54 PM - * - */ - -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.Stasis; -import de.frajul.endlessroll.main.game.Timer; - -/** - * Created by Julian on 20.11.2015. - */ -public class Player extends Entity { - - 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 stases = 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)); - gravityForce = 0; - hasSuperPower = false; - forces.clear(); - 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.getFrameTimeMilliseconds(); - hasSuperPower = superPowerDuration >= currentSuperPowerDuration; - superPowerParticles.setPosition(new Vector(super.getPosition())); - } - if (!hasSuperPower && superPowerParticles != null) - superPowerParticles.kill(); - - for (Stasis stasis : stases) - stasis.influencePlayerMovementValues(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() { - stases.clear(); - forces.clear(); - } - - public float getProgress(float goalX) { - return (getPosition().x - START_X) / (goalX - START_X); - } - - public float getXFromStart(){ - return getPosition().x - START_X; - } - - public float getSpeed() { - return speed; - } - - public boolean hasSuperPower() { - return hasSuperPower; - } - - public void addStasis(Stasis stasis) { - stases.add(stasis); - } - - public List getStases() { - return stases; - } - - 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); - float circumference = 2 * 3.14f * RADIUS; - float rotation = -360 * (movement.x / circumference); - rotate(rotation); - } - -} +/* + * Created by Julian Mutter on 7/10/18 3:58 PM + * Copyright (c) 2018. All rights reserved. + * Last modified 7/10/18 3:54 PM + * + */ + +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.Stasis; +import de.frajul.endlessroll.main.game.Timer; + +/** + * Created by Julian on 20.11.2015. + */ +public class Player extends Entity { + + 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 stases = 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)); + gravityForce = 0; + hasSuperPower = false; + forces.clear(); + 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.getFrameTimeMilliseconds(); + hasSuperPower = superPowerDuration >= currentSuperPowerDuration; + superPowerParticles.setPosition(new Vector(super.getPosition())); + } + if (!hasSuperPower && superPowerParticles != null) + superPowerParticles.kill(); + + for (Stasis stasis : stases) + stasis.influencePlayerMovementValues(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() { + stases.clear(); + forces.clear(); + } + + public float getProgress(float goalX) { + return (getPosition().x - START_X) / (goalX - START_X); + } + + public float getXFromStart(){ + return getPosition().x - START_X; + } + + public float getSpeed() { + return speed; + } + + public boolean hasSuperPower() { + return hasSuperPower; + } + + public void addStasis(Stasis stasis) { + stases.add(stasis); + } + + public List getStases() { + return stases; + } + + 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); + float circumference = 2 * 3.14f * RADIUS; + float rotation = -360 * (movement.x / circumference); + rotate(rotation); + } + +} diff --git a/app/src/main/java/de/frajul/endlessroll/entities/Vertex.java b/app/src/main/java/de/frajul/endlessroll/entities/Vertex.java index 9392fe8..3eb29f8 100644 --- a/app/src/main/java/de/frajul/endlessroll/entities/Vertex.java +++ b/app/src/main/java/de/frajul/endlessroll/entities/Vertex.java @@ -1,51 +1,51 @@ -/* - * Created by Julian Mutter on 7/10/18 3:58 PM - * Copyright (c) 2018. All rights reserved. - * Last modified 7/10/18 3:54 PM - * - */ - -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; - } -} +/* + * Created by Julian Mutter on 7/10/18 3:58 PM + * Copyright (c) 2018. All rights reserved. + * Last modified 7/10/18 3:54 PM + * + */ + +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/Collectables.java b/app/src/main/java/de/frajul/endlessroll/entities/collectables/Collectables.java index e723393..e4c85a8 100644 --- a/app/src/main/java/de/frajul/endlessroll/entities/collectables/Collectables.java +++ b/app/src/main/java/de/frajul/endlessroll/entities/collectables/Collectables.java @@ -1,74 +1,74 @@ -/* - * Created by Julian Mutter on 7/10/18 3:58 PM - * Copyright (c) 2018. All rights reserved. - * Last modified 7/10/18 3:54 PM - * - */ - -package de.frajul.endlessroll.entities.collectables; - -import java.util.ArrayList; -import java.util.Collections; -import java.util.List; - -import de.frajul.endlessroll.data.SynchronizedArrayList; -import de.frajul.endlessroll.entities.Entity; -import de.frajul.endlessroll.entities.textures.TexturePack; -import de.frajul.endlessroll.levels.Level; -import de.frajul.endlessroll.levels.PositionData; - -/** - * Created by Julian on 06.09.2017. - */ - -public class Collectables extends SynchronizedArrayList { - - private List stars = Collections.synchronizedList(new ArrayList()); - private Energy energy; - - public void init(Level level, TexturePack textures) { - for (int i = 0; i < level.getStars().size(); i++) { - if (level.isStarCollected(i)) - continue; - addStar(new Star(i, textures.star, level.getStars().get(i))); - } - - PositionData energyData = level.getEnergyData(); - if (energyData != null && !level.isEnergyCollected()) { - setEnergy(new Energy(textures.energy, energyData)); - } - } - - @Override - public synchronized boolean remove(Object object) { - if (object instanceof Star) - stars.remove(object); - else - energy = null; - return super.remove(object); - } - - private void addStar(Star star) { - stars.add(star); - super.add(star); - } - - private void setEnergy(Energy energy) { - this.energy = energy; - super.add(energy); - } - - public void reset() { - stars.clear(); - energy = null; - super.clear(); - } - - public List getStars() { - return stars; - } - - public Energy getEnergy() { - return energy; - } -} +/* + * Created by Julian Mutter on 7/10/18 3:58 PM + * Copyright (c) 2018. All rights reserved. + * Last modified 7/10/18 3:54 PM + * + */ + +package de.frajul.endlessroll.entities.collectables; + +import java.util.ArrayList; +import java.util.Collections; +import java.util.List; + +import de.frajul.endlessroll.data.SynchronizedArrayList; +import de.frajul.endlessroll.entities.Entity; +import de.frajul.endlessroll.entities.textures.TexturePack; +import de.frajul.endlessroll.levels.Level; +import de.frajul.endlessroll.levels.PositionData; + +/** + * Created by Julian on 06.09.2017. + */ + +public class Collectables extends SynchronizedArrayList { + + private List stars = Collections.synchronizedList(new ArrayList()); + private Energy energy; + + public void init(Level level, TexturePack textures) { + for (int i = 0; i < level.getStars().size(); i++) { + if (level.isStarCollected(i)) + continue; + addStar(new Star(i, textures.star, level.getStars().get(i))); + } + + PositionData energyData = level.getEnergyData(); + if (energyData != null && !level.isEnergyCollected()) { + setEnergy(new Energy(textures.energy, energyData)); + } + } + + @Override + public synchronized boolean remove(Object object) { + if (object instanceof Star) + stars.remove(object); + else + energy = null; + return super.remove(object); + } + + private void addStar(Star star) { + stars.add(star); + super.add(star); + } + + private void setEnergy(Energy energy) { + this.energy = energy; + super.add(energy); + } + + public void reset() { + stars.clear(); + energy = null; + super.clear(); + } + + public List getStars() { + return stars; + } + + public Energy getEnergy() { + return energy; + } +} 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 index 1a84eb3..7d26fc7 100644 --- a/app/src/main/java/de/frajul/endlessroll/entities/collectables/Energy.java +++ b/app/src/main/java/de/frajul/endlessroll/entities/collectables/Energy.java @@ -1,24 +1,24 @@ -/* - * Created by Julian Mutter on 7/10/18 3:58 PM - * Copyright (c) 2018. All rights reserved. - * Last modified 7/10/18 3:54 PM - * - */ - -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); - } -} +/* + * Created by Julian Mutter on 7/10/18 3:58 PM + * Copyright (c) 2018. All rights reserved. + * Last modified 7/10/18 3:54 PM + * + */ + +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 index 74bad9e..b1a1d43 100644 --- a/app/src/main/java/de/frajul/endlessroll/entities/collectables/Star.java +++ b/app/src/main/java/de/frajul/endlessroll/entities/collectables/Star.java @@ -1,28 +1,28 @@ -/* - * Created by Julian Mutter on 7/10/18 3:58 PM - * Copyright (c) 2018. All rights reserved. - * Last modified 7/10/18 3:54 PM - * - */ - -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; - } -} +/* + * Created by Julian Mutter on 7/10/18 3:58 PM + * Copyright (c) 2018. All rights reserved. + * Last modified 7/10/18 3:54 PM + * + */ + +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 index efb70d7..c2d0914 100644 --- a/app/src/main/java/de/frajul/endlessroll/entities/collision/CircleTriangleCollisionDetector.java +++ b/app/src/main/java/de/frajul/endlessroll/entities/collision/CircleTriangleCollisionDetector.java @@ -1,82 +1,82 @@ -/* - * Created by Julian Mutter on 7/10/18 3:58 PM - * Copyright (c) 2018. All rights reserved. - * Last modified 7/10/18 3:54 PM - * - */ - -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 isCircleTriangleCollision(Circle circle, Triangle triangle) { - if (circleIntersectingWithTriangleVertices(circle, triangle)) - return true; - - if (circleCenterInsideTriangle(circle, triangle)) - return true; - - return circleIntersectingWithTriangleEdges(circle, triangle); - } - - private boolean circleIntersectingWithTriangleEdges(Circle circle, Triangle triangle) { - Vector edge1 = triangle.getBottomRightVertex().vectorTo(triangle.getTopRightVertex()); - Vector edge2 = triangle.getTopRightVertex().vectorTo(triangle.getBottomLeftVertex()); - Vector edge3 = triangle.getBottomLeftVertex().vectorTo(triangle.getBottomRightVertex()); - - boolean intersectingWithEdge1 = circleIntersectingWithTriangleEdge(circle, triangle.getBottomRightVertex(), edge1); - boolean intersectingWithEdge2 = circleIntersectingWithTriangleEdge(circle, triangle.getTopRightVertex(), edge2); - boolean intersectingWithEdge3 = circleIntersectingWithTriangleEdge(circle, triangle.getBottomLeftVertex(), edge3); - return intersectingWithEdge1 || intersectingWithEdge2 || intersectingWithEdge3; - } - - private boolean circleIntersectingWithTriangleEdge(Circle circle, Vector vertex, Vector edge) { - Vector vertexToCenter = vertex.vectorTo(circle.getPosition()); - 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) - return Math.sqrt(vertexToCenter.x * vertexToCenter.x + vertexToCenter.y * vertexToCenter.y - k * k) <= circle.getRadius(); - } - return false; - } - - private boolean circleCenterInsideTriangle(Circle circle, Triangle triangle) { - Vector vertex1To2 = triangle.getBottomRightVertex().vectorTo(triangle.getTopRightVertex()); - Vector vertex2To3 = triangle.getTopRightVertex().vectorTo(triangle.getBottomLeftVertex()); - Vector vertex3To1 = triangle.getBottomLeftVertex().vectorTo(triangle.getBottomRightVertex()); - Vector vertex1ToCenter = triangle.getBottomRightVertex().vectorTo(circle.getPosition()); - Vector vertex2ToCenter = triangle.getTopRightVertex().vectorTo(circle.getPosition()); - Vector vertex3ToCenter = triangle.getBottomLeftVertex().vectorTo(circle.getPosition()); - - 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.getBottomRightVertex()); - boolean intersectingWithVertex2 = circleIntersectingWithTriangleVertex(circle, triangle.getTopRightVertex()); - boolean intersectingWithVertex3 = circleIntersectingWithTriangleVertex(circle, triangle.getBottomLeftVertex()); - return intersectingWithVertex1 || intersectingWithVertex2 || intersectingWithVertex3; - } - - private boolean circleIntersectingWithTriangleVertex(Circle circle, Vector vertex) { - Vector centerToVertex = circle.getPosition().vectorTo(vertex); - return centerToVertex.length() <= circle.getRadius(); - } - -} +/* + * Created by Julian Mutter on 7/10/18 3:58 PM + * Copyright (c) 2018. All rights reserved. + * Last modified 7/10/18 3:54 PM + * + */ + +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 isCircleTriangleCollision(Circle circle, Triangle triangle) { + if (circleIntersectingWithTriangleVertices(circle, triangle)) + return true; + + if (circleCenterInsideTriangle(circle, triangle)) + return true; + + return circleIntersectingWithTriangleEdges(circle, triangle); + } + + private boolean circleIntersectingWithTriangleEdges(Circle circle, Triangle triangle) { + Vector edge1 = triangle.getBottomRightVertex().vectorTo(triangle.getTopRightVertex()); + Vector edge2 = triangle.getTopRightVertex().vectorTo(triangle.getBottomLeftVertex()); + Vector edge3 = triangle.getBottomLeftVertex().vectorTo(triangle.getBottomRightVertex()); + + boolean intersectingWithEdge1 = circleIntersectingWithTriangleEdge(circle, triangle.getBottomRightVertex(), edge1); + boolean intersectingWithEdge2 = circleIntersectingWithTriangleEdge(circle, triangle.getTopRightVertex(), edge2); + boolean intersectingWithEdge3 = circleIntersectingWithTriangleEdge(circle, triangle.getBottomLeftVertex(), edge3); + return intersectingWithEdge1 || intersectingWithEdge2 || intersectingWithEdge3; + } + + private boolean circleIntersectingWithTriangleEdge(Circle circle, Vector vertex, Vector edge) { + Vector vertexToCenter = vertex.vectorTo(circle.getPosition()); + 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) + return Math.sqrt(vertexToCenter.x * vertexToCenter.x + vertexToCenter.y * vertexToCenter.y - k * k) <= circle.getRadius(); + } + return false; + } + + private boolean circleCenterInsideTriangle(Circle circle, Triangle triangle) { + Vector vertex1To2 = triangle.getBottomRightVertex().vectorTo(triangle.getTopRightVertex()); + Vector vertex2To3 = triangle.getTopRightVertex().vectorTo(triangle.getBottomLeftVertex()); + Vector vertex3To1 = triangle.getBottomLeftVertex().vectorTo(triangle.getBottomRightVertex()); + Vector vertex1ToCenter = triangle.getBottomRightVertex().vectorTo(circle.getPosition()); + Vector vertex2ToCenter = triangle.getTopRightVertex().vectorTo(circle.getPosition()); + Vector vertex3ToCenter = triangle.getBottomLeftVertex().vectorTo(circle.getPosition()); + + 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.getBottomRightVertex()); + boolean intersectingWithVertex2 = circleIntersectingWithTriangleVertex(circle, triangle.getTopRightVertex()); + boolean intersectingWithVertex3 = circleIntersectingWithTriangleVertex(circle, triangle.getBottomLeftVertex()); + return intersectingWithVertex1 || intersectingWithVertex2 || intersectingWithVertex3; + } + + private boolean circleIntersectingWithTriangleVertex(Circle circle, Vector vertex) { + Vector centerToVertex = circle.getPosition().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 index 7f24757..9171ef5 100644 --- a/app/src/main/java/de/frajul/endlessroll/entities/collision/CollisionDetector.java +++ b/app/src/main/java/de/frajul/endlessroll/entities/collision/CollisionDetector.java @@ -1,356 +1,356 @@ -/* - * Created by Julian Mutter on 7/10/18 3:58 PM - * Copyright (c) 2018. All rights reserved. - * Last modified 7/10/18 3:54 PM - * - */ - -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.Geometry; -import de.frajul.endlessroll.entities.collision.geometry.Quad; -import de.frajul.endlessroll.entities.collision.geometry.Triangle; -import de.frajul.endlessroll.entities.tileLists.Tile; - -/** - * Created by Julian on 01.12.2015. - */ -public class CollisionDetector { - - private CircleTriangleCollisionDetector triangleDetector; - - public CollisionDetector() { - triangleDetector = new CircleTriangleCollisionDetector(); - } - - public boolean isCollision(Geometry g1, Geometry g2) { - if (g1 instanceof Triangle) { - if (g2 instanceof Triangle) - return isTriangleTriangleCollision((Triangle) g1, (Triangle) g2); - if (g2 instanceof Quad) - return isQuadTriangleCollision((Quad) g2, (Triangle) g1); - if (g2 instanceof Circle) - return isCircleTriangleCollision((Circle) g2, (Triangle) g1); - } - if (g1 instanceof Quad) { - if (g2 instanceof Triangle) - return isQuadTriangleCollision((Quad) g1, (Triangle) g2); - if (g2 instanceof Quad) - return isQuadQuadCollision((Quad) g1, (Quad) g2); - if (g2 instanceof Circle) - return isCircleQuadCollision((Circle) g2, (Quad) g1); - } - if (g1 instanceof Circle) { - if (g2 instanceof Triangle) - return isCircleTriangleCollision((Circle) g1, (Triangle) g2); - if (g2 instanceof Quad) - return isCircleQuadCollision((Circle) g1, (Quad) g2); - if (g2 instanceof Circle) - return isCircleCircleCollision((Circle) g1, (Circle) g2); - } - return false; - } - - public boolean isPointInQuad(Vector point, Quad quad) { - if (point.getX() >= quad.getLeftEdge() && point.getX() <= quad.getRightEdge()) { - return point.getY() >= quad.getBottomEdge() && point.getY() <= quad.getTopEdge(); - } - return false; - } - - public boolean isCircleCircleCollision(Circle c1, Circle c2) { - float distance = Math.abs(c1.getPosition().vectorTo(c2.getPosition()).length()); - float radiusSum = c1.getRadius() + c2.getRadius(); - return distance < radiusSum; - } - - public boolean isCircleQuadCollision(Circle circle, Quad quad) { - Vector distance = circle.getPosition().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.isCircleTriangleCollision(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; - return !(yDistance >= q1.getHeight() / 2 + q2.getHeight() / 2); - } - - public boolean isTriangleTriangleCollision(Triangle triangle1, Triangle triangle2) { - boolean triangle1Vertex1InTriangle2 = isVertexInTriangle(triangle1.getBottomRightVertex(), triangle2); - if (triangle1Vertex1InTriangle2) - return true; - boolean triangle1Vertex2InTriangle2 = isVertexInTriangle(triangle1.getTopRightVertex(), triangle2); - if (triangle1Vertex2InTriangle2) - return true; - boolean triangle1Vertex3InTriangle2 = isVertexInTriangle(triangle1.getBottomLeftVertex(), triangle2); - if (triangle1Vertex3InTriangle2) - return true; - boolean triangle2Vertex1InTriangle1 = isVertexInTriangle(triangle2.getBottomRightVertex(), triangle1); - if (triangle2Vertex1InTriangle1) - return true; - boolean triangle2Vertex2InTriangle1 = isVertexInTriangle(triangle2.getTopRightVertex(), triangle1); - if (triangle2Vertex2InTriangle1) - return true; - boolean triangle2Vertex3InTriangle1 = isVertexInTriangle(triangle2.getBottomLeftVertex(), triangle1); - return triangle2Vertex3InTriangle1; - } - - 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 = isPointInQuad(triangle.getBottomRightVertex(), quad); - if (triangleVertex1InQuad) - return true; - boolean triangleVertex2InQuad = isPointInQuad(triangle.getTopRightVertex(), quad); - if (triangleVertex2InQuad) - return true; - boolean triangleVertex3InQuad = isPointInQuad(triangle.getBottomLeftVertex(), quad); - if (triangleVertex3InQuad) - return true; - return triangle.getTopEdge() >= quad.getTopEdge() && triangle.getBottomEdge() <= quad.getBottomEdge() && ((triangle.getLeftEdge() <= quad.getRightEdge() && triangle.getLeftEdge() >= quad.getLeftEdge()) || (triangle.getRightEdge() <= quad.getRightEdge() && triangle.getRightEdge() >= quad.getLeftEdge())); - } - - private boolean isVertexInTriangle(Vector vertex, Triangle triangle) { - if (!isPointInQuad(vertex, triangle)) - return false; - float gradient = triangle.getGradient(); - float maxVertexY = vertex.getX() * gradient + triangle.getBottomEdge(); - return vertex.getY() <= maxVertexY; - } - - public EntityCollisionData playerTerrainCollision(Player player, Tile terrainTile) { - Circle circle = new Circle(player); - if (circle.getTopEdge() < terrainTile.getTopEdge()) { - float xDistance = Math.abs(circle.getPosition().x - terrainTile.getPosition().x); - if (xDistance < circle.getRadius() + terrainTile.getWidth() / 2) - return new EntityCollisionData(terrainTile, Edge.LEFT); - } - - if (isCircleQuadCollision(circle, terrainTile)) { - Edge edge = circleQuadCollisionEdge(circle, player.getMovement(), terrainTile, - terrainTile.getMovement()); - return new EntityCollisionData(terrainTile, edge); - } - return new EntityCollisionData(null, null); - } - - public EntityCollisionData playerCeilingCollision(Player player, Tile ceilingTile) { - Circle circle = new Circle(player); - if (circle.getBottomEdge() > ceilingTile.getBottomEdge()) { - float xDistance = Math.abs(circle.getPosition().x - ceilingTile.getPosition().x); - if (xDistance < circle.getRadius() + ceilingTile.getWidth() / 2) - return new EntityCollisionData(ceilingTile, Edge.LEFT); - } - - if (isCircleQuadCollision(circle, ceilingTile)) { - Edge edge = circleQuadCollisionEdge(circle, player.getMovement(), ceilingTile, - ceilingTile.getMovement()); - return new EntityCollisionData(ceilingTile, edge); - } - return new EntityCollisionData(null, null); - } - - 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) { - boolean circleFullyInsideQuad = false; - if (circle.getPosition().getX() + circle.getRadius() <= quad.getRightEdge() && circle - .getPosition().getX() - circle.getRadius() >= quad.getLeftEdge()) { - if (circle.getPosition().getY() + circle.getRadius() <= quad.getTopEdge() && circle - .getPosition().getY() - circle.getRadius() >= quad.getBottomEdge()) { - circleFullyInsideQuad = true; - } - } - if (circleFullyInsideQuad) - return circleCenterInQuadCollisionEdge(circle, circleMovement, quad, quadMovement); - return circlePartlyOutsideQuadCollisionEdge(circle, circleMovement, quad, quadMovement); - } - - private Edge circlePartlyOutsideQuadCollisionEdge(Circle circle, Vector circleMovement, Quad quad, Vector quadMovement) { - Vector relativeMovement = new Vector(circleMovement).translate(quadMovement.negate()); - - Edge edge = Edge.NONE; - if (circle.getPosition().getY() + circle.getRadius() >= quad.getTopEdge()) - edge = Edge.TOP; - else if (circle.getPosition().getY() - circle.getRadius() <= quad.getBottomEdge()) - edge = Edge.BOTTOM; - if (circle.getPosition().getX() - circle.getRadius() <= quad.getLeftEdge()) { - if (edge != Edge.NONE) { - if (edge == Edge.TOP) { - float m = -1; - float t = quad.getTopEdge() - m * quad.getLeftEdge(); - if (circle.getPosition().getY() >= m * circle.getPosition().getX() + t) - edge = Edge.TOP; - else - edge = Edge.LEFT; - } else if (edge == Edge.BOTTOM) { - float m = 1; - float t = quad.getBottomEdge() - m * quad.getLeftEdge(); - if (circle.getPosition().getY() <= m * circle.getPosition().getX() + t) - edge = Edge.BOTTOM; - else - edge = Edge.LEFT; - } - } else - edge = Edge.LEFT; - } else if (circle.getPosition().getX() + circle.getRadius() >= quad.getRightEdge()) { - if (edge != Edge.NONE) { - if (edge == Edge.TOP) { - //This movement check is because if player falls with too much speed on topLeft Vertex, sometimes RIGHT-Edge is returned - if (relativeMovement.getY() < 0) { - return Edge.TOP; - } else { - float m = 1; - float t = quad.getTopEdge() - m * quad.getRightEdge(); - if (circle.getPosition().getY() >= m * circle.getPosition().getX() + t) - edge = Edge.TOP; - else - edge = Edge.RIGHT; - } - } else if (edge == Edge.BOTTOM) { - float m = -1; - float t = quad.getBottomEdge() - m * quad.getRightEdge(); - if (circle.getPosition().getY() <= m * circle.getPosition().getX() + t) - edge = Edge.BOTTOM; - else - edge = Edge.RIGHT; - } - } else - edge = Edge.RIGHT; - } - return edge; - } - - private Edge circleCenterInQuadCollisionEdge(Circle circle, Vector circleMovement, Quad quad, Vector quadMovement) { - Vector relativeMovement = new Vector(circleMovement).translate(quadMovement.negate()); - - float m = relativeMovement.getY() / relativeMovement.getX(); - float t = circle.getPosition().getY() - m * circle.getPosition().getX(); - - float yAtLeftEdge = m * quad.getLeftEdge() + t; - boolean touchingLeftEdge = yAtLeftEdge < quad.getTopEdge() && yAtLeftEdge > quad - .getBottomEdge(); - float yAtRightEdge = m * quad.getRightEdge() + t; - boolean touchingRightEdge = yAtRightEdge < quad.getTopEdge() && yAtRightEdge > quad - .getBottomEdge(); - - float xAtTopEdge = (quad.getTopEdge() - t) / m; - boolean touchingTopEdge = xAtTopEdge >= quad.getLeftEdge() && xAtTopEdge <= quad - .getRightEdge(); - float xAtBottomEdge = (quad.getBottomEdge() - t) / m; - boolean touchingBottomEdge = xAtBottomEdge >= quad.getLeftEdge() && xAtBottomEdge <= quad - .getRightEdge(); - - if (relativeMovement.getX() == 0) { - if (circle.getPosition().getX() - circle.getRadius() <= quad.getRightEdge() && circle - .getPosition().getX() + circle.getRadius() >= quad.getLeftEdge()) { - touchingTopEdge = true; - touchingBottomEdge = true; - } - } - - // CORNERS BELONGING TO TOP / BOTTOM EDGES - if (touchingLeftEdge) { - if (touchingRightEdge) { - if (circle.getPosition().getX() <= quad.getPosition().getX()) - return Edge.LEFT; - return Edge.RIGHT; - } else if (touchingTopEdge) { - // Normale through vertex - float mn = -1 / m; - float tn = quad.getTopEdge() - mn * quad.getLeftEdge(); - if (circle.getPosition().getY() < mn * circle.getPosition().getX() + tn) - return Edge.LEFT; - return Edge.TOP; - } else if (touchingBottomEdge) { - // Normale through vertex - float mn = -1 / m; - float tn = quad.getBottomEdge() - mn * quad.getLeftEdge(); - if (circle.getPosition().getY() > mn * circle.getPosition().getX() + tn) - return Edge.LEFT; - return Edge.BOTTOM; - } else { - return Edge.LEFT; - } - } else if (touchingRightEdge) { - if (touchingTopEdge) { - // Normale through vertex - float mn = -1 / m; - float tn = quad.getTopEdge() - mn * quad.getRightEdge(); - if (circle.getPosition().getY() < mn * circle.getPosition().getX() + tn) - return Edge.RIGHT; - return Edge.TOP; - } else if (touchingBottomEdge) { - // Normale through vertex - float mn = -1 / m; - float tn = quad.getBottomEdge() - mn * quad.getRightEdge(); - if (circle.getPosition().getY() > mn * circle.getPosition().getX() + tn) - return Edge.RIGHT; - return Edge.BOTTOM; - } else { - return Edge.RIGHT; - } - } else if (touchingTopEdge) { - if (touchingBottomEdge) { - if (circle.getPosition().getY() >= quad.getPosition().getY()) - return Edge.TOP; - return Edge.BOTTOM; - } else { - return Edge.TOP; - } - } else if (touchingBottomEdge) { - return Edge.BOTTOM; - } - return Edge.NONE; - } -} +/* + * Created by Julian Mutter on 7/10/18 3:58 PM + * Copyright (c) 2018. All rights reserved. + * Last modified 7/10/18 3:54 PM + * + */ + +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.Geometry; +import de.frajul.endlessroll.entities.collision.geometry.Quad; +import de.frajul.endlessroll.entities.collision.geometry.Triangle; +import de.frajul.endlessroll.entities.tileLists.Tile; + +/** + * Created by Julian on 01.12.2015. + */ +public class CollisionDetector { + + private CircleTriangleCollisionDetector triangleDetector; + + public CollisionDetector() { + triangleDetector = new CircleTriangleCollisionDetector(); + } + + public boolean isCollision(Geometry g1, Geometry g2) { + if (g1 instanceof Triangle) { + if (g2 instanceof Triangle) + return isTriangleTriangleCollision((Triangle) g1, (Triangle) g2); + if (g2 instanceof Quad) + return isQuadTriangleCollision((Quad) g2, (Triangle) g1); + if (g2 instanceof Circle) + return isCircleTriangleCollision((Circle) g2, (Triangle) g1); + } + if (g1 instanceof Quad) { + if (g2 instanceof Triangle) + return isQuadTriangleCollision((Quad) g1, (Triangle) g2); + if (g2 instanceof Quad) + return isQuadQuadCollision((Quad) g1, (Quad) g2); + if (g2 instanceof Circle) + return isCircleQuadCollision((Circle) g2, (Quad) g1); + } + if (g1 instanceof Circle) { + if (g2 instanceof Triangle) + return isCircleTriangleCollision((Circle) g1, (Triangle) g2); + if (g2 instanceof Quad) + return isCircleQuadCollision((Circle) g1, (Quad) g2); + if (g2 instanceof Circle) + return isCircleCircleCollision((Circle) g1, (Circle) g2); + } + return false; + } + + public boolean isPointInQuad(Vector point, Quad quad) { + if (point.getX() >= quad.getLeftEdge() && point.getX() <= quad.getRightEdge()) { + return point.getY() >= quad.getBottomEdge() && point.getY() <= quad.getTopEdge(); + } + return false; + } + + public boolean isCircleCircleCollision(Circle c1, Circle c2) { + float distance = Math.abs(c1.getPosition().vectorTo(c2.getPosition()).length()); + float radiusSum = c1.getRadius() + c2.getRadius(); + return distance < radiusSum; + } + + public boolean isCircleQuadCollision(Circle circle, Quad quad) { + Vector distance = circle.getPosition().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.isCircleTriangleCollision(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; + return !(yDistance >= q1.getHeight() / 2 + q2.getHeight() / 2); + } + + public boolean isTriangleTriangleCollision(Triangle triangle1, Triangle triangle2) { + boolean triangle1Vertex1InTriangle2 = isVertexInTriangle(triangle1.getBottomRightVertex(), triangle2); + if (triangle1Vertex1InTriangle2) + return true; + boolean triangle1Vertex2InTriangle2 = isVertexInTriangle(triangle1.getTopRightVertex(), triangle2); + if (triangle1Vertex2InTriangle2) + return true; + boolean triangle1Vertex3InTriangle2 = isVertexInTriangle(triangle1.getBottomLeftVertex(), triangle2); + if (triangle1Vertex3InTriangle2) + return true; + boolean triangle2Vertex1InTriangle1 = isVertexInTriangle(triangle2.getBottomRightVertex(), triangle1); + if (triangle2Vertex1InTriangle1) + return true; + boolean triangle2Vertex2InTriangle1 = isVertexInTriangle(triangle2.getTopRightVertex(), triangle1); + if (triangle2Vertex2InTriangle1) + return true; + boolean triangle2Vertex3InTriangle1 = isVertexInTriangle(triangle2.getBottomLeftVertex(), triangle1); + return triangle2Vertex3InTriangle1; + } + + 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 = isPointInQuad(triangle.getBottomRightVertex(), quad); + if (triangleVertex1InQuad) + return true; + boolean triangleVertex2InQuad = isPointInQuad(triangle.getTopRightVertex(), quad); + if (triangleVertex2InQuad) + return true; + boolean triangleVertex3InQuad = isPointInQuad(triangle.getBottomLeftVertex(), quad); + if (triangleVertex3InQuad) + return true; + return triangle.getTopEdge() >= quad.getTopEdge() && triangle.getBottomEdge() <= quad.getBottomEdge() && ((triangle.getLeftEdge() <= quad.getRightEdge() && triangle.getLeftEdge() >= quad.getLeftEdge()) || (triangle.getRightEdge() <= quad.getRightEdge() && triangle.getRightEdge() >= quad.getLeftEdge())); + } + + private boolean isVertexInTriangle(Vector vertex, Triangle triangle) { + if (!isPointInQuad(vertex, triangle)) + return false; + float gradient = triangle.getGradient(); + float maxVertexY = vertex.getX() * gradient + triangle.getBottomEdge(); + return vertex.getY() <= maxVertexY; + } + + public EntityCollisionData playerTerrainCollision(Player player, Tile terrainTile) { + Circle circle = new Circle(player); + if (circle.getTopEdge() < terrainTile.getTopEdge()) { + float xDistance = Math.abs(circle.getPosition().x - terrainTile.getPosition().x); + if (xDistance < circle.getRadius() + terrainTile.getWidth() / 2) + return new EntityCollisionData(terrainTile, Edge.LEFT); + } + + if (isCircleQuadCollision(circle, terrainTile)) { + Edge edge = circleQuadCollisionEdge(circle, player.getMovement(), terrainTile, + terrainTile.getMovement()); + return new EntityCollisionData(terrainTile, edge); + } + return new EntityCollisionData(null, null); + } + + public EntityCollisionData playerCeilingCollision(Player player, Tile ceilingTile) { + Circle circle = new Circle(player); + if (circle.getBottomEdge() > ceilingTile.getBottomEdge()) { + float xDistance = Math.abs(circle.getPosition().x - ceilingTile.getPosition().x); + if (xDistance < circle.getRadius() + ceilingTile.getWidth() / 2) + return new EntityCollisionData(ceilingTile, Edge.LEFT); + } + + if (isCircleQuadCollision(circle, ceilingTile)) { + Edge edge = circleQuadCollisionEdge(circle, player.getMovement(), ceilingTile, + ceilingTile.getMovement()); + return new EntityCollisionData(ceilingTile, edge); + } + return new EntityCollisionData(null, null); + } + + 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) { + boolean circleFullyInsideQuad = false; + if (circle.getPosition().getX() + circle.getRadius() <= quad.getRightEdge() && circle + .getPosition().getX() - circle.getRadius() >= quad.getLeftEdge()) { + if (circle.getPosition().getY() + circle.getRadius() <= quad.getTopEdge() && circle + .getPosition().getY() - circle.getRadius() >= quad.getBottomEdge()) { + circleFullyInsideQuad = true; + } + } + if (circleFullyInsideQuad) + return circleCenterInQuadCollisionEdge(circle, circleMovement, quad, quadMovement); + return circlePartlyOutsideQuadCollisionEdge(circle, circleMovement, quad, quadMovement); + } + + private Edge circlePartlyOutsideQuadCollisionEdge(Circle circle, Vector circleMovement, Quad quad, Vector quadMovement) { + Vector relativeMovement = new Vector(circleMovement).translate(quadMovement.negate()); + + Edge edge = Edge.NONE; + if (circle.getPosition().getY() + circle.getRadius() >= quad.getTopEdge()) + edge = Edge.TOP; + else if (circle.getPosition().getY() - circle.getRadius() <= quad.getBottomEdge()) + edge = Edge.BOTTOM; + if (circle.getPosition().getX() - circle.getRadius() <= quad.getLeftEdge()) { + if (edge != Edge.NONE) { + if (edge == Edge.TOP) { + float m = -1; + float t = quad.getTopEdge() - m * quad.getLeftEdge(); + if (circle.getPosition().getY() >= m * circle.getPosition().getX() + t) + edge = Edge.TOP; + else + edge = Edge.LEFT; + } else if (edge == Edge.BOTTOM) { + float m = 1; + float t = quad.getBottomEdge() - m * quad.getLeftEdge(); + if (circle.getPosition().getY() <= m * circle.getPosition().getX() + t) + edge = Edge.BOTTOM; + else + edge = Edge.LEFT; + } + } else + edge = Edge.LEFT; + } else if (circle.getPosition().getX() + circle.getRadius() >= quad.getRightEdge()) { + if (edge != Edge.NONE) { + if (edge == Edge.TOP) { + //This movement check is because if player falls with too much speed on topLeft Vertex, sometimes RIGHT-Edge is returned + if (relativeMovement.getY() < 0) { + return Edge.TOP; + } else { + float m = 1; + float t = quad.getTopEdge() - m * quad.getRightEdge(); + if (circle.getPosition().getY() >= m * circle.getPosition().getX() + t) + edge = Edge.TOP; + else + edge = Edge.RIGHT; + } + } else if (edge == Edge.BOTTOM) { + float m = -1; + float t = quad.getBottomEdge() - m * quad.getRightEdge(); + if (circle.getPosition().getY() <= m * circle.getPosition().getX() + t) + edge = Edge.BOTTOM; + else + edge = Edge.RIGHT; + } + } else + edge = Edge.RIGHT; + } + return edge; + } + + private Edge circleCenterInQuadCollisionEdge(Circle circle, Vector circleMovement, Quad quad, Vector quadMovement) { + Vector relativeMovement = new Vector(circleMovement).translate(quadMovement.negate()); + + float m = relativeMovement.getY() / relativeMovement.getX(); + float t = circle.getPosition().getY() - m * circle.getPosition().getX(); + + float yAtLeftEdge = m * quad.getLeftEdge() + t; + boolean touchingLeftEdge = yAtLeftEdge < quad.getTopEdge() && yAtLeftEdge > quad + .getBottomEdge(); + float yAtRightEdge = m * quad.getRightEdge() + t; + boolean touchingRightEdge = yAtRightEdge < quad.getTopEdge() && yAtRightEdge > quad + .getBottomEdge(); + + float xAtTopEdge = (quad.getTopEdge() - t) / m; + boolean touchingTopEdge = xAtTopEdge >= quad.getLeftEdge() && xAtTopEdge <= quad + .getRightEdge(); + float xAtBottomEdge = (quad.getBottomEdge() - t) / m; + boolean touchingBottomEdge = xAtBottomEdge >= quad.getLeftEdge() && xAtBottomEdge <= quad + .getRightEdge(); + + if (relativeMovement.getX() == 0) { + if (circle.getPosition().getX() - circle.getRadius() <= quad.getRightEdge() && circle + .getPosition().getX() + circle.getRadius() >= quad.getLeftEdge()) { + touchingTopEdge = true; + touchingBottomEdge = true; + } + } + + // CORNERS BELONGING TO TOP / BOTTOM EDGES + if (touchingLeftEdge) { + if (touchingRightEdge) { + if (circle.getPosition().getX() <= quad.getPosition().getX()) + return Edge.LEFT; + return Edge.RIGHT; + } else if (touchingTopEdge) { + // Normale through vertex + float mn = -1 / m; + float tn = quad.getTopEdge() - mn * quad.getLeftEdge(); + if (circle.getPosition().getY() < mn * circle.getPosition().getX() + tn) + return Edge.LEFT; + return Edge.TOP; + } else if (touchingBottomEdge) { + // Normale through vertex + float mn = -1 / m; + float tn = quad.getBottomEdge() - mn * quad.getLeftEdge(); + if (circle.getPosition().getY() > mn * circle.getPosition().getX() + tn) + return Edge.LEFT; + return Edge.BOTTOM; + } else { + return Edge.LEFT; + } + } else if (touchingRightEdge) { + if (touchingTopEdge) { + // Normale through vertex + float mn = -1 / m; + float tn = quad.getTopEdge() - mn * quad.getRightEdge(); + if (circle.getPosition().getY() < mn * circle.getPosition().getX() + tn) + return Edge.RIGHT; + return Edge.TOP; + } else if (touchingBottomEdge) { + // Normale through vertex + float mn = -1 / m; + float tn = quad.getBottomEdge() - mn * quad.getRightEdge(); + if (circle.getPosition().getY() > mn * circle.getPosition().getX() + tn) + return Edge.RIGHT; + return Edge.BOTTOM; + } else { + return Edge.RIGHT; + } + } else if (touchingTopEdge) { + if (touchingBottomEdge) { + if (circle.getPosition().getY() >= quad.getPosition().getY()) + return Edge.TOP; + return Edge.BOTTOM; + } else { + return Edge.TOP; + } + } else if (touchingBottomEdge) { + return Edge.BOTTOM; + } + 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 index 90c95b6..e3be439 100644 --- a/app/src/main/java/de/frajul/endlessroll/entities/collision/CollisionManager.java +++ b/app/src/main/java/de/frajul/endlessroll/entities/collision/CollisionManager.java @@ -1,109 +1,109 @@ -/* - * Created by Julian Mutter on 7/10/18 3:58 PM - * Copyright (c) 2018. All rights reserved. - * Last modified 7/10/18 3:54 PM - * - */ - -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); - if (data.getEdge() != Edge.TOP) - game.onGameOver(true); - } - - private void checkCeilingCollision(EntityCollisionData data) { - checkEntityCollision(data); - if (data.getEdge() != Edge.BOTTOM) - 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); - } - } - } - - private void checkEntityCollision(EntityCollisionData data) { - 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.getPosition().x = data.getEntity().getLeftEdge() - player.RADIUS; - break; - case RIGHT: - player.getPosition().x = data.getEntity().getRightEdge() + player.RADIUS; - break; - } - } - -} +/* + * Created by Julian Mutter on 7/10/18 3:58 PM + * Copyright (c) 2018. All rights reserved. + * Last modified 7/10/18 3:54 PM + * + */ + +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); + if (data.getEdge() != Edge.TOP) + game.onGameOver(true); + } + + private void checkCeilingCollision(EntityCollisionData data) { + checkEntityCollision(data); + if (data.getEdge() != Edge.BOTTOM) + 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); + } + } + } + + private void checkEntityCollision(EntityCollisionData data) { + 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.getPosition().x = data.getEntity().getLeftEdge() - player.RADIUS; + break; + case RIGHT: + 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 index 50e23cd..d79c0a8 100644 --- a/app/src/main/java/de/frajul/endlessroll/entities/collision/Edge.java +++ b/app/src/main/java/de/frajul/endlessroll/entities/collision/Edge.java @@ -1,12 +1,12 @@ -/* - * Created by Julian Mutter on 7/10/18 3:58 PM - * Copyright (c) 2018. All rights reserved. - * Last modified 7/10/18 3:54 PM - * - */ - -package de.frajul.endlessroll.entities.collision; - -public enum Edge { - LEFT, RIGHT, TOP, BOTTOM, NONE +/* + * Created by Julian Mutter on 7/10/18 3:58 PM + * Copyright (c) 2018. All rights reserved. + * Last modified 7/10/18 3:54 PM + * + */ + +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 index 5d0d691..c179032 100644 --- 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 @@ -1,37 +1,37 @@ -/* - * Created by Julian Mutter on 7/10/18 3:58 PM - * Copyright (c) 2018. All rights reserved. - * Last modified 7/10/18 3:54 PM - * - */ - -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; - } -} +/* + * Created by Julian Mutter on 7/10/18 3:58 PM + * Copyright (c) 2018. All rights reserved. + * Last modified 7/10/18 3:54 PM + * + */ + +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 index 22c09f1..7240bdb 100644 --- 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 @@ -1,30 +1,30 @@ -/* - * Created by Julian Mutter on 7/10/18 3:58 PM - * Copyright (c) 2018. All rights reserved. - * Last modified 7/10/18 3:54 PM - * - */ - -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; - } -} +/* + * Created by Julian Mutter on 7/10/18 3:58 PM + * Copyright (c) 2018. All rights reserved. + * Last modified 7/10/18 3:54 PM + * + */ + +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 index 6225c55..9b86b57 100644 --- 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 @@ -1,78 +1,78 @@ -/* - * Created by Julian Mutter on 7/10/18 3:58 PM - * Copyright (c) 2018. All rights reserved. - * Last modified 7/10/18 3:54 PM - * - */ - -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; - } -} +/* + * Created by Julian Mutter on 7/10/18 3:58 PM + * Copyright (c) 2018. All rights reserved. + * Last modified 7/10/18 3:54 PM + * + */ + +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 index 09c7ca1..888e73a 100644 --- 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 @@ -1,32 +1,32 @@ -/* - * Created by Julian Mutter on 7/10/18 3:58 PM - * Copyright (c) 2018. All rights reserved. - * Last modified 7/10/18 3:54 PM - * - */ - -package de.frajul.endlessroll.entities.collision.collisionData; - -import java.util.List; - -import de.frajul.endlessroll.entities.tools.Tool; - -/** - * 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; - } -} +/* + * Created by Julian Mutter on 7/10/18 3:58 PM + * Copyright (c) 2018. All rights reserved. + * Last modified 7/10/18 3:54 PM + * + */ + +package de.frajul.endlessroll.entities.collision.collisionData; + +import java.util.List; + +import de.frajul.endlessroll.entities.tools.Tool; + +/** + * 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 index bd14c0c..f91f439 100644 --- 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 @@ -1,62 +1,62 @@ -/* - * Created by Julian Mutter on 7/10/18 3:58 PM - * Copyright (c) 2018. All rights reserved. - * Last modified 7/10/18 3:54 PM - * - */ - -package de.frajul.endlessroll.entities.collision.geometry; - -import de.frajul.endlessroll.data.Vector; -import de.frajul.endlessroll.entities.Player; - -/** - * Created by Julian on 01.12.2015. - */ -public class Circle extends 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; - } - - @Override - public float getRightEdge() { - return center.x + radius; - } - - @Override - public float getLeftEdge() { - return center.x - radius; - } - - @Override - public float getTopEdge() { - return center.y + radius; - } - - @Override - public float getBottomEdge() { - return center.y - radius; - } - - public Vector getPosition() { - return center; - } - - public float getRadius() { - return radius; - } - - public void setRadius(float radius) { - this.radius = radius; - } - -} +/* + * Created by Julian Mutter on 7/10/18 3:58 PM + * Copyright (c) 2018. All rights reserved. + * Last modified 7/10/18 3:54 PM + * + */ + +package de.frajul.endlessroll.entities.collision.geometry; + +import de.frajul.endlessroll.data.Vector; +import de.frajul.endlessroll.entities.Player; + +/** + * Created by Julian on 01.12.2015. + */ +public class Circle extends 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; + } + + @Override + public float getRightEdge() { + return center.x + radius; + } + + @Override + public float getLeftEdge() { + return center.x - radius; + } + + @Override + public float getTopEdge() { + return center.y + radius; + } + + @Override + public float getBottomEdge() { + return center.y - radius; + } + + public Vector getPosition() { + return center; + } + + public float getRadius() { + return radius; + } + + public void setRadius(float radius) { + this.radius = radius; + } + +} 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 index 49ed297..adf9d0a 100644 --- 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 @@ -1,23 +1,23 @@ -/* - * Created by Julian Mutter on 7/10/18 3:58 PM - * Copyright (c) 2018. All rights reserved. - * Last modified 7/10/18 3:54 PM - * - */ - -package de.frajul.endlessroll.entities.collision.geometry; - -/** - * Created by Julian on 28.02.2016. - */ -public abstract class Geometry { - - public abstract float getTopEdge(); - - public abstract float getBottomEdge(); - - public abstract float getRightEdge(); - - public abstract float getLeftEdge(); - -} +/* + * Created by Julian Mutter on 7/10/18 3:58 PM + * Copyright (c) 2018. All rights reserved. + * Last modified 7/10/18 3:54 PM + * + */ + +package de.frajul.endlessroll.entities.collision.geometry; + +/** + * Created by Julian on 28.02.2016. + */ +public abstract class Geometry { + + public abstract float getTopEdge(); + + public abstract float getBottomEdge(); + + public abstract float getRightEdge(); + + public abstract float getLeftEdge(); + +} 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 index f7b3fad..2dcc311 100644 --- 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 @@ -1,70 +1,70 @@ -/* - * Created by Julian Mutter on 7/10/18 3:58 PM - * Copyright (c) 2018. All rights reserved. - * Last modified 7/10/18 3:54 PM - * - */ - -package de.frajul.endlessroll.entities.collision.geometry; - -import de.frajul.endlessroll.data.Vector; - -/** - * Created by Julian on 01.12.2015. - */ -public class Quad extends 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; - } - - @Override - public float getRightEdge() { - return position.x + width / 2; - } - - @Override - public float getLeftEdge() { - return position.x - width / 2; - } - - @Override - public float getTopEdge() { - return position.y + height / 2; - } - - @Override - 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; - } - -} +/* + * Created by Julian Mutter on 7/10/18 3:58 PM + * Copyright (c) 2018. All rights reserved. + * Last modified 7/10/18 3:54 PM + * + */ + +package de.frajul.endlessroll.entities.collision.geometry; + +import de.frajul.endlessroll.data.Vector; + +/** + * Created by Julian on 01.12.2015. + */ +public class Quad extends 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; + } + + @Override + public float getRightEdge() { + return position.x + width / 2; + } + + @Override + public float getLeftEdge() { + return position.x - width / 2; + } + + @Override + public float getTopEdge() { + return position.y + height / 2; + } + + @Override + 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/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 index d3b4d26..e127b54 100644 --- 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 @@ -1,38 +1,38 @@ -/* - * Created by Julian Mutter on 7/10/18 3:58 PM - * Copyright (c) 2018. All rights reserved. - * Last modified 7/10/18 3:54 PM - * - */ - -package de.frajul.endlessroll.entities.collision.geometry; - -import de.frajul.endlessroll.data.Vector; -import de.frajul.endlessroll.entities.tools.Ramp; - -/** - * Created by Julian on 01.12.2015. - */ -public class Triangle extends Quad { - - public Triangle(Ramp ramp) { - super(ramp.getPosition(), ramp.getWidth(), ramp.getHeight()); - } - - public float getGradient() { - return super.getHeight() / super.getWidth(); - } - - public Vector getBottomRightVertex() { - return new Vector(getRightEdge(), getBottomEdge()); - } - - public Vector getBottomLeftVertex() { - return new Vector(getLeftEdge(), getBottomEdge()); - } - - public Vector getTopRightVertex() { - return new Vector(getRightEdge(), getTopEdge()); - } - -} +/* + * Created by Julian Mutter on 7/10/18 3:58 PM + * Copyright (c) 2018. All rights reserved. + * Last modified 7/10/18 3:54 PM + * + */ + +package de.frajul.endlessroll.entities.collision.geometry; + +import de.frajul.endlessroll.data.Vector; +import de.frajul.endlessroll.entities.tools.Ramp; + +/** + * Created by Julian on 01.12.2015. + */ +public class Triangle extends Quad { + + public Triangle(Ramp ramp) { + super(ramp.getPosition(), ramp.getWidth(), ramp.getHeight()); + } + + public float getGradient() { + return super.getHeight() / super.getWidth(); + } + + public Vector getBottomRightVertex() { + return new Vector(getRightEdge(), getBottomEdge()); + } + + public Vector getBottomLeftVertex() { + return new Vector(getLeftEdge(), getBottomEdge()); + } + + public Vector getTopRightVertex() { + return new Vector(getRightEdge(), getTopEdge()); + } + +} diff --git a/app/src/main/java/de/frajul/endlessroll/entities/guis/Countdown.java b/app/src/main/java/de/frajul/endlessroll/entities/guis/Countdown.java index fe1c15a..cd99d60 100644 --- a/app/src/main/java/de/frajul/endlessroll/entities/guis/Countdown.java +++ b/app/src/main/java/de/frajul/endlessroll/entities/guis/Countdown.java @@ -1,101 +1,101 @@ -/* - * Created by Julian Mutter on 7/10/18 3:58 PM - * Copyright (c) 2018. All rights reserved. - * Last modified 7/10/18 3:54 PM - * - */ - -package de.frajul.endlessroll.entities.guis; - -import java.util.concurrent.atomic.AtomicBoolean; - -import de.frajul.endlessroll.data.Vector; -import de.frajul.endlessroll.entities.textures.Texture; -import de.frajul.endlessroll.entities.textures.TexturePack; -import de.frajul.endlessroll.main.game.Game; -import de.frajul.endlessroll.sounds.SoundManager; -import de.frajul.endlessroll.sounds.SoundStream; - -/** - * Created by Julian on 31.07.2016. - */ -public class Countdown extends Gui { - - private Game game; - private SoundManager soundManager; - private SoundStream soundStream; - private Texture texture3; - private Texture texture2; - private Texture texture1; - - private AtomicBoolean running; - private int currentSeconds = 0; - private float time = 0; - - public Countdown(Game game, SoundManager soundManager, TexturePack texturePack) { - super(texturePack.countdown3, new Vector(), 0.8f, 0.8f); - this.game = game; - this.soundManager = soundManager; - this.texture3 = texturePack.countdown1; - this.texture2 = texturePack.countdown2; - this.texture1 = texturePack.countdown3; - running = new AtomicBoolean(false); - } - - public void update(float delta) { - if (running.get()) { - time += delta; - if (time >= 1000 && currentSeconds == 0) { - currentSeconds = 1; - onNextSecondThread(currentSeconds, true); - - } - if (time >= 2000 && currentSeconds == 1) { - currentSeconds = 2; - onNextSecondThread(currentSeconds, true); - } - if (time >= 3000 && currentSeconds == 2) { - currentSeconds = 3; - running.set(false); - game.countdownFinished(); - } - } - } - - public void start() { - reset(); - running.set(true); - soundStream = soundManager.playSound(soundManager.countdownSoundSingle); - } - - public void stop() { - running.set(false); - if (soundStream != null) - soundManager.stopSound(soundStream); - } - - private void reset() { - time = 0; - currentSeconds = 0; - onNextSecondThread(0, false); - } - - private void onNextSecondThread(final int second, final boolean playSound) { - if (playSound) { - if (second == 2) - soundStream = soundManager.playSound(soundManager.countdownSoundLast); - else - soundStream = soundManager.playSound(soundManager.countdownSoundSingle); - } - super.setTexture(texture1); - if (second == 1) - super.setTexture(texture2); - else if (second == 2) - super.setTexture(texture3); - } - - @Override - public boolean isVisible() { - return running.get(); - } -} +/* + * Created by Julian Mutter on 7/10/18 3:58 PM + * Copyright (c) 2018. All rights reserved. + * Last modified 7/10/18 3:54 PM + * + */ + +package de.frajul.endlessroll.entities.guis; + +import java.util.concurrent.atomic.AtomicBoolean; + +import de.frajul.endlessroll.data.Vector; +import de.frajul.endlessroll.entities.textures.Texture; +import de.frajul.endlessroll.entities.textures.TexturePack; +import de.frajul.endlessroll.main.game.Game; +import de.frajul.endlessroll.sounds.SoundManager; +import de.frajul.endlessroll.sounds.SoundStream; + +/** + * Created by Julian on 31.07.2016. + */ +public class Countdown extends Gui { + + private Game game; + private SoundManager soundManager; + private SoundStream soundStream; + private Texture texture3; + private Texture texture2; + private Texture texture1; + + private AtomicBoolean running; + private int currentSeconds = 0; + private float time = 0; + + public Countdown(Game game, SoundManager soundManager, TexturePack texturePack) { + super(texturePack.countdown3, new Vector(), 0.8f, 0.8f); + this.game = game; + this.soundManager = soundManager; + this.texture3 = texturePack.countdown1; + this.texture2 = texturePack.countdown2; + this.texture1 = texturePack.countdown3; + running = new AtomicBoolean(false); + } + + public void update(float delta) { + if (running.get()) { + time += delta; + if (time >= 1000 && currentSeconds == 0) { + currentSeconds = 1; + onNextSecondThread(currentSeconds, true); + + } + if (time >= 2000 && currentSeconds == 1) { + currentSeconds = 2; + onNextSecondThread(currentSeconds, true); + } + if (time >= 3000 && currentSeconds == 2) { + currentSeconds = 3; + running.set(false); + game.countdownFinished(); + } + } + } + + public void start() { + reset(); + running.set(true); + soundStream = soundManager.playSound(soundManager.countdownSoundSingle); + } + + public void stop() { + running.set(false); + if (soundStream != null) + soundManager.stopSound(soundStream); + } + + private void reset() { + time = 0; + currentSeconds = 0; + onNextSecondThread(0, false); + } + + private void onNextSecondThread(final int second, final boolean playSound) { + if (playSound) { + if (second == 2) + soundStream = soundManager.playSound(soundManager.countdownSoundLast); + else + soundStream = soundManager.playSound(soundManager.countdownSoundSingle); + } + super.setTexture(texture1); + if (second == 1) + super.setTexture(texture2); + else if (second == 2) + super.setTexture(texture3); + } + + @Override + public boolean isVisible() { + return running.get(); + } +} diff --git a/app/src/main/java/de/frajul/endlessroll/entities/guis/Gui.java b/app/src/main/java/de/frajul/endlessroll/entities/guis/Gui.java index dfda139..ca23f21 100644 --- a/app/src/main/java/de/frajul/endlessroll/entities/guis/Gui.java +++ b/app/src/main/java/de/frajul/endlessroll/entities/guis/Gui.java @@ -1,31 +1,31 @@ -/* - * Created by Julian Mutter on 7/10/18 3:58 PM - * Copyright (c) 2018. All rights reserved. - * Last modified 7/10/18 3:54 PM - * - */ - -package de.frajul.endlessroll.entities.guis; - -import de.frajul.endlessroll.data.Color4f; -import de.frajul.endlessroll.data.Vector; -import de.frajul.endlessroll.entities.Entity; -import de.frajul.endlessroll.entities.textures.Texture; - -public class Gui extends Entity { - - protected float roundValue = 0; - - public Gui(Texture texture, Vector position, float width, float height) { - super(texture, position, width, height); - } - - public float getRoundValue() { - return roundValue; - } - - public void setRoundValue(float roundValue) { - this.roundValue = roundValue; - } - -} +/* + * Created by Julian Mutter on 7/10/18 3:58 PM + * Copyright (c) 2018. All rights reserved. + * Last modified 7/10/18 3:54 PM + * + */ + +package de.frajul.endlessroll.entities.guis; + +import de.frajul.endlessroll.data.Color4f; +import de.frajul.endlessroll.data.Vector; +import de.frajul.endlessroll.entities.Entity; +import de.frajul.endlessroll.entities.textures.Texture; + +public class Gui extends Entity { + + protected float roundValue = 0; + + public Gui(Texture texture, Vector position, float width, float height) { + super(texture, position, width, height); + } + + public float getRoundValue() { + return roundValue; + } + + public void setRoundValue(float roundValue) { + this.roundValue = roundValue; + } + +} diff --git a/app/src/main/java/de/frajul/endlessroll/entities/guis/Progressbar.java b/app/src/main/java/de/frajul/endlessroll/entities/guis/Progressbar.java index 0670bdd..82c961e 100644 --- a/app/src/main/java/de/frajul/endlessroll/entities/guis/Progressbar.java +++ b/app/src/main/java/de/frajul/endlessroll/entities/guis/Progressbar.java @@ -1,48 +1,48 @@ -/* - * Created by Julian Mutter on 7/10/18 3:58 PM - * Copyright (c) 2018. All rights reserved. - * Last modified 7/10/18 3:54 PM - * - */ - -package de.frajul.endlessroll.entities.guis; - -import de.frajul.endlessroll.data.Vector; -import de.frajul.endlessroll.entities.textures.Texture; - -public class Progressbar extends Gui { - - private float maxTime; - private float progress; - - public Progressbar(Texture texture, Vector position, float width, float height, float maxTime) { - super(texture, position, width, height); - this.maxTime = maxTime; - } - - public void update(float frameTime) { - progress += frameTime / maxTime; - if (progress >= 1f) - progress = 1f; - } - - public boolean hasFinished() { - return progress == 1; - } - - public float getProgress() { - return progress; - } - - public void setProgress(float progress) { - this.progress = progress; - } - - public float getMaxTime() { - return maxTime; - } - - public void setMaxTime(float maxTime) { - this.maxTime = maxTime; - } -} +/* + * Created by Julian Mutter on 7/10/18 3:58 PM + * Copyright (c) 2018. All rights reserved. + * Last modified 7/10/18 3:54 PM + * + */ + +package de.frajul.endlessroll.entities.guis; + +import de.frajul.endlessroll.data.Vector; +import de.frajul.endlessroll.entities.textures.Texture; + +public class Progressbar extends Gui { + + private float maxTime; + private float progress; + + public Progressbar(Texture texture, Vector position, float width, float height, float maxTime) { + super(texture, position, width, height); + this.maxTime = maxTime; + } + + public void update(float frameTime) { + progress += frameTime / maxTime; + if (progress >= 1f) + progress = 1f; + } + + public boolean hasFinished() { + return progress == 1; + } + + public float getProgress() { + return progress; + } + + public void setProgress(float progress) { + this.progress = progress; + } + + public float getMaxTime() { + return maxTime; + } + + public void setMaxTime(float maxTime) { + this.maxTime = maxTime; + } +} diff --git a/app/src/main/java/de/frajul/endlessroll/entities/guis/ToolButton.java b/app/src/main/java/de/frajul/endlessroll/entities/guis/ToolButton.java index 3622f15..38f72af 100644 --- a/app/src/main/java/de/frajul/endlessroll/entities/guis/ToolButton.java +++ b/app/src/main/java/de/frajul/endlessroll/entities/guis/ToolButton.java @@ -1,157 +1,157 @@ -/* - * Created by Julian Mutter on 7/10/18 3:58 PM - * Copyright (c) 2018. All rights reserved. - * Last modified 7/10/18 3:54 PM - * - */ - -package de.frajul.endlessroll.entities.guis; - -import java.util.concurrent.atomic.AtomicBoolean; - -import de.frajul.endlessroll.data.Color3f; -import de.frajul.endlessroll.data.Color4f; -import de.frajul.endlessroll.data.Vector; -import de.frajul.endlessroll.entities.textures.Texture; -import de.frajul.endlessroll.entities.textures.TexturePack; -import de.frajul.endlessroll.entities.tools.ToolSlot; -import de.frajul.endlessroll.entities.tools.ToolType; -import de.frajul.endlessroll.entities.tools.ToolUpgradeType; -import de.frajul.endlessroll.main.game.Game; - -public class ToolButton { - - private final Color3f LOCKED = new Color3f(0.29f, 0.29f, 0.29f); - private final Color3f ACTIVE_READY = new Color3f(0.25f, 0.89f, 0.17f); - private final Color3f ACTIVE_NOT_READY = new Color3f(0.86f, 0.08f, 0.13f); - private final Color3f INACTIVE_READY = new Color3f(1.0f, 0.95f, 0.0f); - private final Color3f INACTIVE_NOT_READY = new Color3f(0.57f, 0.11f, 0.06f); - - private Gui border; - private Gui background; - private Progressbar progressbar; - private ToolButtonAnimationLayer animationLayer; - - private Game game; - private ToolType toolType; - private boolean locked; - private AtomicBoolean active; - private Texture toolButtonLockedTexture; - private Texture toolButtonEmptyTexture; - - public ToolButton(Vector position, float width, float height, TexturePack texturePack, Game game) { - this.game = game; - active = new AtomicBoolean(false); - toolButtonLockedTexture = texturePack.toolButtonLocked; - toolButtonEmptyTexture = texturePack.toolButtonEmpty; - - border = new Gui(texturePack.white, position, width, height); - border.setRoundValue(0.3f); - border.setAlpha(0.9f); - background = new Gui(null, position, height, height); - progressbar = new Progressbar(texturePack.white, position, height, height, 0); - progressbar.setColor(new Color3f(0.4f, 0.4f, 0.4f)); - progressbar.setAlpha(0.6f); - progressbar.setRoundValue(1); - progressbar.setProgress(0.6f); - animationLayer = new ToolButtonAnimationLayer(toolButtonLockedTexture, position, height, - height); - } - - public void setToolSlot(ToolSlot toolSlot) { - this.toolType = toolSlot.getToolType(); - this.locked = toolSlot.isLocked(); - - if (locked) { - background.setTexture(toolButtonLockedTexture); - } else if (toolType == null) { - background.setTexture(toolButtonEmptyTexture); - } else { - background.setTexture(toolType.getToolButtonTexture()); - animationLayer.setTexture(toolType.getToolButtonTexture()); - } - if (toolType != null) - progressbar.setMaxTime(toolType.getCurrentUpgradeValue(ToolUpgradeType.COOLDOWN)); - - if (locked || toolType == null) - border.setColor(LOCKED); - else - border.setColor(INACTIVE_NOT_READY); - } - - public void setProgress(float progress) { - progressbar.setProgress(progress); - updateBorderColor(); - } - - public boolean hasFinishedLoading() { - return progressbar.hasFinished(); - } - - public void update(float frameTime, boolean gameRunning) { - if (gameRunning) { - if (!progressbar.hasFinished()) { - progressbar.update(frameTime); - if (progressbar.hasFinished()) { - animationLayer.startAnimation(); - if (active.get()) - game.onToolButtonFinishedLoading(toolType); - } - } - updateBorderColor(); - } - - animationLayer.update(frameTime); - } - - public synchronized void updateBorderColor() { - if (!locked && toolType != null) { - if (active.get()) { - if (progressbar.hasFinished()) - border.setColor(ACTIVE_READY); - else - border.setColor(ACTIVE_NOT_READY); - } else { - if (progressbar.hasFinished()) - border.setColor(INACTIVE_READY); - else - border.setColor(INACTIVE_NOT_READY); - } - } - } - - public void setVisible(boolean visible){ - border.setVisible(visible); - background.setVisible(visible); - progressbar.setVisible(visible); - animationLayer.setVisible(visible); - } - - public void setActive(boolean active) { - this.active.set(active); - } - - public AtomicBoolean getActive() { - return active; - } - - public Gui getBorder() { - return border; - } - - public Gui getBackground() { - return background; - } - - public Progressbar getProgressbar() { - return progressbar; - } - - public ToolButtonAnimationLayer getAnimationLayer() { - return animationLayer; - } - - public ToolType getToolType() { - return toolType; - } -} +/* + * Created by Julian Mutter on 7/10/18 3:58 PM + * Copyright (c) 2018. All rights reserved. + * Last modified 7/10/18 3:54 PM + * + */ + +package de.frajul.endlessroll.entities.guis; + +import java.util.concurrent.atomic.AtomicBoolean; + +import de.frajul.endlessroll.data.Color3f; +import de.frajul.endlessroll.data.Color4f; +import de.frajul.endlessroll.data.Vector; +import de.frajul.endlessroll.entities.textures.Texture; +import de.frajul.endlessroll.entities.textures.TexturePack; +import de.frajul.endlessroll.entities.tools.ToolSlot; +import de.frajul.endlessroll.entities.tools.ToolType; +import de.frajul.endlessroll.entities.tools.ToolUpgradeType; +import de.frajul.endlessroll.main.game.Game; + +public class ToolButton { + + private final Color3f LOCKED = new Color3f(0.29f, 0.29f, 0.29f); + private final Color3f ACTIVE_READY = new Color3f(0.25f, 0.89f, 0.17f); + private final Color3f ACTIVE_NOT_READY = new Color3f(0.86f, 0.08f, 0.13f); + private final Color3f INACTIVE_READY = new Color3f(1.0f, 0.95f, 0.0f); + private final Color3f INACTIVE_NOT_READY = new Color3f(0.57f, 0.11f, 0.06f); + + private Gui border; + private Gui background; + private Progressbar progressbar; + private ToolButtonAnimationLayer animationLayer; + + private Game game; + private ToolType toolType; + private boolean locked; + private AtomicBoolean active; + private Texture toolButtonLockedTexture; + private Texture toolButtonEmptyTexture; + + public ToolButton(Vector position, float width, float height, TexturePack texturePack, Game game) { + this.game = game; + active = new AtomicBoolean(false); + toolButtonLockedTexture = texturePack.toolButtonLocked; + toolButtonEmptyTexture = texturePack.toolButtonEmpty; + + border = new Gui(texturePack.white, position, width, height); + border.setRoundValue(0.3f); + border.setAlpha(0.9f); + background = new Gui(null, position, height, height); + progressbar = new Progressbar(texturePack.white, position, height, height, 0); + progressbar.setColor(new Color3f(0.4f, 0.4f, 0.4f)); + progressbar.setAlpha(0.6f); + progressbar.setRoundValue(1); + progressbar.setProgress(0.6f); + animationLayer = new ToolButtonAnimationLayer(toolButtonLockedTexture, position, height, + height); + } + + public void setToolSlot(ToolSlot toolSlot) { + this.toolType = toolSlot.getToolType(); + this.locked = toolSlot.isLocked(); + + if (locked) { + background.setTexture(toolButtonLockedTexture); + } else if (toolType == null) { + background.setTexture(toolButtonEmptyTexture); + } else { + background.setTexture(toolType.getToolButtonTexture()); + animationLayer.setTexture(toolType.getToolButtonTexture()); + } + if (toolType != null) + progressbar.setMaxTime(toolType.getCurrentUpgradeValue(ToolUpgradeType.COOLDOWN)); + + if (locked || toolType == null) + border.setColor(LOCKED); + else + border.setColor(INACTIVE_NOT_READY); + } + + public void setProgress(float progress) { + progressbar.setProgress(progress); + updateBorderColor(); + } + + public boolean hasFinishedLoading() { + return progressbar.hasFinished(); + } + + public void update(float frameTime, boolean gameRunning) { + if (gameRunning) { + if (!progressbar.hasFinished()) { + progressbar.update(frameTime); + if (progressbar.hasFinished()) { + animationLayer.startAnimation(); + if (active.get()) + game.onToolButtonFinishedLoading(toolType); + } + } + updateBorderColor(); + } + + animationLayer.update(frameTime); + } + + public synchronized void updateBorderColor() { + if (!locked && toolType != null) { + if (active.get()) { + if (progressbar.hasFinished()) + border.setColor(ACTIVE_READY); + else + border.setColor(ACTIVE_NOT_READY); + } else { + if (progressbar.hasFinished()) + border.setColor(INACTIVE_READY); + else + border.setColor(INACTIVE_NOT_READY); + } + } + } + + public void setVisible(boolean visible){ + border.setVisible(visible); + background.setVisible(visible); + progressbar.setVisible(visible); + animationLayer.setVisible(visible); + } + + public void setActive(boolean active) { + this.active.set(active); + } + + public AtomicBoolean getActive() { + return active; + } + + public Gui getBorder() { + return border; + } + + public Gui getBackground() { + return background; + } + + public Progressbar getProgressbar() { + return progressbar; + } + + public ToolButtonAnimationLayer getAnimationLayer() { + return animationLayer; + } + + public ToolType getToolType() { + return toolType; + } +} diff --git a/app/src/main/java/de/frajul/endlessroll/entities/guis/ToolButtonAnimationLayer.java b/app/src/main/java/de/frajul/endlessroll/entities/guis/ToolButtonAnimationLayer.java index 73207f8..5dbd4d2 100644 --- a/app/src/main/java/de/frajul/endlessroll/entities/guis/ToolButtonAnimationLayer.java +++ b/app/src/main/java/de/frajul/endlessroll/entities/guis/ToolButtonAnimationLayer.java @@ -1,58 +1,58 @@ -/* - * Created by Julian Mutter on 7/10/18 3:58 PM - * Copyright (c) 2018. All rights reserved. - * Last modified 7/10/18 3:54 PM - * - */ - -package de.frajul.endlessroll.entities.guis; - -import de.frajul.endlessroll.data.Vector; -import de.frajul.endlessroll.entities.textures.Texture; - -public class ToolButtonAnimationLayer extends Gui { - - private final float ANIMATION_TIME = 500; - - private float startWidth; - private float startHeight; - private boolean animationRunning = false; - private float elapsedTime = 0; - - public ToolButtonAnimationLayer(Texture texture, Vector position, float width, float height) { - super(texture, position, width, height); - super.setVisible(false); - this.startWidth = width; - this.startHeight = height; - } - - public void startAnimation() { - reset(); - super.setVisible(true); - animationRunning = true; - } - - public void update(float frameTime) { - if (animationRunning) { - elapsedTime += frameTime; - if (elapsedTime >= ANIMATION_TIME) { - reset(); - } - float progress = elapsedTime / ANIMATION_TIME; - super.setAlpha(0.5f - 0.5f * progress); - float scaleFactor = 1 + 2 * progress; - super.setWidth(scaleFactor * startWidth); - super.setHeight(scaleFactor * startHeight); - } - } - - public void reset() { - animationRunning = false; - elapsedTime = 0; - super.setVisible(false); - super.setAlpha(0.5f); - super.setWidth(startWidth); - super.setHeight(startHeight); - } - -} +/* + * Created by Julian Mutter on 7/10/18 3:58 PM + * Copyright (c) 2018. All rights reserved. + * Last modified 7/10/18 3:54 PM + * + */ + +package de.frajul.endlessroll.entities.guis; + +import de.frajul.endlessroll.data.Vector; +import de.frajul.endlessroll.entities.textures.Texture; + +public class ToolButtonAnimationLayer extends Gui { + + private final float ANIMATION_TIME = 500; + + private float startWidth; + private float startHeight; + private boolean animationRunning = false; + private float elapsedTime = 0; + + public ToolButtonAnimationLayer(Texture texture, Vector position, float width, float height) { + super(texture, position, width, height); + super.setVisible(false); + this.startWidth = width; + this.startHeight = height; + } + + public void startAnimation() { + reset(); + super.setVisible(true); + animationRunning = true; + } + + public void update(float frameTime) { + if (animationRunning) { + elapsedTime += frameTime; + if (elapsedTime >= ANIMATION_TIME) { + reset(); + } + float progress = elapsedTime / ANIMATION_TIME; + super.setAlpha(0.5f - 0.5f * progress); + float scaleFactor = 1 + 2 * progress; + super.setWidth(scaleFactor * startWidth); + super.setHeight(scaleFactor * startHeight); + } + } + + public void reset() { + animationRunning = false; + elapsedTime = 0; + super.setVisible(false); + super.setAlpha(0.5f); + super.setWidth(startWidth); + super.setHeight(startHeight); + } + +} diff --git a/app/src/main/java/de/frajul/endlessroll/entities/guis/ToolButtonBar.java b/app/src/main/java/de/frajul/endlessroll/entities/guis/ToolButtonBar.java index 01a929f..3e99e50 100644 --- a/app/src/main/java/de/frajul/endlessroll/entities/guis/ToolButtonBar.java +++ b/app/src/main/java/de/frajul/endlessroll/entities/guis/ToolButtonBar.java @@ -1,101 +1,101 @@ -/* - * Created by Julian Mutter on 7/10/18 3:58 PM - * Copyright (c) 2018. All rights reserved. - * Last modified 7/10/18 3:54 PM - * - */ - -package de.frajul.endlessroll.entities.guis; - -import java.util.ArrayList; -import java.util.List; - -import de.frajul.endlessroll.data.Vector; -import de.frajul.endlessroll.entities.textures.TexturePack; -import de.frajul.endlessroll.entities.tools.ToolType; -import de.frajul.endlessroll.main.game.Game; -import de.frajul.endlessroll.user.ToolSlotSettings; - -public class ToolButtonBar { - - private final int BUTTON_COUNT = 4; - private final float BUTTON_HEIGHT = 0.34f; - private final float BUTTON_WIDTH = BUTTON_HEIGHT * 1.17f; - private final float BUTTON_MARGIN = 0.012f; - - private List toolButtons = new ArrayList<>(); - - public ToolButtonBar(TexturePack texturePack, Game game, ToolSlotSettings toolSlotSettings) { - float buttonWidth = BUTTON_WIDTH + 2 * BUTTON_MARGIN; - float totalWidth = BUTTON_COUNT * buttonWidth; - - for (int i = 0; i < BUTTON_COUNT; i++) { - Vector position = new Vector(-totalWidth / 2 + (i + 0.5f) * buttonWidth, - 1 - (0.5f * BUTTON_HEIGHT + BUTTON_MARGIN * 2)); - ToolButton toolButton = new ToolButton(position, BUTTON_WIDTH, BUTTON_HEIGHT, - texturePack, game); - toolButton.setToolSlot(toolSlotSettings.get(i)); - toolButtons.add(toolButton); - } - } - - public void update(float frameTime, boolean gameRunning) { - for (ToolButton button : toolButtons) - button.update(frameTime, gameRunning); - } - - public void changeToolButtonTypes(ToolSlotSettings toolSlotSettings) { - for (int i = 0; i < 4; i++) { - toolButtons.get(i).setToolSlot(toolSlotSettings.get(i)); - } - } - - public void reset(ToolSlotSettings toolSlotSettings) { - changeToolButtonTypes(toolSlotSettings); - - boolean activeButtonAlreadySet = false; - for (ToolButton toolButton : toolButtons) { - if (!activeButtonAlreadySet && toolButton.getToolType() != null) { - toolButton.setActive(true); - activeButtonAlreadySet = true; - } else - toolButton.setActive(false); - toolButton.updateBorderColor(); - toolButton.setProgress(1); - toolButton.getAnimationLayer().reset(); - } - } - - public void setActive(ToolType activeType) { - for (ToolButton button : toolButtons) - button.setActive(button.getToolType() == activeType); - } - - public ToolButton getActiveButton() { - for (ToolButton button : toolButtons) - if (button.getActive().get()) - return button; - return null; - } - - public List toGuiList() { - List list = new ArrayList<>(); - for (ToolButton button : toolButtons) { - list.add(button.getBorder()); - list.add(button.getBackground()); - list.add(button.getProgressbar()); - list.add(button.getAnimationLayer()); - } - return list; - } - - public void setVisible(boolean visible) { - for (ToolButton button : toolButtons) { - button.setVisible(visible); - } - } - - public List getToolButtons() { - return toolButtons; - } -} +/* + * Created by Julian Mutter on 7/10/18 3:58 PM + * Copyright (c) 2018. All rights reserved. + * Last modified 7/10/18 3:54 PM + * + */ + +package de.frajul.endlessroll.entities.guis; + +import java.util.ArrayList; +import java.util.List; + +import de.frajul.endlessroll.data.Vector; +import de.frajul.endlessroll.entities.textures.TexturePack; +import de.frajul.endlessroll.entities.tools.ToolType; +import de.frajul.endlessroll.main.game.Game; +import de.frajul.endlessroll.user.ToolSlotSettings; + +public class ToolButtonBar { + + private final int BUTTON_COUNT = 4; + private final float BUTTON_HEIGHT = 0.34f; + private final float BUTTON_WIDTH = BUTTON_HEIGHT * 1.17f; + private final float BUTTON_MARGIN = 0.012f; + + private List toolButtons = new ArrayList<>(); + + public ToolButtonBar(TexturePack texturePack, Game game, ToolSlotSettings toolSlotSettings) { + float buttonWidth = BUTTON_WIDTH + 2 * BUTTON_MARGIN; + float totalWidth = BUTTON_COUNT * buttonWidth; + + for (int i = 0; i < BUTTON_COUNT; i++) { + Vector position = new Vector(-totalWidth / 2 + (i + 0.5f) * buttonWidth, + 1 - (0.5f * BUTTON_HEIGHT + BUTTON_MARGIN * 2)); + ToolButton toolButton = new ToolButton(position, BUTTON_WIDTH, BUTTON_HEIGHT, + texturePack, game); + toolButton.setToolSlot(toolSlotSettings.get(i)); + toolButtons.add(toolButton); + } + } + + public void update(float frameTime, boolean gameRunning) { + for (ToolButton button : toolButtons) + button.update(frameTime, gameRunning); + } + + public void changeToolButtonTypes(ToolSlotSettings toolSlotSettings) { + for (int i = 0; i < 4; i++) { + toolButtons.get(i).setToolSlot(toolSlotSettings.get(i)); + } + } + + public void reset(ToolSlotSettings toolSlotSettings) { + changeToolButtonTypes(toolSlotSettings); + + boolean activeButtonAlreadySet = false; + for (ToolButton toolButton : toolButtons) { + if (!activeButtonAlreadySet && toolButton.getToolType() != null) { + toolButton.setActive(true); + activeButtonAlreadySet = true; + } else + toolButton.setActive(false); + toolButton.updateBorderColor(); + toolButton.setProgress(1); + toolButton.getAnimationLayer().reset(); + } + } + + public void setActive(ToolType activeType) { + for (ToolButton button : toolButtons) + button.setActive(button.getToolType() == activeType); + } + + public ToolButton getActiveButton() { + for (ToolButton button : toolButtons) + if (button.getActive().get()) + return button; + return null; + } + + public List toGuiList() { + List list = new ArrayList<>(); + for (ToolButton button : toolButtons) { + list.add(button.getBorder()); + list.add(button.getBackground()); + list.add(button.getProgressbar()); + list.add(button.getAnimationLayer()); + } + return list; + } + + public void setVisible(boolean visible) { + for (ToolButton button : toolButtons) { + button.setVisible(visible); + } + } + + public List getToolButtons() { + return toolButtons; + } +} diff --git a/app/src/main/java/de/frajul/endlessroll/entities/particles/Firework.java b/app/src/main/java/de/frajul/endlessroll/entities/particles/Firework.java index 4dd6146..28a8717 100644 --- a/app/src/main/java/de/frajul/endlessroll/entities/particles/Firework.java +++ b/app/src/main/java/de/frajul/endlessroll/entities/particles/Firework.java @@ -1,50 +1,50 @@ -/* - * Created by Julian Mutter on 7/10/18 3:58 PM - * Copyright (c) 2018. All rights reserved. - * Last modified 7/10/18 3:54 PM - * - */ - -package de.frajul.endlessroll.entities.particles; - -import java.util.Random; - -import de.frajul.endlessroll.data.Vector; -import de.frajul.endlessroll.main.game.Camera; - -/** - * Created by Julian on 15.07.2017. - */ - -public class Firework { - - private ParticleEffect effect; - private Camera camera; - private Random random; - - public Firework(ParticleEffect effect, Camera camera) { - this.effect = effect; - this.camera = camera; - this.random = new Random(); - } - - public void start() { - randomExplosion(0); - randomExplosion(100); - randomExplosion(300); - } - - private void randomExplosion(float delay) { - ParticleSource explosion = new ParticleSource(randomPosition(), effect); - explosion.setDelayMS(delay); - explosion.start(); - } - - private Vector randomPosition() { - float x = camera.getX() + (random.nextFloat() - 0.5f) * 2.5f; - float y = camera.getY() + (random.nextFloat() * 0.5f) - 1f; - return new Vector(x, y); - } - - -} +/* + * Created by Julian Mutter on 7/10/18 3:58 PM + * Copyright (c) 2018. All rights reserved. + * Last modified 7/10/18 3:54 PM + * + */ + +package de.frajul.endlessroll.entities.particles; + +import java.util.Random; + +import de.frajul.endlessroll.data.Vector; +import de.frajul.endlessroll.main.game.Camera; + +/** + * Created by Julian on 15.07.2017. + */ + +public class Firework { + + private ParticleEffect effect; + private Camera camera; + private Random random; + + public Firework(ParticleEffect effect, Camera camera) { + this.effect = effect; + this.camera = camera; + this.random = new Random(); + } + + public void start() { + randomExplosion(0); + randomExplosion(100); + randomExplosion(300); + } + + private void randomExplosion(float delay) { + ParticleSource explosion = new ParticleSource(randomPosition(), effect); + explosion.setDelayMS(delay); + explosion.start(); + } + + private Vector randomPosition() { + float x = camera.getX() + (random.nextFloat() - 0.5f) * 2.5f; + float y = camera.getY() + (random.nextFloat() * 0.5f) - 1f; + return new Vector(x, y); + } + + +} 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 index d23e213..46c0c30 100644 --- a/app/src/main/java/de/frajul/endlessroll/entities/particles/Particle.java +++ b/app/src/main/java/de/frajul/endlessroll/entities/particles/Particle.java @@ -1,118 +1,118 @@ -/* - * Created by Julian Mutter on 7/10/18 3:58 PM - * Copyright (c) 2018. All rights reserved. - * Last modified 7/10/18 3:54 PM - * - */ - -package de.frajul.endlessroll.entities.particles; - -import java.util.Random; - -import de.frajul.endlessroll.data.Color3f; -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 Color3f 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.getFrameTimeMilliseconds(); - 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(Color3f color) { - this.color = color; - } - - public Color3f getColor() { - return color; - } -} +/* + * Created by Julian Mutter on 7/10/18 3:58 PM + * Copyright (c) 2018. All rights reserved. + * Last modified 7/10/18 3:54 PM + * + */ + +package de.frajul.endlessroll.entities.particles; + +import java.util.Random; + +import de.frajul.endlessroll.data.Color3f; +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 Color3f 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.getFrameTimeMilliseconds(); + 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(Color3f color) { + this.color = color; + } + + public Color3f 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 index 913d47e..ed3dee9 100644 --- a/app/src/main/java/de/frajul/endlessroll/entities/particles/ParticleData.java +++ b/app/src/main/java/de/frajul/endlessroll/entities/particles/ParticleData.java @@ -1,77 +1,77 @@ -/* - * Created by Julian Mutter on 7/10/18 3:58 PM - * Copyright (c) 2018. All rights reserved. - * Last modified 7/10/18 3:54 PM - * - */ - -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; - } -} +/* + * Created by Julian Mutter on 7/10/18 3:58 PM + * Copyright (c) 2018. All rights reserved. + * Last modified 7/10/18 3:54 PM + * + */ + +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 index adb38ac..85f3de8 100644 --- a/app/src/main/java/de/frajul/endlessroll/entities/particles/ParticleEffect.java +++ b/app/src/main/java/de/frajul/endlessroll/entities/particles/ParticleEffect.java @@ -1,236 +1,236 @@ -/* - * Created by Julian Mutter on 7/10/18 3:58 PM - * Copyright (c) 2018. All rights reserved. - * Last modified 7/10/18 3:54 PM - * - */ - -package de.frajul.endlessroll.entities.particles; - -import java.util.ArrayList; -import java.util.Collections; -import java.util.List; -import java.util.Random; - -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; - -/** - * 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; - } -} - +/* + * Created by Julian Mutter on 7/10/18 3:58 PM + * Copyright (c) 2018. All rights reserved. + * Last modified 7/10/18 3:54 PM + * + */ + +package de.frajul.endlessroll.entities.particles; + +import java.util.ArrayList; +import java.util.Collections; +import java.util.List; +import java.util.Random; + +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; + +/** + * 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 index 34fe1a4..dfeffd2 100644 --- a/app/src/main/java/de/frajul/endlessroll/entities/particles/ParticleReader.java +++ b/app/src/main/java/de/frajul/endlessroll/entities/particles/ParticleReader.java @@ -1,170 +1,170 @@ -/* - * Created by Julian Mutter on 7/10/18 3:58 PM - * Copyright (c) 2018. All rights reserved. - * Last modified 7/10/18 3:54 PM - * - */ - -package de.frajul.endlessroll.entities.particles; - -import android.content.Context; - -import java.io.BufferedReader; -import java.io.InputStream; -import java.io.InputStreamReader; -import java.util.ArrayList; -import java.util.List; - -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; - -/** - * 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; - } -} +/* + * Created by Julian Mutter on 7/10/18 3:58 PM + * Copyright (c) 2018. All rights reserved. + * Last modified 7/10/18 3:54 PM + * + */ + +package de.frajul.endlessroll.entities.particles; + +import android.content.Context; + +import java.io.BufferedReader; +import java.io.InputStream; +import java.io.InputStreamReader; +import java.util.ArrayList; +import java.util.List; + +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; + +/** + * 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 index aab2bf8..8e43131 100644 --- a/app/src/main/java/de/frajul/endlessroll/entities/particles/ParticleSource.java +++ b/app/src/main/java/de/frajul/endlessroll/entities/particles/ParticleSource.java @@ -1,183 +1,183 @@ -/* - * Created by Julian Mutter on 7/10/18 3:58 PM - * Copyright (c) 2018. All rights reserved. - * Last modified 7/10/18 3:54 PM - * - */ - -package de.frajul.endlessroll.entities.particles; - -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.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.getFrameTimeMilliseconds(); - lifePercent = passedTime / maxTime; - - if (passedTime >= currentDelay) { - passedEmittPause += timer.getFrameTimeMilliseconds(); - while (passedEmittPause >= emittPause) { - passedEmittPause -= emittPause; - emitt(); - } - - passedSecond += timer.getFrameTimeMilliseconds(); - 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.getFrameTimeMilliseconds() / 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 void 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(); - } - - 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 Vector getPosition() { - return position; - } - - public void setDelayMS(float delay) { - currentDelay = delay; - delayManuallySet = true; - } - -} +/* + * Created by Julian Mutter on 7/10/18 3:58 PM + * Copyright (c) 2018. All rights reserved. + * Last modified 7/10/18 3:54 PM + * + */ + +package de.frajul.endlessroll.entities.particles; + +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.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.getFrameTimeMilliseconds(); + lifePercent = passedTime / maxTime; + + if (passedTime >= currentDelay) { + passedEmittPause += timer.getFrameTimeMilliseconds(); + while (passedEmittPause >= emittPause) { + passedEmittPause -= emittPause; + emitt(); + } + + passedSecond += timer.getFrameTimeMilliseconds(); + 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.getFrameTimeMilliseconds() / 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 void 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(); + } + + 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 Vector getPosition() { + return 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 index b6ca2de..03c23ca 100644 --- a/app/src/main/java/de/frajul/endlessroll/entities/particles/ParticleSystem.java +++ b/app/src/main/java/de/frajul/endlessroll/entities/particles/ParticleSystem.java @@ -1,78 +1,78 @@ -/* - * Created by Julian Mutter on 7/10/18 3:58 PM - * Copyright (c) 2018. All rights reserved. - * Last modified 7/10/18 3:54 PM - * - */ - -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; - public final ParticleEffect snow; - 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"); - snow = reader.read("particleEffects/snow.pe"); - - effects = new ParticleEffect[]{stasis, testFire, colorChange, explosion, magnet, starCollect, energyCollect, firework, superPower, snow}; - } - - 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; - } -} +/* + * Created by Julian Mutter on 7/10/18 3:58 PM + * Copyright (c) 2018. All rights reserved. + * Last modified 7/10/18 3:54 PM + * + */ + +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; + public final ParticleEffect snow; + 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"); + snow = reader.read("particleEffects/snow.pe"); + + effects = new ParticleEffect[]{stasis, testFire, colorChange, explosion, magnet, starCollect, energyCollect, firework, superPower, snow}; + } + + 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 index 66eb89e..c569a11 100644 --- 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 @@ -1,40 +1,40 @@ -/* - * Created by Julian Mutter on 7/10/18 3:58 PM - * Copyright (c) 2018. All rights reserved. - * Last modified 7/10/18 3:54 PM - * - */ - -package de.frajul.endlessroll.entities.particles.attributes; - -import java.util.ArrayList; -import java.util.List; - -import de.frajul.endlessroll.entities.particles.attributes.attributeValues.ParticleAttributeValue; -import de.frajul.endlessroll.entities.particles.attributes.attributeValues.ParticleAttributeValueType; - -/** - * 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; - } -} +/* + * Created by Julian Mutter on 7/10/18 3:58 PM + * Copyright (c) 2018. All rights reserved. + * Last modified 7/10/18 3:54 PM + * + */ + +package de.frajul.endlessroll.entities.particles.attributes; + +import java.util.ArrayList; +import java.util.List; + +import de.frajul.endlessroll.entities.particles.attributes.attributeValues.ParticleAttributeValue; +import de.frajul.endlessroll.entities.particles.attributes.attributeValues.ParticleAttributeValueType; + +/** + * 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 index b85ede5..ac53ef6 100644 --- 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 @@ -1,84 +1,84 @@ -/* - * Created by Julian Mutter on 7/10/18 3:58 PM - * Copyright (c) 2018. All rights reserved. - * Last modified 7/10/18 3:54 PM - * - */ - -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) { - String asString = line.split(start)[1].split(":")[0]; - return Integer.parseInt(asString); - } - - private float parseFloat(String line) { - String asString = line.split(" ")[1]; - return Float.parseFloat(asString); - } - - private String parseString(String line) { - return line.split(" ")[1]; - } - - private boolean parseBoolean(String line) { - String asString = line.split(" ")[1]; - return Boolean.parseBoolean(asString); - } - -} +/* + * Created by Julian Mutter on 7/10/18 3:58 PM + * Copyright (c) 2018. All rights reserved. + * Last modified 7/10/18 3:54 PM + * + */ + +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) { + String asString = line.split(start)[1].split(":")[0]; + return Integer.parseInt(asString); + } + + private float parseFloat(String line) { + String asString = line.split(" ")[1]; + return Float.parseFloat(asString); + } + + private String parseString(String line) { + return line.split(" ")[1]; + } + + private boolean parseBoolean(String line) { + 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 index 8dfec21..867f021 100644 --- 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 @@ -1,62 +1,62 @@ -/* - * Created by Julian Mutter on 7/10/18 3:58 PM - * Copyright (c) 2018. All rights reserved. - * Last modified 7/10/18 3:54 PM - * - */ - -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); - } - +/* + * Created by Julian Mutter on 7/10/18 3:58 PM + * Copyright (c) 2018. All rights reserved. + * Last modified 7/10/18 3:54 PM + * + */ + +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 index a20acf5..e6453e6 100644 --- 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 @@ -1,28 +1,28 @@ -/* - * Created by Julian Mutter on 7/10/18 3:58 PM - * Copyright (c) 2018. All rights reserved. - * Last modified 7/10/18 3:54 PM - * - */ - -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; - } -} +/* + * Created by Julian Mutter on 7/10/18 3:58 PM + * Copyright (c) 2018. All rights reserved. + * Last modified 7/10/18 3:54 PM + * + */ + +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 index 467a14a..a1eb862 100644 --- 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 @@ -1,73 +1,73 @@ -/* - * Created by Julian Mutter on 7/10/18 3:58 PM - * Copyright (c) 2018. All rights reserved. - * Last modified 7/10/18 3:54 PM - * - */ - -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; - } -} +/* + * Created by Julian Mutter on 7/10/18 3:58 PM + * Copyright (c) 2018. All rights reserved. + * Last modified 7/10/18 3:54 PM + * + */ + +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 index 5deb6c6..20684b4 100644 --- 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 @@ -1,24 +1,24 @@ -/* - * Created by Julian Mutter on 7/10/18 3:58 PM - * Copyright (c) 2018. All rights reserved. - * Last modified 7/10/18 3:54 PM - * - */ - -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; - } -} +/* + * Created by Julian Mutter on 7/10/18 3:58 PM + * Copyright (c) 2018. All rights reserved. + * Last modified 7/10/18 3:54 PM + * + */ + +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 index 86e8e9c..5adef54 100644 --- 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 @@ -1,35 +1,35 @@ -/* - * Created by Julian Mutter on 7/10/18 3:58 PM - * Copyright (c) 2018. All rights reserved. - * Last modified 7/10/18 3:54 PM - * - */ - -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; - } - -} +/* + * Created by Julian Mutter on 7/10/18 3:58 PM + * Copyright (c) 2018. All rights reserved. + * Last modified 7/10/18 3:54 PM + * + */ + +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 index f0992af..494de15 100644 --- 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 @@ -1,89 +1,89 @@ -/* - * Created by Julian Mutter on 7/10/18 3:58 PM - * Copyright (c) 2018. All rights reserved. - * Last modified 7/10/18 3:54 PM - * - */ - -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; - } - -} +/* + * Created by Julian Mutter on 7/10/18 3:58 PM + * Copyright (c) 2018. All rights reserved. + * Last modified 7/10/18 3:54 PM + * + */ + +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 index ca3f9a6..55db6cc 100644 --- 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 @@ -1,45 +1,45 @@ -/* - * Created by Julian Mutter on 7/10/18 3:58 PM - * Copyright (c) 2018. All rights reserved. - * Last modified 7/10/18 3:54 PM - * - */ - -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; - } -} +/* + * Created by Julian Mutter on 7/10/18 3:58 PM + * Copyright (c) 2018. All rights reserved. + * Last modified 7/10/18 3:54 PM + * + */ + +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 index f2f60e5..2efc88d 100644 --- 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 @@ -1,61 +1,61 @@ -/* - * Created by Julian Mutter on 7/10/18 3:58 PM - * Copyright (c) 2018. All rights reserved. - * Last modified 7/10/18 3:54 PM - * - */ - -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; - } - +/* + * Created by Julian Mutter on 7/10/18 3:58 PM + * Copyright (c) 2018. All rights reserved. + * Last modified 7/10/18 3:54 PM + * + */ + +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 index a8cb10a..d6396f7 100644 --- 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 @@ -1,30 +1,30 @@ -/* - * Created by Julian Mutter on 7/10/18 3:58 PM - * Copyright (c) 2018. All rights reserved. - * Last modified 7/10/18 3:54 PM - * - */ - -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; - } - +/* + * Created by Julian Mutter on 7/10/18 3:58 PM + * Copyright (c) 2018. All rights reserved. + * Last modified 7/10/18 3:54 PM + * + */ + +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 index e8b5055..23a46b6 100644 --- 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 @@ -1,38 +1,38 @@ -/* - * Created by Julian Mutter on 7/10/18 3:58 PM - * Copyright (c) 2018. All rights reserved. - * Last modified 7/10/18 3:54 PM - * - */ - -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; - } -} +/* + * Created by Julian Mutter on 7/10/18 3:58 PM + * Copyright (c) 2018. All rights reserved. + * Last modified 7/10/18 3:54 PM + * + */ + +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 index 3f0c754..1a1a51b 100644 --- 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 @@ -1,64 +1,64 @@ -/* - * Created by Julian Mutter on 7/10/18 3:58 PM - * Copyright (c) 2018. All rights reserved. - * Last modified 7/10/18 3:54 PM - * - */ - -package de.frajul.endlessroll.entities.particles.attributes.attributeValues; - -import java.util.ArrayList; -import java.util.List; - -import de.frajul.endlessroll.data.Color3f; - -/** - * 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 Color3f 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 Color3f(); - } - -} +/* + * Created by Julian Mutter on 7/10/18 3:58 PM + * Copyright (c) 2018. All rights reserved. + * Last modified 7/10/18 3:54 PM + * + */ + +package de.frajul.endlessroll.entities.particles.attributes.attributeValues; + +import java.util.ArrayList; +import java.util.List; + +import de.frajul.endlessroll.data.Color3f; + +/** + * 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 Color3f 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 Color3f(); + } + +} 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 index a82032e..50f198b 100644 --- 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 @@ -1,40 +1,40 @@ -/* - * Created by Julian Mutter on 7/10/18 3:58 PM - * Copyright (c) 2018. All rights reserved. - * Last modified 7/10/18 3:54 PM - * - */ - -package de.frajul.endlessroll.entities.particles.attributes.attributeValues; - -import de.frajul.endlessroll.data.Color3f; - -public class TintTimelinePoint { - - private float time; - private Color3f color; - - public float getTime() { - return time; - } - - public void setTime(float time) { - this.time = time; - } - - public Color3f getColor() { - return color; - } - - public void setValue(int colorIndex, float value) { - if (color == null) - color = new Color3f(); - if (colorIndex == 0) - color.setR(value); - else if (colorIndex == 1) - color.setG(value); - else if (colorIndex == 2) - color.setB(value); - } - +/* + * Created by Julian Mutter on 7/10/18 3:58 PM + * Copyright (c) 2018. All rights reserved. + * Last modified 7/10/18 3:54 PM + * + */ + +package de.frajul.endlessroll.entities.particles.attributes.attributeValues; + +import de.frajul.endlessroll.data.Color3f; + +public class TintTimelinePoint { + + private float time; + private Color3f color; + + public float getTime() { + return time; + } + + public void setTime(float time) { + this.time = time; + } + + public Color3f getColor() { + return color; + } + + public void setValue(int colorIndex, float value) { + if (color == null) + color = new Color3f(); + 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/shapes/CollectEnergyTask.java b/app/src/main/java/de/frajul/endlessroll/entities/shapes/CollectEnergyTask.java index 3f762f3..8b2ce53 100644 --- a/app/src/main/java/de/frajul/endlessroll/entities/shapes/CollectEnergyTask.java +++ b/app/src/main/java/de/frajul/endlessroll/entities/shapes/CollectEnergyTask.java @@ -1,38 +1,38 @@ -/* - * Created by Julian Mutter on 7/10/18 3:58 PM - * Copyright (c) 2018. All rights reserved. - * Last modified 7/10/18 3:54 PM - * - */ - -package de.frajul.endlessroll.entities.shapes; - -import android.content.Context; - -import de.frajul.endlessroll.R; -import de.frajul.endlessroll.levels.LevelManager; - -/** - * Created by Julian on 30.10.2017. - */ - -public class CollectEnergyTask extends Task { - - public CollectEnergyTask(int condition) { - super(condition); - } - - @Override - protected boolean checkConditionFulfilled(LevelManager levelManager) { - return levelManager.getTotalCollectedEnergyCount() >= condition; - } - - @Override - public String toString(Context context, LevelManager levelManager) { - if (conditionFulfilled) { - return context.getString(R.string.task_collect_energy_format_d, condition); - } - return context.getString(R.string.task_collect_energy_progress_format_ddd, condition, - levelManager.getTotalCollectedEnergyCount(), condition); - } -} +/* + * Created by Julian Mutter on 7/10/18 3:58 PM + * Copyright (c) 2018. All rights reserved. + * Last modified 7/10/18 3:54 PM + * + */ + +package de.frajul.endlessroll.entities.shapes; + +import android.content.Context; + +import de.frajul.endlessroll.R; +import de.frajul.endlessroll.levels.LevelManager; + +/** + * Created by Julian on 30.10.2017. + */ + +public class CollectEnergyTask extends Task { + + public CollectEnergyTask(int condition) { + super(condition); + } + + @Override + protected boolean checkConditionFulfilled(LevelManager levelManager) { + return levelManager.getTotalCollectedEnergyCount() >= condition; + } + + @Override + public String toString(Context context, LevelManager levelManager) { + if (conditionFulfilled) { + return context.getString(R.string.task_collect_energy_format_d, condition); + } + return context.getString(R.string.task_collect_energy_progress_format_ddd, condition, + levelManager.getTotalCollectedEnergyCount(), condition); + } +} diff --git a/app/src/main/java/de/frajul/endlessroll/entities/shapes/CollectStarTask.java b/app/src/main/java/de/frajul/endlessroll/entities/shapes/CollectStarTask.java index 4e7712b..2be5383 100644 --- a/app/src/main/java/de/frajul/endlessroll/entities/shapes/CollectStarTask.java +++ b/app/src/main/java/de/frajul/endlessroll/entities/shapes/CollectStarTask.java @@ -1,38 +1,38 @@ -/* - * Created by Julian Mutter on 7/10/18 3:58 PM - * Copyright (c) 2018. All rights reserved. - * Last modified 7/10/18 3:54 PM - * - */ - -package de.frajul.endlessroll.entities.shapes; - -import android.content.Context; - -import de.frajul.endlessroll.R; -import de.frajul.endlessroll.levels.LevelManager; - -/** - * Created by Julian on 30.10.2017. - */ - -public class CollectStarTask extends Task { - - public CollectStarTask(int condition) { - super(condition); - } - - @Override - protected boolean checkConditionFulfilled(LevelManager levelManager) { - return levelManager.getTotalCollectedStarCount() >= condition; - } - - @Override - public String toString(Context context, LevelManager levelManager) { - if (conditionFulfilled) { - return context.getString(R.string.task_collect_stars_format_d, condition); - } - return context.getString(R.string.task_collect_stars_progress_format_ddd, condition, - levelManager.getTotalCollectedStarCount(), condition); - } -} +/* + * Created by Julian Mutter on 7/10/18 3:58 PM + * Copyright (c) 2018. All rights reserved. + * Last modified 7/10/18 3:54 PM + * + */ + +package de.frajul.endlessroll.entities.shapes; + +import android.content.Context; + +import de.frajul.endlessroll.R; +import de.frajul.endlessroll.levels.LevelManager; + +/** + * Created by Julian on 30.10.2017. + */ + +public class CollectStarTask extends Task { + + public CollectStarTask(int condition) { + super(condition); + } + + @Override + protected boolean checkConditionFulfilled(LevelManager levelManager) { + return levelManager.getTotalCollectedStarCount() >= condition; + } + + @Override + public String toString(Context context, LevelManager levelManager) { + if (conditionFulfilled) { + return context.getString(R.string.task_collect_stars_format_d, condition); + } + return context.getString(R.string.task_collect_stars_progress_format_ddd, condition, + levelManager.getTotalCollectedStarCount(), condition); + } +} diff --git a/app/src/main/java/de/frajul/endlessroll/entities/shapes/CompleteWorldTask.java b/app/src/main/java/de/frajul/endlessroll/entities/shapes/CompleteWorldTask.java index 9ad2623..2762c4f 100644 --- a/app/src/main/java/de/frajul/endlessroll/entities/shapes/CompleteWorldTask.java +++ b/app/src/main/java/de/frajul/endlessroll/entities/shapes/CompleteWorldTask.java @@ -1,34 +1,34 @@ -/* - * Created by Julian Mutter on 7/10/18 3:58 PM - * Copyright (c) 2018. All rights reserved. - * Last modified 7/10/18 3:54 PM - * - */ - -package de.frajul.endlessroll.entities.shapes; - -import android.content.Context; - -import de.frajul.endlessroll.R; -import de.frajul.endlessroll.levels.LevelManager; - -/** - * Created by Julian on 30.10.2017. - */ - -public class CompleteWorldTask extends Task { - - public CompleteWorldTask(int condition) { - super(condition); - } - - @Override - protected boolean checkConditionFulfilled(LevelManager levelManager) { - return levelManager.getPackWithId(condition).isAllLevelsFinished(); - } - - @Override - public String toString(Context context, LevelManager levelManager) { - return context.getString(R.string.task_complete_world_format_d, condition); - } -} +/* + * Created by Julian Mutter on 7/10/18 3:58 PM + * Copyright (c) 2018. All rights reserved. + * Last modified 7/10/18 3:54 PM + * + */ + +package de.frajul.endlessroll.entities.shapes; + +import android.content.Context; + +import de.frajul.endlessroll.R; +import de.frajul.endlessroll.levels.LevelManager; + +/** + * Created by Julian on 30.10.2017. + */ + +public class CompleteWorldTask extends Task { + + public CompleteWorldTask(int condition) { + super(condition); + } + + @Override + protected boolean checkConditionFulfilled(LevelManager levelManager) { + return levelManager.getPackWithId(condition).isAllLevelsFinished(); + } + + @Override + public String toString(Context context, LevelManager levelManager) { + return context.getString(R.string.task_complete_world_format_d, condition); + } +} diff --git a/app/src/main/java/de/frajul/endlessroll/entities/shapes/EmptyTask.java b/app/src/main/java/de/frajul/endlessroll/entities/shapes/EmptyTask.java index 710344e..becfc9c 100644 --- a/app/src/main/java/de/frajul/endlessroll/entities/shapes/EmptyTask.java +++ b/app/src/main/java/de/frajul/endlessroll/entities/shapes/EmptyTask.java @@ -1,34 +1,34 @@ -/* - * Created by Julian Mutter on 7/10/18 3:58 PM - * Copyright (c) 2018. All rights reserved. - * Last modified 7/10/18 3:54 PM - * - */ - -package de.frajul.endlessroll.entities.shapes; - -import android.content.Context; - -import de.frajul.endlessroll.R; -import de.frajul.endlessroll.levels.LevelManager; - -/** - * Created by Julian on 30.10.2017. - */ - -public class EmptyTask extends Task { - - public EmptyTask() { - super(0); - } - - @Override - protected boolean checkConditionFulfilled(LevelManager levelManager) { - return true; - } - - @Override - public String toString(Context context, LevelManager levelManager) { - return context.getString(R.string.task_empty); - } -} +/* + * Created by Julian Mutter on 7/10/18 3:58 PM + * Copyright (c) 2018. All rights reserved. + * Last modified 7/10/18 3:54 PM + * + */ + +package de.frajul.endlessroll.entities.shapes; + +import android.content.Context; + +import de.frajul.endlessroll.R; +import de.frajul.endlessroll.levels.LevelManager; + +/** + * Created by Julian on 30.10.2017. + */ + +public class EmptyTask extends Task { + + public EmptyTask() { + super(0); + } + + @Override + protected boolean checkConditionFulfilled(LevelManager levelManager) { + return true; + } + + @Override + public String toString(Context context, LevelManager levelManager) { + return context.getString(R.string.task_empty); + } +} diff --git a/app/src/main/java/de/frajul/endlessroll/entities/shapes/PlayerShape.java b/app/src/main/java/de/frajul/endlessroll/entities/shapes/PlayerShape.java index ef88ba2..70c9938 100644 --- a/app/src/main/java/de/frajul/endlessroll/entities/shapes/PlayerShape.java +++ b/app/src/main/java/de/frajul/endlessroll/entities/shapes/PlayerShape.java @@ -1,99 +1,99 @@ -/* - * Created by Julian Mutter on 7/10/18 3:58 PM - * Copyright (c) 2018. All rights reserved. - * Last modified 7/10/18 3:54 PM - * - */ - -package de.frajul.endlessroll.entities.shapes; - -import android.support.annotation.DrawableRes; -import android.support.annotation.StringRes; - -import de.frajul.endlessroll.R; -import de.frajul.endlessroll.entities.textures.Texture; -import de.frajul.endlessroll.entities.textures.TexturePack; - -/** - * Created by Julian on 22.10.2017. - */ - -public enum PlayerShape { - BALL(R.string.playershape_name_ball, R.string.playershape_description_ball, - R.drawable.playershapes_ball, true, new EmptyTask()), - CLOCK(R.string.playershape_name_clock, R.string.playershape_description_clock, - R.drawable.playershapes_clock, true, new CollectStarTask(15)), - SMILEY(R.string.playershape_name_smiley, R.string.playershape_description_smiley, - R.drawable.playershapes_smiley, true, new CollectStarTask(50)), - WHEEL(R.string.playershape_name_wheel, R.string.playershape_description_wheel, - R.drawable.playershapes_wheel, true, new CollectStarTask(80)), - - PACMAN(R.string.playershape_name_pacman, R.string.playershape_description_pacman, - R.drawable.playershapes_pacman, false, new CompleteWorldTask(1)), - SOCCER(R.string.playershape_name_soccer, R.string.playershape_description_soccer, R.drawable.playershapes_soccer, false, new CompleteWorldTask(2)), - HYPNO_SPIRAL(R.string.playershape_name_hypno_spiral, - R.string.playershape_description_hypno_spiral, R.drawable.playershapes_hypno_spiral, false, - new CollectEnergyTask(5)), - BLUE(R.string.playershape_name_blue, R.string.playershape_description_blue, - R.drawable.playershapes_blue, false, new CollectEnergyTask(20)), - SUN(R.string.playershape_name_sun, R.string.playershape_description_sun, - R.drawable.playershapes_sun, false, new CollectEnergyTask(30)), - RAINBOW(R.string.playershape_name_rainbow, R.string.playershape_description_rainbow, R.drawable.playershapes_rainbow, true, new EmptyTask()); - - @StringRes - private int nameId; - @StringRes - private int descriptionId; - @DrawableRes - private int drawableId; - private boolean inTopRow; - private Task unlockTask; - - private Texture texture; - - PlayerShape(@StringRes int nameId, @StringRes int descriptionId, @DrawableRes int drawableId, boolean inTopRow, Task unlockTask) { - this.nameId = nameId; - this.descriptionId = descriptionId; - this.drawableId = drawableId; - this.inTopRow = inTopRow; - this.unlockTask = unlockTask; - } - - public static void loadAllTextures(TexturePack texturePack) { - for (PlayerShape playerShape : values()) - playerShape.loadTexture(texturePack); - } - - private void loadTexture(TexturePack texturePack) { - if (drawableId == -1) - return; - texture = texturePack.loadTexture(drawableId); - } - - public Task getUnlockTask() { - return unlockTask; - } - - @StringRes - public int getNameId() { - return nameId; - } - - @StringRes - public int getDescriptionId() { - return descriptionId; - } - - @DrawableRes - public int getDrawableId() { - return drawableId; - } - - public Texture getTexture() { - return texture; - } - - public boolean isInTopRow() { - return inTopRow; - } -} +/* + * Created by Julian Mutter on 7/10/18 3:58 PM + * Copyright (c) 2018. All rights reserved. + * Last modified 7/10/18 3:54 PM + * + */ + +package de.frajul.endlessroll.entities.shapes; + +import android.support.annotation.DrawableRes; +import android.support.annotation.StringRes; + +import de.frajul.endlessroll.R; +import de.frajul.endlessroll.entities.textures.Texture; +import de.frajul.endlessroll.entities.textures.TexturePack; + +/** + * Created by Julian on 22.10.2017. + */ + +public enum PlayerShape { + BALL(R.string.playershape_name_ball, R.string.playershape_description_ball, + R.drawable.playershapes_ball, true, new EmptyTask()), + CLOCK(R.string.playershape_name_clock, R.string.playershape_description_clock, + R.drawable.playershapes_clock, true, new CollectStarTask(15)), + SMILEY(R.string.playershape_name_smiley, R.string.playershape_description_smiley, + R.drawable.playershapes_smiley, true, new CollectStarTask(50)), + WHEEL(R.string.playershape_name_wheel, R.string.playershape_description_wheel, + R.drawable.playershapes_wheel, true, new CollectStarTask(80)), + + PACMAN(R.string.playershape_name_pacman, R.string.playershape_description_pacman, + R.drawable.playershapes_pacman, false, new CompleteWorldTask(1)), + SOCCER(R.string.playershape_name_soccer, R.string.playershape_description_soccer, R.drawable.playershapes_soccer, false, new CompleteWorldTask(2)), + HYPNO_SPIRAL(R.string.playershape_name_hypno_spiral, + R.string.playershape_description_hypno_spiral, R.drawable.playershapes_hypno_spiral, false, + new CollectEnergyTask(5)), + BLUE(R.string.playershape_name_blue, R.string.playershape_description_blue, + R.drawable.playershapes_blue, false, new CollectEnergyTask(20)), + SUN(R.string.playershape_name_sun, R.string.playershape_description_sun, + R.drawable.playershapes_sun, false, new CollectEnergyTask(30)), + RAINBOW(R.string.playershape_name_rainbow, R.string.playershape_description_rainbow, R.drawable.playershapes_rainbow, true, new EmptyTask()); + + @StringRes + private int nameId; + @StringRes + private int descriptionId; + @DrawableRes + private int drawableId; + private boolean inTopRow; + private Task unlockTask; + + private Texture texture; + + PlayerShape(@StringRes int nameId, @StringRes int descriptionId, @DrawableRes int drawableId, boolean inTopRow, Task unlockTask) { + this.nameId = nameId; + this.descriptionId = descriptionId; + this.drawableId = drawableId; + this.inTopRow = inTopRow; + this.unlockTask = unlockTask; + } + + public static void loadAllTextures(TexturePack texturePack) { + for (PlayerShape playerShape : values()) + playerShape.loadTexture(texturePack); + } + + private void loadTexture(TexturePack texturePack) { + if (drawableId == -1) + return; + texture = texturePack.loadTexture(drawableId); + } + + public Task getUnlockTask() { + return unlockTask; + } + + @StringRes + public int getNameId() { + return nameId; + } + + @StringRes + public int getDescriptionId() { + return descriptionId; + } + + @DrawableRes + public int getDrawableId() { + return drawableId; + } + + public Texture getTexture() { + return texture; + } + + public boolean isInTopRow() { + return inTopRow; + } +} diff --git a/app/src/main/java/de/frajul/endlessroll/entities/shapes/PlayerShapeButtonOnClickListener.java b/app/src/main/java/de/frajul/endlessroll/entities/shapes/PlayerShapeButtonOnClickListener.java index 00a31ae..1da0bbc 100644 --- a/app/src/main/java/de/frajul/endlessroll/entities/shapes/PlayerShapeButtonOnClickListener.java +++ b/app/src/main/java/de/frajul/endlessroll/entities/shapes/PlayerShapeButtonOnClickListener.java @@ -1,20 +1,20 @@ -/* - * Created by Julian Mutter on 7/10/18 3:58 PM - * Copyright (c) 2018. All rights reserved. - * Last modified 7/10/18 3:54 PM - * - */ - -package de.frajul.endlessroll.entities.shapes; - -import de.frajul.endlessroll.views.PlayerShapeButton; - -/** - * Created by Julian on 22.10.2017. - */ - -public interface PlayerShapeButtonOnClickListener { - - void onClick(PlayerShapeButton button); - -} +/* + * Created by Julian Mutter on 7/10/18 3:58 PM + * Copyright (c) 2018. All rights reserved. + * Last modified 7/10/18 3:54 PM + * + */ + +package de.frajul.endlessroll.entities.shapes; + +import de.frajul.endlessroll.views.PlayerShapeButton; + +/** + * Created by Julian on 22.10.2017. + */ + +public interface PlayerShapeButtonOnClickListener { + + void onClick(PlayerShapeButton button); + +} diff --git a/app/src/main/java/de/frajul/endlessroll/entities/shapes/Task.java b/app/src/main/java/de/frajul/endlessroll/entities/shapes/Task.java index c7dd3a4..200084f 100644 --- a/app/src/main/java/de/frajul/endlessroll/entities/shapes/Task.java +++ b/app/src/main/java/de/frajul/endlessroll/entities/shapes/Task.java @@ -1,38 +1,38 @@ -/* - * Created by Julian Mutter on 7/10/18 3:58 PM - * Copyright (c) 2018. All rights reserved. - * Last modified 7/10/18 3:54 PM - * - */ - -package de.frajul.endlessroll.entities.shapes; - -import android.content.Context; - -import de.frajul.endlessroll.levels.LevelManager; - -/** - * Created by Julian on 29.10.2017. - */ - -public abstract class Task { - - protected int condition; - protected boolean conditionFulfilled; - - public Task(int condition) { - this.condition = condition; - } - - public void update(LevelManager levelManager) { - conditionFulfilled = checkConditionFulfilled(levelManager); - } - - protected abstract boolean checkConditionFulfilled(LevelManager levelManager); - - public abstract String toString(Context context, LevelManager levelManager); - - public boolean isConditionFulfilled() { - return conditionFulfilled; - } -} +/* + * Created by Julian Mutter on 7/10/18 3:58 PM + * Copyright (c) 2018. All rights reserved. + * Last modified 7/10/18 3:54 PM + * + */ + +package de.frajul.endlessroll.entities.shapes; + +import android.content.Context; + +import de.frajul.endlessroll.levels.LevelManager; + +/** + * Created by Julian on 29.10.2017. + */ + +public abstract class Task { + + protected int condition; + protected boolean conditionFulfilled; + + public Task(int condition) { + this.condition = condition; + } + + public void update(LevelManager levelManager) { + conditionFulfilled = checkConditionFulfilled(levelManager); + } + + protected abstract boolean checkConditionFulfilled(LevelManager levelManager); + + public abstract String toString(Context context, LevelManager levelManager); + + public boolean isConditionFulfilled() { + return conditionFulfilled; + } +} 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 index 6b918cf..6d99e86 100644 --- a/app/src/main/java/de/frajul/endlessroll/entities/textures/Texture.java +++ b/app/src/main/java/de/frajul/endlessroll/entities/textures/Texture.java @@ -1,43 +1,43 @@ -/* - * Created by Julian Mutter on 7/10/18 3:58 PM - * Copyright (c) 2018. All rights reserved. - * Last modified 7/10/18 3:54 PM - * - */ - -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; - } - -} +/* + * Created by Julian Mutter on 7/10/18 3:58 PM + * Copyright (c) 2018. All rights reserved. + * Last modified 7/10/18 3:54 PM + * + */ + +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 index 8fcf337..1c1711b 100644 --- a/app/src/main/java/de/frajul/endlessroll/entities/textures/TextureLoader.java +++ b/app/src/main/java/de/frajul/endlessroll/entities/textures/TextureLoader.java @@ -1,66 +1,66 @@ -/* - * Created by Julian Mutter on 7/10/18 3:58 PM - * Copyright (c) 2018. All rights reserved. - * Last modified 7/10/18 3:54 PM - * - */ - -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]; - } - -} +/* + * Created by Julian Mutter on 7/10/18 3:58 PM + * Copyright (c) 2018. All rights reserved. + * Last modified 7/10/18 3:54 PM + * + */ + +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 index 20f59b8..404ee29 100644 --- a/app/src/main/java/de/frajul/endlessroll/entities/textures/TexturePack.java +++ b/app/src/main/java/de/frajul/endlessroll/entities/textures/TexturePack.java @@ -1,63 +1,63 @@ -/* - * Created by Julian Mutter on 7/10/18 3:58 PM - * Copyright (c) 2018. All rights reserved. - * Last modified 7/10/18 3:54 PM - * - */ - -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 white; - public final Texture goal; - public final Texture playerArrow; - public final Texture star; - public final Texture energy; - public final Texture countdown3, countdown2, countdown1; - public final Texture toolButtonLocked; - public final Texture toolButtonEmpty; - - public TexturePack(Context context) { - loader = new TextureLoader(context); - white = loadTexture(R.drawable.white); - 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); - - countdown3 = loadTexture(R.drawable.guis_countdown_3); - countdown2 = loadTexture(R.drawable.guis_countdown_2); - countdown1 = loadTexture(R.drawable.guis_countdown_1); - toolButtonLocked = loadTexture(R.drawable.tools_button_locked); - toolButtonEmpty = loadTexture(R.drawable.tools_button_empty); - - 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); - } -} +/* + * Created by Julian Mutter on 7/10/18 3:58 PM + * Copyright (c) 2018. All rights reserved. + * Last modified 7/10/18 3:54 PM + * + */ + +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 white; + public final Texture goal; + public final Texture playerArrow; + public final Texture star; + public final Texture energy; + public final Texture countdown3, countdown2, countdown1; + public final Texture toolButtonLocked; + public final Texture toolButtonEmpty; + + public TexturePack(Context context) { + loader = new TextureLoader(context); + white = loadTexture(R.drawable.white); + 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); + + countdown3 = loadTexture(R.drawable.guis_countdown_3); + countdown2 = loadTexture(R.drawable.guis_countdown_2); + countdown1 = loadTexture(R.drawable.guis_countdown_1); + toolButtonLocked = loadTexture(R.drawable.tools_button_locked); + toolButtonEmpty = loadTexture(R.drawable.tools_button_empty); + + 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 index 1feb39c..ec51d67 100644 --- a/app/src/main/java/de/frajul/endlessroll/entities/tileLists/Ceiling.java +++ b/app/src/main/java/de/frajul/endlessroll/entities/tileLists/Ceiling.java @@ -1,19 +1,19 @@ -/* - * Created by Julian Mutter on 7/10/18 3:58 PM - * Copyright (c) 2018. All rights reserved. - * Last modified 7/10/18 3:54 PM - * - */ - -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); - } - -} +/* + * Created by Julian Mutter on 7/10/18 3:58 PM + * Copyright (c) 2018. All rights reserved. + * Last modified 7/10/18 3:54 PM + * + */ + +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 index 23efaa1..a68a790 100644 --- a/app/src/main/java/de/frajul/endlessroll/entities/tileLists/Terrain.java +++ b/app/src/main/java/de/frajul/endlessroll/entities/tileLists/Terrain.java @@ -1,19 +1,19 @@ -/* - * Created by Julian Mutter on 7/10/18 3:58 PM - * Copyright (c) 2018. All rights reserved. - * Last modified 7/10/18 3:54 PM - * - */ - -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); - } - -} +/* + * Created by Julian Mutter on 7/10/18 3:58 PM + * Copyright (c) 2018. All rights reserved. + * Last modified 7/10/18 3:54 PM + * + */ + +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 index 58333a4..0b268cf 100644 --- a/app/src/main/java/de/frajul/endlessroll/entities/tileLists/Tile.java +++ b/app/src/main/java/de/frajul/endlessroll/entities/tileLists/Tile.java @@ -1,46 +1,46 @@ -/* - * Created by Julian Mutter on 7/10/18 3:58 PM - * Copyright (c) 2018. All rights reserved. - * Last modified 7/10/18 3:54 PM - * - */ - -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 { - - private int gridColumnCount; - - 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; - } - gridColumnCount = (int) (width / height); - gridColumnCount = Math.max(gridColumnCount, 3); - } - - public int getGridColumnCount() { - return gridColumnCount; - } -} +/* + * Created by Julian Mutter on 7/10/18 3:58 PM + * Copyright (c) 2018. All rights reserved. + * Last modified 7/10/18 3:54 PM + * + */ + +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 { + + private int gridColumnCount; + + 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; + } + gridColumnCount = (int) (width / height); + gridColumnCount = Math.max(gridColumnCount, 3); + } + + public int getGridColumnCount() { + return gridColumnCount; + } +} 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 index 8e4d2e2..8213905 100644 --- a/app/src/main/java/de/frajul/endlessroll/entities/tileLists/TileList.java +++ b/app/src/main/java/de/frajul/endlessroll/entities/tileLists/TileList.java @@ -1,106 +1,106 @@ -/* - * Created by Julian Mutter on 7/10/18 3:58 PM - * Copyright (c) 2018. All rights reserved. - * Last modified 7/10/18 3:54 PM - * - */ - -package de.frajul.endlessroll.entities.tileLists; - -import java.util.ArrayList; -import java.util.List; - -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 de.frajul.endlessroll.main.GameLog; - -@SuppressWarnings("serial") -public class TileList extends SynchronizedArrayList { - - public enum Type { - TERRAIN, - CEILING; - - public float calculateTileHeightFromEdge(float edge) { - switch (this) { - case TERRAIN: - if (edge <= -0.6f) - return 0.4f; - return 1 + edge; - case CEILING: - if (edge >= 0.6f) - return 0.4f; - 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(); - float lastRightEdge = -10; - for (TileData data : tileData) { - float leftEdge = data.getX() - data.getWidth() / 2; - float rightEdge = data.getX() + data.getWidth() / 2; - if (Math.abs(lastRightEdge - leftEdge) < 0.1f) - GameLog.i("!!! Too small gap found !!! " + toMeters(lastRightEdge) + "m; " + lastRightEdge + "-" + leftEdge + "; iRight=" + tileData.indexOf(data)); - lastRightEdge = rightEdge; - super.add(new Tile(type, texture, edge, data)); - } - this.edge = edge; - if (edge >= 1 || edge <= -1) - super.clear(); - } - - private float toMeters(float value) { - return ((int) (value * 20)) / 10f; - } - - 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; - } - - public boolean isEndless() { - return endless; - } -} +/* + * Created by Julian Mutter on 7/10/18 3:58 PM + * Copyright (c) 2018. All rights reserved. + * Last modified 7/10/18 3:54 PM + * + */ + +package de.frajul.endlessroll.entities.tileLists; + +import java.util.ArrayList; +import java.util.List; + +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 de.frajul.endlessroll.main.GameLog; + +@SuppressWarnings("serial") +public class TileList extends SynchronizedArrayList { + + public enum Type { + TERRAIN, + CEILING; + + public float calculateTileHeightFromEdge(float edge) { + switch (this) { + case TERRAIN: + if (edge <= -0.6f) + return 0.4f; + return 1 + edge; + case CEILING: + if (edge >= 0.6f) + return 0.4f; + 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(); + float lastRightEdge = -10; + for (TileData data : tileData) { + float leftEdge = data.getX() - data.getWidth() / 2; + float rightEdge = data.getX() + data.getWidth() / 2; + if (Math.abs(lastRightEdge - leftEdge) < 0.1f) + GameLog.i("!!! Too small gap found !!! " + toMeters(lastRightEdge) + "m; " + lastRightEdge + "-" + leftEdge + "; iRight=" + tileData.indexOf(data)); + lastRightEdge = rightEdge; + super.add(new Tile(type, texture, edge, data)); + } + this.edge = edge; + if (edge >= 1 || edge <= -1) + super.clear(); + } + + private float toMeters(float value) { + return ((int) (value * 20)) / 10f; + } + + 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; + } + + public boolean isEndless() { + return endless; + } +} 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 index 670ac61..82a0f6e 100644 --- a/app/src/main/java/de/frajul/endlessroll/entities/tools/Bomb.java +++ b/app/src/main/java/de/frajul/endlessroll/entities/tools/Bomb.java @@ -1,80 +1,80 @@ -/* - * Created by Julian Mutter on 7/10/18 3:58 PM - * Copyright (c) 2018. All rights reserved. - * Last modified 7/10/18 3:54 PM - * - */ - -package de.frajul.endlessroll.entities.tools; - -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.geometry.Geometry; -import de.frajul.endlessroll.main.game.Timer; - -/** - * Created by Julian on 20.02.2016. - */ -public class Bomb extends Tool { - - private float delta; - private boolean exploding = false; - private Obstacle attachedObstacle; - private Vector offsetToObstaclePosition = new Vector(); - - public Bomb(Vector position) { - super(ToolType.BOMB, position, .25f, .25f, false, false); - animation.setIndexSequence(new int[]{0, 1, 2}); - animation.setLooping(false); - animation.setRequiredDelta( - (int) (ToolType.BOMB.getCurrentUpgradeValue(ToolUpgradeType.DURATION) / 3f)); - super.setFloating(true); - } - - @Override - public void update(Timer timer) { - super.update(timer); - float explosionDuration = ToolType.BOMB.getCurrentUpgradeValue(ToolUpgradeType.DURATION); - delta += timer.getFrameTimeMilliseconds(); - int currentExplosionState = Math.min((int) (delta / (explosionDuration / 3f)), 3); - if (attachedObstacle != null) { - if (attachedObstacle.isMoving()) - super.setPosition(new Vector(attachedObstacle.getPosition()).translate(offsetToObstaclePosition)); - attachedObstacle.setBombExplosionState(currentExplosionState); - } - if (delta >= explosionDuration) - exploding = true; - } - - @Override - public void onPlayerCollision(Player player, Timer timer) { - } - - @Override - protected Geometry createWorldCollisionBounds() { - return this; - } - - @Override - protected Geometry createPlayerCollisionBounds() { - return this; - } - - public void setAttachedObstacle(Obstacle attachedObstacle) { - this.attachedObstacle = attachedObstacle; - offsetToObstaclePosition = attachedObstacle.getPosition().vectorTo(super.getPosition()); - attachedObstacle.setBombExplosionState(0); - } - - public boolean isExploding() { - return exploding; - } - - public void explode() { - if (attachedObstacle != null) - attachedObstacle.destroy(DestroyEffect.EXPLOSION); - super.destroy(DestroyEffect.EXPLOSION); - } -} +/* + * Created by Julian Mutter on 7/10/18 3:58 PM + * Copyright (c) 2018. All rights reserved. + * Last modified 7/10/18 3:54 PM + * + */ + +package de.frajul.endlessroll.entities.tools; + +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.geometry.Geometry; +import de.frajul.endlessroll.main.game.Timer; + +/** + * Created by Julian on 20.02.2016. + */ +public class Bomb extends Tool { + + private float delta; + private boolean exploding = false; + private Obstacle attachedObstacle; + private Vector offsetToObstaclePosition = new Vector(); + + public Bomb(Vector position) { + super(ToolType.BOMB, position, .25f, .25f, false, false); + animation.setIndexSequence(new int[]{0, 1, 2}); + animation.setLooping(false); + animation.setRequiredDelta( + (int) (ToolType.BOMB.getCurrentUpgradeValue(ToolUpgradeType.DURATION) / 3f)); + super.setFloating(true); + } + + @Override + public void update(Timer timer) { + super.update(timer); + float explosionDuration = ToolType.BOMB.getCurrentUpgradeValue(ToolUpgradeType.DURATION); + delta += timer.getFrameTimeMilliseconds(); + int currentExplosionState = Math.min((int) (delta / (explosionDuration / 3f)), 3); + if (attachedObstacle != null) { + if (attachedObstacle.isMoving()) + super.setPosition(new Vector(attachedObstacle.getPosition()).translate(offsetToObstaclePosition)); + attachedObstacle.setBombExplosionState(currentExplosionState); + } + if (delta >= explosionDuration) + exploding = true; + } + + @Override + public void onPlayerCollision(Player player, Timer timer) { + } + + @Override + protected Geometry createWorldCollisionBounds() { + return this; + } + + @Override + protected Geometry createPlayerCollisionBounds() { + return this; + } + + public void setAttachedObstacle(Obstacle attachedObstacle) { + this.attachedObstacle = attachedObstacle; + offsetToObstaclePosition = attachedObstacle.getPosition().vectorTo(super.getPosition()); + attachedObstacle.setBombExplosionState(0); + } + + public boolean isExploding() { + return exploding; + } + + public void explode() { + if (attachedObstacle != null) + attachedObstacle.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 index 8d94bba..8dfbc4e 100644 --- a/app/src/main/java/de/frajul/endlessroll/entities/tools/Magnet.java +++ b/app/src/main/java/de/frajul/endlessroll/entities/tools/Magnet.java @@ -1,84 +1,84 @@ -/* - * Created by Julian Mutter on 7/10/18 3:58 PM - * Copyright (c) 2018. All rights reserved. - * Last modified 7/10/18 3:54 PM - * - */ - -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; -import de.frajul.endlessroll.sounds.SoundManager; -import de.frajul.endlessroll.sounds.SoundStream; - -/** - * Created by Julian on 11.02.2016. - */ -public class Magnet extends Tool { - - private SoundManager soundManager; - private ParticleSource particleSource; - private SoundStream soundStream; - - public Magnet(Vector position, ParticleSystem particleSystem, SoundManager soundManager) { - super(ToolType.MAGNET, position, .24f, .24f, false, false); - this.soundManager = soundManager; - 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(); - soundStream = soundManager.playSound(soundManager.magnetSound); - } - - @Override - public void destroy(DestroyEffect destroyEffect) { - super.destroy(destroyEffect); - particleSource.kill(); - soundManager.stopSound(soundStream); - } - - public void updateSoundVolume(Player player) { - float distanceToPlayer = super.getPosition().vectorTo(player.getPosition()).length(); - float factor = 1.0f / distanceToPlayer; - if (distanceToPlayer > 3 && player.getPosition().getX() > super.getPosition().getX()) { - soundManager.stopSound(soundStream); - return; - } - soundStream.setCurrentVolumeModifier(factor); - soundManager.onStreamVolumeChanged(soundStream); - } - - @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.getFrameTimeMilliseconds(); - - if (fromPlayerYDistance < 0) { - force = -force; - } - player.addForce(force); - } - - @Override - protected Geometry createWorldCollisionBounds() { - return this; - } - - @Override - protected Geometry createPlayerCollisionBounds() { - return new Circle(super.getPosition(), 2); - } -} +/* + * Created by Julian Mutter on 7/10/18 3:58 PM + * Copyright (c) 2018. All rights reserved. + * Last modified 7/10/18 3:54 PM + * + */ + +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; +import de.frajul.endlessroll.sounds.SoundManager; +import de.frajul.endlessroll.sounds.SoundStream; + +/** + * Created by Julian on 11.02.2016. + */ +public class Magnet extends Tool { + + private SoundManager soundManager; + private ParticleSource particleSource; + private SoundStream soundStream; + + public Magnet(Vector position, ParticleSystem particleSystem, SoundManager soundManager) { + super(ToolType.MAGNET, position, .24f, .24f, false, false); + this.soundManager = soundManager; + 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(); + soundStream = soundManager.playSound(soundManager.magnetSound); + } + + @Override + public void destroy(DestroyEffect destroyEffect) { + super.destroy(destroyEffect); + particleSource.kill(); + soundManager.stopSound(soundStream); + } + + public void updateSoundVolume(Player player) { + float distanceToPlayer = super.getPosition().vectorTo(player.getPosition()).length(); + float factor = 1.0f / distanceToPlayer; + if (distanceToPlayer > 3 && player.getPosition().getX() > super.getPosition().getX()) { + soundManager.stopSound(soundStream); + return; + } + soundStream.setCurrentVolumeModifier(factor); + soundManager.onStreamVolumeChanged(soundStream); + } + + @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.getFrameTimeMilliseconds(); + + 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/PowerMushroom.java b/app/src/main/java/de/frajul/endlessroll/entities/tools/PowerMushroom.java index 938c218..13e9607 100644 --- a/app/src/main/java/de/frajul/endlessroll/entities/tools/PowerMushroom.java +++ b/app/src/main/java/de/frajul/endlessroll/entities/tools/PowerMushroom.java @@ -1,47 +1,47 @@ -/* - * Created by Julian Mutter on 7/10/18 3:58 PM - * Copyright (c) 2018. All rights reserved. - * Last modified 7/10/18 3:54 PM - * - */ - -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.Geometry; -import de.frajul.endlessroll.main.game.Timer; -import de.frajul.endlessroll.sounds.SoundManager; - -/** - * Created by Julian on 02.10.2017. - */ - -public class PowerMushroom extends Tool { - - private SoundManager soundManager; - - public PowerMushroom(Vector position, SoundManager soundManager) { - super(ToolType.POWER_MUSHROOM, position, .35f, .3f, true, true); - animation.disable(); - this.soundManager = soundManager; - } - - @Override - public void onPlayerCollision(Player player, Timer timer) { - player.startSuperPower((long) ToolType.POWER_MUSHROOM.getCurrentUpgradeValue(ToolUpgradeType.DURATION)); - soundManager.playSound(soundManager.mushroomSound); - super.destroy(DestroyEffect.ENERGY_COLLECT); - } - - @Override - protected Geometry createWorldCollisionBounds() { - return this; - } - - @Override - protected Geometry createPlayerCollisionBounds() { - return this; - } -} +/* + * Created by Julian Mutter on 7/10/18 3:58 PM + * Copyright (c) 2018. All rights reserved. + * Last modified 7/10/18 3:54 PM + * + */ + +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.Geometry; +import de.frajul.endlessroll.main.game.Timer; +import de.frajul.endlessroll.sounds.SoundManager; + +/** + * Created by Julian on 02.10.2017. + */ + +public class PowerMushroom extends Tool { + + private SoundManager soundManager; + + public PowerMushroom(Vector position, SoundManager soundManager) { + super(ToolType.POWER_MUSHROOM, position, .35f, .3f, true, true); + animation.disable(); + this.soundManager = soundManager; + } + + @Override + public void onPlayerCollision(Player player, Timer timer) { + player.startSuperPower((long) ToolType.POWER_MUSHROOM.getCurrentUpgradeValue(ToolUpgradeType.DURATION)); + soundManager.playSound(soundManager.mushroomSound); + super.destroy(DestroyEffect.ENERGY_COLLECT); + } + + @Override + protected Geometry createWorldCollisionBounds() { + return this; + } + + @Override + protected Geometry createPlayerCollisionBounds() { + return this; + } +} 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 index 682b9b8..3e22a0b 100644 --- a/app/src/main/java/de/frajul/endlessroll/entities/tools/Ramp.java +++ b/app/src/main/java/de/frajul/endlessroll/entities/tools/Ramp.java @@ -1,71 +1,71 @@ -/* - * Created by Julian Mutter on 7/10/18 3:58 PM - * Copyright (c) 2018. All rights reserved. - * Last modified 7/10/18 3:54 PM - * - */ - -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); - } - -} +/* + * Created by Julian Mutter on 7/10/18 3:58 PM + * Copyright (c) 2018. All rights reserved. + * Last modified 7/10/18 3:54 PM + * + */ + +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 index 08993b7..dd00255 100644 --- a/app/src/main/java/de/frajul/endlessroll/entities/tools/Spring.java +++ b/app/src/main/java/de/frajul/endlessroll/entities/tools/Spring.java @@ -1,59 +1,59 @@ -/* - * Created by Julian Mutter on 7/10/18 3:58 PM - * Copyright (c) 2018. All rights reserved. - * Last modified 7/10/18 3:54 PM - * - */ - -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; -import de.frajul.endlessroll.sounds.SoundManager; - -/** - * Created by Julian on 04.01.2016. - */ -public class Spring extends Tool { - - private boolean hasYetCollided = false; - private SoundManager soundManager; - - public Spring(Vector position, SoundManager soundManager) { - super(ToolType.SPRING, position, .3f, .35f, true, true); - animation.setIndexSequence(new int[]{1, 3, 3, 1}); - animation.setRequiredDelta(80); - this.soundManager = soundManager; - } - - @Override - public void update(Timer timer) { - if (hasYetCollided) - super.update(timer); - } - - @Override - public void onPlayerCollision(Player player, Timer timer) { - if (!hasYetCollided) { - hasYetCollided = true; - soundManager.playSound(soundManager.springSound); - - 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); - } -} +/* + * Created by Julian Mutter on 7/10/18 3:58 PM + * Copyright (c) 2018. All rights reserved. + * Last modified 7/10/18 3:54 PM + * + */ + +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; +import de.frajul.endlessroll.sounds.SoundManager; + +/** + * Created by Julian on 04.01.2016. + */ +public class Spring extends Tool { + + private boolean hasYetCollided = false; + private SoundManager soundManager; + + public Spring(Vector position, SoundManager soundManager) { + super(ToolType.SPRING, position, .3f, .35f, true, true); + animation.setIndexSequence(new int[]{1, 3, 3, 1}); + animation.setRequiredDelta(80); + this.soundManager = soundManager; + } + + @Override + public void update(Timer timer) { + if (hasYetCollided) + super.update(timer); + } + + @Override + public void onPlayerCollision(Player player, Timer timer) { + if (!hasYetCollided) { + hasYetCollided = true; + soundManager.playSound(soundManager.springSound); + + 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/Stasis.java b/app/src/main/java/de/frajul/endlessroll/entities/tools/Stasis.java index b9aa377..2df7778 100644 --- a/app/src/main/java/de/frajul/endlessroll/entities/tools/Stasis.java +++ b/app/src/main/java/de/frajul/endlessroll/entities/tools/Stasis.java @@ -1,103 +1,103 @@ -/* - * Created by Julian Mutter on 7/10/18 3:58 PM - * Copyright (c) 2018. All rights reserved. - * Last modified 7/10/18 3:54 PM - * - */ - -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.Geometry; -import de.frajul.endlessroll.entities.particles.ParticleSource; -import de.frajul.endlessroll.entities.particles.ParticleSystem; -import de.frajul.endlessroll.main.game.Timer; -import de.frajul.endlessroll.sounds.SoundManager; -import de.frajul.endlessroll.sounds.SoundStream; - -/** - * Created by Julian on 11.02.2016. - */ -public class Stasis extends Tool { - - private SoundManager soundManager; - private ParticleSource particleSource; - private boolean firstCollision = true; - private final static float Y_SLOW_FACTOR = .4f; //Final .2f - private final static float X_SLOW_FACTOR = .9f; //Final .8f - private float forceValue; - - private SoundStream soundStream; - - public Stasis(Vector position, ParticleSystem particleSystem, SoundManager soundManager) { - super(ToolType.STASIS, position, - .7f * ToolType.STASIS.getCurrentUpgradeValue(ToolUpgradeType.SIZE) / 100, - .7f * ToolType.STASIS.getCurrentUpgradeValue(ToolUpgradeType.SIZE) / 100, false, - false); - this.soundManager = soundManager; - animation.setLooping(true); - animation.setRequiredDelta(300); - animation.setIndexSequence(new int[]{1, 1, 2, 3, 2, 4, 4, 3, 2, 2, 3, 3}); - super.setFloating(true); - particleSource = new ParticleSource(new Vector(position), particleSystem.stasis); - particleSource.setSpawnSize(new Vector(super.width, super.height)); - particleSource.start(); - forceValue = ToolType.STASIS.getCurrentUpgradeValue(ToolUpgradeType.FORCE); - soundStream = soundManager.playSound(soundManager.stasisSound); - } - - public void updateSoundVolume(Player player) { - float distanceToPlayer = super.getPosition().getX() - player.getPosition().getX(); - boolean playerInXRange = (player.getRightEdge() >= super.getLeftEdge() && player - .getRightEdge() <= super.getRightEdge()) || (player.getLeftEdge() >= super - .getLeftEdge() && player.getLeftEdge() <= super.getRightEdge()); - float factor = 1.0f; - if (!playerInXRange) { - factor = 1.0f / (distanceToPlayer * distanceToPlayer); - if (distanceToPlayer < -2) { - soundManager.stopSound(soundStream); - return; - } - } - soundStream.setCurrentVolumeModifier(factor); - soundManager.onStreamVolumeChanged(soundStream); - } - - @Override - public void destroy(DestroyEffect destroyEffect) { - super.destroy(destroyEffect); - particleSource.kill(); - soundManager.stopSound(soundStream); - } - - @Override - public void onPlayerCollision(Player player, Timer timer) { - player.addStasis(this); - } - - @Override - protected Geometry createWorldCollisionBounds() { - return this; - } - - @Override - protected Geometry createPlayerCollisionBounds() { - return this; - } - - public void influencePlayerMovementValues(Player player) { - float finalXSlow = getCurrentXSlowFactor(); - player.manipulateAllForces(Y_SLOW_FACTOR / forceValue); - player.getMovement().setX(player.getMovement().getX() * finalXSlow); - if (firstCollision) { - player.getMovement().y *= Y_SLOW_FACTOR / forceValue; - firstCollision = false; - } - } - - public float getCurrentXSlowFactor() { - return X_SLOW_FACTOR - forceValue / 20f; - } -} +/* + * Created by Julian Mutter on 7/10/18 3:58 PM + * Copyright (c) 2018. All rights reserved. + * Last modified 7/10/18 3:54 PM + * + */ + +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.Geometry; +import de.frajul.endlessroll.entities.particles.ParticleSource; +import de.frajul.endlessroll.entities.particles.ParticleSystem; +import de.frajul.endlessroll.main.game.Timer; +import de.frajul.endlessroll.sounds.SoundManager; +import de.frajul.endlessroll.sounds.SoundStream; + +/** + * Created by Julian on 11.02.2016. + */ +public class Stasis extends Tool { + + private SoundManager soundManager; + private ParticleSource particleSource; + private boolean firstCollision = true; + private final static float Y_SLOW_FACTOR = .4f; //Final .2f + private final static float X_SLOW_FACTOR = .9f; //Final .8f + private float forceValue; + + private SoundStream soundStream; + + public Stasis(Vector position, ParticleSystem particleSystem, SoundManager soundManager) { + super(ToolType.STASIS, position, + .7f * ToolType.STASIS.getCurrentUpgradeValue(ToolUpgradeType.SIZE) / 100, + .7f * ToolType.STASIS.getCurrentUpgradeValue(ToolUpgradeType.SIZE) / 100, false, + false); + this.soundManager = soundManager; + animation.setLooping(true); + animation.setRequiredDelta(300); + animation.setIndexSequence(new int[]{1, 1, 2, 3, 2, 4, 4, 3, 2, 2, 3, 3}); + super.setFloating(true); + particleSource = new ParticleSource(new Vector(position), particleSystem.stasis); + particleSource.setSpawnSize(new Vector(super.width, super.height)); + particleSource.start(); + forceValue = ToolType.STASIS.getCurrentUpgradeValue(ToolUpgradeType.FORCE); + soundStream = soundManager.playSound(soundManager.stasisSound); + } + + public void updateSoundVolume(Player player) { + float distanceToPlayer = super.getPosition().getX() - player.getPosition().getX(); + boolean playerInXRange = (player.getRightEdge() >= super.getLeftEdge() && player + .getRightEdge() <= super.getRightEdge()) || (player.getLeftEdge() >= super + .getLeftEdge() && player.getLeftEdge() <= super.getRightEdge()); + float factor = 1.0f; + if (!playerInXRange) { + factor = 1.0f / (distanceToPlayer * distanceToPlayer); + if (distanceToPlayer < -2) { + soundManager.stopSound(soundStream); + return; + } + } + soundStream.setCurrentVolumeModifier(factor); + soundManager.onStreamVolumeChanged(soundStream); + } + + @Override + public void destroy(DestroyEffect destroyEffect) { + super.destroy(destroyEffect); + particleSource.kill(); + soundManager.stopSound(soundStream); + } + + @Override + public void onPlayerCollision(Player player, Timer timer) { + player.addStasis(this); + } + + @Override + protected Geometry createWorldCollisionBounds() { + return this; + } + + @Override + protected Geometry createPlayerCollisionBounds() { + return this; + } + + public void influencePlayerMovementValues(Player player) { + float finalXSlow = getCurrentXSlowFactor(); + player.manipulateAllForces(Y_SLOW_FACTOR / forceValue); + player.getMovement().setX(player.getMovement().getX() * finalXSlow); + if (firstCollision) { + player.getMovement().y *= Y_SLOW_FACTOR / forceValue; + firstCollision = false; + } + } + + public float getCurrentXSlowFactor() { + return X_SLOW_FACTOR - forceValue / 20f; + } +} 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 index 9ee2c73..cd64dfe 100644 --- a/app/src/main/java/de/frajul/endlessroll/entities/tools/Tool.java +++ b/app/src/main/java/de/frajul/endlessroll/entities/tools/Tool.java @@ -1,64 +1,64 @@ -/* - * Created by Julian Mutter on 7/10/18 3:58 PM - * Copyright (c) 2018. All rights reserved. - * Last modified 7/10/18 3:54 PM - * - */ - -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; - } -} +/* + * Created by Julian Mutter on 7/10/18 3:58 PM + * Copyright (c) 2018. All rights reserved. + * Last modified 7/10/18 3:54 PM + * + */ + +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 index 154d235..c9f44b8 100644 --- a/app/src/main/java/de/frajul/endlessroll/entities/tools/ToolSlot.java +++ b/app/src/main/java/de/frajul/endlessroll/entities/tools/ToolSlot.java @@ -1,49 +1,49 @@ -/* - * Created by Julian Mutter on 7/10/18 3:58 PM - * Copyright (c) 2018. All rights reserved. - * Last modified 7/10/18 3:54 PM - * - */ - -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; - } -} +/* + * Created by Julian Mutter on 7/10/18 3:58 PM + * Copyright (c) 2018. All rights reserved. + * Last modified 7/10/18 3:54 PM + * + */ + +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 index 6d7a729..dcf826d 100644 --- a/app/src/main/java/de/frajul/endlessroll/entities/tools/ToolType.java +++ b/app/src/main/java/de/frajul/endlessroll/entities/tools/ToolType.java @@ -1,195 +1,195 @@ -/* - * Created by Julian Mutter on 7/10/18 3:58 PM - * Copyright (c) 2018. All rights reserved. - * Last modified 7/10/18 3:54 PM - * - */ - -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, 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, 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, 25, 4, 5, - new ToolUpgrade(ToolUpgradeType.COOLDOWN, 5000, 2000), - new ToolUpgrade(ToolUpgradeType.DURATION, 1200, 500)), - MAGNET(R.string.tool_name_magnet, R.string.tool_description_magnet, R.drawable.tools_magnet, - R.drawable.tools_magnet_button, 22, 2, 5, - new ToolUpgrade(ToolUpgradeType.COOLDOWN, 5000, 3000), - new ToolUpgrade(ToolUpgradeType.FORCE, 100, 500)), - STASIS(R.string.tool_name_stasis, R.string.tool_description_stasis, R.drawable.tools_stasis, - R.drawable.tools_stasis_button, 27, 4, 6, - new ToolUpgrade(ToolUpgradeType.COOLDOWN, 6000, 4000), - new ToolUpgrade(ToolUpgradeType.FORCE, 1, 2), - new ToolUpgrade(ToolUpgradeType.SIZE, 100, 200)), - 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, 50, - 5, 7, new ToolUpgrade(ToolUpgradeType.COOLDOWN, 15000, 11000), - new ToolUpgrade(ToolUpgradeType.DURATION, 5000, 10000)); - - @StringRes - private final int name; - @StringRes - private final int description; - private final int toolTextureId; - private final int buttonDrawable; - private final int buyPrice; - private final int upgradePrice; - private final int maxUpgradeLevel; - private final List upgrades; - - private Texture toolTexture = null; - private Texture toolButtonTexture = null; - private boolean bought; - private int currentUpgradeLevel = 1; - - ToolType(@StringRes int name, @StringRes int description, int toolTextureId, int buttonDrawable, int buyPrice, int upgradePrice, int maxUpgradeLevel, ToolUpgrade... upgrades) { - this.name = name; - this.description = description; - this.toolTextureId = toolTextureId; - this.buttonDrawable = buttonDrawable; - this.buyPrice = buyPrice; - this.upgradePrice = upgradePrice; - this.maxUpgradeLevel = maxUpgradeLevel; - this.upgrades = Arrays.asList(upgrades); - } - - @Nullable - public Tool newInstance(Vector position, ParticleSystem particleSystem, SoundManager soundManager) { - Tool tool = null; - switch (this) { - case RAMP: - tool = new Ramp(position); - break; - case SPRING: - tool = new Spring(position, soundManager); - break; - case MAGNET: - tool = new Magnet(position, particleSystem, soundManager); - break; - case BOMB: - tool = new Bomb(position); - break; - case POWER_MUSHROOM: - tool = new PowerMushroom(position, soundManager); - break; - case STASIS: - tool = new Stasis(position, particleSystem, soundManager); - break; - } - if (tool != null && tool.isPlacedByRightEdge()) - tool.move(new Vector(-tool.getWidth() / 2, 0)); - return tool; - } - - public static void loadAllToolTextures(TexturePack texturePack) { - for (ToolType type : values()) { - type.loadToolTexture(texturePack); - type.loadToolButtonTexture(texturePack); - } - } - - private void loadToolTexture(TexturePack texturePack) { - if (toolTextureId == -1) - return; - if (this != POWER_MUSHROOM) - toolTexture = texturePack.loadAtlas(toolTextureId, 2, 2); - else - toolTexture = texturePack.loadTexture(toolTextureId); - } - - private void loadToolButtonTexture(TexturePack texturePack) { - if (buttonDrawable == -1) - return; - toolButtonTexture = texturePack.loadTexture(buttonDrawable); - } - - public Texture getToolTexture() { - return toolTexture; - } - - public Texture getToolButtonTexture() { - return toolButtonTexture; - } - - public int getButtonDrawable() { - return buttonDrawable; - } - - @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; - } - +/* + * Created by Julian Mutter on 7/10/18 3:58 PM + * Copyright (c) 2018. All rights reserved. + * Last modified 7/10/18 3:54 PM + * + */ + +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, 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, 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, 25, 4, 5, + new ToolUpgrade(ToolUpgradeType.COOLDOWN, 5000, 2000), + new ToolUpgrade(ToolUpgradeType.DURATION, 1200, 500)), + MAGNET(R.string.tool_name_magnet, R.string.tool_description_magnet, R.drawable.tools_magnet, + R.drawable.tools_magnet_button, 22, 2, 5, + new ToolUpgrade(ToolUpgradeType.COOLDOWN, 5000, 3000), + new ToolUpgrade(ToolUpgradeType.FORCE, 100, 500)), + STASIS(R.string.tool_name_stasis, R.string.tool_description_stasis, R.drawable.tools_stasis, + R.drawable.tools_stasis_button, 27, 4, 6, + new ToolUpgrade(ToolUpgradeType.COOLDOWN, 6000, 4000), + new ToolUpgrade(ToolUpgradeType.FORCE, 1, 2), + new ToolUpgrade(ToolUpgradeType.SIZE, 100, 200)), + 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, 50, + 5, 7, new ToolUpgrade(ToolUpgradeType.COOLDOWN, 15000, 11000), + new ToolUpgrade(ToolUpgradeType.DURATION, 5000, 10000)); + + @StringRes + private final int name; + @StringRes + private final int description; + private final int toolTextureId; + private final int buttonDrawable; + private final int buyPrice; + private final int upgradePrice; + private final int maxUpgradeLevel; + private final List upgrades; + + private Texture toolTexture = null; + private Texture toolButtonTexture = null; + private boolean bought; + private int currentUpgradeLevel = 1; + + ToolType(@StringRes int name, @StringRes int description, int toolTextureId, int buttonDrawable, int buyPrice, int upgradePrice, int maxUpgradeLevel, ToolUpgrade... upgrades) { + this.name = name; + this.description = description; + this.toolTextureId = toolTextureId; + this.buttonDrawable = buttonDrawable; + this.buyPrice = buyPrice; + this.upgradePrice = upgradePrice; + this.maxUpgradeLevel = maxUpgradeLevel; + this.upgrades = Arrays.asList(upgrades); + } + + @Nullable + public Tool newInstance(Vector position, ParticleSystem particleSystem, SoundManager soundManager) { + Tool tool = null; + switch (this) { + case RAMP: + tool = new Ramp(position); + break; + case SPRING: + tool = new Spring(position, soundManager); + break; + case MAGNET: + tool = new Magnet(position, particleSystem, soundManager); + break; + case BOMB: + tool = new Bomb(position); + break; + case POWER_MUSHROOM: + tool = new PowerMushroom(position, soundManager); + break; + case STASIS: + tool = new Stasis(position, particleSystem, soundManager); + break; + } + if (tool != null && tool.isPlacedByRightEdge()) + tool.move(new Vector(-tool.getWidth() / 2, 0)); + return tool; + } + + public static void loadAllToolTextures(TexturePack texturePack) { + for (ToolType type : values()) { + type.loadToolTexture(texturePack); + type.loadToolButtonTexture(texturePack); + } + } + + private void loadToolTexture(TexturePack texturePack) { + if (toolTextureId == -1) + return; + if (this != POWER_MUSHROOM) + toolTexture = texturePack.loadAtlas(toolTextureId, 2, 2); + else + toolTexture = texturePack.loadTexture(toolTextureId); + } + + private void loadToolButtonTexture(TexturePack texturePack) { + if (buttonDrawable == -1) + return; + toolButtonTexture = texturePack.loadTexture(buttonDrawable); + } + + public Texture getToolTexture() { + return toolTexture; + } + + public Texture getToolButtonTexture() { + return toolButtonTexture; + } + + public int getButtonDrawable() { + return buttonDrawable; + } + + @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/entities/tools/ToolUpgrade.java b/app/src/main/java/de/frajul/endlessroll/entities/tools/ToolUpgrade.java index 9dd9f88..d218f3b 100644 --- a/app/src/main/java/de/frajul/endlessroll/entities/tools/ToolUpgrade.java +++ b/app/src/main/java/de/frajul/endlessroll/entities/tools/ToolUpgrade.java @@ -1,34 +1,34 @@ -/* - * Created by Julian Mutter on 7/10/18 3:58 PM - * Copyright (c) 2018. All rights reserved. - * Last modified 7/10/18 3:54 PM - * - */ - -package de.frajul.endlessroll.entities.tools; - -/** - * Created by Julian on 09.06.2017. - */ - -public class ToolUpgrade { - - private ToolUpgradeType type; - private float first, last; - - public ToolUpgrade(ToolUpgradeType type, float first, float last) { - this.type = type; - this.first = first; - this.last = last; - } - - public ToolUpgradeType getType() { - return type; - } - - public float getValueAtLevel(int level, int maxLevel) { - float step = (last - first) / ((float) maxLevel - 1); - return first + (level - 1) * step; - } - -} +/* + * Created by Julian Mutter on 7/10/18 3:58 PM + * Copyright (c) 2018. All rights reserved. + * Last modified 7/10/18 3:54 PM + * + */ + +package de.frajul.endlessroll.entities.tools; + +/** + * Created by Julian on 09.06.2017. + */ + +public class ToolUpgrade { + + private ToolUpgradeType type; + private float first, last; + + public ToolUpgrade(ToolUpgradeType type, float first, float last) { + this.type = type; + this.first = first; + this.last = last; + } + + public ToolUpgradeType getType() { + return type; + } + + public float getValueAtLevel(int level, int maxLevel) { + float step = (last - first) / ((float) maxLevel - 1); + return first + (level - 1) * step; + } + +} diff --git a/app/src/main/java/de/frajul/endlessroll/entities/tools/ToolUpgradeType.java b/app/src/main/java/de/frajul/endlessroll/entities/tools/ToolUpgradeType.java index e5d6241..2cd6936 100644 --- a/app/src/main/java/de/frajul/endlessroll/entities/tools/ToolUpgradeType.java +++ b/app/src/main/java/de/frajul/endlessroll/entities/tools/ToolUpgradeType.java @@ -1,18 +1,18 @@ -/* - * Created by Julian Mutter on 7/10/18 3:58 PM - * Copyright (c) 2018. All rights reserved. - * Last modified 7/10/18 3:54 PM - * - */ - -package de.frajul.endlessroll.entities.tools; - -/** - * Created by Julian on 28.10.2017. - */ - -public enum ToolUpgradeType { - - COOLDOWN, DURATION, FORCE, SIZE - -} +/* + * Created by Julian Mutter on 7/10/18 3:58 PM + * Copyright (c) 2018. All rights reserved. + * Last modified 7/10/18 3:54 PM + * + */ + +package de.frajul.endlessroll.entities.tools; + +/** + * Created by Julian on 28.10.2017. + */ + +public enum ToolUpgradeType { + + COOLDOWN, DURATION, FORCE, SIZE + +} diff --git a/app/src/main/java/de/frajul/endlessroll/levels/Gap.java b/app/src/main/java/de/frajul/endlessroll/levels/Gap.java index d03592a..1d2113e 100644 --- a/app/src/main/java/de/frajul/endlessroll/levels/Gap.java +++ b/app/src/main/java/de/frajul/endlessroll/levels/Gap.java @@ -1,29 +1,29 @@ -/* - * Created by Julian Mutter on 7/10/18 3:58 PM - * Copyright (c) 2018. All rights reserved. - * Last modified 7/10/18 3:54 PM - * - */ - -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; - } -} +/* + * Created by Julian Mutter on 7/10/18 3:58 PM + * Copyright (c) 2018. All rights reserved. + * Last modified 7/10/18 3:54 PM + * + */ + +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 index bbbf5d5..f4cdba4 100644 --- a/app/src/main/java/de/frajul/endlessroll/levels/Level.java +++ b/app/src/main/java/de/frajul/endlessroll/levels/Level.java @@ -1,154 +1,154 @@ -/* - * Created by Julian Mutter on 7/10/18 3:58 PM - * Copyright (c) 2018. All rights reserved. - * Last modified 7/10/18 3:54 PM - * - */ - -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; - } - -} +/* + * Created by Julian Mutter on 7/10/18 3:58 PM + * Copyright (c) 2018. All rights reserved. + * Last modified 7/10/18 3:54 PM + * + */ + +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 index 40515a6..327b6d5 100644 --- a/app/src/main/java/de/frajul/endlessroll/levels/LevelManager.java +++ b/app/src/main/java/de/frajul/endlessroll/levels/LevelManager.java @@ -1,138 +1,138 @@ -/* - * Created by Julian Mutter on 7/10/18 3:58 PM - * Copyright (c) 2018. All rights reserved. - * Last modified 7/10/18 3:54 PM - * - */ - -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); - } - } - - public void finishFirstPack() { - LevelPack pack1 = getPackWithId(1); - if (pack1 != null) { - for (Level level : pack1.getLevels()) { - level.setFinished(true); - level.setLocked(false); - } - } - LevelPack pack2 = getPackWithId(2); - if (pack2 != null) { - pack2.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); - } - } - -} +/* + * Created by Julian Mutter on 7/10/18 3:58 PM + * Copyright (c) 2018. All rights reserved. + * Last modified 7/10/18 3:54 PM + * + */ + +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); + } + } + + public void finishFirstPack() { + LevelPack pack1 = getPackWithId(1); + if (pack1 != null) { + for (Level level : pack1.getLevels()) { + level.setFinished(true); + level.setLocked(false); + } + } + LevelPack pack2 = getPackWithId(2); + if (pack2 != null) { + pack2.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 index d88c1e7..1b3b9d2 100644 --- a/app/src/main/java/de/frajul/endlessroll/levels/LevelPack.java +++ b/app/src/main/java/de/frajul/endlessroll/levels/LevelPack.java @@ -1,127 +1,127 @@ -/* - * Created by Julian Mutter on 7/10/18 3:58 PM - * Copyright (c) 2018. All rights reserved. - * Last modified 7/10/18 3:54 PM - * - */ - -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; - } -} +/* + * Created by Julian Mutter on 7/10/18 3:58 PM + * Copyright (c) 2018. All rights reserved. + * Last modified 7/10/18 3:54 PM + * + */ + +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 index 3879285..e4e30cc 100644 --- a/app/src/main/java/de/frajul/endlessroll/levels/MoveComponent.java +++ b/app/src/main/java/de/frajul/endlessroll/levels/MoveComponent.java @@ -1,94 +1,94 @@ -/* - * Created by Julian Mutter on 7/10/18 3:58 PM - * Copyright (c) 2018. All rights reserved. - * Last modified 7/10/18 3:54 PM - * - */ - -package de.frajul.endlessroll.levels; - -import org.simpleframework.xml.Attribute; - -import de.frajul.endlessroll.data.Vector; - -public class MoveComponent { - - @Attribute - private float length; - @Attribute - private float rotation; - @Attribute - private float startOffset; - @Attribute - private float direction; - @Attribute - private float speed; - @Attribute - private boolean hasPlayerXSpeed; - @Attribute - private float triggerDistance; - - public final float TRANSITION_VALUE = 0.001f; - private Vector position; - private float triangleWidth; - private float triangleHeight; - - public void init(Vector obstaclePosition) { - double rotationRadians = Math.toRadians(getRotation()); - double invertRotationRadians = Math.toRadians(90 - getRotation()); - - this.triangleWidth = (float) (length * Math.sin(rotationRadians)); - this.triangleHeight = (float) (length * Math.sin(invertRotationRadians)); - - float x = obstaclePosition.getX(); - float y = obstaclePosition.getY(); - x -= startOffset * triangleWidth; - y -= startOffset * triangleHeight; - this.position = new Vector(x, y); - } - - public float getLength() { - return length; - } - - public float getRotation() { - return rotation; - } - - public float getStartOffset() { - return startOffset; - } - - public float getDirection() { - return direction; - } - - public float getSpeed() { - return speed; - } - - public boolean isHasPlayerXSpeed() { - return hasPlayerXSpeed; - } - - public float getTriggerDistance() { - return triggerDistance; - } - - public void calcSpeedForPlayerSpeed(float playerSpeed) { - float xSpeed = playerSpeed; - speed = xSpeed / new Vector(triangleWidth, triangleHeight).normalize().getX(); - speed /= TRANSITION_VALUE; - } - - public Vector getMovementVector(float moveDirection) { - return new Vector(triangleWidth, triangleHeight).normalize() - .mul(moveDirection * getSpeed() * TRANSITION_VALUE); - } - - public Vector getPositionForProgress(float progress) { - return new Vector(position.x + triangleWidth * progress, - position.y + triangleHeight * progress); - } - -} +/* + * Created by Julian Mutter on 7/10/18 3:58 PM + * Copyright (c) 2018. All rights reserved. + * Last modified 7/10/18 3:54 PM + * + */ + +package de.frajul.endlessroll.levels; + +import org.simpleframework.xml.Attribute; + +import de.frajul.endlessroll.data.Vector; + +public class MoveComponent { + + @Attribute + private float length; + @Attribute + private float rotation; + @Attribute + private float startOffset; + @Attribute + private float direction; + @Attribute + private float speed; + @Attribute + private boolean hasPlayerXSpeed; + @Attribute + private float triggerDistance; + + public final float TRANSITION_VALUE = 0.001f; + private Vector position; + private float triangleWidth; + private float triangleHeight; + + public void init(Vector obstaclePosition) { + double rotationRadians = Math.toRadians(getRotation()); + double invertRotationRadians = Math.toRadians(90 - getRotation()); + + this.triangleWidth = (float) (length * Math.sin(rotationRadians)); + this.triangleHeight = (float) (length * Math.sin(invertRotationRadians)); + + float x = obstaclePosition.getX(); + float y = obstaclePosition.getY(); + x -= startOffset * triangleWidth; + y -= startOffset * triangleHeight; + this.position = new Vector(x, y); + } + + public float getLength() { + return length; + } + + public float getRotation() { + return rotation; + } + + public float getStartOffset() { + return startOffset; + } + + public float getDirection() { + return direction; + } + + public float getSpeed() { + return speed; + } + + public boolean isHasPlayerXSpeed() { + return hasPlayerXSpeed; + } + + public float getTriggerDistance() { + return triggerDistance; + } + + public void calcSpeedForPlayerSpeed(float playerSpeed) { + float xSpeed = playerSpeed; + speed = xSpeed / new Vector(triangleWidth, triangleHeight).normalize().getX(); + speed /= TRANSITION_VALUE; + } + + public Vector getMovementVector(float moveDirection) { + return new Vector(triangleWidth, triangleHeight).normalize() + .mul(moveDirection * getSpeed() * TRANSITION_VALUE); + } + + public Vector getPositionForProgress(float progress) { + return new Vector(position.x + triangleWidth * progress, + position.y + triangleHeight * progress); + } + +} diff --git a/app/src/main/java/de/frajul/endlessroll/levels/ObstacleData.java b/app/src/main/java/de/frajul/endlessroll/levels/ObstacleData.java index 8607b79..54f3dd0 100644 --- a/app/src/main/java/de/frajul/endlessroll/levels/ObstacleData.java +++ b/app/src/main/java/de/frajul/endlessroll/levels/ObstacleData.java @@ -1,100 +1,100 @@ -/* - * Created by Julian Mutter on 7/10/18 3:58 PM - * Copyright (c) 2018. All rights reserved. - * Last modified 7/10/18 3:54 PM - * - */ - -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; - } -} +/* + * Created by Julian Mutter on 7/10/18 3:58 PM + * Copyright (c) 2018. All rights reserved. + * Last modified 7/10/18 3:54 PM + * + */ + +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 index 84b222f..ca011a6 100644 --- a/app/src/main/java/de/frajul/endlessroll/levels/PositionData.java +++ b/app/src/main/java/de/frajul/endlessroll/levels/PositionData.java @@ -1,30 +1,30 @@ -/* - * Created by Julian Mutter on 7/10/18 3:58 PM - * Copyright (c) 2018. All rights reserved. - * Last modified 7/10/18 3:54 PM - * - */ - -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; - } -} +/* + * Created by Julian Mutter on 7/10/18 3:58 PM + * Copyright (c) 2018. All rights reserved. + * Last modified 7/10/18 3:54 PM + * + */ + +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 index 79f9239..bf68dc8 100644 --- a/app/src/main/java/de/frajul/endlessroll/levels/TileData.java +++ b/app/src/main/java/de/frajul/endlessroll/levels/TileData.java @@ -1,26 +1,26 @@ -/* - * Created by Julian Mutter on 7/10/18 3:58 PM - * Copyright (c) 2018. All rights reserved. - * Last modified 7/10/18 3:54 PM - * - */ - -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; - } -} +/* + * Created by Julian Mutter on 7/10/18 3:58 PM + * Copyright (c) 2018. All rights reserved. + * Last modified 7/10/18 3:54 PM + * + */ + +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 index 78123ce..2972e0d 100644 --- a/app/src/main/java/de/frajul/endlessroll/levels/worlds/World.java +++ b/app/src/main/java/de/frajul/endlessroll/levels/worlds/World.java @@ -1,93 +1,93 @@ -/* - * Created by Julian Mutter on 7/10/18 3:58 PM - * Copyright (c) 2018. All rights reserved. - * Last modified 7/10/18 3:54 PM - * - */ - -package de.frajul.endlessroll.levels.worlds; - -import android.support.annotation.DrawableRes; - -import java.util.ArrayList; -import java.util.Arrays; -import java.util.List; - -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(R.drawable.world_previews_grasslands, R.drawable.terrain_t_grass, - R.drawable.terrain_c_grass, R.drawable.obstacles_grass, - R.drawable.backgrounds_game_grass), - ICY_MOUNTAINS(R.drawable.world_previews_icymountains, R.drawable.terrain_t_ice, - R.drawable.terrain_c_ice, R.drawable.obstacles_snow, R.drawable.backgrounds_game_snow), - UNDERWATER(R.drawable.world_previews_comingsoon, R.drawable.terrain_t_underwater, R.drawable.terrain_c_underwater, R.drawable.obstacles_underwater, R.drawable.backgrounds_game_underwater, R.drawable.background_game_underwater_2, R.drawable.background_game_underwater_3); -// TEST_WORLD_GRASS(R.drawable.world_previews_grasslands, R.drawable.terrain_t_grass, -// R.drawable.terrain_c_grass, R.drawable.juri_obstacles_grass, -// R.drawable.backgrounds_game_grass, R.drawable.juri_background_game_grass_2, R.drawable.juri_background_game_grass_3), -// TEST_WORLD_SNOW(R.drawable.world_previews_icymountains, R.drawable.terrain_t_ice, -// R.drawable.terrain_c_ice, R.drawable.obstacles_snow, R.drawable.backgrounds_game_snow, R.drawable.juri_background_game_snow_2, R.drawable.juri_background_game_snow_3); - - @DrawableRes - private int previewId; - @DrawableRes - private int terrainId; - @DrawableRes - private int ceilingId; - @DrawableRes - private int obstacleId; - private List backgroundIds; - - private List backgroundTextures = new ArrayList<>(); - private Texture terrain; - private Texture ceiling; - private Texture obstacle; - - World(@DrawableRes int previewId, @DrawableRes int terrainId, @DrawableRes int ceilingId, @DrawableRes int obstacleId, @DrawableRes Integer... backgroundIds) { - this.previewId = previewId; - this.terrainId = terrainId; - this.ceilingId = ceilingId; - this.obstacleId = obstacleId; - this.backgroundIds = Arrays.asList(backgroundIds); - } - - public static void loadAllSpecificTextures(TexturePack texturePack) { - for (World world : values()) - world.loadSpecificTextures(texturePack); - } - - private void loadSpecificTextures(TexturePack texturePack) { - for (int backgroundId : backgroundIds) - backgroundTextures.add(texturePack.loadTexture(backgroundId)); - terrain = texturePack.loadTexture(terrainId); - ceiling = texturePack.loadTexture(ceilingId); - obstacle = texturePack.loadAtlas(obstacleId, 8, 8); - } - - public int getPreviewId() { - return previewId; - } - - public List getBackgroundTextures() { - return backgroundTextures; - } - - public Texture getTerrainTexture() { - return terrain; - } - - public Texture getCeilingTexture() { - return ceiling; - } - - public Texture getObstacleTexture() { - return obstacle; - } -} +/* + * Created by Julian Mutter on 7/10/18 3:58 PM + * Copyright (c) 2018. All rights reserved. + * Last modified 7/10/18 3:54 PM + * + */ + +package de.frajul.endlessroll.levels.worlds; + +import android.support.annotation.DrawableRes; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; + +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(R.drawable.world_previews_grasslands, R.drawable.terrain_t_grass, + R.drawable.terrain_c_grass, R.drawable.obstacles_grass, + R.drawable.backgrounds_game_grass), + ICY_MOUNTAINS(R.drawable.world_previews_icymountains, R.drawable.terrain_t_ice, + R.drawable.terrain_c_ice, R.drawable.obstacles_snow, R.drawable.backgrounds_game_snow), + UNDERWATER(R.drawable.world_previews_comingsoon, R.drawable.terrain_t_underwater, R.drawable.terrain_c_underwater, R.drawable.obstacles_underwater, R.drawable.backgrounds_game_underwater, R.drawable.background_game_underwater_2, R.drawable.background_game_underwater_3); +// TEST_WORLD_GRASS(R.drawable.world_previews_grasslands, R.drawable.terrain_t_grass, +// R.drawable.terrain_c_grass, R.drawable.juri_obstacles_grass, +// R.drawable.backgrounds_game_grass, R.drawable.juri_background_game_grass_2, R.drawable.juri_background_game_grass_3), +// TEST_WORLD_SNOW(R.drawable.world_previews_icymountains, R.drawable.terrain_t_ice, +// R.drawable.terrain_c_ice, R.drawable.obstacles_snow, R.drawable.backgrounds_game_snow, R.drawable.juri_background_game_snow_2, R.drawable.juri_background_game_snow_3); + + @DrawableRes + private int previewId; + @DrawableRes + private int terrainId; + @DrawableRes + private int ceilingId; + @DrawableRes + private int obstacleId; + private List backgroundIds; + + private List backgroundTextures = new ArrayList<>(); + private Texture terrain; + private Texture ceiling; + private Texture obstacle; + + World(@DrawableRes int previewId, @DrawableRes int terrainId, @DrawableRes int ceilingId, @DrawableRes int obstacleId, @DrawableRes Integer... backgroundIds) { + this.previewId = previewId; + this.terrainId = terrainId; + this.ceilingId = ceilingId; + this.obstacleId = obstacleId; + this.backgroundIds = Arrays.asList(backgroundIds); + } + + public static void loadAllSpecificTextures(TexturePack texturePack) { + for (World world : values()) + world.loadSpecificTextures(texturePack); + } + + private void loadSpecificTextures(TexturePack texturePack) { + for (int backgroundId : backgroundIds) + backgroundTextures.add(texturePack.loadTexture(backgroundId)); + terrain = texturePack.loadTexture(terrainId); + ceiling = texturePack.loadTexture(ceilingId); + obstacle = texturePack.loadAtlas(obstacleId, 8, 8); + } + + public int getPreviewId() { + return previewId; + } + + public List getBackgroundTextures() { + return backgroundTextures; + } + + 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/DataStorageHandler.java b/app/src/main/java/de/frajul/endlessroll/main/DataStorageHandler.java index 453b952..6c7606a 100644 --- a/app/src/main/java/de/frajul/endlessroll/main/DataStorageHandler.java +++ b/app/src/main/java/de/frajul/endlessroll/main/DataStorageHandler.java @@ -1,135 +1,135 @@ -/* - * Created by Julian Mutter on 7/10/18 3:58 PM - * Copyright (c) 2018. All rights reserved. - * Last modified 7/10/18 3:54 PM - * - */ - -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 SOUNDS_MUTED = "SoundsMuted"; - private final String MUSIC_MUTED = "MusicMuted"; - 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_FINISHED = "ToolShopTutorialFinished"; - private final String SHOW_FPS = "ShowFps"; - - private SharedPreferences preferences; - private MyDatabase database; - - public DataStorageHandler(Activity activity) { - preferences = activity.getSharedPreferences(PREFERENCES_NAME, Context.MODE_PRIVATE); - database = new MyDatabase(activity); - } - - public boolean readIsShowFps() { - return preferences.getBoolean(SHOW_FPS, false); - } - - public void writeShowFps(boolean showFps) { - SharedPreferences.Editor editor = preferences.edit(); - editor.putBoolean(SHOW_FPS, showFps); - editor.apply(); - } - - public boolean readIsSoundsMuted() { - return preferences.getBoolean(SOUNDS_MUTED, false); - } - - public void writeSoundsMuted(boolean soundsMuted) { - SharedPreferences.Editor editor = preferences.edit(); - editor.putBoolean(SOUNDS_MUTED, soundsMuted); - editor.apply(); - } - - public boolean readIsMusicMuted() { - return preferences.getBoolean(MUSIC_MUTED, false); - } - - public void writeMusicMuted(boolean musicMuted) { - SharedPreferences.Editor editor = preferences.edit(); - editor.putBoolean(MUSIC_MUTED, musicMuted); - 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 writeToolShopTutorialFinished(boolean finished) { - SharedPreferences.Editor editor = preferences.edit(); - editor.putBoolean(TOOL_SHOP_TUTORIAL_FINISHED, finished); - editor.apply(); - } - - public boolean readToolShopTutorialFinished() { - return preferences.getBoolean(TOOL_SHOP_TUTORIAL_FINISHED, false); - } - - public MyDatabase getDatabase() { - return database; - } -} +/* + * Created by Julian Mutter on 7/10/18 3:58 PM + * Copyright (c) 2018. All rights reserved. + * Last modified 7/10/18 3:54 PM + * + */ + +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 SOUNDS_MUTED = "SoundsMuted"; + private final String MUSIC_MUTED = "MusicMuted"; + 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_FINISHED = "ToolShopTutorialFinished"; + private final String SHOW_FPS = "ShowFps"; + + private SharedPreferences preferences; + private MyDatabase database; + + public DataStorageHandler(Activity activity) { + preferences = activity.getSharedPreferences(PREFERENCES_NAME, Context.MODE_PRIVATE); + database = new MyDatabase(activity); + } + + public boolean readIsShowFps() { + return preferences.getBoolean(SHOW_FPS, false); + } + + public void writeShowFps(boolean showFps) { + SharedPreferences.Editor editor = preferences.edit(); + editor.putBoolean(SHOW_FPS, showFps); + editor.apply(); + } + + public boolean readIsSoundsMuted() { + return preferences.getBoolean(SOUNDS_MUTED, false); + } + + public void writeSoundsMuted(boolean soundsMuted) { + SharedPreferences.Editor editor = preferences.edit(); + editor.putBoolean(SOUNDS_MUTED, soundsMuted); + editor.apply(); + } + + public boolean readIsMusicMuted() { + return preferences.getBoolean(MUSIC_MUTED, false); + } + + public void writeMusicMuted(boolean musicMuted) { + SharedPreferences.Editor editor = preferences.edit(); + editor.putBoolean(MUSIC_MUTED, musicMuted); + 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 writeToolShopTutorialFinished(boolean finished) { + SharedPreferences.Editor editor = preferences.edit(); + editor.putBoolean(TOOL_SHOP_TUTORIAL_FINISHED, finished); + editor.apply(); + } + + public boolean readToolShopTutorialFinished() { + return preferences.getBoolean(TOOL_SHOP_TUTORIAL_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 index f8d988b..3a23b4b 100644 --- a/app/src/main/java/de/frajul/endlessroll/main/ExceptionHandler.java +++ b/app/src/main/java/de/frajul/endlessroll/main/ExceptionHandler.java @@ -1,17 +1,17 @@ -/* - * Created by Julian Mutter on 7/10/18 3:58 PM - * Copyright (c) 2018. All rights reserved. - * Last modified 7/10/18 3:54 PM - * - */ - -package de.frajul.endlessroll.main; - -/** - * Created by Julian on 06.02.2016. - */ -public interface ExceptionHandler { - - void onException(Exception e); - -} +/* + * Created by Julian Mutter on 7/10/18 3:58 PM + * Copyright (c) 2018. All rights reserved. + * Last modified 7/10/18 3:54 PM + * + */ + +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 index 8734110..4ed2bce 100644 --- a/app/src/main/java/de/frajul/endlessroll/main/GameActivity.java +++ b/app/src/main/java/de/frajul/endlessroll/main/GameActivity.java @@ -1,349 +1,349 @@ -/* - * Created by Julian Mutter on 7/10/18 3:58 PM - * Copyright (c) 2018. All rights reserved. - * Last modified 7/10/18 3:54 PM - * - */ - -package de.frajul.endlessroll.main; - -import android.app.Activity; -import android.app.ActivityManager; -import android.content.Context; -import android.content.pm.ConfigurationInfo; -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 com.google.android.gms.ads.MobileAds; - -import java.util.ArrayList; -import java.util.List; - -import de.frajul.endlessroll.entities.shapes.PlayerShape; -import de.frajul.endlessroll.entities.shapes.Task; -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.LevelupMessage; -import de.frajul.endlessroll.views.TaskCompletedMessage; - -/** - * Created by Julian on 06.02.2016. - */ -public class GameActivity extends Activity implements ExceptionHandler, User.LvUpListener { - - public final static boolean IS_DEVELOPER = false; - - private DataStorageHandler dataStorageHandler; - private LevelManager levelManager; - private SoundManager soundManager; - private User user; - private Typeface typeface; - private TutorialManager tutorialManager; - - private List alreadyUnlockedPlayerShapes = new ArrayList<>(); - - private MyGlSurfaceView glSurfaceView; - private ScreenFlipper flipper; - private LevelsScreen levelsScreen; - private GameScreen gameScreen; - - 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); - - MobileAds.initialize(this, "ca-app-pub-7069685539417779~2685294395"); - 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.setSoundsMuted(dataStorageHandler.readIsSoundsMuted()); - soundManager.setMusicMuted(dataStorageHandler.readIsMusicMuted()); - - levelManager = new LevelManager(this, dataStorageHandler); - tutorialManager = new TutorialManager(this); - tutorialManager.getToolShopTutorial() - .setFinished(dataStorageHandler.readToolShopTutorialFinished()); - - checkForAlreadyUnlockedPlayerShapes(); - - this.glSurfaceView = new MyGlSurfaceView(this, new GameRenderer(this)); - typeface = Typeface.createFromAsset(getAssets(), "fontBaron.ttf"); - - PreStartScreen preStartScreen = new PreStartScreen(this); - StartScreen startScreen = new StartScreen(this, glSurfaceView); - GLTestScreen glTestScreen = new GLTestScreen(this, glSurfaceView); - WorldsScreen worldsScreen = new WorldsScreen(this); - levelsScreen = new LevelsScreen(this); - ToolShopScreen toolShopScreen = new ToolShopScreen(this); - PlayerShapeShopScreen shapeShopScreen = new PlayerShapeShopScreen(this); - gameScreen = new GameScreen(this, glSurfaceView); - SettingsScreen 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); - } - } - - public void exitGame() { - super.finish(); - } - - public boolean isShortMenuInGameActive() { - return gameScreen.getGameViewManager().isShortMenuVisible(); - } - - public void flipToScreen(final Screen.ScreenType screen, final Screen.ScreenType caller) { - if (screen != Screen.ScreenType.NONE && flipper.getCurrentScreen().getType() != screen) { - runOnUiThread(new Runnable() { - @Override - public void run() { - flipper.showScreen(screen, caller); - } - }); - } - } - - public void flipToScreen(final Screen.ScreenType screen) { - if (screen != Screen.ScreenType.NONE && flipper.getCurrentScreen().getType() != screen) { - runOnUiThread(new Runnable() { - @Override - public void run() { - flipper.showScreen(screen, flipper.getCurrentScreen().getType()); - } - }); - } - } - - public void flipToScreenNonUiThreaded(final Screen.ScreenType screen) { - if (screen != Screen.ScreenType.NONE && flipper.getCurrentScreen().getType() != screen) { - flipper.showScreen(screen, flipper.getCurrentScreen().getType()); - } - } - - public void onSurfaceChanged() { - if (flipper.getCurrentScreen().getType() == Screen.ScreenType.PRE_START) - flipToScreen(Screen.ScreenType.START); - } - - public void checkForAlreadyUnlockedPlayerShapes() { - alreadyUnlockedPlayerShapes.clear(); - for (PlayerShape shape : PlayerShape.values()) { - Task task = shape.getUnlockTask(); - task.update(levelManager); - if (task.isConditionFulfilled()) - alreadyUnlockedPlayerShapes.add(shape); - } - } - - public void showNewFinishedPlayerShapeTasks() { - List newUnlockedShapes = new ArrayList<>(); - for (PlayerShape shape : PlayerShape.values()) { - Task task = shape.getUnlockTask(); - task.update(levelManager); - if (task.isConditionFulfilled() && !alreadyUnlockedPlayerShapes.contains(shape)) { - alreadyUnlockedPlayerShapes.add(shape); - newUnlockedShapes.add(shape); - } - } - if (!newUnlockedShapes.isEmpty()) - onTasksCompleted(newUnlockedShapes); - } - - 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, boolean showLvUpMessage) { - dataStorageHandler.writeUserData(user); - if (showLvUpMessage) { - runOnUiThread(new Runnable() { - @Override - public void run() { - levelupMessage.show(level); - } - }); - tutorialManager.onLvUp(user); - } - } - - public void onTasksCompleted(final List shapes) { - runOnUiThread(new Runnable() { - @Override - public void run() { - taskCompletedMessage.show(shapes); - } - }); - } - - public void showTutorial(final List breakPoints) { - if (!gameScreen.isLevelFinished()) { - gameScreen.setGamePausedWithoutMenu(); - } - 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.writeToolShopTutorialFinished(false); - levelManager.reset(); - tutorialManager.resetAllTutorials(); - MyDatabase database = dataStorageHandler.getDatabase(); - database.open(); - database.clearLevelProgess(); - database.clearLevelPackLocked(); - for (ToolType type : ToolType.values()) - type.reset(); - database.writeToolData(); - database.close(); - checkForAlreadyUnlockedPlayerShapes(); - } - - @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.activityPause(); - super.onPause(); - } - - @Override - protected void onResume() { - GameLog.d("OnResume"); - glSurfaceView.onResume(); - soundManager.activityResume(); - super.onResume(); - } - - @Override - protected void onDestroy() { - GameLog.d("OnDestroy"); - soundManager.destroy(); - - super.onDestroy(); - } - - 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; - } -} +/* + * Created by Julian Mutter on 7/10/18 3:58 PM + * Copyright (c) 2018. All rights reserved. + * Last modified 7/10/18 3:54 PM + * + */ + +package de.frajul.endlessroll.main; + +import android.app.Activity; +import android.app.ActivityManager; +import android.content.Context; +import android.content.pm.ConfigurationInfo; +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 com.google.android.gms.ads.MobileAds; + +import java.util.ArrayList; +import java.util.List; + +import de.frajul.endlessroll.entities.shapes.PlayerShape; +import de.frajul.endlessroll.entities.shapes.Task; +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.LevelupMessage; +import de.frajul.endlessroll.views.TaskCompletedMessage; + +/** + * Created by Julian on 06.02.2016. + */ +public class GameActivity extends Activity implements ExceptionHandler, User.LvUpListener { + + public final static boolean IS_DEVELOPER = false; + + private DataStorageHandler dataStorageHandler; + private LevelManager levelManager; + private SoundManager soundManager; + private User user; + private Typeface typeface; + private TutorialManager tutorialManager; + + private List alreadyUnlockedPlayerShapes = new ArrayList<>(); + + private MyGlSurfaceView glSurfaceView; + private ScreenFlipper flipper; + private LevelsScreen levelsScreen; + private GameScreen gameScreen; + + 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); + + MobileAds.initialize(this, "ca-app-pub-7069685539417779~2685294395"); + 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.setSoundsMuted(dataStorageHandler.readIsSoundsMuted()); + soundManager.setMusicMuted(dataStorageHandler.readIsMusicMuted()); + + levelManager = new LevelManager(this, dataStorageHandler); + tutorialManager = new TutorialManager(this); + tutorialManager.getToolShopTutorial() + .setFinished(dataStorageHandler.readToolShopTutorialFinished()); + + checkForAlreadyUnlockedPlayerShapes(); + + this.glSurfaceView = new MyGlSurfaceView(this, new GameRenderer(this)); + typeface = Typeface.createFromAsset(getAssets(), "fontBaron.ttf"); + + PreStartScreen preStartScreen = new PreStartScreen(this); + StartScreen startScreen = new StartScreen(this, glSurfaceView); + GLTestScreen glTestScreen = new GLTestScreen(this, glSurfaceView); + WorldsScreen worldsScreen = new WorldsScreen(this); + levelsScreen = new LevelsScreen(this); + ToolShopScreen toolShopScreen = new ToolShopScreen(this); + PlayerShapeShopScreen shapeShopScreen = new PlayerShapeShopScreen(this); + gameScreen = new GameScreen(this, glSurfaceView); + SettingsScreen 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); + } + } + + public void exitGame() { + super.finish(); + } + + public boolean isShortMenuInGameActive() { + return gameScreen.getGameViewManager().isShortMenuVisible(); + } + + public void flipToScreen(final Screen.ScreenType screen, final Screen.ScreenType caller) { + if (screen != Screen.ScreenType.NONE && flipper.getCurrentScreen().getType() != screen) { + runOnUiThread(new Runnable() { + @Override + public void run() { + flipper.showScreen(screen, caller); + } + }); + } + } + + public void flipToScreen(final Screen.ScreenType screen) { + if (screen != Screen.ScreenType.NONE && flipper.getCurrentScreen().getType() != screen) { + runOnUiThread(new Runnable() { + @Override + public void run() { + flipper.showScreen(screen, flipper.getCurrentScreen().getType()); + } + }); + } + } + + public void flipToScreenNonUiThreaded(final Screen.ScreenType screen) { + if (screen != Screen.ScreenType.NONE && flipper.getCurrentScreen().getType() != screen) { + flipper.showScreen(screen, flipper.getCurrentScreen().getType()); + } + } + + public void onSurfaceChanged() { + if (flipper.getCurrentScreen().getType() == Screen.ScreenType.PRE_START) + flipToScreen(Screen.ScreenType.START); + } + + public void checkForAlreadyUnlockedPlayerShapes() { + alreadyUnlockedPlayerShapes.clear(); + for (PlayerShape shape : PlayerShape.values()) { + Task task = shape.getUnlockTask(); + task.update(levelManager); + if (task.isConditionFulfilled()) + alreadyUnlockedPlayerShapes.add(shape); + } + } + + public void showNewFinishedPlayerShapeTasks() { + List newUnlockedShapes = new ArrayList<>(); + for (PlayerShape shape : PlayerShape.values()) { + Task task = shape.getUnlockTask(); + task.update(levelManager); + if (task.isConditionFulfilled() && !alreadyUnlockedPlayerShapes.contains(shape)) { + alreadyUnlockedPlayerShapes.add(shape); + newUnlockedShapes.add(shape); + } + } + if (!newUnlockedShapes.isEmpty()) + onTasksCompleted(newUnlockedShapes); + } + + 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, boolean showLvUpMessage) { + dataStorageHandler.writeUserData(user); + if (showLvUpMessage) { + runOnUiThread(new Runnable() { + @Override + public void run() { + levelupMessage.show(level); + } + }); + tutorialManager.onLvUp(user); + } + } + + public void onTasksCompleted(final List shapes) { + runOnUiThread(new Runnable() { + @Override + public void run() { + taskCompletedMessage.show(shapes); + } + }); + } + + public void showTutorial(final List breakPoints) { + if (!gameScreen.isLevelFinished()) { + gameScreen.setGamePausedWithoutMenu(); + } + 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.writeToolShopTutorialFinished(false); + levelManager.reset(); + tutorialManager.resetAllTutorials(); + MyDatabase database = dataStorageHandler.getDatabase(); + database.open(); + database.clearLevelProgess(); + database.clearLevelPackLocked(); + for (ToolType type : ToolType.values()) + type.reset(); + database.writeToolData(); + database.close(); + checkForAlreadyUnlockedPlayerShapes(); + } + + @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.activityPause(); + super.onPause(); + } + + @Override + protected void onResume() { + GameLog.d("OnResume"); + glSurfaceView.onResume(); + soundManager.activityResume(); + super.onResume(); + } + + @Override + protected void onDestroy() { + GameLog.d("OnDestroy"); + soundManager.destroy(); + + super.onDestroy(); + } + + 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 index 49f762f..aa177a1 100644 --- a/app/src/main/java/de/frajul/endlessroll/main/GameHandler.java +++ b/app/src/main/java/de/frajul/endlessroll/main/GameHandler.java @@ -1,30 +1,30 @@ -/* - * Created by Julian Mutter on 7/10/18 3:58 PM - * Copyright (c) 2018. All rights reserved. - * Last modified 7/10/18 3:54 PM - * - */ - -package de.frajul.endlessroll.main; - -import android.widget.RelativeLayout; - -import java.util.List; - -import de.frajul.endlessroll.main.screens.Screen; -import de.frajul.endlessroll.main.tutorial.BreakPoint; - -/** - * 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); - -} +/* + * Created by Julian Mutter on 7/10/18 3:58 PM + * Copyright (c) 2018. All rights reserved. + * Last modified 7/10/18 3:54 PM + * + */ + +package de.frajul.endlessroll.main; + +import android.widget.RelativeLayout; + +import java.util.List; + +import de.frajul.endlessroll.main.screens.Screen; +import de.frajul.endlessroll.main.tutorial.BreakPoint; + +/** + * 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 index ce6dc96..f43a0a6 100644 --- a/app/src/main/java/de/frajul/endlessroll/main/GameLog.java +++ b/app/src/main/java/de/frajul/endlessroll/main/GameLog.java @@ -1,51 +1,51 @@ -/* - * Created by Julian Mutter on 7/10/18 3:58 PM - * Copyright (c) 2018. All rights reserved. - * Last modified 7/10/18 3:54 PM - * - */ - -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() + ")"; - } -} +/* + * Created by Julian Mutter on 7/10/18 3:58 PM + * Copyright (c) 2018. All rights reserved. + * Last modified 7/10/18 3:54 PM + * + */ + +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 index d262a7b..b8d264d 100644 --- a/app/src/main/java/de/frajul/endlessroll/main/MyGlSurfaceView.java +++ b/app/src/main/java/de/frajul/endlessroll/main/MyGlSurfaceView.java @@ -1,54 +1,54 @@ -/* - * Created by Julian Mutter on 7/10/18 3:58 PM - * Copyright (c) 2018. All rights reserved. - * Last modified 7/10/18 3:54 PM - * - */ - -package de.frajul.endlessroll.main; - -import android.content.Context; -import android.opengl.GLSurfaceView; -import android.view.MotionEvent; - -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) { - super(context); - this.renderer = gameRenderer; - super.setEGLContextClientVersion(2); - super.setRenderer(renderer); - } - - public GameRenderer getRenderer() { - return renderer; - } - - @Override - public boolean onTouchEvent(MotionEvent event) { - if (event.getAction() == MotionEvent.ACTION_DOWN) { - renderer.onTouch(event.getX(), event.getY()); - } - return true; - } - - @Override - public void onResume() { - GameLog.i("GLSurfaceView: onResume"); - super.onResume(); - } - - @Override - public void onPause() { - GameLog.i("GLSurfaceView: onPause"); - super.onPause(); - } - -} +/* + * Created by Julian Mutter on 7/10/18 3:58 PM + * Copyright (c) 2018. All rights reserved. + * Last modified 7/10/18 3:54 PM + * + */ + +package de.frajul.endlessroll.main; + +import android.content.Context; +import android.opengl.GLSurfaceView; +import android.view.MotionEvent; + +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) { + super(context); + this.renderer = gameRenderer; + super.setEGLContextClientVersion(2); + super.setRenderer(renderer); + } + + public GameRenderer getRenderer() { + return renderer; + } + + @Override + public boolean onTouchEvent(MotionEvent event) { + if (event.getAction() == MotionEvent.ACTION_DOWN) { + renderer.onTouch(event.getX(), event.getY()); + } + return true; + } + + @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/ads/AdLoadingListener.java b/app/src/main/java/de/frajul/endlessroll/main/ads/AdLoadingListener.java index cd66f79..c17dad7 100644 --- a/app/src/main/java/de/frajul/endlessroll/main/ads/AdLoadingListener.java +++ b/app/src/main/java/de/frajul/endlessroll/main/ads/AdLoadingListener.java @@ -1,16 +1,16 @@ -/* - * Created by Julian Mutter on 7/10/18 3:58 PM - * Copyright (c) 2018. All rights reserved. - * Last modified 7/10/18 3:54 PM - * - */ - -package de.frajul.endlessroll.main.ads; - -public interface AdLoadingListener { - - void onAdLoaded(); - - void onAdFailedToLoad(int errorCode); - -} +/* + * Created by Julian Mutter on 7/10/18 3:58 PM + * Copyright (c) 2018. All rights reserved. + * Last modified 7/10/18 3:54 PM + * + */ + +package de.frajul.endlessroll.main.ads; + +public interface AdLoadingListener { + + void onAdLoaded(); + + void onAdFailedToLoad(int errorCode); + +} diff --git a/app/src/main/java/de/frajul/endlessroll/main/ads/CustomAdListener.java b/app/src/main/java/de/frajul/endlessroll/main/ads/CustomAdListener.java index ff510c3..7c0f092 100644 --- a/app/src/main/java/de/frajul/endlessroll/main/ads/CustomAdListener.java +++ b/app/src/main/java/de/frajul/endlessroll/main/ads/CustomAdListener.java @@ -1,30 +1,30 @@ -/* - * Created by Julian Mutter on 7/10/18 3:58 PM - * Copyright (c) 2018. All rights reserved. - * Last modified 7/10/18 3:54 PM - * - */ - -package de.frajul.endlessroll.main.ads; - -import com.google.android.gms.ads.AdListener; - -public class CustomAdListener extends AdListener { - - private AdLoadingListener adLoadingListener; - - public CustomAdListener(AdLoadingListener adLoadingListener) { - super(); - this.adLoadingListener = adLoadingListener; - } - - @Override - public void onAdLoaded() { - adLoadingListener.onAdLoaded(); - } - - @Override - public void onAdFailedToLoad(int i) { - adLoadingListener.onAdFailedToLoad(i); - } -} +/* + * Created by Julian Mutter on 7/10/18 3:58 PM + * Copyright (c) 2018. All rights reserved. + * Last modified 7/10/18 3:54 PM + * + */ + +package de.frajul.endlessroll.main.ads; + +import com.google.android.gms.ads.AdListener; + +public class CustomAdListener extends AdListener { + + private AdLoadingListener adLoadingListener; + + public CustomAdListener(AdLoadingListener adLoadingListener) { + super(); + this.adLoadingListener = adLoadingListener; + } + + @Override + public void onAdLoaded() { + adLoadingListener.onAdLoaded(); + } + + @Override + public void onAdFailedToLoad(int i) { + adLoadingListener.onAdFailedToLoad(i); + } +} 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 index 3844ca4..a8b9977 100644 --- a/app/src/main/java/de/frajul/endlessroll/main/game/Camera.java +++ b/app/src/main/java/de/frajul/endlessroll/main/game/Camera.java @@ -1,52 +1,52 @@ -/* - * Created by Julian Mutter on 7/10/18 3:58 PM - * Copyright (c) 2018. All rights reserved. - * Last modified 7/10/18 3:54 PM - * - */ - -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.getFrameTimeMilliseconds() / 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; - } -} +/* + * Created by Julian Mutter on 7/10/18 3:58 PM + * Copyright (c) 2018. All rights reserved. + * Last modified 7/10/18 3:54 PM + * + */ + +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.getFrameTimeMilliseconds() / 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 index eddaa38..a24f5f0 100644 --- a/app/src/main/java/de/frajul/endlessroll/main/game/Game.java +++ b/app/src/main/java/de/frajul/endlessroll/main/game/Game.java @@ -1,405 +1,405 @@ -/* - * Created by Julian Mutter on 7/10/18 3:58 PM - * Copyright (c) 2018. All rights reserved. - * Last modified 7/10/18 3:54 PM - * - */ - -package de.frajul.endlessroll.main.game; - -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.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.CollisionDetector; -import de.frajul.endlessroll.entities.collision.CollisionManager; -import de.frajul.endlessroll.entities.guis.Countdown; -import de.frajul.endlessroll.entities.guis.ToolButton; -import de.frajul.endlessroll.entities.guis.ToolButtonBar; -import de.frajul.endlessroll.entities.particles.Firework; -import de.frajul.endlessroll.entities.particles.ParticleSystem; -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.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.GameScreen; -import de.frajul.endlessroll.main.screens.Screen; -import de.frajul.endlessroll.rendering.Rendering; -import de.frajul.endlessroll.rendering.renderer.GameRenderer; -import de.frajul.endlessroll.sqlDatabase.MyDatabase; -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 Countdown countdown; - private ToolButtonBar toolButtonBar; - - private ToolType currentTool; - private Player player; - private Physics physics; - private CollisionManager collisionManager; - private CollisionDetector collisionDetector; - private Timer timer; - private GameState gameState = GameState.COUNTDOWN; - - private Level level; - private List collectedStars = new ArrayList<>(); - private boolean energyCollected; - private boolean inPhotoMode = false; - - public Game(GameHandler handler, GameScreen gameScreen, GameActivity gameActivity, GameRenderer gameRenderer) throws Exception { - super(gameActivity, gameRenderer); - this.handler = handler; - this.gameActivity = gameActivity; - physics = new Physics(); - collisionManager = new CollisionManager(this); - collisionDetector = new CollisionDetector(); - particleSystem = new ParticleSystem(getContext()); - viewManager = new ViewManager(this, gameScreen, 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(gameActivity, texturePack, particleSystem); - firework = new Firework(particleSystem.firework, scene.getCamera()); - countdown = new Countdown(this, gameActivity.getSoundManager(), texturePack); - toolButtonBar = new ToolButtonBar(texturePack, this, - gameActivity.getUser().getToolSlotSettings()); - scene.getGuis().addAll(toolButtonBar.toGuiList()); - scene.getGuis().add(countdown); - 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) { - gameActivity.getSoundManager().getCurrentGameMusic().reset(); - gameActivity.getSoundManager().randomizeCurrentGameMusic(); - gameActivity.getSoundManager().stopAllSounds(); - gameState = GameState.COUNTDOWN; - gameActivity.getTutorialManager().resetGameTutorials(); - collectedStars.clear(); - energyCollected = false; - particleSystem.deleteAllSources(); - scene.loadLevel(level, levelPack.getWorld(), - gameActivity.getUser().getCurrentPlayerShape()); - player = scene.getPlayer(); - viewManager.resetViews(); - toolButtonBar.reset(gameActivity.getUser().getToolSlotSettings()); - setCurrentTool(toolButtonBar.getActiveButton().getToolType(), true); - viewManager.setShowFps(gameActivity.getDataStorageHandler().readIsShowFps()); - countdown.start(); - } - } catch (Exception e) { - onException(e); - } - } - - public void countdownFinished() { - gameActivity.getSoundManager().resumeAllSounds(); - gameActivity.getSoundManager().getCurrentGameMusic().start(); - gameState = GameState.RUNNING; - } - - @Override - public void update() { - try { - particleSystem.update(timer); - if (scene == null || player == null) - return; - - float playerProgress = level != null ? player.getProgress(level.getGoalX()) : 0; - viewManager.update(gameState == GameState.RUNNING, timer, (int) (playerProgress * 100 + 0.5f)); - toolButtonBar.update(timer.getFrameTimeMilliseconds(), gameState == GameState.RUNNING); - 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); - - gameActivity.getTutorialManager().update(level, player.getXFromStart()); - - physics.applyGravity(scene, timer); - scene.update(timer); - collisionManager.update(physics, scene, timer); - break; - case COUNTDOWN: - countdown.update(timer.getFrameTimeMilliseconds()); - break; - } - } catch (Exception e) { - onException(e); - } - } - - @Override - public void onTouch(float x, float y) { - try { - if (gameState == GameState.RUNNING) { - Vector touchPoint = scene.calcWorldFromScreenCoords(x, y); - - for (ToolButton toolButton : toolButtonBar.getToolButtons()) { - ToolType toolType = toolButton.getToolType(); - if (collisionDetector.isPointInQuad(touchPoint, - toolButton.getBorder()) && toolType != null) { - toolButtonBar.setActive(toolType); - setCurrentTool(toolType, toolButton.hasFinishedLoading()); - return; - } - } - touchPoint.translate(scene.camera.getX(), scene.camera.getY()); - ToolButton currentToolButton = toolButtonBar.getActiveButton(); - if (currentToolButton != null && currentToolButton - .hasFinishedLoading() && currentToolButton.getToolType() != null) { - if (currentTool == ToolType.BOMB) { - Obstacle selectedObstacle = scene.getObstacleAtPoint(touchPoint); - if (selectedObstacle == null) { - viewManager.showBombErrorMessage(x, y); - return; - } else { - currentToolButton.setProgress(0); - scene.getBombSelected().set(false); - Tool tool = addTool(touchPoint); - if (tool != null && tool instanceof Bomb) - ((Bomb) tool).setAttachedObstacle(selectedObstacle); - return; - } - } - currentToolButton.setProgress(0); - addTool(touchPoint); - } - } - } catch (Exception e) { - onException(e); - } - } - - public void startPhotoMode(boolean showToolBar){ - if(!showToolBar) - toolButtonBar.setVisible(false); - viewManager.setShowFps(false); - viewManager.getPlayerProgressView().setVisibility(View.INVISIBLE); - viewManager.getPauseButton().setVisibility(View.INVISIBLE); - inPhotoMode = true; - } - - public void endPhotoMode(){ - toolButtonBar.setVisible(true); - viewManager.setShowFps(gameActivity.getDataStorageHandler().readIsShowFps()); - viewManager.getPlayerProgressView().setVisibility(View.VISIBLE); - viewManager.getPauseButton().setVisibility(View.VISIBLE); - inPhotoMode = false; - viewManager.endShortMenuPhotoMode(); - } - - public boolean isInPhotoMode() { - return inPhotoMode; - } - - public void resetViews() { - viewManager.resetViews(); - toolButtonBar.reset(gameActivity.getUser().getToolSlotSettings()); - } - - public void continueGame() { - viewManager.hideShortMenu(); - gameState = GameState.COUNTDOWN; - viewManager.setShowFps(gameActivity.getDataStorageHandler().readIsShowFps()); - countdown.start(); - } - - 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 onToolButtonFinishedLoading(ToolType toolType) { - if (currentTool == ToolType.BOMB && toolType == ToolType.BOMB) - scene.getBombSelected().set(true); - } - - public void setCurrentTool(ToolType toolType, boolean toolButtonFinishedLoading) { - currentTool = toolType; - if (currentTool == ToolType.BOMB && toolButtonFinishedLoading) { - scene.getBombSelected().set(true); - } else { - scene.getBombSelected().set(false); - } - } - - public void pauseWithoutMenu() { - gameState = GameState.PAUSED; - } - - public void tryToPause() { - if (gameState == GameState.GAME_OVER || gameState == GameState.LEVEL_FINISHED || gameState == GameState.PAUSED) - return; - gameActivity.getSoundManager().pauseAllSounds(); - gameActivity.getSoundManager().getCurrentGameMusic().pause(); - viewManager.showShortMenu(); - if (gameState == GameState.COUNTDOWN) - countdown.stop(); - gameState = GameState.PAUSED; - } - - public void onGoalMessageKeyBack() { - viewManager.onGoalMessageKeyBack(); - } - - public void setRunning() { - gameState = GameState.RUNNING; - } - - private Tool addTool(Vector position) { - try { - gameActivity.getSoundManager().playSound(gameActivity.getSoundManager().placeToolSound); - return scene.addTool(currentTool, position, physics); - } catch (Exception e) { - onException(e); - } - return null; - } - - public void onGameOver(boolean playerExplode) { - gameActivity.getSoundManager().getCurrentGameMusic().stop(); - gameActivity.getSoundManager().stopAllSounds(); - gameActivity.getSoundManager().playSound(gameActivity.getSoundManager().dieSound); - 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() { - gameActivity.getSoundManager().getCurrentGameMusic().stop(); - gameActivity.getSoundManager().stopAllSounds(); - gameActivity.getSoundManager().playSound(gameActivity.getSoundManager().goalSound); - - 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(); - gameActivity.getSoundManager().playSound(gameActivity.getSoundManager().fireworkSound); - - viewManager.showGoalMessage(levelPack, level); - - MyDatabase database = gameActivity.getDataStorageHandler().getDatabase(); - database.open(); - database.writeLevelProgress(level); - - gameActivity.showNewFinishedPlayerShapeTasks(); - - 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()); - } - - public void onStarCollision(Star star) { - if (!star.isDestroyed()) { - scene.onStarCollision(star); - gameActivity.getSoundManager() - .playSound(gameActivity.getSoundManager().collectStarSound); - collectedStars.add(star.getIndex()); - } - } - - public void onEnergyCollision(Energy energy) { - if (!energy.isDestroyed()) { - scene.onEnergyCollision(energy); - gameActivity.getSoundManager() - .playSound(gameActivity.getSoundManager().collectEnergySound); - energyCollected = true; - } - } - - public void onException(Exception e) { - handler.onException(e); - } - - public GameState getGameState() { - return gameState; - } - - public ViewManager getViewManager() { - return viewManager; - } -} +/* + * Created by Julian Mutter on 7/10/18 3:58 PM + * Copyright (c) 2018. All rights reserved. + * Last modified 7/10/18 3:54 PM + * + */ + +package de.frajul.endlessroll.main.game; + +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.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.CollisionDetector; +import de.frajul.endlessroll.entities.collision.CollisionManager; +import de.frajul.endlessroll.entities.guis.Countdown; +import de.frajul.endlessroll.entities.guis.ToolButton; +import de.frajul.endlessroll.entities.guis.ToolButtonBar; +import de.frajul.endlessroll.entities.particles.Firework; +import de.frajul.endlessroll.entities.particles.ParticleSystem; +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.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.GameScreen; +import de.frajul.endlessroll.main.screens.Screen; +import de.frajul.endlessroll.rendering.Rendering; +import de.frajul.endlessroll.rendering.renderer.GameRenderer; +import de.frajul.endlessroll.sqlDatabase.MyDatabase; +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 Countdown countdown; + private ToolButtonBar toolButtonBar; + + private ToolType currentTool; + private Player player; + private Physics physics; + private CollisionManager collisionManager; + private CollisionDetector collisionDetector; + private Timer timer; + private GameState gameState = GameState.COUNTDOWN; + + private Level level; + private List collectedStars = new ArrayList<>(); + private boolean energyCollected; + private boolean inPhotoMode = false; + + public Game(GameHandler handler, GameScreen gameScreen, GameActivity gameActivity, GameRenderer gameRenderer) throws Exception { + super(gameActivity, gameRenderer); + this.handler = handler; + this.gameActivity = gameActivity; + physics = new Physics(); + collisionManager = new CollisionManager(this); + collisionDetector = new CollisionDetector(); + particleSystem = new ParticleSystem(getContext()); + viewManager = new ViewManager(this, gameScreen, 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(gameActivity, texturePack, particleSystem); + firework = new Firework(particleSystem.firework, scene.getCamera()); + countdown = new Countdown(this, gameActivity.getSoundManager(), texturePack); + toolButtonBar = new ToolButtonBar(texturePack, this, + gameActivity.getUser().getToolSlotSettings()); + scene.getGuis().addAll(toolButtonBar.toGuiList()); + scene.getGuis().add(countdown); + 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) { + gameActivity.getSoundManager().getCurrentGameMusic().reset(); + gameActivity.getSoundManager().randomizeCurrentGameMusic(); + gameActivity.getSoundManager().stopAllSounds(); + gameState = GameState.COUNTDOWN; + gameActivity.getTutorialManager().resetGameTutorials(); + collectedStars.clear(); + energyCollected = false; + particleSystem.deleteAllSources(); + scene.loadLevel(level, levelPack.getWorld(), + gameActivity.getUser().getCurrentPlayerShape()); + player = scene.getPlayer(); + viewManager.resetViews(); + toolButtonBar.reset(gameActivity.getUser().getToolSlotSettings()); + setCurrentTool(toolButtonBar.getActiveButton().getToolType(), true); + viewManager.setShowFps(gameActivity.getDataStorageHandler().readIsShowFps()); + countdown.start(); + } + } catch (Exception e) { + onException(e); + } + } + + public void countdownFinished() { + gameActivity.getSoundManager().resumeAllSounds(); + gameActivity.getSoundManager().getCurrentGameMusic().start(); + gameState = GameState.RUNNING; + } + + @Override + public void update() { + try { + particleSystem.update(timer); + if (scene == null || player == null) + return; + + float playerProgress = level != null ? player.getProgress(level.getGoalX()) : 0; + viewManager.update(gameState == GameState.RUNNING, timer, (int) (playerProgress * 100 + 0.5f)); + toolButtonBar.update(timer.getFrameTimeMilliseconds(), gameState == GameState.RUNNING); + 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); + + gameActivity.getTutorialManager().update(level, player.getXFromStart()); + + physics.applyGravity(scene, timer); + scene.update(timer); + collisionManager.update(physics, scene, timer); + break; + case COUNTDOWN: + countdown.update(timer.getFrameTimeMilliseconds()); + break; + } + } catch (Exception e) { + onException(e); + } + } + + @Override + public void onTouch(float x, float y) { + try { + if (gameState == GameState.RUNNING) { + Vector touchPoint = scene.calcWorldFromScreenCoords(x, y); + + for (ToolButton toolButton : toolButtonBar.getToolButtons()) { + ToolType toolType = toolButton.getToolType(); + if (collisionDetector.isPointInQuad(touchPoint, + toolButton.getBorder()) && toolType != null) { + toolButtonBar.setActive(toolType); + setCurrentTool(toolType, toolButton.hasFinishedLoading()); + return; + } + } + touchPoint.translate(scene.camera.getX(), scene.camera.getY()); + ToolButton currentToolButton = toolButtonBar.getActiveButton(); + if (currentToolButton != null && currentToolButton + .hasFinishedLoading() && currentToolButton.getToolType() != null) { + if (currentTool == ToolType.BOMB) { + Obstacle selectedObstacle = scene.getObstacleAtPoint(touchPoint); + if (selectedObstacle == null) { + viewManager.showBombErrorMessage(x, y); + return; + } else { + currentToolButton.setProgress(0); + scene.getBombSelected().set(false); + Tool tool = addTool(touchPoint); + if (tool != null && tool instanceof Bomb) + ((Bomb) tool).setAttachedObstacle(selectedObstacle); + return; + } + } + currentToolButton.setProgress(0); + addTool(touchPoint); + } + } + } catch (Exception e) { + onException(e); + } + } + + public void startPhotoMode(boolean showToolBar){ + if(!showToolBar) + toolButtonBar.setVisible(false); + viewManager.setShowFps(false); + viewManager.getPlayerProgressView().setVisibility(View.INVISIBLE); + viewManager.getPauseButton().setVisibility(View.INVISIBLE); + inPhotoMode = true; + } + + public void endPhotoMode(){ + toolButtonBar.setVisible(true); + viewManager.setShowFps(gameActivity.getDataStorageHandler().readIsShowFps()); + viewManager.getPlayerProgressView().setVisibility(View.VISIBLE); + viewManager.getPauseButton().setVisibility(View.VISIBLE); + inPhotoMode = false; + viewManager.endShortMenuPhotoMode(); + } + + public boolean isInPhotoMode() { + return inPhotoMode; + } + + public void resetViews() { + viewManager.resetViews(); + toolButtonBar.reset(gameActivity.getUser().getToolSlotSettings()); + } + + public void continueGame() { + viewManager.hideShortMenu(); + gameState = GameState.COUNTDOWN; + viewManager.setShowFps(gameActivity.getDataStorageHandler().readIsShowFps()); + countdown.start(); + } + + 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 onToolButtonFinishedLoading(ToolType toolType) { + if (currentTool == ToolType.BOMB && toolType == ToolType.BOMB) + scene.getBombSelected().set(true); + } + + public void setCurrentTool(ToolType toolType, boolean toolButtonFinishedLoading) { + currentTool = toolType; + if (currentTool == ToolType.BOMB && toolButtonFinishedLoading) { + scene.getBombSelected().set(true); + } else { + scene.getBombSelected().set(false); + } + } + + public void pauseWithoutMenu() { + gameState = GameState.PAUSED; + } + + public void tryToPause() { + if (gameState == GameState.GAME_OVER || gameState == GameState.LEVEL_FINISHED || gameState == GameState.PAUSED) + return; + gameActivity.getSoundManager().pauseAllSounds(); + gameActivity.getSoundManager().getCurrentGameMusic().pause(); + viewManager.showShortMenu(); + if (gameState == GameState.COUNTDOWN) + countdown.stop(); + gameState = GameState.PAUSED; + } + + public void onGoalMessageKeyBack() { + viewManager.onGoalMessageKeyBack(); + } + + public void setRunning() { + gameState = GameState.RUNNING; + } + + private Tool addTool(Vector position) { + try { + gameActivity.getSoundManager().playSound(gameActivity.getSoundManager().placeToolSound); + return scene.addTool(currentTool, position, physics); + } catch (Exception e) { + onException(e); + } + return null; + } + + public void onGameOver(boolean playerExplode) { + gameActivity.getSoundManager().getCurrentGameMusic().stop(); + gameActivity.getSoundManager().stopAllSounds(); + gameActivity.getSoundManager().playSound(gameActivity.getSoundManager().dieSound); + 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() { + gameActivity.getSoundManager().getCurrentGameMusic().stop(); + gameActivity.getSoundManager().stopAllSounds(); + gameActivity.getSoundManager().playSound(gameActivity.getSoundManager().goalSound); + + 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(); + gameActivity.getSoundManager().playSound(gameActivity.getSoundManager().fireworkSound); + + viewManager.showGoalMessage(levelPack, level); + + MyDatabase database = gameActivity.getDataStorageHandler().getDatabase(); + database.open(); + database.writeLevelProgress(level); + + gameActivity.showNewFinishedPlayerShapeTasks(); + + 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()); + } + + public void onStarCollision(Star star) { + if (!star.isDestroyed()) { + scene.onStarCollision(star); + gameActivity.getSoundManager() + .playSound(gameActivity.getSoundManager().collectStarSound); + collectedStars.add(star.getIndex()); + } + } + + public void onEnergyCollision(Energy energy) { + if (!energy.isDestroyed()) { + scene.onEnergyCollision(energy); + gameActivity.getSoundManager() + .playSound(gameActivity.getSoundManager().collectEnergySound); + energyCollected = true; + } + } + + public void onException(Exception e) { + handler.onException(e); + } + + public GameState getGameState() { + return gameState; + } + + public ViewManager getViewManager() { + return viewManager; + } +} 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 index 618df6e..754bfe9 100644 --- a/app/src/main/java/de/frajul/endlessroll/main/game/GameScene.java +++ b/app/src/main/java/de/frajul/endlessroll/main/game/GameScene.java @@ -1,169 +1,169 @@ -/* - * Created by Julian Mutter on 7/10/18 3:58 PM - * Copyright (c) 2018. All rights reserved. - * Last modified 7/10/18 3:54 PM - * - */ - -package de.frajul.endlessroll.main.game; - -import de.frajul.endlessroll.data.Color3f; -import de.frajul.endlessroll.data.Vector; -import de.frajul.endlessroll.entities.DestroyEffect; -import de.frajul.endlessroll.entities.Entity; -import de.frajul.endlessroll.entities.Goal; -import de.frajul.endlessroll.entities.Obstacle; -import de.frajul.endlessroll.entities.collectables.Energy; -import de.frajul.endlessroll.entities.collectables.Star; -import de.frajul.endlessroll.entities.collision.CollisionDetector; -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.textures.TexturePack; -import de.frajul.endlessroll.entities.tools.Bomb; -import de.frajul.endlessroll.entities.tools.Magnet; -import de.frajul.endlessroll.entities.tools.Stasis; -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.GameActivity; -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 GameActivity gameActivity; - private World currentWorld; - private CollisionDetector collisionDetector; - private Goal goal; - private float goalX; - - public GameScene(GameActivity gameActivity, TexturePack texturePack, ParticleSystem particleSystem) { - super(gameActivity, texturePack, particleSystem); - this.gameActivity = gameActivity; - collisionDetector = new CollisionDetector(); - - goal = new Goal(textures.goal); - } - - public void loadLevel(Level level, World world, PlayerShape playerShape) { - this.currentWorld = world; - super.reset(); - background.changeTextures(world.getBackgroundTextures()); - terrain.loadData(world, level.getTerrainEdge(), level.getTerrainTiles()); - ceiling.loadData(world, level.getCeilingEdge(), level.getCeilingTiles()); - uncategorizedEntities.add(goal); - player.init(playerShape, 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); - - if (world == World.ICY_MOUNTAINS) { - enviromentParticles = new ParticleSource(new Vector(), particleSystem.snow); - enviromentParticles.start(); - } else if (enviromentParticles != null) { - enviromentParticles.kill(); - } - - if(world == World.UNDERWATER){ -// colorFilter = new Entity(textures.white, new Vector(),4,3); -// colorFilter.setColor(new Color3f(0, 0, 1)); -// colorFilter.setAlpha(0.3f); - } - GameLog.d("Level " + level.getId() + " successfully loaded"); - } - - 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(), player); - obstacles.add(obstacle); - } - - public Tool addTool(ToolType type, Vector position, Physics physics) throws Exception { - Tool tool = type.newInstance(position, particleSystem, gameActivity.getSoundManager()); - physics.checkSingleToolCollision(tool, this, true); - - if (tool == null) - throw new Exception( - "Current ToolType(" + type + ") returns null at method newInstance()"); - tools.add(tool); - return tool; - } - - public Obstacle getObstacleAtPoint(Vector point) { - synchronized (obstacles) { - for (Obstacle obstacle : obstacles) { - if (collisionDetector.isPointInQuad(point, obstacle)) - return obstacle; - } - } - return null; - } - - public void update(Timer timer) { - player.setSpeedByProgress(player.getProgress(goalX)); - - if (!player.getStases().isEmpty()) { - synchronized (obstacles) { - for (Stasis stasis : player.getStases()) { - for (Obstacle obstacle : obstacles) { - if (obstacle.isMoving()) { - obstacle.slowMovementForOneFrame(stasis.getCurrentXSlowFactor()); - } - } - } - } - } - - 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(); - } else if (tool instanceof Stasis) { - Stasis stasis = (Stasis) tool; - stasis.updateSoundVolume(player); - } else if (tool instanceof Magnet) { - Magnet magnet = (Magnet) tool; - magnet.updateSoundVolume(player); - } - } - } - - } - - public float getGoalX() { - return goalX; - } - -} +/* + * Created by Julian Mutter on 7/10/18 3:58 PM + * Copyright (c) 2018. All rights reserved. + * Last modified 7/10/18 3:54 PM + * + */ + +package de.frajul.endlessroll.main.game; + +import de.frajul.endlessroll.data.Color3f; +import de.frajul.endlessroll.data.Vector; +import de.frajul.endlessroll.entities.DestroyEffect; +import de.frajul.endlessroll.entities.Entity; +import de.frajul.endlessroll.entities.Goal; +import de.frajul.endlessroll.entities.Obstacle; +import de.frajul.endlessroll.entities.collectables.Energy; +import de.frajul.endlessroll.entities.collectables.Star; +import de.frajul.endlessroll.entities.collision.CollisionDetector; +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.textures.TexturePack; +import de.frajul.endlessroll.entities.tools.Bomb; +import de.frajul.endlessroll.entities.tools.Magnet; +import de.frajul.endlessroll.entities.tools.Stasis; +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.GameActivity; +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 GameActivity gameActivity; + private World currentWorld; + private CollisionDetector collisionDetector; + private Goal goal; + private float goalX; + + public GameScene(GameActivity gameActivity, TexturePack texturePack, ParticleSystem particleSystem) { + super(gameActivity, texturePack, particleSystem); + this.gameActivity = gameActivity; + collisionDetector = new CollisionDetector(); + + goal = new Goal(textures.goal); + } + + public void loadLevel(Level level, World world, PlayerShape playerShape) { + this.currentWorld = world; + super.reset(); + background.changeTextures(world.getBackgroundTextures()); + terrain.loadData(world, level.getTerrainEdge(), level.getTerrainTiles()); + ceiling.loadData(world, level.getCeilingEdge(), level.getCeilingTiles()); + uncategorizedEntities.add(goal); + player.init(playerShape, 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); + + if (world == World.ICY_MOUNTAINS) { + enviromentParticles = new ParticleSource(new Vector(), particleSystem.snow); + enviromentParticles.start(); + } else if (enviromentParticles != null) { + enviromentParticles.kill(); + } + + if(world == World.UNDERWATER){ +// colorFilter = new Entity(textures.white, new Vector(),4,3); +// colorFilter.setColor(new Color3f(0, 0, 1)); +// colorFilter.setAlpha(0.3f); + } + GameLog.d("Level " + level.getId() + " successfully loaded"); + } + + 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(), player); + obstacles.add(obstacle); + } + + public Tool addTool(ToolType type, Vector position, Physics physics) throws Exception { + Tool tool = type.newInstance(position, particleSystem, gameActivity.getSoundManager()); + physics.checkSingleToolCollision(tool, this, true); + + if (tool == null) + throw new Exception( + "Current ToolType(" + type + ") returns null at method newInstance()"); + tools.add(tool); + return tool; + } + + public Obstacle getObstacleAtPoint(Vector point) { + synchronized (obstacles) { + for (Obstacle obstacle : obstacles) { + if (collisionDetector.isPointInQuad(point, obstacle)) + return obstacle; + } + } + return null; + } + + public void update(Timer timer) { + player.setSpeedByProgress(player.getProgress(goalX)); + + if (!player.getStases().isEmpty()) { + synchronized (obstacles) { + for (Stasis stasis : player.getStases()) { + for (Obstacle obstacle : obstacles) { + if (obstacle.isMoving()) { + obstacle.slowMovementForOneFrame(stasis.getCurrentXSlowFactor()); + } + } + } + } + } + + 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(); + } else if (tool instanceof Stasis) { + Stasis stasis = (Stasis) tool; + stasis.updateSoundVolume(player); + } else if (tool instanceof Magnet) { + Magnet magnet = (Magnet) tool; + magnet.updateSoundVolume(player); + } + } + } + + } + + 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 index f5c45e8..f354327 100644 --- a/app/src/main/java/de/frajul/endlessroll/main/game/GameState.java +++ b/app/src/main/java/de/frajul/endlessroll/main/game/GameState.java @@ -1,17 +1,17 @@ -/* - * Created by Julian Mutter on 7/10/18 3:58 PM - * Copyright (c) 2018. All rights reserved. - * Last modified 7/10/18 3:54 PM - * - */ - -package de.frajul.endlessroll.main.game; - -/** - * Created by Julian on 02.02.2016. - */ -public enum GameState { - - RUNNING, PAUSED, GAME_OVER, LEVEL_FINISHED, COUNTDOWN - -} +/* + * Created by Julian Mutter on 7/10/18 3:58 PM + * Copyright (c) 2018. All rights reserved. + * Last modified 7/10/18 3:54 PM + * + */ + +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 index bad7e1d..1f2c510 100644 --- a/app/src/main/java/de/frajul/endlessroll/main/game/Scene.java +++ b/app/src/main/java/de/frajul/endlessroll/main/game/Scene.java @@ -1,231 +1,231 @@ -/* - * Created by Julian Mutter on 7/10/18 3:58 PM - * Copyright (c) 2018. All rights reserved. - * Last modified 7/10/18 3:54 PM - * - */ - -package de.frajul.endlessroll.main.game; - -import java.util.ArrayList; -import java.util.Collections; -import java.util.Iterator; -import java.util.List; -import java.util.concurrent.atomic.AtomicBoolean; -import java.util.concurrent.atomic.AtomicInteger; - -import de.frajul.endlessroll.data.Vector; -import de.frajul.endlessroll.entities.AnimatedEntity; -import de.frajul.endlessroll.entities.Background; -import de.frajul.endlessroll.entities.DestroyEffect; -import de.frajul.endlessroll.entities.Entity; -import de.frajul.endlessroll.entities.Obstacle; -import de.frajul.endlessroll.entities.Player; -import de.frajul.endlessroll.entities.collectables.Collectables; -import de.frajul.endlessroll.entities.guis.Gui; -import de.frajul.endlessroll.entities.particles.ParticleSource; -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; -import de.frajul.endlessroll.main.GameActivity; - -/** - * 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; - - private GameActivity gameActivity; - - protected Camera camera; - private Entity playerArrow; - private AtomicInteger screenWidth, screenHeight; - - protected ParticleSystem particleSystem; - protected TexturePack textures; - protected Background background; - protected Terrain terrain; - protected Ceiling ceiling; - protected Player player; - protected ParticleSource enviromentParticles; - protected AtomicBoolean bombSelected; - - protected final List uncategorizedEntities = Collections - .synchronizedList(new ArrayList()); - protected final List obstacles = Collections.synchronizedList(new ArrayList()); - protected final List tools = Collections.synchronizedList(new ArrayList()); - protected Collectables collectables = new Collectables(); - protected final List guis = Collections.synchronizedList(new ArrayList()); - protected Entity colorFilter = null; - - public Scene(GameActivity gameActivity, TexturePack texturePack, ParticleSystem particleSystem) { - this.gameActivity = gameActivity; - 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.getBackgroundTextures()); - terrain = new Terrain(World.GRASSLANDS.getTerrainTexture()); - ceiling = new Ceiling(World.GRASSLANDS.getTerrainTexture()); - player = new Player(); - bombSelected = new AtomicBoolean(false); - screenWidth = new AtomicInteger(); - screenHeight = new AtomicInteger(); - } - - 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); - - if (enviromentParticles != null) - enviromentParticles.getPosition().setX(camera.getX() + 1.5f); - } - - 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.getFrameTimeMilliseconds(), - player.getSpeed()); - } - boolean remove = updateEntity(entity, timer); - if (remove) - iterator.remove(); - } - } - } - - private boolean updateEntity(Entity entity, Timer timer) { - if (entity instanceof AnimatedEntity) - ((AnimatedEntity) entity).update(timer); - if (!(entity instanceof Obstacle)) { - Vector movement = entity.getMovement(); - Vector finalMovement = new Vector(movement).mul(timer.getFrameTimeMilliseconds()); - 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) { - if (entity.getDestroyEffect() == DestroyEffect.EXPLOSION) { - gameActivity.getSoundManager() - .playSound(gameActivity.getSoundManager().explosionSound); - } - entity.getDestroyEffect().createEffect(particleSystem, new Vector(entity.getPosition()), - new Vector(entity.getWidth(), entity.getHeight())).start(); - } - return entity.getRightEdge() - camera.getX() < -3f || entity.isDestroyed(); - } - - private void moveEnviroment(float x) { - camera.moveX(x); - background.move(x, camera.getX()); - terrain.update(camera.getX()); - ceiling.update(camera.getX()); - } - - protected Vector calcWorldFromScreenCoords(float screenX, float screenY) throws Exception { - if (screenWidth.get() == 0 || screenHeight.get() == 0) - throw new Exception("ScreenSize not set"); - float glCoordWidth = (2f * screenWidth.get() / (float) screenHeight.get()); - float x = ((screenX / (float) screenWidth.get()) * 2f - 1f) * glCoordWidth / 2; - float y = -((screenY / (float) screenHeight.get()) * 2f - 1f); - return new Vector(x, y); - } - - public void setScreenSize(int width, int height) { - this.screenWidth.set(width); - this.screenHeight.set(height); - } - - 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 synchronized List getGuis() { - return guis; - } - - public Player getPlayer() { - return player; - } - - public TexturePack getTextures() { - return textures; - } - - public Entity getColorFilter() { - return colorFilter; - } - - public ParticleSystem getParticleSystem() { - return particleSystem; - } - - public Camera getCamera() { - return camera; - } - - public synchronized AtomicBoolean getBombSelected() { - return bombSelected; - } -} +/* + * Created by Julian Mutter on 7/10/18 3:58 PM + * Copyright (c) 2018. All rights reserved. + * Last modified 7/10/18 3:54 PM + * + */ + +package de.frajul.endlessroll.main.game; + +import java.util.ArrayList; +import java.util.Collections; +import java.util.Iterator; +import java.util.List; +import java.util.concurrent.atomic.AtomicBoolean; +import java.util.concurrent.atomic.AtomicInteger; + +import de.frajul.endlessroll.data.Vector; +import de.frajul.endlessroll.entities.AnimatedEntity; +import de.frajul.endlessroll.entities.Background; +import de.frajul.endlessroll.entities.DestroyEffect; +import de.frajul.endlessroll.entities.Entity; +import de.frajul.endlessroll.entities.Obstacle; +import de.frajul.endlessroll.entities.Player; +import de.frajul.endlessroll.entities.collectables.Collectables; +import de.frajul.endlessroll.entities.guis.Gui; +import de.frajul.endlessroll.entities.particles.ParticleSource; +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; +import de.frajul.endlessroll.main.GameActivity; + +/** + * 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; + + private GameActivity gameActivity; + + protected Camera camera; + private Entity playerArrow; + private AtomicInteger screenWidth, screenHeight; + + protected ParticleSystem particleSystem; + protected TexturePack textures; + protected Background background; + protected Terrain terrain; + protected Ceiling ceiling; + protected Player player; + protected ParticleSource enviromentParticles; + protected AtomicBoolean bombSelected; + + protected final List uncategorizedEntities = Collections + .synchronizedList(new ArrayList()); + protected final List obstacles = Collections.synchronizedList(new ArrayList()); + protected final List tools = Collections.synchronizedList(new ArrayList()); + protected Collectables collectables = new Collectables(); + protected final List guis = Collections.synchronizedList(new ArrayList()); + protected Entity colorFilter = null; + + public Scene(GameActivity gameActivity, TexturePack texturePack, ParticleSystem particleSystem) { + this.gameActivity = gameActivity; + 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.getBackgroundTextures()); + terrain = new Terrain(World.GRASSLANDS.getTerrainTexture()); + ceiling = new Ceiling(World.GRASSLANDS.getTerrainTexture()); + player = new Player(); + bombSelected = new AtomicBoolean(false); + screenWidth = new AtomicInteger(); + screenHeight = new AtomicInteger(); + } + + 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); + + if (enviromentParticles != null) + enviromentParticles.getPosition().setX(camera.getX() + 1.5f); + } + + 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.getFrameTimeMilliseconds(), + player.getSpeed()); + } + boolean remove = updateEntity(entity, timer); + if (remove) + iterator.remove(); + } + } + } + + private boolean updateEntity(Entity entity, Timer timer) { + if (entity instanceof AnimatedEntity) + ((AnimatedEntity) entity).update(timer); + if (!(entity instanceof Obstacle)) { + Vector movement = entity.getMovement(); + Vector finalMovement = new Vector(movement).mul(timer.getFrameTimeMilliseconds()); + 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) { + if (entity.getDestroyEffect() == DestroyEffect.EXPLOSION) { + gameActivity.getSoundManager() + .playSound(gameActivity.getSoundManager().explosionSound); + } + entity.getDestroyEffect().createEffect(particleSystem, new Vector(entity.getPosition()), + new Vector(entity.getWidth(), entity.getHeight())).start(); + } + return entity.getRightEdge() - camera.getX() < -3f || entity.isDestroyed(); + } + + private void moveEnviroment(float x) { + camera.moveX(x); + background.move(x, camera.getX()); + terrain.update(camera.getX()); + ceiling.update(camera.getX()); + } + + protected Vector calcWorldFromScreenCoords(float screenX, float screenY) throws Exception { + if (screenWidth.get() == 0 || screenHeight.get() == 0) + throw new Exception("ScreenSize not set"); + float glCoordWidth = (2f * screenWidth.get() / (float) screenHeight.get()); + float x = ((screenX / (float) screenWidth.get()) * 2f - 1f) * glCoordWidth / 2; + float y = -((screenY / (float) screenHeight.get()) * 2f - 1f); + return new Vector(x, y); + } + + public void setScreenSize(int width, int height) { + this.screenWidth.set(width); + this.screenHeight.set(height); + } + + 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 synchronized List getGuis() { + return guis; + } + + public Player getPlayer() { + return player; + } + + public TexturePack getTextures() { + return textures; + } + + public Entity getColorFilter() { + return colorFilter; + } + + public ParticleSystem getParticleSystem() { + return particleSystem; + } + + public Camera getCamera() { + return camera; + } + + public synchronized AtomicBoolean getBombSelected() { + return bombSelected; + } +} 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 index 598fb9b..8a96b5d 100644 --- a/app/src/main/java/de/frajul/endlessroll/main/game/StartScene.java +++ b/app/src/main/java/de/frajul/endlessroll/main/game/StartScene.java @@ -1,55 +1,55 @@ -/* - * Created by Julian Mutter on 7/10/18 3:58 PM - * Copyright (c) 2018. All rights reserved. - * Last modified 7/10/18 3:54 PM - * - */ - -package de.frajul.endlessroll.main.game; - -import java.util.Random; - -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.textures.TexturePack; -import de.frajul.endlessroll.levels.worlds.World; -import de.frajul.endlessroll.main.GameActivity; - -public class StartScene extends Scene { - - private final float TERRAIN_EDGE = -0.8f; - private Random random; - private World currentWorld = World.GRASSLANDS; - - public StartScene(GameActivity gameActivity, TexturePack texturePack, ParticleSystem particleSystem) { - super(gameActivity, texturePack, particleSystem); - player.init(PlayerShape.BALL, TERRAIN_EDGE, 0.5f, 0.5f, null); - uncategorizedEntities.add(player); - - random = new Random(); - randomizeWorld(); - loadTexturesForCurrentWorld(); - } - - public void randomizeWorld() { - int worldId = random.nextInt(World.values().length); - currentWorld = World.values()[worldId]; - if (currentWorld == World.ICY_MOUNTAINS) { - enviromentParticles = new ParticleSource(new Vector(), particleSystem.snow); - enviromentParticles.start(); - } else { - if (enviromentParticles != null) - enviromentParticles.kill(); - particleSystem.deleteAllSources(); - } - } - - public void loadTexturesForCurrentWorld() { - terrain.clear(); - terrain.createEndless(currentWorld, TERRAIN_EDGE); - background.changeTextures(currentWorld.getBackgroundTextures()); - } - +/* + * Created by Julian Mutter on 7/10/18 3:58 PM + * Copyright (c) 2018. All rights reserved. + * Last modified 7/10/18 3:54 PM + * + */ + +package de.frajul.endlessroll.main.game; + +import java.util.Random; + +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.textures.TexturePack; +import de.frajul.endlessroll.levels.worlds.World; +import de.frajul.endlessroll.main.GameActivity; + +public class StartScene extends Scene { + + private final float TERRAIN_EDGE = -0.8f; + private Random random; + private World currentWorld = World.GRASSLANDS; + + public StartScene(GameActivity gameActivity, TexturePack texturePack, ParticleSystem particleSystem) { + super(gameActivity, texturePack, particleSystem); + player.init(PlayerShape.BALL, TERRAIN_EDGE, 0.5f, 0.5f, null); + uncategorizedEntities.add(player); + + random = new Random(); + randomizeWorld(); + loadTexturesForCurrentWorld(); + } + + public void randomizeWorld() { + int worldId = random.nextInt(World.values().length); + currentWorld = World.values()[worldId]; + if (currentWorld == World.ICY_MOUNTAINS) { + enviromentParticles = new ParticleSource(new Vector(), particleSystem.snow); + enviromentParticles.start(); + } else { + if (enviromentParticles != null) + enviromentParticles.kill(); + particleSystem.deleteAllSources(); + } + } + + public void loadTexturesForCurrentWorld() { + terrain.clear(); + terrain.createEndless(currentWorld, TERRAIN_EDGE); + background.changeTextures(currentWorld.getBackgroundTextures()); + } + } \ No newline at end of file diff --git a/app/src/main/java/de/frajul/endlessroll/main/game/TestScreenScene.java b/app/src/main/java/de/frajul/endlessroll/main/game/TestScreenScene.java index cdebe45..e2efbe3 100644 --- a/app/src/main/java/de/frajul/endlessroll/main/game/TestScreenScene.java +++ b/app/src/main/java/de/frajul/endlessroll/main/game/TestScreenScene.java @@ -1,45 +1,45 @@ -/* - * Created by Julian Mutter on 7/10/18 3:58 PM - * Copyright (c) 2018. All rights reserved. - * Last modified 7/10/18 3:54 PM - * - */ - -package de.frajul.endlessroll.main.game; - -import de.frajul.endlessroll.data.Vector; -import de.frajul.endlessroll.entities.Entity; -import de.frajul.endlessroll.entities.guis.ToolButtonBar; -import de.frajul.endlessroll.entities.particles.ParticleSystem; -import de.frajul.endlessroll.entities.textures.TexturePack; -import de.frajul.endlessroll.levels.worlds.World; -import de.frajul.endlessroll.main.GameActivity; -import de.frajul.endlessroll.user.ToolSlotSettings; - -public class TestScreenScene extends Scene { - - public TestScreenScene(GameActivity gameActivity, TexturePack texturePack, ParticleSystem particleSystem) { - super(gameActivity, texturePack, particleSystem); - // terrain.createEndless(World.GRASSLANDS, 0.6f); - // background.changeTextures(World.ICY_MOUNTAINS.getBackgroundTexture()); - // - // player.init(PlayerShape.BALL, 0.6f, 0.5f, 0.5f, particleSystem); - // uncategorizedEntities.add(player); - uncategorizedEntities - .add(new Entity(World.GRASSLANDS.getBackgroundTextures().get(0), new Vector(), 1, - 1)); - uncategorizedEntities - .add(new Entity(World.ICY_MOUNTAINS.getBackgroundTextures().get(0), new Vector(-1, 0), 1, - 1)); - uncategorizedEntities - .add(new Entity(World.ICY_MOUNTAINS.getBackgroundTextures().get(0), new Vector(1, 0), 1, - 1)); - try { - guis.addAll(new ToolButtonBar(texturePack, null, - new ToolSlotSettings("RAMP", "STASIS", "BOMB", "MAGNET", 1)).toGuiList()); - } catch (Exception ignore) { - } - - camera.moveX(1); - } +/* + * Created by Julian Mutter on 7/10/18 3:58 PM + * Copyright (c) 2018. All rights reserved. + * Last modified 7/10/18 3:54 PM + * + */ + +package de.frajul.endlessroll.main.game; + +import de.frajul.endlessroll.data.Vector; +import de.frajul.endlessroll.entities.Entity; +import de.frajul.endlessroll.entities.guis.ToolButtonBar; +import de.frajul.endlessroll.entities.particles.ParticleSystem; +import de.frajul.endlessroll.entities.textures.TexturePack; +import de.frajul.endlessroll.levels.worlds.World; +import de.frajul.endlessroll.main.GameActivity; +import de.frajul.endlessroll.user.ToolSlotSettings; + +public class TestScreenScene extends Scene { + + public TestScreenScene(GameActivity gameActivity, TexturePack texturePack, ParticleSystem particleSystem) { + super(gameActivity, texturePack, particleSystem); + // terrain.createEndless(World.GRASSLANDS, 0.6f); + // background.changeTextures(World.ICY_MOUNTAINS.getBackgroundTexture()); + // + // player.init(PlayerShape.BALL, 0.6f, 0.5f, 0.5f, particleSystem); + // uncategorizedEntities.add(player); + uncategorizedEntities + .add(new Entity(World.GRASSLANDS.getBackgroundTextures().get(0), new Vector(), 1, + 1)); + uncategorizedEntities + .add(new Entity(World.ICY_MOUNTAINS.getBackgroundTextures().get(0), new Vector(-1, 0), 1, + 1)); + uncategorizedEntities + .add(new Entity(World.ICY_MOUNTAINS.getBackgroundTextures().get(0), new Vector(1, 0), 1, + 1)); + try { + guis.addAll(new ToolButtonBar(texturePack, null, + new ToolSlotSettings("RAMP", "STASIS", "BOMB", "MAGNET", 1)).toGuiList()); + } catch (Exception ignore) { + } + + camera.moveX(1); + } } \ 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 index fd10ba6..fcd68ff 100644 --- a/app/src/main/java/de/frajul/endlessroll/main/game/Timer.java +++ b/app/src/main/java/de/frajul/endlessroll/main/game/Timer.java @@ -1,53 +1,53 @@ -/* - * Created by Julian Mutter on 7/10/18 3:58 PM - * Copyright (c) 2018. All rights reserved. - * Last modified 7/10/18 3:54 PM - * - */ - -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 getFrameTimeMilliseconds() { - return delta; - } - - public int getFps() { - return fps; - } - - public long getCurrentTime() { - return System.currentTimeMillis(); - } - -} +/* + * Created by Julian Mutter on 7/10/18 3:58 PM + * Copyright (c) 2018. All rights reserved. + * Last modified 7/10/18 3:54 PM + * + */ + +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 getFrameTimeMilliseconds() { + 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 index 6b1eb50..608513f 100644 --- a/app/src/main/java/de/frajul/endlessroll/main/physics/Physics.java +++ b/app/src/main/java/de/frajul/endlessroll/main/physics/Physics.java @@ -1,202 +1,202 @@ -/* - * Created by Julian Mutter on 7/10/18 3:58 PM - * Copyright (c) 2018. All rights reserved. - * Last modified 7/10/18 3:54 PM - * - */ - -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.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 MAX_TOOL_OBST_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.getFrameTimeMilliseconds(); - - 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, false); - } - } - } - - public synchronized void checkSingleToolCollision(Tool tool, Scene scene, boolean toolWasJustPlaced) { - if (tool.isFloating()) - return; - - boolean collidingWithTerrain = isToolCollidingWithTerrain(tool, scene.getTerrain()); - if (collidingWithTerrain) { - tool.getMovement().y = 0; - tool.setToTerrain(scene.getTerrain().getEdge()); - } - - Obstacle collidingObstacle = getHighestObstacleToolIsCollidingWith(tool, scene); - if (collidingObstacle != null) { - if (!toolWasJustPlaced && collidingObstacle.isMoving() && isToolCollidingWithMoveableObstacleOnLeftEdge(tool, collidingObstacle)) { - tool.getPosition().x = collidingObstacle.getPosition().x - collidingObstacle.getWidth() / 2 - tool.getWidth() / 2; - } else { - tool.getMovement().y = 0; - tool.setToTerrain(collidingObstacle.getTopEdge()); - } - } - - } - - @Nullable - private Obstacle getHighestObstacleToolIsCollidingWith(Tool tool, Scene scene) { - List collisionObstacles = new ArrayList<>(); - synchronized (scene.getObstacles()) { - for (Obstacle obstacle : scene.getObstacles()) { - if (detector.isCollision(tool.getWorldCollisionBounds(), obstacle)) { - collisionObstacles.add(obstacle); - } - } - } - Obstacle highest = null; - for (Obstacle obstacle : collisionObstacles) - if (highest == null || highest.getTopEdge() < obstacle.getTopEdge()) - highest = obstacle; - return highest; - } - - private boolean isToolCollidingWithTerrain(Entity tool, Terrain terrain) { - for (Tile tile : terrain) { - if (detector.isCollision(tool, tile)) - return true; - } - return false; - } - - 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 - .playerTerrainCollision(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 - .playerCeilingCollision(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 (detector.isCollision(tool.getPlayerCollisionBounds(), circle)) - 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); - } - - private boolean isToolCollidingWithMoveableObstacleOnLeftEdge(Tool tool, Obstacle obstacle) { - if (obstacle.getMovement().getX() < 0) { - return Math.abs(tool.getRightEdge() - obstacle.getLeftEdge()) <= MAX_TOOL_OBST_LEFT_EDGE_TOLERANCE; - } - return false; - } - -} +/* + * Created by Julian Mutter on 7/10/18 3:58 PM + * Copyright (c) 2018. All rights reserved. + * Last modified 7/10/18 3:54 PM + * + */ + +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.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 MAX_TOOL_OBST_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.getFrameTimeMilliseconds(); + + 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, false); + } + } + } + + public synchronized void checkSingleToolCollision(Tool tool, Scene scene, boolean toolWasJustPlaced) { + if (tool.isFloating()) + return; + + boolean collidingWithTerrain = isToolCollidingWithTerrain(tool, scene.getTerrain()); + if (collidingWithTerrain) { + tool.getMovement().y = 0; + tool.setToTerrain(scene.getTerrain().getEdge()); + } + + Obstacle collidingObstacle = getHighestObstacleToolIsCollidingWith(tool, scene); + if (collidingObstacle != null) { + if (!toolWasJustPlaced && collidingObstacle.isMoving() && isToolCollidingWithMoveableObstacleOnLeftEdge(tool, collidingObstacle)) { + tool.getPosition().x = collidingObstacle.getPosition().x - collidingObstacle.getWidth() / 2 - tool.getWidth() / 2; + } else { + tool.getMovement().y = 0; + tool.setToTerrain(collidingObstacle.getTopEdge()); + } + } + + } + + @Nullable + private Obstacle getHighestObstacleToolIsCollidingWith(Tool tool, Scene scene) { + List collisionObstacles = new ArrayList<>(); + synchronized (scene.getObstacles()) { + for (Obstacle obstacle : scene.getObstacles()) { + if (detector.isCollision(tool.getWorldCollisionBounds(), obstacle)) { + collisionObstacles.add(obstacle); + } + } + } + Obstacle highest = null; + for (Obstacle obstacle : collisionObstacles) + if (highest == null || highest.getTopEdge() < obstacle.getTopEdge()) + highest = obstacle; + return highest; + } + + private boolean isToolCollidingWithTerrain(Entity tool, Terrain terrain) { + for (Tile tile : terrain) { + if (detector.isCollision(tool, tile)) + return true; + } + return false; + } + + 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 + .playerTerrainCollision(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 + .playerCeilingCollision(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 (detector.isCollision(tool.getPlayerCollisionBounds(), circle)) + 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); + } + + private boolean isToolCollidingWithMoveableObstacleOnLeftEdge(Tool tool, Obstacle obstacle) { + if (obstacle.getMovement().getX() < 0) { + return Math.abs(tool.getRightEdge() - obstacle.getLeftEdge()) <= MAX_TOOL_OBST_LEFT_EDGE_TOLERANCE; + } + return false; + } + +} 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 index 1b67ed1..ddd18ee 100644 --- a/app/src/main/java/de/frajul/endlessroll/main/screens/GLScreen.java +++ b/app/src/main/java/de/frajul/endlessroll/main/screens/GLScreen.java @@ -1,31 +1,31 @@ -/* - * Created by Julian Mutter on 7/10/18 3:58 PM - * Copyright (c) 2018. All rights reserved. - * Last modified 7/10/18 3:54 PM - * - */ - -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; -import de.frajul.endlessroll.rendering.renderer.GameRenderer; - -/** - * Created by Julian on 30.07.2016. - */ -public abstract class GLScreen extends Screen { - - protected MyGlSurfaceView myGlSurfaceView; - protected GameRenderer gameRenderer; - - public GLScreen(ScreenType type, GameActivity gameActivity, @LayoutRes int layoutId, MyGlSurfaceView glView) { - super(type, gameActivity, layoutId); - this.myGlSurfaceView = glView; - this.gameRenderer = glView.getRenderer(); - } - -} +/* + * Created by Julian Mutter on 7/10/18 3:58 PM + * Copyright (c) 2018. All rights reserved. + * Last modified 7/10/18 3:54 PM + * + */ + +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; +import de.frajul.endlessroll.rendering.renderer.GameRenderer; + +/** + * Created by Julian on 30.07.2016. + */ +public abstract class GLScreen extends Screen { + + protected MyGlSurfaceView myGlSurfaceView; + protected GameRenderer gameRenderer; + + public GLScreen(ScreenType type, GameActivity gameActivity, @LayoutRes int layoutId, MyGlSurfaceView glView) { + super(type, gameActivity, layoutId); + this.myGlSurfaceView = glView; + this.gameRenderer = glView.getRenderer(); + } + +} diff --git a/app/src/main/java/de/frajul/endlessroll/main/screens/GLTestScreen.java b/app/src/main/java/de/frajul/endlessroll/main/screens/GLTestScreen.java index 3f86748..03e741f 100644 --- a/app/src/main/java/de/frajul/endlessroll/main/screens/GLTestScreen.java +++ b/app/src/main/java/de/frajul/endlessroll/main/screens/GLTestScreen.java @@ -1,41 +1,41 @@ -/* - * Created by Julian Mutter on 7/10/18 3:58 PM - * Copyright (c) 2018. All rights reserved. - * Last modified 7/10/18 3:54 PM - * - */ - -package de.frajul.endlessroll.main.screens; - -import android.widget.RelativeLayout; - -import de.frajul.endlessroll.R; -import de.frajul.endlessroll.main.GameActivity; -import de.frajul.endlessroll.main.MyGlSurfaceView; -import de.frajul.endlessroll.rendering.Rendering; - -/** - * Created by Julian on 03.08.2017. - */ - -public class GLTestScreen extends GLScreen { - - private Rendering rendering; - - public GLTestScreen(GameActivity gameActivity, MyGlSurfaceView glView) throws Exception { - super(ScreenType.GL_TEST, gameActivity, R.layout.gl_test_screen, glView); - rendering = new TestScreenRendering(gameActivity, gameRenderer); - } - - @Override - public void prepareToBeShown() { - gameActivity.getSoundManager().menuMusic.start(); - - gameRenderer.setCurrentRendering(rendering); - } - - @Override - public void onBackKeyDown() { - flipToCaller(); - } -} +/* + * Created by Julian Mutter on 7/10/18 3:58 PM + * Copyright (c) 2018. All rights reserved. + * Last modified 7/10/18 3:54 PM + * + */ + +package de.frajul.endlessroll.main.screens; + +import android.widget.RelativeLayout; + +import de.frajul.endlessroll.R; +import de.frajul.endlessroll.main.GameActivity; +import de.frajul.endlessroll.main.MyGlSurfaceView; +import de.frajul.endlessroll.rendering.Rendering; + +/** + * Created by Julian on 03.08.2017. + */ + +public class GLTestScreen extends GLScreen { + + private Rendering rendering; + + public GLTestScreen(GameActivity gameActivity, MyGlSurfaceView glView) throws Exception { + super(ScreenType.GL_TEST, gameActivity, R.layout.gl_test_screen, glView); + rendering = new TestScreenRendering(gameActivity, gameRenderer); + } + + @Override + public void prepareToBeShown() { + gameActivity.getSoundManager().menuMusic.start(); + + gameRenderer.setCurrentRendering(rendering); + } + + @Override + public void onBackKeyDown() { + flipToCaller(); + } +} 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 index e5edd04..a3ea24b 100644 --- a/app/src/main/java/de/frajul/endlessroll/main/screens/GameScreen.java +++ b/app/src/main/java/de/frajul/endlessroll/main/screens/GameScreen.java @@ -1,108 +1,108 @@ -/* - * Created by Julian Mutter on 7/10/18 3:58 PM - * Copyright (c) 2018. All rights reserved. - * Last modified 7/10/18 3:54 PM - * - */ - -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; -import de.frajul.endlessroll.views.ViewManager; - -/** - * 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, this, gameActivity, gameRenderer); - } - - @Override - public void prepareToBeShown() { - gameRenderer.setCurrentRendering(game); - game.getViewManager().prepareToBeShown(); - - gameActivity.getSoundManager().menuMusic.stop(); - } - - public void onPause() { - game.tryToPause(); - } - - public void setGamePausedWithoutMenu() { - game.pauseWithoutMenu(); - } - - public void onResume() { - game.setRunning(); - } - - public boolean isLevelFinished() { - return game.getGameState() == GameState.LEVEL_FINISHED; - } - - public ViewManager getGameViewManager() { - return game.getViewManager(); - } - - @Override - public void onBackKeyDown() { - if(game.isInPhotoMode()) - game.endPhotoMode(); - 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) { - gameActivity.flipToScreen(screen); - gameRenderer.setCurrentRendering(null); - } - - @Override - public RelativeLayout getRootLayout() { - return layout; - } - - @Override - public void showTutorialScreen(List breakPoints) { - gameActivity.showTutorial(breakPoints); - } - - @Override - public void onException(Exception e) { - gameActivity.onException(e); - } - }; - -} +/* + * Created by Julian Mutter on 7/10/18 3:58 PM + * Copyright (c) 2018. All rights reserved. + * Last modified 7/10/18 3:54 PM + * + */ + +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; +import de.frajul.endlessroll.views.ViewManager; + +/** + * 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, this, gameActivity, gameRenderer); + } + + @Override + public void prepareToBeShown() { + gameRenderer.setCurrentRendering(game); + game.getViewManager().prepareToBeShown(); + + gameActivity.getSoundManager().menuMusic.stop(); + } + + public void onPause() { + game.tryToPause(); + } + + public void setGamePausedWithoutMenu() { + game.pauseWithoutMenu(); + } + + public void onResume() { + game.setRunning(); + } + + public boolean isLevelFinished() { + return game.getGameState() == GameState.LEVEL_FINISHED; + } + + public ViewManager getGameViewManager() { + return game.getViewManager(); + } + + @Override + public void onBackKeyDown() { + if(game.isInPhotoMode()) + game.endPhotoMode(); + 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) { + gameActivity.flipToScreen(screen); + gameRenderer.setCurrentRendering(null); + } + + @Override + public RelativeLayout getRootLayout() { + return layout; + } + + @Override + public void showTutorialScreen(List breakPoints) { + gameActivity.showTutorial(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 index c8e0295..5c790eb 100644 --- a/app/src/main/java/de/frajul/endlessroll/main/screens/LevelsScreen.java +++ b/app/src/main/java/de/frajul/endlessroll/main/screens/LevelsScreen.java @@ -1,131 +1,131 @@ -/* - * Created by Julian Mutter on 7/10/18 3:58 PM - * Copyright (c) 2018. All rights reserved. - * Last modified 7/10/18 3:54 PM - * - */ - -package de.frajul.endlessroll.main.screens; - -import android.view.View; -import android.widget.LinearLayout; - -import com.google.android.gms.ads.AdRequest; -import com.google.android.gms.ads.AdView; - -import java.util.concurrent.atomic.AtomicBoolean; - -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.GameLog; -import de.frajul.endlessroll.main.ads.AdLoadingListener; -import de.frajul.endlessroll.main.ads.CustomAdListener; -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, AdLoadingListener { - - private LevelPack levelPack; - - private TopBar topBar; - private LinearLayout topRow; - private LinearLayout bottomRow; - private AdView adView; - private AtomicBoolean waitingForAdResponse; - private AtomicBoolean adLoaded; - - public LevelsScreen(GameActivity gameActivity) { - super(ScreenType.LEVELS, gameActivity, R.layout.levels); - topBar = super.createTopBar(R.id.levels_topbar); - topRow = layout.findViewById(R.id.levels_top_row); - bottomRow = layout.findViewById(R.id.levels_bottom_row); - adView = layout.findViewById(R.id.levels_ad_view); - adView.setAdListener(new CustomAdListener(this)); - adView.setVisibility(View.GONE); - - waitingForAdResponse = new AtomicBoolean(false); - adLoaded = new AtomicBoolean(false); - loadAd(); - } - - 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( - LinearLayout.LayoutParams.WRAP_CONTENT, LinearLayout.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); - } - - private void loadAd() { - waitingForAdResponse.set(true); - AdRequest adRequest = new AdRequest.Builder().build(); - adView.loadAd(adRequest); - } - - @Override - public void prepareToBeShown() { - gameActivity.getSoundManager().menuMusic.start(); - - if (!adLoaded.get() && !waitingForAdResponse.get()) - loadAd(); - - 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); - } - - @Override - public void onAdLoaded() { - adLoaded.set(true); - waitingForAdResponse.set(false); - adView.setVisibility(View.VISIBLE); - } - - @Override - public void onAdFailedToLoad(int errorCode) { - adLoaded.set(false); - waitingForAdResponse.set(false); - GameLog.i("LevelsScreen-Ad failed to load. ErrorCode=" + errorCode); - adView.setVisibility(View.GONE); - } -} +/* + * Created by Julian Mutter on 7/10/18 3:58 PM + * Copyright (c) 2018. All rights reserved. + * Last modified 7/10/18 3:54 PM + * + */ + +package de.frajul.endlessroll.main.screens; + +import android.view.View; +import android.widget.LinearLayout; + +import com.google.android.gms.ads.AdRequest; +import com.google.android.gms.ads.AdView; + +import java.util.concurrent.atomic.AtomicBoolean; + +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.GameLog; +import de.frajul.endlessroll.main.ads.AdLoadingListener; +import de.frajul.endlessroll.main.ads.CustomAdListener; +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, AdLoadingListener { + + private LevelPack levelPack; + + private TopBar topBar; + private LinearLayout topRow; + private LinearLayout bottomRow; + private AdView adView; + private AtomicBoolean waitingForAdResponse; + private AtomicBoolean adLoaded; + + public LevelsScreen(GameActivity gameActivity) { + super(ScreenType.LEVELS, gameActivity, R.layout.levels); + topBar = super.createTopBar(R.id.levels_topbar); + topRow = layout.findViewById(R.id.levels_top_row); + bottomRow = layout.findViewById(R.id.levels_bottom_row); + adView = layout.findViewById(R.id.levels_ad_view); + adView.setAdListener(new CustomAdListener(this)); + adView.setVisibility(View.GONE); + + waitingForAdResponse = new AtomicBoolean(false); + adLoaded = new AtomicBoolean(false); + loadAd(); + } + + 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( + LinearLayout.LayoutParams.WRAP_CONTENT, LinearLayout.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); + } + + private void loadAd() { + waitingForAdResponse.set(true); + AdRequest adRequest = new AdRequest.Builder().build(); + adView.loadAd(adRequest); + } + + @Override + public void prepareToBeShown() { + gameActivity.getSoundManager().menuMusic.start(); + + if (!adLoaded.get() && !waitingForAdResponse.get()) + loadAd(); + + 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); + } + + @Override + public void onAdLoaded() { + adLoaded.set(true); + waitingForAdResponse.set(false); + adView.setVisibility(View.VISIBLE); + } + + @Override + public void onAdFailedToLoad(int errorCode) { + adLoaded.set(false); + waitingForAdResponse.set(false); + GameLog.i("LevelsScreen-Ad failed to load. ErrorCode=" + errorCode); + adView.setVisibility(View.GONE); + } +} diff --git a/app/src/main/java/de/frajul/endlessroll/main/screens/PlayerShapeShopScreen.java b/app/src/main/java/de/frajul/endlessroll/main/screens/PlayerShapeShopScreen.java index b1ab868..c187c37 100644 --- a/app/src/main/java/de/frajul/endlessroll/main/screens/PlayerShapeShopScreen.java +++ b/app/src/main/java/de/frajul/endlessroll/main/screens/PlayerShapeShopScreen.java @@ -1,96 +1,96 @@ -/* - * Created by Julian Mutter on 7/10/18 3:58 PM - * Copyright (c) 2018. All rights reserved. - * Last modified 7/10/18 3:54 PM - * - */ - -package de.frajul.endlessroll.main.screens; - -import android.widget.LinearLayout; -import android.widget.RelativeLayout; - -import de.frajul.endlessroll.R; -import de.frajul.endlessroll.entities.shapes.PlayerShape; -import de.frajul.endlessroll.entities.shapes.PlayerShapeButtonOnClickListener; -import de.frajul.endlessroll.main.GameActivity; -import de.frajul.endlessroll.views.PlayerShapeButton; -import de.frajul.endlessroll.views.ShapeInspector; -import de.frajul.endlessroll.views.TopBar; - -/** - * Created by Julian on 08.07.2016. - */ -public class PlayerShapeShopScreen extends Screen implements PlayerShapeButtonOnClickListener { - - private PlayerShapeButton activeButton; - - private ShapeInspector shapeInspector; - - private TopBar topBar; - private LinearLayout topRow; - private LinearLayout bottomRow; - - public PlayerShapeShopScreen(GameActivity gameActivity) { - super(ScreenType.SHAPE_SHOP, gameActivity, R.layout.shape_shop); - topBar = super.createTopBar(R.id.shape_shop_topbar); - topRow = layout.findViewById(R.id.shape_shop_topRow); - bottomRow = layout.findViewById(R.id.shape_shop_bottomRow); - shapeInspector = new ShapeInspector(gameActivity, - layout.findViewById(R.id.shape_shop_shape_inspector)); - } - - private void createViews() { - topRow.removeAllViews(); - bottomRow.removeAllViews(); - - LinearLayout.LayoutParams params = new LinearLayout.LayoutParams( - LinearLayout.LayoutParams.WRAP_CONTENT, LinearLayout.LayoutParams.WRAP_CONTENT); - params.setMargins(30, 0, 30, 0); - - for (PlayerShape playerShape : PlayerShape.values()) { - playerShape.getUnlockTask().update(gameActivity.getLevelManager()); - boolean locked = !playerShape.getUnlockTask() - .isConditionFulfilled(); - PlayerShapeButton button = new PlayerShapeButton(gameActivity, playerShape, this, - locked); - if (playerShape.isInTopRow()) - topRow.addView(button.getView(), params); - else - bottomRow.addView(button.getView(), params); - - if (playerShape.equals(gameActivity.getUser().getCurrentPlayerShape())) { - this.activeButton = button; - button.startRotating(); - } - } - - shapeInspector.update(activeButton.getPlayerShape(), activeButton.isLocked()); - } - - @Override - public void prepareToBeShown() { - gameActivity.getSoundManager().menuMusic.start(); - - createViews(); - topBar.update(); - topBar.setCustomCallerForScreenSwitch(super.caller); - } - - @Override - public void onBackKeyDown() { - gameActivity.getDataStorageHandler().writeUserData(gameActivity.getUser()); - flipToCaller(); - } - - @Override - public void onClick(PlayerShapeButton button) { - shapeInspector.update(button.getPlayerShape(), button.isLocked()); - if (!button.isLocked()) { - activeButton.stopRotating(); - activeButton = button; - activeButton.startRotating(); - gameActivity.getUser().setCurrentPlayerShape(button.getPlayerShape()); - } - } -} +/* + * Created by Julian Mutter on 7/10/18 3:58 PM + * Copyright (c) 2018. All rights reserved. + * Last modified 7/10/18 3:54 PM + * + */ + +package de.frajul.endlessroll.main.screens; + +import android.widget.LinearLayout; +import android.widget.RelativeLayout; + +import de.frajul.endlessroll.R; +import de.frajul.endlessroll.entities.shapes.PlayerShape; +import de.frajul.endlessroll.entities.shapes.PlayerShapeButtonOnClickListener; +import de.frajul.endlessroll.main.GameActivity; +import de.frajul.endlessroll.views.PlayerShapeButton; +import de.frajul.endlessroll.views.ShapeInspector; +import de.frajul.endlessroll.views.TopBar; + +/** + * Created by Julian on 08.07.2016. + */ +public class PlayerShapeShopScreen extends Screen implements PlayerShapeButtonOnClickListener { + + private PlayerShapeButton activeButton; + + private ShapeInspector shapeInspector; + + private TopBar topBar; + private LinearLayout topRow; + private LinearLayout bottomRow; + + public PlayerShapeShopScreen(GameActivity gameActivity) { + super(ScreenType.SHAPE_SHOP, gameActivity, R.layout.shape_shop); + topBar = super.createTopBar(R.id.shape_shop_topbar); + topRow = layout.findViewById(R.id.shape_shop_topRow); + bottomRow = layout.findViewById(R.id.shape_shop_bottomRow); + shapeInspector = new ShapeInspector(gameActivity, + layout.findViewById(R.id.shape_shop_shape_inspector)); + } + + private void createViews() { + topRow.removeAllViews(); + bottomRow.removeAllViews(); + + LinearLayout.LayoutParams params = new LinearLayout.LayoutParams( + LinearLayout.LayoutParams.WRAP_CONTENT, LinearLayout.LayoutParams.WRAP_CONTENT); + params.setMargins(30, 0, 30, 0); + + for (PlayerShape playerShape : PlayerShape.values()) { + playerShape.getUnlockTask().update(gameActivity.getLevelManager()); + boolean locked = !playerShape.getUnlockTask() + .isConditionFulfilled(); + PlayerShapeButton button = new PlayerShapeButton(gameActivity, playerShape, this, + locked); + if (playerShape.isInTopRow()) + topRow.addView(button.getView(), params); + else + bottomRow.addView(button.getView(), params); + + if (playerShape.equals(gameActivity.getUser().getCurrentPlayerShape())) { + this.activeButton = button; + button.startRotating(); + } + } + + shapeInspector.update(activeButton.getPlayerShape(), activeButton.isLocked()); + } + + @Override + public void prepareToBeShown() { + gameActivity.getSoundManager().menuMusic.start(); + + createViews(); + topBar.update(); + topBar.setCustomCallerForScreenSwitch(super.caller); + } + + @Override + public void onBackKeyDown() { + gameActivity.getDataStorageHandler().writeUserData(gameActivity.getUser()); + flipToCaller(); + } + + @Override + public void onClick(PlayerShapeButton button) { + shapeInspector.update(button.getPlayerShape(), button.isLocked()); + if (!button.isLocked()) { + activeButton.stopRotating(); + activeButton = button; + activeButton.startRotating(); + gameActivity.getUser().setCurrentPlayerShape(button.getPlayerShape()); + } + } +} diff --git a/app/src/main/java/de/frajul/endlessroll/main/screens/PreStartScreen.java b/app/src/main/java/de/frajul/endlessroll/main/screens/PreStartScreen.java index 6c6fb2a..d765907 100644 --- a/app/src/main/java/de/frajul/endlessroll/main/screens/PreStartScreen.java +++ b/app/src/main/java/de/frajul/endlessroll/main/screens/PreStartScreen.java @@ -1,37 +1,37 @@ -/* - * Created by Julian Mutter on 7/10/18 3:58 PM - * Copyright (c) 2018. All rights reserved. - * Last modified 7/10/18 3:54 PM - * - */ - -package de.frajul.endlessroll.main.screens; - -import android.widget.RelativeLayout; -import android.widget.TextView; - -import de.frajul.endlessroll.R; -import de.frajul.endlessroll.main.GameActivity; - -/** - * Created by Julian on 15.07.2017. - */ - -public class PreStartScreen extends Screen { - - public PreStartScreen(GameActivity gameActivity) { - super(ScreenType.PRE_START, gameActivity, R.layout.pre_start_screen); - TextView textView = layout.findViewById(R.id.pre_start_screen_text); - textView.setTypeface(gameActivity.getTypeface()); - } - - @Override - public void prepareToBeShown() { - - } - - @Override - public void onBackKeyDown() { - - } -} +/* + * Created by Julian Mutter on 7/10/18 3:58 PM + * Copyright (c) 2018. All rights reserved. + * Last modified 7/10/18 3:54 PM + * + */ + +package de.frajul.endlessroll.main.screens; + +import android.widget.RelativeLayout; +import android.widget.TextView; + +import de.frajul.endlessroll.R; +import de.frajul.endlessroll.main.GameActivity; + +/** + * Created by Julian on 15.07.2017. + */ + +public class PreStartScreen extends Screen { + + public PreStartScreen(GameActivity gameActivity) { + super(ScreenType.PRE_START, gameActivity, R.layout.pre_start_screen); + TextView textView = layout.findViewById(R.id.pre_start_screen_text); + textView.setTypeface(gameActivity.getTypeface()); + } + + @Override + public void prepareToBeShown() { + + } + + @Override + public void onBackKeyDown() { + + } +} 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 index faf25ba..4e66cc4 100644 --- a/app/src/main/java/de/frajul/endlessroll/main/screens/Screen.java +++ b/app/src/main/java/de/frajul/endlessroll/main/screens/Screen.java @@ -1,92 +1,92 @@ -/* - * Created by Julian Mutter on 7/10/18 3:58 PM - * Copyright (c) 2018. All rights reserved. - * Last modified 7/10/18 3:54 PM - * - */ - -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, this, 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; - } - -} +/* + * Created by Julian Mutter on 7/10/18 3:58 PM + * Copyright (c) 2018. All rights reserved. + * Last modified 7/10/18 3:54 PM + * + */ + +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, this, 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 index b8d9927..0d2e8ba 100644 --- a/app/src/main/java/de/frajul/endlessroll/main/screens/ScreenFlipper.java +++ b/app/src/main/java/de/frajul/endlessroll/main/screens/ScreenFlipper.java @@ -1,62 +1,62 @@ -/* - * Created by Julian Mutter on 7/10/18 3:58 PM - * Copyright (c) 2018. All rights reserved. - * Last modified 7/10/18 3:54 PM - * - */ - -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; - } - -} +/* + * Created by Julian Mutter on 7/10/18 3:58 PM + * Copyright (c) 2018. All rights reserved. + * Last modified 7/10/18 3:54 PM + * + */ + +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/SettingsScreen.java b/app/src/main/java/de/frajul/endlessroll/main/screens/SettingsScreen.java index 3bf720e..fe3bde9 100644 --- a/app/src/main/java/de/frajul/endlessroll/main/screens/SettingsScreen.java +++ b/app/src/main/java/de/frajul/endlessroll/main/screens/SettingsScreen.java @@ -1,116 +1,116 @@ -/* - * Created by Julian Mutter on 7/10/18 3:58 PM - * Copyright (c) 2018. All rights reserved. - * Last modified 7/10/18 3:54 PM - * - */ - -package de.frajul.endlessroll.main.screens; - -import android.support.annotation.IdRes; -import android.view.View; -import android.widget.Button; -import android.widget.CheckBox; -import android.widget.LinearLayout; -import android.widget.TextView; -import android.widget.ToggleButton; - -import de.frajul.endlessroll.R; -import de.frajul.endlessroll.main.GameActivity; -import de.frajul.endlessroll.views.ConfirmDialog; -import de.frajul.endlessroll.views.CreditsDialog; -import de.frajul.endlessroll.views.TopBar; - -/** - * Created by Julian on 10.09.2017. - */ - -public class SettingsScreen extends Screen implements View.OnClickListener, ConfirmDialog.ConfirmDialogListener { - - private final int CALL_ID_CONFIRM_RESET = 1; - - private TopBar topBar; - private ToggleButton musicToggle; - private ToggleButton soundToggle; - private CheckBox fpsCheckbox; - private Button creditsButton; - private Button resetButton; - - private CreditsDialog creditsDialog; - private ConfirmDialog resetConfirmDialog; - - public SettingsScreen(GameActivity gameActivity) { - super(ScreenType.SETTINGS, gameActivity, R.layout.settings); - topBar = super.createTopBar(R.id.settings_topbar); - setTypefaceToTextView(R.id.settings_music_label); - setTypefaceToTextView(R.id.settings_sounds_label); - musicToggle = layout.findViewById(R.id.settings_musictoggle); - musicToggle.setOnClickListener(this); - soundToggle = layout.findViewById(R.id.settings_soundtoggle); - soundToggle.setOnClickListener(this); - fpsCheckbox = layout.findViewById(R.id.settings_fps_checkbox); - fpsCheckbox.setTypeface(gameActivity.getTypeface()); - creditsButton = layout.findViewById(R.id.settings_credits); - creditsButton.setOnClickListener(this); - resetButton = layout.findViewById(R.id.settings_reset); - resetButton.setOnClickListener(this); - - creditsDialog = new CreditsDialog(gameActivity); - resetConfirmDialog = new ConfirmDialog(gameActivity, this); - } - - private void setTypefaceToTextView(@IdRes int id) { - TextView textView = layout.findViewById(id); - textView.setTypeface(gameActivity.getTypeface()); - } - - @Override - public void prepareToBeShown() { - gameActivity.getSoundManager().menuMusic.start(); - - topBar.update(); - topBar.setCustomCallerForScreenSwitch(super.caller); - topBar.setShopsEnabled(!gameActivity.isShortMenuInGameActive()); - - musicToggle.setChecked(!gameActivity.getSoundManager().isMusicMuted()); - soundToggle.setChecked(!gameActivity.getSoundManager().isSoundsMuted()); - fpsCheckbox.setChecked(gameActivity.getDataStorageHandler().readIsShowFps()); - resetButton.setEnabled(super.caller != ScreenType.GAME); - } - - @Override - public void onBackKeyDown() { - gameActivity.getDataStorageHandler() - .writeSoundsMuted(gameActivity.getSoundManager().isSoundsMuted()); - gameActivity.getDataStorageHandler() - .writeMusicMuted(gameActivity.getSoundManager().isMusicMuted()); - gameActivity.getDataStorageHandler().writeShowFps(fpsCheckbox.isChecked()); - flipToCaller(); - } - - @Override - public void onClick(View v) { - if (v.equals(musicToggle)) { - gameActivity.getSoundManager().setMusicMuted(!musicToggle.isChecked()); - } else if (v.equals(soundToggle)) { - gameActivity.getSoundManager().setSoundsMuted(!soundToggle.isChecked()); - } else if (v.equals(creditsButton)) { - creditsDialog.show(); - } else if (v.equals(resetButton)) { - resetConfirmDialog.show(CALL_ID_CONFIRM_RESET, R.string.confirm_dialog_reset); - } - } - - @Override - public void onConfirmed(int callId) { - if (callId == CALL_ID_CONFIRM_RESET) { - gameActivity.resetData(); - prepareToBeShown(); - //ResetButton is disabled if caller is GAME, because shortMenu or GoalMessage would still be visible on next level start - if (super.caller == ScreenType.LEVELS || super.caller == ScreenType.GAME) { - super.caller = ScreenType.WORLDS; - topBar.setCustomCallerForScreenSwitch(super.caller); - } - } - } -} +/* + * Created by Julian Mutter on 7/10/18 3:58 PM + * Copyright (c) 2018. All rights reserved. + * Last modified 7/10/18 3:54 PM + * + */ + +package de.frajul.endlessroll.main.screens; + +import android.support.annotation.IdRes; +import android.view.View; +import android.widget.Button; +import android.widget.CheckBox; +import android.widget.LinearLayout; +import android.widget.TextView; +import android.widget.ToggleButton; + +import de.frajul.endlessroll.R; +import de.frajul.endlessroll.main.GameActivity; +import de.frajul.endlessroll.views.ConfirmDialog; +import de.frajul.endlessroll.views.CreditsDialog; +import de.frajul.endlessroll.views.TopBar; + +/** + * Created by Julian on 10.09.2017. + */ + +public class SettingsScreen extends Screen implements View.OnClickListener, ConfirmDialog.ConfirmDialogListener { + + private final int CALL_ID_CONFIRM_RESET = 1; + + private TopBar topBar; + private ToggleButton musicToggle; + private ToggleButton soundToggle; + private CheckBox fpsCheckbox; + private Button creditsButton; + private Button resetButton; + + private CreditsDialog creditsDialog; + private ConfirmDialog resetConfirmDialog; + + public SettingsScreen(GameActivity gameActivity) { + super(ScreenType.SETTINGS, gameActivity, R.layout.settings); + topBar = super.createTopBar(R.id.settings_topbar); + setTypefaceToTextView(R.id.settings_music_label); + setTypefaceToTextView(R.id.settings_sounds_label); + musicToggle = layout.findViewById(R.id.settings_musictoggle); + musicToggle.setOnClickListener(this); + soundToggle = layout.findViewById(R.id.settings_soundtoggle); + soundToggle.setOnClickListener(this); + fpsCheckbox = layout.findViewById(R.id.settings_fps_checkbox); + fpsCheckbox.setTypeface(gameActivity.getTypeface()); + creditsButton = layout.findViewById(R.id.settings_credits); + creditsButton.setOnClickListener(this); + resetButton = layout.findViewById(R.id.settings_reset); + resetButton.setOnClickListener(this); + + creditsDialog = new CreditsDialog(gameActivity); + resetConfirmDialog = new ConfirmDialog(gameActivity, this); + } + + private void setTypefaceToTextView(@IdRes int id) { + TextView textView = layout.findViewById(id); + textView.setTypeface(gameActivity.getTypeface()); + } + + @Override + public void prepareToBeShown() { + gameActivity.getSoundManager().menuMusic.start(); + + topBar.update(); + topBar.setCustomCallerForScreenSwitch(super.caller); + topBar.setShopsEnabled(!gameActivity.isShortMenuInGameActive()); + + musicToggle.setChecked(!gameActivity.getSoundManager().isMusicMuted()); + soundToggle.setChecked(!gameActivity.getSoundManager().isSoundsMuted()); + fpsCheckbox.setChecked(gameActivity.getDataStorageHandler().readIsShowFps()); + resetButton.setEnabled(super.caller != ScreenType.GAME); + } + + @Override + public void onBackKeyDown() { + gameActivity.getDataStorageHandler() + .writeSoundsMuted(gameActivity.getSoundManager().isSoundsMuted()); + gameActivity.getDataStorageHandler() + .writeMusicMuted(gameActivity.getSoundManager().isMusicMuted()); + gameActivity.getDataStorageHandler().writeShowFps(fpsCheckbox.isChecked()); + flipToCaller(); + } + + @Override + public void onClick(View v) { + if (v.equals(musicToggle)) { + gameActivity.getSoundManager().setMusicMuted(!musicToggle.isChecked()); + } else if (v.equals(soundToggle)) { + gameActivity.getSoundManager().setSoundsMuted(!soundToggle.isChecked()); + } else if (v.equals(creditsButton)) { + creditsDialog.show(); + } else if (v.equals(resetButton)) { + resetConfirmDialog.show(CALL_ID_CONFIRM_RESET, R.string.confirm_dialog_reset); + } + } + + @Override + public void onConfirmed(int callId) { + if (callId == CALL_ID_CONFIRM_RESET) { + gameActivity.resetData(); + prepareToBeShown(); + //ResetButton is disabled if caller is GAME, because shortMenu or GoalMessage would still be visible on next level start + if (super.caller == ScreenType.LEVELS || super.caller == ScreenType.GAME) { + super.caller = ScreenType.WORLDS; + topBar.setCustomCallerForScreenSwitch(super.caller); + } + } + } +} 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 index 3cf0dd6..069a751 100644 --- a/app/src/main/java/de/frajul/endlessroll/main/screens/StartScreen.java +++ b/app/src/main/java/de/frajul/endlessroll/main/screens/StartScreen.java @@ -1,94 +1,94 @@ -/* - * Created by Julian Mutter on 7/10/18 3:58 PM - * Copyright (c) 2018. All rights reserved. - * Last modified 7/10/18 3:54 PM - * - */ - -package de.frajul.endlessroll.main.screens; - -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.TextView; - -import de.frajul.endlessroll.R; -import de.frajul.endlessroll.main.GameActivity; -import de.frajul.endlessroll.main.MyGlSurfaceView; -import de.frajul.endlessroll.main.game.StartScene; -import de.frajul.endlessroll.sqlDatabase.MyDatabase; -import de.frajul.endlessroll.views.ConfirmDialog; -import de.frajul.endlessroll.views.DevToolsDialog; - -/** - * Created by Julian on 07.07.2016. - */ -public class StartScreen extends GLScreen implements View.OnClickListener, ConfirmDialog.ConfirmDialogListener { - - private final int CALL_ID_CONFIRM_EXIT = 1; - - private StartScreenRendering rendering; - private Button play; - private Button showDevToolsDialog; - private DevToolsDialog devToolsDialog; - private ConfirmDialog confirmDialog; - - public StartScreen(GameActivity gameActivity, MyGlSurfaceView glSurfaceView) throws Exception { - super(ScreenType.START, gameActivity, R.layout.start_screen, glSurfaceView); - - Typeface typeface = gameActivity.getTypeface(); - TextView title = layout.findViewById(R.id.startscreen_title); - title.setTypeface(typeface); - play = createButton(R.id.startscreen_play, typeface); - play.startAnimation(AnimationUtils.loadAnimation(gameActivity, R.anim.rotate)); - showDevToolsDialog = createButton(R.id.startscreen_show_dev_tools_dialog, typeface); - showDevToolsDialog.setVisibility(GameActivity.IS_DEVELOPER ? View.VISIBLE : View.GONE); - - devToolsDialog = new DevToolsDialog(gameActivity); - confirmDialog = new ConfirmDialog(gameActivity, this); - - rendering = new StartScreenRendering(gameActivity, gameRenderer); - } - - private Button createButton(@IdRes int id, Typeface typeface) { - Button button = layout.findViewById(id); - button.setTypeface(typeface); - button.setOnClickListener(this); - return button; - } - - @Override - public void prepareToBeShown() { - ((StartScene) rendering.getScene()).randomizeWorld(); - ((StartScene) rendering.getScene()).loadTexturesForCurrentWorld(); - gameRenderer.setCurrentRendering(rendering); - - gameActivity.getSoundManager().menuMusic.start(); - } - - @Override - public void onBackKeyDown() { - confirmDialog.show(CALL_ID_CONFIRM_EXIT, R.string.confirm_dialog_exit); - } - - @Override - public void onClick(View v) { - if (v.equals(play)) { - gameActivity.flipToScreen(ScreenType.WORLDS); - gameRenderer.setCurrentRendering(null); - } if(v.equals(showDevToolsDialog)){ - devToolsDialog.show(); - } - } - - - @Override - public void onConfirmed(int callId) { - if (callId == CALL_ID_CONFIRM_EXIT) { - gameActivity.exitGame(); - } - } -} +/* + * Created by Julian Mutter on 7/10/18 3:58 PM + * Copyright (c) 2018. All rights reserved. + * Last modified 7/10/18 3:54 PM + * + */ + +package de.frajul.endlessroll.main.screens; + +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.TextView; + +import de.frajul.endlessroll.R; +import de.frajul.endlessroll.main.GameActivity; +import de.frajul.endlessroll.main.MyGlSurfaceView; +import de.frajul.endlessroll.main.game.StartScene; +import de.frajul.endlessroll.sqlDatabase.MyDatabase; +import de.frajul.endlessroll.views.ConfirmDialog; +import de.frajul.endlessroll.views.DevToolsDialog; + +/** + * Created by Julian on 07.07.2016. + */ +public class StartScreen extends GLScreen implements View.OnClickListener, ConfirmDialog.ConfirmDialogListener { + + private final int CALL_ID_CONFIRM_EXIT = 1; + + private StartScreenRendering rendering; + private Button play; + private Button showDevToolsDialog; + private DevToolsDialog devToolsDialog; + private ConfirmDialog confirmDialog; + + public StartScreen(GameActivity gameActivity, MyGlSurfaceView glSurfaceView) throws Exception { + super(ScreenType.START, gameActivity, R.layout.start_screen, glSurfaceView); + + Typeface typeface = gameActivity.getTypeface(); + TextView title = layout.findViewById(R.id.startscreen_title); + title.setTypeface(typeface); + play = createButton(R.id.startscreen_play, typeface); + play.startAnimation(AnimationUtils.loadAnimation(gameActivity, R.anim.rotate)); + showDevToolsDialog = createButton(R.id.startscreen_show_dev_tools_dialog, typeface); + showDevToolsDialog.setVisibility(GameActivity.IS_DEVELOPER ? View.VISIBLE : View.GONE); + + devToolsDialog = new DevToolsDialog(gameActivity); + confirmDialog = new ConfirmDialog(gameActivity, this); + + rendering = new StartScreenRendering(gameActivity, gameRenderer); + } + + private Button createButton(@IdRes int id, Typeface typeface) { + Button button = layout.findViewById(id); + button.setTypeface(typeface); + button.setOnClickListener(this); + return button; + } + + @Override + public void prepareToBeShown() { + ((StartScene) rendering.getScene()).randomizeWorld(); + ((StartScene) rendering.getScene()).loadTexturesForCurrentWorld(); + gameRenderer.setCurrentRendering(rendering); + + gameActivity.getSoundManager().menuMusic.start(); + } + + @Override + public void onBackKeyDown() { + confirmDialog.show(CALL_ID_CONFIRM_EXIT, R.string.confirm_dialog_exit); + } + + @Override + public void onClick(View v) { + if (v.equals(play)) { + gameActivity.flipToScreen(ScreenType.WORLDS); + gameRenderer.setCurrentRendering(null); + } if(v.equals(showDevToolsDialog)){ + devToolsDialog.show(); + } + } + + + @Override + public void onConfirmed(int callId) { + if (callId == CALL_ID_CONFIRM_EXIT) { + gameActivity.exitGame(); + } + } +} 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 index 74722d9..0b99def 100644 --- a/app/src/main/java/de/frajul/endlessroll/main/screens/StartScreenRendering.java +++ b/app/src/main/java/de/frajul/endlessroll/main/screens/StartScreenRendering.java @@ -1,59 +1,59 @@ -/* - * Created by Julian Mutter on 7/10/18 3:58 PM - * Copyright (c) 2018. All rights reserved. - * Last modified 7/10/18 3:54 PM - * - */ - -package de.frajul.endlessroll.main.screens; - -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; -import de.frajul.endlessroll.rendering.renderer.GameRenderer; - -/** - * Created by Julian on 20.07.2016. - */ -public class StartScreenRendering extends Rendering { - - private GameActivity gameActivity; - private Timer timer; - private ParticleSystem particleSystem; - - public StartScreenRendering(GameActivity gameActivity, GameRenderer gameRenderer) throws Exception { - super(gameActivity, gameRenderer); - this.gameActivity = 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(gameActivity, 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 void onTouch(float x, float y) { - } -} +/* + * Created by Julian Mutter on 7/10/18 3:58 PM + * Copyright (c) 2018. All rights reserved. + * Last modified 7/10/18 3:54 PM + * + */ + +package de.frajul.endlessroll.main.screens; + +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; +import de.frajul.endlessroll.rendering.renderer.GameRenderer; + +/** + * Created by Julian on 20.07.2016. + */ +public class StartScreenRendering extends Rendering { + + private GameActivity gameActivity; + private Timer timer; + private ParticleSystem particleSystem; + + public StartScreenRendering(GameActivity gameActivity, GameRenderer gameRenderer) throws Exception { + super(gameActivity, gameRenderer); + this.gameActivity = 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(gameActivity, 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 void onTouch(float x, float y) { + } +} diff --git a/app/src/main/java/de/frajul/endlessroll/main/screens/TestScreenRendering.java b/app/src/main/java/de/frajul/endlessroll/main/screens/TestScreenRendering.java index b437165..4b25e10 100644 --- a/app/src/main/java/de/frajul/endlessroll/main/screens/TestScreenRendering.java +++ b/app/src/main/java/de/frajul/endlessroll/main/screens/TestScreenRendering.java @@ -1,62 +1,62 @@ -/* - * Created by Julian Mutter on 7/10/18 3:58 PM - * Copyright (c) 2018. All rights reserved. - * Last modified 7/10/18 3:54 PM - * - */ - -package de.frajul.endlessroll.main.screens; - -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.TestScreenScene; -import de.frajul.endlessroll.main.game.Timer; -import de.frajul.endlessroll.rendering.Rendering; -import de.frajul.endlessroll.rendering.renderer.GameRenderer; - -/** - * Created by Julian on 20.07.2016. - */ -public class TestScreenRendering extends Rendering { - - private GameActivity gameActivity; - private Timer timer; - private ParticleSystem particleSystem; - - public TestScreenRendering(GameActivity gameActivity, GameRenderer gameRenderer) throws Exception { - super(gameActivity, gameRenderer); - this.gameActivity = gameActivity; - particleSystem = new ParticleSystem(gameActivity); - } - - @Override - public TestScreenScene init(TexturePack texturePack, Timer timer, boolean isFirstTime) { - this.timer = timer; - try { - if (isFirstTime) - scene = new TestScreenScene(gameActivity, texturePack, particleSystem); - else - scene.setTexturePack(texturePack); - } catch (Exception e) { - GameLog.e(e); - } - try { - particleSystem.loadTextures(); - } catch (Exception e) { - } - return scene; - } - - @Override - public void update() { - particleSystem.update(timer); - scene.update(timer); - } - - @Override - public void onTouch(float x, float y) { - } - -} +/* + * Created by Julian Mutter on 7/10/18 3:58 PM + * Copyright (c) 2018. All rights reserved. + * Last modified 7/10/18 3:54 PM + * + */ + +package de.frajul.endlessroll.main.screens; + +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.TestScreenScene; +import de.frajul.endlessroll.main.game.Timer; +import de.frajul.endlessroll.rendering.Rendering; +import de.frajul.endlessroll.rendering.renderer.GameRenderer; + +/** + * Created by Julian on 20.07.2016. + */ +public class TestScreenRendering extends Rendering { + + private GameActivity gameActivity; + private Timer timer; + private ParticleSystem particleSystem; + + public TestScreenRendering(GameActivity gameActivity, GameRenderer gameRenderer) throws Exception { + super(gameActivity, gameRenderer); + this.gameActivity = gameActivity; + particleSystem = new ParticleSystem(gameActivity); + } + + @Override + public TestScreenScene init(TexturePack texturePack, Timer timer, boolean isFirstTime) { + this.timer = timer; + try { + if (isFirstTime) + scene = new TestScreenScene(gameActivity, texturePack, particleSystem); + else + scene.setTexturePack(texturePack); + } catch (Exception e) { + GameLog.e(e); + } + try { + particleSystem.loadTextures(); + } catch (Exception e) { + } + return scene; + } + + @Override + public void update() { + particleSystem.update(timer); + scene.update(timer); + } + + @Override + public void onTouch(float x, float y) { + } + +} 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 index e7d659f..9372679 100644 --- a/app/src/main/java/de/frajul/endlessroll/main/screens/ToolShopScreen.java +++ b/app/src/main/java/de/frajul/endlessroll/main/screens/ToolShopScreen.java @@ -1,217 +1,217 @@ -/* - * Created by Julian Mutter on 7/10/18 3:58 PM - * Copyright (c) 2018. All rights reserved. - * Last modified 7/10/18 3:54 PM - * - */ - -package de.frajul.endlessroll.main.screens; - -import android.view.View; -import android.view.animation.Animation; -import android.view.animation.AnimationUtils; -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.GameLog; -import de.frajul.endlessroll.main.tutorial.ToolShopTutorial; -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 ToolSlotSettings slotSettings; - private ToolOfferSlot selectedToolOfferSlot; - - private TopBar topBar; - private List toolSlotViews = new ArrayList<>(); - private List toolOfferSlots = new ArrayList<>(); - - private Animation pulse; - - private ToolInspector toolInspector; - private ToolShopTutorial tutorial; - - public ToolShopScreen(GameActivity gameActivity) { - super(ScreenType.TOOL_SHOP, gameActivity, R.layout.toolshop); - this.slotSettings = gameActivity.getUser().getToolSlotSettings(); - this.tutorial = gameActivity.getTutorialManager().getToolShopTutorial(); - tutorial.setToolShopScreen(this); - pulse = AnimationUtils.loadAnimation(gameActivity, R.anim.pulse); - - topBar = super.createTopBar(R.id.toolshop_topbar); - LinearLayout toolOfferTopRow = layout.findViewById(R.id.toolshop_tool_offer_top_row); - LinearLayout toolOfferBottomRow = 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( - LinearLayout.LayoutParams.WRAP_CONTENT, LinearLayout.LayoutParams.WRAP_CONTENT); - params.setMargins(30, 0, 30, 0); - - int i = 0; - for (ToolType type : ToolType.values()) { - i++; - ToolOfferSlot slot = new ToolOfferSlot(this, gameActivity, gameActivity.getTypeface(), - type); - toolOfferSlots.add(slot); - if (i % 2 == 0) - toolOfferBottomRow.addView(slot.getLayout(), params); - else - toolOfferTopRow.addView(slot.getLayout(), params); - } - - 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)); - } - - private ImageView getToolSlotView(int id) { - View slotLayout = layout.findViewById(id); - ImageView imageView = slotLayout.findViewById(R.id.toolslot_image); - imageView.setOnClickListener(this); - return imageView; - } - - @Override - public void prepareToBeShown() { - gameActivity.getSoundManager().menuMusic.start(); - - topBar.update(); - topBar.setCustomCallerForScreenSwitch(super.caller); - slotSettings.unlockSlotsIfLevelReached(gameActivity.getUser().getLevelUpBounties()); - 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 = gameActivity.getUser().getLevelUpBounties() - .isToolLocked(toolOfferSlot.getToolType()); - toolOfferSlot.setLocked(locked); - toolOfferSlot.updateBackgroundColor(); - } - tutorial.onToolShopScreenPrepare(); - } - - public void onToolBought(int price, ToolType toolType) { - topBar.showStarcountDecrease(-price); - gameActivity.getUser().increaseStarCount(-price, false); - topBar.update(); - DataStorageHandler dataStorageHandler = gameActivity.getDataStorageHandler(); - dataStorageHandler.writeUserData(gameActivity.getUser()); - dataStorageHandler.getDatabase().open(); - dataStorageHandler.getDatabase().writeToolData(); - dataStorageHandler.getDatabase().close(); - for (ToolOfferSlot toolOfferSlot : toolOfferSlots) { - toolOfferSlot.updateBackgroundColor(); - } - tutorial.onToolBought(); - } - - public void onToolUpgraded(int price) { - topBar.showEnergycountDecrease(-price); - gameActivity.getUser().increaseEnergyCount(-price, false); - topBar.update(); - DataStorageHandler dataStorageHandler = gameActivity.getDataStorageHandler(); - dataStorageHandler.writeUserData(gameActivity.getUser()); - 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()); - tutorial.onToolSelected(); - } - - private void onToolEquipped(int index) { - slotSettings.changeToolSlotType(index, selectedToolOfferSlot.getToolType()); - DataStorageHandler dataStorageHandler = gameActivity.getDataStorageHandler(); - dataStorageHandler.writeUserData(gameActivity.getUser()); - for (int i = 0; i < toolSlotViews.size(); i++) { - ToolSlot toolSlot = slotSettings.get(i); - ImageView view = toolSlotViews.get(i); - view.setImageResource(toolSlot.getDrawable()); - } - tutorial.onToolEquipped(); - } - - public void stopTutorialAnimations() { - for (ToolOfferSlot toolOfferSlot : toolOfferSlots) - if (toolOfferSlot.getToolType() == ToolType.SPRING) - toolOfferSlot.getLayout().clearAnimation(); - - toolInspector.clearPriceButtonAnimation(); - - toolSlotViews.get(0).clearAnimation(); - } - - public void tutorialStartSpringOfferSlotPulse() { - for (ToolOfferSlot toolOfferSlot : toolOfferSlots) - if (toolOfferSlot.getToolType() == ToolType.SPRING) - toolOfferSlot.getLayout().startAnimation(pulse); - } - - public void tutorialStartSpringBuyButtonPulse() { - toolInspector.startPriceButtonAnimation(pulse); - } - - public void tutorialStartSpringToolSlotPulse() { - toolSlotViews.get(0).startAnimation(pulse); - } - - public void writeToolShopTutorialIsFinished() { - gameActivity.getDataStorageHandler().writeToolShopTutorialFinished(true); - } - - - @Override - public void onBackKeyDown() { - stopTutorialAnimations(); - flipToCaller(); - } - - @Override - public void onClick(View v) { - ImageView toolSlotView = (ImageView) v; - int index = toolSlotViews.indexOf(toolSlotView); - if (canSelectedToolBePutInSlot(index)) { - onToolEquipped(index); - } - } - - private boolean canSelectedToolBePutInSlot(int slotIndex) { - return slotIndex != -1 && !slotSettings.get(slotIndex) - .isLocked() && selectedToolOfferSlot != null && selectedToolOfferSlot.getToolType() - .isBought(); - } - - public ToolType getSelectedToolType() { - return selectedToolOfferSlot.getToolType(); - } - -} +/* + * Created by Julian Mutter on 7/10/18 3:58 PM + * Copyright (c) 2018. All rights reserved. + * Last modified 7/10/18 3:54 PM + * + */ + +package de.frajul.endlessroll.main.screens; + +import android.view.View; +import android.view.animation.Animation; +import android.view.animation.AnimationUtils; +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.GameLog; +import de.frajul.endlessroll.main.tutorial.ToolShopTutorial; +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 ToolSlotSettings slotSettings; + private ToolOfferSlot selectedToolOfferSlot; + + private TopBar topBar; + private List toolSlotViews = new ArrayList<>(); + private List toolOfferSlots = new ArrayList<>(); + + private Animation pulse; + + private ToolInspector toolInspector; + private ToolShopTutorial tutorial; + + public ToolShopScreen(GameActivity gameActivity) { + super(ScreenType.TOOL_SHOP, gameActivity, R.layout.toolshop); + this.slotSettings = gameActivity.getUser().getToolSlotSettings(); + this.tutorial = gameActivity.getTutorialManager().getToolShopTutorial(); + tutorial.setToolShopScreen(this); + pulse = AnimationUtils.loadAnimation(gameActivity, R.anim.pulse); + + topBar = super.createTopBar(R.id.toolshop_topbar); + LinearLayout toolOfferTopRow = layout.findViewById(R.id.toolshop_tool_offer_top_row); + LinearLayout toolOfferBottomRow = 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( + LinearLayout.LayoutParams.WRAP_CONTENT, LinearLayout.LayoutParams.WRAP_CONTENT); + params.setMargins(30, 0, 30, 0); + + int i = 0; + for (ToolType type : ToolType.values()) { + i++; + ToolOfferSlot slot = new ToolOfferSlot(this, gameActivity, gameActivity.getTypeface(), + type); + toolOfferSlots.add(slot); + if (i % 2 == 0) + toolOfferBottomRow.addView(slot.getLayout(), params); + else + toolOfferTopRow.addView(slot.getLayout(), params); + } + + 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)); + } + + private ImageView getToolSlotView(int id) { + View slotLayout = layout.findViewById(id); + ImageView imageView = slotLayout.findViewById(R.id.toolslot_image); + imageView.setOnClickListener(this); + return imageView; + } + + @Override + public void prepareToBeShown() { + gameActivity.getSoundManager().menuMusic.start(); + + topBar.update(); + topBar.setCustomCallerForScreenSwitch(super.caller); + slotSettings.unlockSlotsIfLevelReached(gameActivity.getUser().getLevelUpBounties()); + 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 = gameActivity.getUser().getLevelUpBounties() + .isToolLocked(toolOfferSlot.getToolType()); + toolOfferSlot.setLocked(locked); + toolOfferSlot.updateBackgroundColor(); + } + tutorial.onToolShopScreenPrepare(); + } + + public void onToolBought(int price, ToolType toolType) { + topBar.showStarcountDecrease(-price); + gameActivity.getUser().increaseStarCount(-price, false); + topBar.update(); + DataStorageHandler dataStorageHandler = gameActivity.getDataStorageHandler(); + dataStorageHandler.writeUserData(gameActivity.getUser()); + dataStorageHandler.getDatabase().open(); + dataStorageHandler.getDatabase().writeToolData(); + dataStorageHandler.getDatabase().close(); + for (ToolOfferSlot toolOfferSlot : toolOfferSlots) { + toolOfferSlot.updateBackgroundColor(); + } + tutorial.onToolBought(); + } + + public void onToolUpgraded(int price) { + topBar.showEnergycountDecrease(-price); + gameActivity.getUser().increaseEnergyCount(-price, false); + topBar.update(); + DataStorageHandler dataStorageHandler = gameActivity.getDataStorageHandler(); + dataStorageHandler.writeUserData(gameActivity.getUser()); + 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()); + tutorial.onToolSelected(); + } + + private void onToolEquipped(int index) { + slotSettings.changeToolSlotType(index, selectedToolOfferSlot.getToolType()); + DataStorageHandler dataStorageHandler = gameActivity.getDataStorageHandler(); + dataStorageHandler.writeUserData(gameActivity.getUser()); + for (int i = 0; i < toolSlotViews.size(); i++) { + ToolSlot toolSlot = slotSettings.get(i); + ImageView view = toolSlotViews.get(i); + view.setImageResource(toolSlot.getDrawable()); + } + tutorial.onToolEquipped(); + } + + public void stopTutorialAnimations() { + for (ToolOfferSlot toolOfferSlot : toolOfferSlots) + if (toolOfferSlot.getToolType() == ToolType.SPRING) + toolOfferSlot.getLayout().clearAnimation(); + + toolInspector.clearPriceButtonAnimation(); + + toolSlotViews.get(0).clearAnimation(); + } + + public void tutorialStartSpringOfferSlotPulse() { + for (ToolOfferSlot toolOfferSlot : toolOfferSlots) + if (toolOfferSlot.getToolType() == ToolType.SPRING) + toolOfferSlot.getLayout().startAnimation(pulse); + } + + public void tutorialStartSpringBuyButtonPulse() { + toolInspector.startPriceButtonAnimation(pulse); + } + + public void tutorialStartSpringToolSlotPulse() { + toolSlotViews.get(0).startAnimation(pulse); + } + + public void writeToolShopTutorialIsFinished() { + gameActivity.getDataStorageHandler().writeToolShopTutorialFinished(true); + } + + + @Override + public void onBackKeyDown() { + stopTutorialAnimations(); + flipToCaller(); + } + + @Override + public void onClick(View v) { + ImageView toolSlotView = (ImageView) v; + int index = toolSlotViews.indexOf(toolSlotView); + if (canSelectedToolBePutInSlot(index)) { + onToolEquipped(index); + } + } + + private boolean canSelectedToolBePutInSlot(int slotIndex) { + return slotIndex != -1 && !slotSettings.get(slotIndex) + .isLocked() && selectedToolOfferSlot != null && selectedToolOfferSlot.getToolType() + .isBought(); + } + + public ToolType getSelectedToolType() { + return selectedToolOfferSlot.getToolType(); + } + +} 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 index 10fba9e..2eb78b8 100644 --- a/app/src/main/java/de/frajul/endlessroll/main/screens/WorldsScreen.java +++ b/app/src/main/java/de/frajul/endlessroll/main/screens/WorldsScreen.java @@ -1,70 +1,70 @@ -/* - * Created by Julian Mutter on 7/10/18 3:58 PM - * Copyright (c) 2018. All rights reserved. - * Last modified 7/10/18 3:54 PM - * - */ - -package de.frajul.endlessroll.main.screens; - -import android.view.Gravity; -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; - - public WorldsScreen(GameActivity gameActivity) { - super(ScreenType.WORLDS, gameActivity, R.layout.worlds); - topBar = super.createTopBar(R.id.worlds_topbar); - LinearLayout buttonLayout = (LinearLayout) layout.findViewById(R.id.worlds_layout); - LinearLayout.LayoutParams params = new LinearLayout.LayoutParams( - LinearLayout.LayoutParams.WRAP_CONTENT, LinearLayout.LayoutParams.WRAP_CONTENT); - params.gravity = Gravity.CENTER_VERTICAL; - 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() { - gameActivity.getSoundManager().menuMusic.start(); - - 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); - } - } -} +/* + * Created by Julian Mutter on 7/10/18 3:58 PM + * Copyright (c) 2018. All rights reserved. + * Last modified 7/10/18 3:54 PM + * + */ + +package de.frajul.endlessroll.main.screens; + +import android.view.Gravity; +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; + + public WorldsScreen(GameActivity gameActivity) { + super(ScreenType.WORLDS, gameActivity, R.layout.worlds); + topBar = super.createTopBar(R.id.worlds_topbar); + LinearLayout buttonLayout = (LinearLayout) layout.findViewById(R.id.worlds_layout); + LinearLayout.LayoutParams params = new LinearLayout.LayoutParams( + LinearLayout.LayoutParams.WRAP_CONTENT, LinearLayout.LayoutParams.WRAP_CONTENT); + params.gravity = Gravity.CENTER_VERTICAL; + 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() { + gameActivity.getSoundManager().menuMusic.start(); + + 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 index 3e9f96f..1d45b64 100644 --- a/app/src/main/java/de/frajul/endlessroll/main/tutorial/BreakPoint.java +++ b/app/src/main/java/de/frajul/endlessroll/main/tutorial/BreakPoint.java @@ -1,54 +1,54 @@ -/* - * Created by Julian Mutter on 7/10/18 3:58 PM - * Copyright (c) 2018. All rights reserved. - * Last modified 7/10/18 3:54 PM - * - */ - -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 NONE_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; - } - -} +/* + * Created by Julian Mutter on 7/10/18 3:58 PM + * Copyright (c) 2018. All rights reserved. + * Last modified 7/10/18 3:54 PM + * + */ + +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 NONE_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/ToolShopTutorial.java b/app/src/main/java/de/frajul/endlessroll/main/tutorial/ToolShopTutorial.java index e1b3165..81ff8b6 100644 --- a/app/src/main/java/de/frajul/endlessroll/main/tutorial/ToolShopTutorial.java +++ b/app/src/main/java/de/frajul/endlessroll/main/tutorial/ToolShopTutorial.java @@ -1,101 +1,101 @@ -/* - * Created by Julian Mutter on 7/10/18 3:58 PM - * Copyright (c) 2018. All rights reserved. - * Last modified 7/10/18 3:54 PM - * - */ - -package de.frajul.endlessroll.main.tutorial; - -import java.util.Arrays; - -import de.frajul.endlessroll.entities.tools.ToolType; -import de.frajul.endlessroll.main.GameActivity; -import de.frajul.endlessroll.main.screens.Screen; -import de.frajul.endlessroll.main.screens.ToolShopScreen; -import de.frajul.endlessroll.user.LevelUpBounties; -import de.frajul.endlessroll.views.TopBar; - -/** - * Created by Julian on 10.06.2017. - */ - -public class ToolShopTutorial { - - private GameActivity gameActivity; - private LevelUpBounties levelUpBounties; - - private BreakPoint springEquipped; - private ToolShopScreen toolShopScreen; - private boolean finished = false; - - public ToolShopTutorial(GameActivity gameActivity, BreakPoint springEquipped) { - this.gameActivity = gameActivity; - levelUpBounties = new LevelUpBounties(0); - this.springEquipped = springEquipped; - } - - public void setToolShopScreen(ToolShopScreen toolShopScreen) { - this.toolShopScreen = toolShopScreen; - } - - public void onTopBarUpdate(TopBar topBar) { - if (!finished && isSpringUnlocked()) { - boolean notOnToolShopScreen = topBar.getParentType() != Screen.ScreenType.TOOL_SHOP; - if (notOnToolShopScreen && topBar.isToolShopButtonEnabled()) - topBar.startToolShopButtonPulse(); - } - } - - public void onToolShopScreenPrepare() { - onToolShopUpdate(); - } - - public void onToolSelected() { - onToolShopUpdate(); - } - - public void onToolBought() { - onToolShopUpdate(); - } - - public void onToolEquipped() { - if (!finished && toolShopScreen.getSelectedToolType() == ToolType.SPRING) { - toolShopScreen.stopTutorialAnimations(); - finished = true; - toolShopScreen.writeToolShopTutorialIsFinished(); - gameActivity.showTutorial(Arrays.asList(springEquipped)); - } - } - - private void onToolShopUpdate() { - if (!finished && isSpringUnlocked()) { - boolean springSelected = toolShopScreen.getSelectedToolType() == ToolType.SPRING; - boolean springBought = ToolType.SPRING.isBought(); - - boolean isSelectSpring = !springSelected; - boolean isBuySpring = springSelected && !springBought; - boolean isEquipSpring = springSelected && springBought; - - if (isSelectSpring) { - toolShopScreen.stopTutorialAnimations(); - toolShopScreen.tutorialStartSpringOfferSlotPulse(); - } else if (isBuySpring) { - toolShopScreen.stopTutorialAnimations(); - toolShopScreen.tutorialStartSpringBuyButtonPulse(); - } else if (isEquipSpring) { - toolShopScreen.stopTutorialAnimations(); - toolShopScreen.tutorialStartSpringToolSlotPulse(); - } - } - } - - private boolean isSpringUnlocked() { - levelUpBounties.loadAllForLevel(gameActivity.getUser().getLevel()); - return !levelUpBounties.isToolLocked(ToolType.SPRING); - } - - public void setFinished(boolean finished) { - this.finished = finished; - } -} +/* + * Created by Julian Mutter on 7/10/18 3:58 PM + * Copyright (c) 2018. All rights reserved. + * Last modified 7/10/18 3:54 PM + * + */ + +package de.frajul.endlessroll.main.tutorial; + +import java.util.Arrays; + +import de.frajul.endlessroll.entities.tools.ToolType; +import de.frajul.endlessroll.main.GameActivity; +import de.frajul.endlessroll.main.screens.Screen; +import de.frajul.endlessroll.main.screens.ToolShopScreen; +import de.frajul.endlessroll.user.LevelUpBounties; +import de.frajul.endlessroll.views.TopBar; + +/** + * Created by Julian on 10.06.2017. + */ + +public class ToolShopTutorial { + + private GameActivity gameActivity; + private LevelUpBounties levelUpBounties; + + private BreakPoint springEquipped; + private ToolShopScreen toolShopScreen; + private boolean finished = false; + + public ToolShopTutorial(GameActivity gameActivity, BreakPoint springEquipped) { + this.gameActivity = gameActivity; + levelUpBounties = new LevelUpBounties(0); + this.springEquipped = springEquipped; + } + + public void setToolShopScreen(ToolShopScreen toolShopScreen) { + this.toolShopScreen = toolShopScreen; + } + + public void onTopBarUpdate(TopBar topBar) { + if (!finished && isSpringUnlocked()) { + boolean notOnToolShopScreen = topBar.getParentType() != Screen.ScreenType.TOOL_SHOP; + if (notOnToolShopScreen && topBar.isToolShopButtonEnabled()) + topBar.startToolShopButtonPulse(); + } + } + + public void onToolShopScreenPrepare() { + onToolShopUpdate(); + } + + public void onToolSelected() { + onToolShopUpdate(); + } + + public void onToolBought() { + onToolShopUpdate(); + } + + public void onToolEquipped() { + if (!finished && toolShopScreen.getSelectedToolType() == ToolType.SPRING) { + toolShopScreen.stopTutorialAnimations(); + finished = true; + toolShopScreen.writeToolShopTutorialIsFinished(); + gameActivity.showTutorial(Arrays.asList(springEquipped)); + } + } + + private void onToolShopUpdate() { + if (!finished && isSpringUnlocked()) { + boolean springSelected = toolShopScreen.getSelectedToolType() == ToolType.SPRING; + boolean springBought = ToolType.SPRING.isBought(); + + boolean isSelectSpring = !springSelected; + boolean isBuySpring = springSelected && !springBought; + boolean isEquipSpring = springSelected && springBought; + + if (isSelectSpring) { + toolShopScreen.stopTutorialAnimations(); + toolShopScreen.tutorialStartSpringOfferSlotPulse(); + } else if (isBuySpring) { + toolShopScreen.stopTutorialAnimations(); + toolShopScreen.tutorialStartSpringBuyButtonPulse(); + } else if (isEquipSpring) { + toolShopScreen.stopTutorialAnimations(); + toolShopScreen.tutorialStartSpringToolSlotPulse(); + } + } + } + + private boolean isSpringUnlocked() { + levelUpBounties.loadAllForLevel(gameActivity.getUser().getLevel()); + return !levelUpBounties.isToolLocked(ToolType.SPRING); + } + + public void setFinished(boolean finished) { + this.finished = finished; + } +} 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 index eedf551..de749d8 100644 --- a/app/src/main/java/de/frajul/endlessroll/main/tutorial/Tutorial.java +++ b/app/src/main/java/de/frajul/endlessroll/main/tutorial/Tutorial.java @@ -1,68 +1,68 @@ -/* - * Created by Julian Mutter on 7/10/18 3:58 PM - * Copyright (c) 2018. All rights reserved. - * Last modified 7/10/18 3:54 PM - * - */ - -package de.frajul.endlessroll.main.tutorial; - -import java.util.ArrayList; -import java.util.Arrays; -import java.util.List; - -import de.frajul.endlessroll.main.GameActivity; - -/** - * Created by Julian on 14.03.2017. - */ - -public class Tutorial { - - private GameActivity gameActivity; - private List breakPoints; - protected List currentBreakPoints = new ArrayList<>(); - - public Tutorial(GameActivity gameActivity, BreakPoint... breakPoints) { - this.gameActivity = gameActivity; - this.breakPoints = Arrays.asList(breakPoints); - } - - public void setFinished() { - for (BreakPoint breakPoint : breakPoints) - breakPoint.setAlreadyShown(true); - currentBreakPoints.clear(); - } - - public void reset() { - for (BreakPoint breakPoint : breakPoints) - breakPoint.setAlreadyShown(false); - currentBreakPoints.clear(); - } - - public void update(float playerProgress) { - playerProgress *= 2f; - currentBreakPoints.clear(); - - boolean newBreakPoints = false; - for (BreakPoint breakPoint : breakPoints) { - if (!breakPoint.isAlreadyShown() && playerProgress >= breakPoint.getX() && breakPoint - .getX() != BreakPoint.NONE_X) { - breakPoint.setAlreadyShown(true); - currentBreakPoints.add(breakPoint); - newBreakPoints = true; - } - } - if (newBreakPoints) - showCurrentBreakPoints(); - } - - private void showCurrentBreakPoints() { - gameActivity.showTutorial(currentBreakPoints); - } - - public void showAllBreakPoints() { - gameActivity.showTutorial(breakPoints); - } - +/* + * Created by Julian Mutter on 7/10/18 3:58 PM + * Copyright (c) 2018. All rights reserved. + * Last modified 7/10/18 3:54 PM + * + */ + +package de.frajul.endlessroll.main.tutorial; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; + +import de.frajul.endlessroll.main.GameActivity; + +/** + * Created by Julian on 14.03.2017. + */ + +public class Tutorial { + + private GameActivity gameActivity; + private List breakPoints; + protected List currentBreakPoints = new ArrayList<>(); + + public Tutorial(GameActivity gameActivity, BreakPoint... breakPoints) { + this.gameActivity = gameActivity; + this.breakPoints = Arrays.asList(breakPoints); + } + + public void setFinished() { + for (BreakPoint breakPoint : breakPoints) + breakPoint.setAlreadyShown(true); + currentBreakPoints.clear(); + } + + public void reset() { + for (BreakPoint breakPoint : breakPoints) + breakPoint.setAlreadyShown(false); + currentBreakPoints.clear(); + } + + public void update(float playerProgress) { + playerProgress *= 2f; + currentBreakPoints.clear(); + + boolean newBreakPoints = false; + for (BreakPoint breakPoint : breakPoints) { + if (!breakPoint.isAlreadyShown() && playerProgress >= breakPoint.getX() && breakPoint + .getX() != BreakPoint.NONE_X) { + breakPoint.setAlreadyShown(true); + currentBreakPoints.add(breakPoint); + newBreakPoints = true; + } + } + if (newBreakPoints) + showCurrentBreakPoints(); + } + + private void showCurrentBreakPoints() { + gameActivity.showTutorial(currentBreakPoints); + } + + public void showAllBreakPoints() { + gameActivity.showTutorial(breakPoints); + } + } \ 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 index fa959b6..7010029 100644 --- a/app/src/main/java/de/frajul/endlessroll/main/tutorial/TutorialManager.java +++ b/app/src/main/java/de/frajul/endlessroll/main/tutorial/TutorialManager.java @@ -1,99 +1,99 @@ -/* - * Created by Julian Mutter on 7/10/18 3:58 PM - * Copyright (c) 2018. All rights reserved. - * Last modified 7/10/18 3:54 PM - * - */ - -package de.frajul.endlessroll.main.tutorial; - -import de.frajul.endlessroll.R; -import de.frajul.endlessroll.entities.tools.ToolType; -import de.frajul.endlessroll.levels.Level; -import de.frajul.endlessroll.main.GameActivity; -import de.frajul.endlessroll.user.User; -import de.frajul.endlessroll.views.TopBar; - -/** - * Created by Julian on 17.03.2017. - */ - -public class TutorialManager { - - private final int WELCOME_TUTORIAL_LEVEL = 1; - private final int IN_AIR_TUTORIAL_LEVEL = 5; - private final int SWITCH_TOOLS_TUTORIAL_LEVEL = 11; - - private Tutorial welcomeTutorial; - private Tutorial inAirTutorial; - private Tutorial toToolShopTutorial; - private ToolShopTutorial toolShopTutorial; - private Tutorial switchToolsTutorial; - - public TutorialManager(GameActivity gameActivity) { - welcomeTutorial = new Tutorial(gameActivity, - 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)); - inAirTutorial = new Tutorial(gameActivity, - 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)); - toToolShopTutorial = new Tutorial(gameActivity, - new BreakPoint(BreakPoint.NONE_X, R.string.tutorial_leveled_up_to_toolshop, - R.drawable.tutorial_to_toolshop)); - toolShopTutorial = new ToolShopTutorial(gameActivity, - new BreakPoint(BreakPoint.NONE_X, R.string.tutorial_spring_equipped, -1)); - switchToolsTutorial = new Tutorial(gameActivity, - new BreakPoint(0, R.string.tutorial_switch_tools_two_neccessary, -1), - new BreakPoint(0, R.string.tutorial_switch_tools_switch, - R.drawable.tutorial_switch_tools)); - } - - public void update(Level level, float playerX) { - if (level.getPackId() == 1 && level.getId() == WELCOME_TUTORIAL_LEVEL && !level - .isFinished()) { - welcomeTutorial.update(playerX); - } else if (level.getPackId() == 1 && level.getId() == IN_AIR_TUTORIAL_LEVEL && !level - .isFinished()) { - inAirTutorial.update(playerX); - } else if (level.getPackId() == 1 && level.getId() == SWITCH_TOOLS_TUTORIAL_LEVEL && !level - .isFinished()) { - switchToolsTutorial.update(playerX); - } - } - - public void onLvUp(User user) { - boolean springUnlockedOnLvUp = user.getLevelUpBounties() - .getLevelToolIsUnlocked(ToolType.SPRING) == user.getLevel(); - if (springUnlockedOnLvUp) { - toToolShopTutorial.showAllBreakPoints(); - } - } - - public void onTopBarUpdate(TopBar topBar) { - toolShopTutorial.onTopBarUpdate(topBar); - } - - public void resetGameTutorials() { - welcomeTutorial.reset(); - inAirTutorial.reset(); - switchToolsTutorial.reset(); - } - - public void resetAllTutorials() { - welcomeTutorial.reset(); - inAirTutorial.reset(); - switchToolsTutorial.reset(); - toToolShopTutorial.reset(); - toolShopTutorial.setFinished(false); - } - - public ToolShopTutorial getToolShopTutorial() { - return toolShopTutorial; - } -} +/* + * Created by Julian Mutter on 7/10/18 3:58 PM + * Copyright (c) 2018. All rights reserved. + * Last modified 7/10/18 3:54 PM + * + */ + +package de.frajul.endlessroll.main.tutorial; + +import de.frajul.endlessroll.R; +import de.frajul.endlessroll.entities.tools.ToolType; +import de.frajul.endlessroll.levels.Level; +import de.frajul.endlessroll.main.GameActivity; +import de.frajul.endlessroll.user.User; +import de.frajul.endlessroll.views.TopBar; + +/** + * Created by Julian on 17.03.2017. + */ + +public class TutorialManager { + + private final int WELCOME_TUTORIAL_LEVEL = 1; + private final int IN_AIR_TUTORIAL_LEVEL = 5; + private final int SWITCH_TOOLS_TUTORIAL_LEVEL = 11; + + private Tutorial welcomeTutorial; + private Tutorial inAirTutorial; + private Tutorial toToolShopTutorial; + private ToolShopTutorial toolShopTutorial; + private Tutorial switchToolsTutorial; + + public TutorialManager(GameActivity gameActivity) { + welcomeTutorial = new Tutorial(gameActivity, + 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)); + inAirTutorial = new Tutorial(gameActivity, + 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)); + toToolShopTutorial = new Tutorial(gameActivity, + new BreakPoint(BreakPoint.NONE_X, R.string.tutorial_leveled_up_to_toolshop, + R.drawable.tutorial_to_toolshop)); + toolShopTutorial = new ToolShopTutorial(gameActivity, + new BreakPoint(BreakPoint.NONE_X, R.string.tutorial_spring_equipped, -1)); + switchToolsTutorial = new Tutorial(gameActivity, + new BreakPoint(0, R.string.tutorial_switch_tools_two_neccessary, -1), + new BreakPoint(0, R.string.tutorial_switch_tools_switch, + R.drawable.tutorial_switch_tools)); + } + + public void update(Level level, float playerX) { + if (level.getPackId() == 1 && level.getId() == WELCOME_TUTORIAL_LEVEL && !level + .isFinished()) { + welcomeTutorial.update(playerX); + } else if (level.getPackId() == 1 && level.getId() == IN_AIR_TUTORIAL_LEVEL && !level + .isFinished()) { + inAirTutorial.update(playerX); + } else if (level.getPackId() == 1 && level.getId() == SWITCH_TOOLS_TUTORIAL_LEVEL && !level + .isFinished()) { + switchToolsTutorial.update(playerX); + } + } + + public void onLvUp(User user) { + boolean springUnlockedOnLvUp = user.getLevelUpBounties() + .getLevelToolIsUnlocked(ToolType.SPRING) == user.getLevel(); + if (springUnlockedOnLvUp) { + toToolShopTutorial.showAllBreakPoints(); + } + } + + public void onTopBarUpdate(TopBar topBar) { + toolShopTutorial.onTopBarUpdate(topBar); + } + + public void resetGameTutorials() { + welcomeTutorial.reset(); + inAirTutorial.reset(); + switchToolsTutorial.reset(); + } + + public void resetAllTutorials() { + welcomeTutorial.reset(); + inAirTutorial.reset(); + switchToolsTutorial.reset(); + toToolShopTutorial.reset(); + toolShopTutorial.setFinished(false); + } + + 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 index 26f1d29..e47ed71 100644 --- a/app/src/main/java/de/frajul/endlessroll/main/tutorial/TutorialView.java +++ b/app/src/main/java/de/frajul/endlessroll/main/tutorial/TutorialView.java @@ -1,92 +1,92 @@ -/* - * Created by Julian Mutter on 7/10/18 3:58 PM - * Copyright (c) 2018. All rights reserved. - * Last modified 7/10/18 3:54 PM - * - */ - -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 int currentBreakPoint = 0; - 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 = layout.findViewById(R.id.tutorial_text_view); - textView.setTypeface(activity.getTypeface()); - imageView = layout.findViewById(R.id.tutorial_image_view); - } - - public View getLayout() { - return layout; - } - - public void show(List breakPoints) { - this.breakPoints = breakPoints; - currentBreakPoint = 0; - if (!breakPoints.isEmpty()) - showCurrentBreakPoint(); - } - - public boolean isShowingTutorial() { - return layout.getVisibility() == View.VISIBLE; - } - - private void showCurrentBreakPoint() { - int textId = breakPoints.get(currentBreakPoint).getTextId(); - int imageId = breakPoints.get(currentBreakPoint).getImageId(); - - if (textId == -1) - textView.setVisibility(View.GONE); - else { - textView.setVisibility(View.VISIBLE); - textView.setText(textId); - } - if (imageId == -1) - imageView.setVisibility(View.GONE); - else { - imageView.setVisibility(View.VISIBLE); - imageView.setImageResource(imageId); - } - layout.setVisibility(View.VISIBLE); - } - - @Override - public void onClick(View v) { - currentBreakPoint++; - if (breakPoints.size() <= currentBreakPoint) { - layout.setVisibility(View.GONE); - activity.onTutorialViewHidden(); - } else { - showCurrentBreakPoint(); - } - } -} +/* + * Created by Julian Mutter on 7/10/18 3:58 PM + * Copyright (c) 2018. All rights reserved. + * Last modified 7/10/18 3:54 PM + * + */ + +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 int currentBreakPoint = 0; + 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 = layout.findViewById(R.id.tutorial_text_view); + textView.setTypeface(activity.getTypeface()); + imageView = layout.findViewById(R.id.tutorial_image_view); + } + + public View getLayout() { + return layout; + } + + public void show(List breakPoints) { + this.breakPoints = breakPoints; + currentBreakPoint = 0; + if (!breakPoints.isEmpty()) + showCurrentBreakPoint(); + } + + public boolean isShowingTutorial() { + return layout.getVisibility() == View.VISIBLE; + } + + private void showCurrentBreakPoint() { + int textId = breakPoints.get(currentBreakPoint).getTextId(); + int imageId = breakPoints.get(currentBreakPoint).getImageId(); + + if (textId == -1) + textView.setVisibility(View.GONE); + else { + textView.setVisibility(View.VISIBLE); + textView.setText(textId); + } + if (imageId == -1) + imageView.setVisibility(View.GONE); + else { + imageView.setVisibility(View.VISIBLE); + imageView.setImageResource(imageId); + } + layout.setVisibility(View.VISIBLE); + } + + @Override + public void onClick(View v) { + currentBreakPoint++; + if (breakPoints.size() <= currentBreakPoint) { + layout.setVisibility(View.GONE); + activity.onTutorialViewHidden(); + } else { + showCurrentBreakPoint(); + } + } +} diff --git a/app/src/main/java/de/frajul/endlessroll/rendering/Fbo.java b/app/src/main/java/de/frajul/endlessroll/rendering/Fbo.java index e443421..eea64fd 100644 --- a/app/src/main/java/de/frajul/endlessroll/rendering/Fbo.java +++ b/app/src/main/java/de/frajul/endlessroll/rendering/Fbo.java @@ -1,54 +1,54 @@ -/* - * Created by Julian Mutter on 7/10/18 3:58 PM - * Copyright (c) 2018. All rights reserved. - * Last modified 7/10/18 3:54 PM - * - */ - -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; - } -} +/* + * Created by Julian Mutter on 7/10/18 3:58 PM + * Copyright (c) 2018. All rights reserved. + * Last modified 7/10/18 3:54 PM + * + */ + +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 index 799d344..4789f49 100644 --- a/app/src/main/java/de/frajul/endlessroll/rendering/Lock.java +++ b/app/src/main/java/de/frajul/endlessroll/rendering/Lock.java @@ -1,29 +1,29 @@ -/* - * Created by Julian Mutter on 7/10/18 3:58 PM - * Copyright (c) 2018. All rights reserved. - * Last modified 7/10/18 3:54 PM - * - */ - -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(); - } +/* + * Created by Julian Mutter on 7/10/18 3:58 PM + * Copyright (c) 2018. All rights reserved. + * Last modified 7/10/18 3:54 PM + * + */ + +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 index 45c9ee1..fd4dc11 100644 --- a/app/src/main/java/de/frajul/endlessroll/rendering/MatrixCreator.java +++ b/app/src/main/java/de/frajul/endlessroll/rendering/MatrixCreator.java @@ -1,69 +1,69 @@ -/* - * Created by Julian Mutter on 7/10/18 3:58 PM - * Copyright (c) 2018. All rights reserved. - * Last modified 7/10/18 3:54 PM - * - */ - -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[] createGuiModelViewProjectionMatrix() { - float[] mvpMatrix = new float[16]; - float[] projectionMatrix = new float[16]; - float[] viewMatrix = new float[16]; - - float ratio = width / height; - Matrix.frustumM(projectionMatrix, 0, -ratio, ratio, -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[] 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; - } - -} +/* + * Created by Julian Mutter on 7/10/18 3:58 PM + * Copyright (c) 2018. All rights reserved. + * Last modified 7/10/18 3:54 PM + * + */ + +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[] createGuiModelViewProjectionMatrix() { + float[] mvpMatrix = new float[16]; + float[] projectionMatrix = new float[16]; + float[] viewMatrix = new float[16]; + + float ratio = width / height; + Matrix.frustumM(projectionMatrix, 0, -ratio, ratio, -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[] 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 index 1b15047..cffd080 100644 --- a/app/src/main/java/de/frajul/endlessroll/rendering/Quad.java +++ b/app/src/main/java/de/frajul/endlessroll/rendering/Quad.java @@ -1,56 +1,56 @@ -/* - * Created by Julian Mutter on 7/10/18 3:58 PM - * Copyright (c) 2018. All rights reserved. - * Last modified 7/10/18 3:54 PM - * - */ - -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); - } - -} +/* + * Created by Julian Mutter on 7/10/18 3:58 PM + * Copyright (c) 2018. All rights reserved. + * Last modified 7/10/18 3:54 PM + * + */ + +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 index 3abd49f..74548b1 100644 --- a/app/src/main/java/de/frajul/endlessroll/rendering/Rendering.java +++ b/app/src/main/java/de/frajul/endlessroll/rendering/Rendering.java @@ -1,56 +1,56 @@ -/* - * Created by Julian Mutter on 7/10/18 3:58 PM - * Copyright (c) 2018. All rights reserved. - * Last modified 7/10/18 3:54 PM - * - */ - -package de.frajul.endlessroll.rendering; - -import android.content.Context; - -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; -import de.frajul.endlessroll.rendering.renderer.GameRenderer; - -/** - * Created by Julian on 26.11.2015. - */ -public abstract class Rendering { - - protected S scene; - private GameActivity gameActivity; - private boolean alreadyInitiated = false; - - public Rendering(GameActivity gameActivity, GameRenderer gameRenderer) { - this.gameActivity = gameActivity; - gameRenderer.addRenderTarget(this); - } - - 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 abstract void onTouch(float x, float y); - - public void setScreenSize(int width, int height) { - if (scene != null) - scene.setScreenSize(width, height); - } - - public Scene getScene() { - return scene; - } - - public Context getContext() { - return gameActivity; - } - -} +/* + * Created by Julian Mutter on 7/10/18 3:58 PM + * Copyright (c) 2018. All rights reserved. + * Last modified 7/10/18 3:54 PM + * + */ + +package de.frajul.endlessroll.rendering; + +import android.content.Context; + +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; +import de.frajul.endlessroll.rendering.renderer.GameRenderer; + +/** + * Created by Julian on 26.11.2015. + */ +public abstract class Rendering { + + protected S scene; + private GameActivity gameActivity; + private boolean alreadyInitiated = false; + + public Rendering(GameActivity gameActivity, GameRenderer gameRenderer) { + this.gameActivity = gameActivity; + gameRenderer.addRenderTarget(this); + } + + 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 abstract void onTouch(float x, float y); + + public void setScreenSize(int width, int height) { + if (scene != null) + scene.setScreenSize(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 index 95703bb..4601702 100644 --- a/app/src/main/java/de/frajul/endlessroll/rendering/renderer/GameRenderer.java +++ b/app/src/main/java/de/frajul/endlessroll/rendering/renderer/GameRenderer.java @@ -1,277 +1,277 @@ -/* - * Created by Julian Mutter on 7/10/18 3:58 PM - * Copyright (c) 2018. All rights reserved. - * Last modified 7/10/18 3:55 PM - * - */ - -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.BackgroundLayer; -import de.frajul.endlessroll.entities.Entity; -import de.frajul.endlessroll.entities.Obstacle; -import de.frajul.endlessroll.entities.guis.Gui; -import de.frajul.endlessroll.entities.guis.Progressbar; -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.GuiShader; -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 final Object currentRenderingLock = new Object(); - 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 GuiShader guiShader; - 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 addRenderTarget(Rendering renderTarget) { - renderTargets.add(renderTarget); - } - - public void setCurrentRendering(Rendering currentRendering) { - synchronized (currentRenderingLock) { - this.currentRendering = currentRendering; - } - } - - public void onTouch(float x, float y) { - synchronized (currentRenderingLock) { - if (currentRendering != null) - currentRendering.onTouch(x, y); - } - } - - @Override - public void onSurfaceCreated(GL10 gl, EGLConfig config) { - GameLog.d("onSurfaceCreated"); - GLES20.glClearColor(1, 0, 1, 1.0f); - gl.glEnable(GL10.GL_BLEND); - gl.glBlendFunc(GL10.GL_SRC_ALPHA, GL10.GL_ONE_MINUS_SRC_ALPHA); - - try { - particleRenderer.createShader(); - entityShader = new EntityShader(activity); - obstacleShader = new ObstacleShader(activity); - terrainShader = new TerrainShader(activity); - simpleShader = new SimpleShader(activity); - guiShader = new GuiShader(activity); - texturePack = new TexturePack(activity); - timer = new Timer(); - } catch (Exception e) { - activity.onException(e); - } - for (Rendering renderTarget : renderTargets) - renderTarget.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 renderTarget : renderTargets) - renderTarget.setScreenSize(width, height); - activity.onSurfaceChanged(); - } - - @Override - public synchronized void onDrawFrame(GL10 gl) { - timer.update(); - synchronized (currentRenderingLock) { - 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); - - //TODO: change mvp matrix for non moving entites / change type of these entities (colorFilter, background) - if(currentRendering.getScene().getColorFilter() != null) { - entityShader.start(); - entityShader.loadMVPMatrix(matrixCreator, new Camera()); - renderEntity(gl, currentRendering.getScene().getColorFilter()); - entityShader.stop(); - } - - renderGuis(gl, scene.getGuis()); - } - } - } - - private void renderGuis(GL10 gl, List guis) { - guiShader.start(); - guiShader.loadMVPMatrix(matrixCreator); - synchronized (guis) { - for (Gui gui : guis) - renderGui(gl, gui); - } - guiShader.stop(); - } - - private void renderGui(GL10 gl, Gui gui) { - if (!gui.isVisible()) - return; - - gl.glActiveTexture(GL10.GL_TEXTURE0); - gl.glBindTexture(GL10.GL_TEXTURE_2D, gui.getTexture().getId()); - guiShader.loadTransformationMatrix(matrixCreator, gui); - guiShader.loadCustomColor(gui.getColor()); - guiShader.loadAlpha(gui.getAlpha()); - guiShader.loadRoundValue(gui.getRoundValue()); - if (gui instanceof Progressbar) - guiShader.loadVisibleAmount(((Progressbar) gui).getProgress()); - else - guiShader.loadVisibleAmount(0); - quad.draw(); - } - - private void renderBackground(GL10 gl, Scene scene) { - entityShader.start(); - entityShader.loadMVPMatrix(matrixCreator, scene.getCamera()); - List layers = scene.getBackground().getLayers(); - synchronized (layers) { - for (BackgroundLayer layer : layers) { - synchronized (layer) { - for (Entity backgroundPart : layer) - renderEntity(gl, backgroundPart); - } - } - } - entityShader.stop(); - } - - private void renderObstacles(GL10 gl, Scene scene) { - List obstacles = scene.getObstacles(); - obstacleShader.start(); - obstacleShader.loadMVPMatrix(matrixCreator, scene.getCamera()); - obstacleShader.loadBombSelected(scene.getBombSelected().get()); - 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()); - obstacleShader.loadBombExplosionState(obstacle.getBombExplosionState()); - 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.loadColor(entity.getColor()); - entityShader.loadAlpha(entity.getAlpha()); - entityShader.loadTextureAtlasInfos(entity.getTexture(), entity.getTextureAtlasIndex()); - entityShader.loadTexCoordScaling(entity.calcTexScaleX(), entity.calcTexScaleY()); - quad.draw(); - } - - private void renderTileList(GL10 gl, TileList tileList, Scene scene) { - terrainShader.start(); - terrainShader.loadMVPMatrix(matrixCreator, scene.getCamera()); - terrainShader.loadIsEndlessTileList(tileList.isEndless()); - synchronized (tileList) { - for (Tile tile : tileList) { - gl.glActiveTexture(GL10.GL_TEXTURE0); - gl.glBindTexture(GL10.GL_TEXTURE_2D, tile.getTexture().getId()); - terrainShader.loadTransformationMatrix(matrixCreator, tile); - terrainShader.loadGridColumnCount(tile.getGridColumnCount()); - 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(); - } - - -} +/* + * Created by Julian Mutter on 7/10/18 3:58 PM + * Copyright (c) 2018. All rights reserved. + * Last modified 7/10/18 3:55 PM + * + */ + +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.BackgroundLayer; +import de.frajul.endlessroll.entities.Entity; +import de.frajul.endlessroll.entities.Obstacle; +import de.frajul.endlessroll.entities.guis.Gui; +import de.frajul.endlessroll.entities.guis.Progressbar; +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.GuiShader; +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 final Object currentRenderingLock = new Object(); + 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 GuiShader guiShader; + 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 addRenderTarget(Rendering renderTarget) { + renderTargets.add(renderTarget); + } + + public void setCurrentRendering(Rendering currentRendering) { + synchronized (currentRenderingLock) { + this.currentRendering = currentRendering; + } + } + + public void onTouch(float x, float y) { + synchronized (currentRenderingLock) { + if (currentRendering != null) + currentRendering.onTouch(x, y); + } + } + + @Override + public void onSurfaceCreated(GL10 gl, EGLConfig config) { + GameLog.d("onSurfaceCreated"); + GLES20.glClearColor(1, 0, 1, 1.0f); + gl.glEnable(GL10.GL_BLEND); + gl.glBlendFunc(GL10.GL_SRC_ALPHA, GL10.GL_ONE_MINUS_SRC_ALPHA); + + try { + particleRenderer.createShader(); + entityShader = new EntityShader(activity); + obstacleShader = new ObstacleShader(activity); + terrainShader = new TerrainShader(activity); + simpleShader = new SimpleShader(activity); + guiShader = new GuiShader(activity); + texturePack = new TexturePack(activity); + timer = new Timer(); + } catch (Exception e) { + activity.onException(e); + } + for (Rendering renderTarget : renderTargets) + renderTarget.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 renderTarget : renderTargets) + renderTarget.setScreenSize(width, height); + activity.onSurfaceChanged(); + } + + @Override + public synchronized void onDrawFrame(GL10 gl) { + timer.update(); + synchronized (currentRenderingLock) { + 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); + + //TODO: change mvp matrix for non moving entites / change type of these entities (colorFilter, background) + if(currentRendering.getScene().getColorFilter() != null) { + entityShader.start(); + entityShader.loadMVPMatrix(matrixCreator, new Camera()); + renderEntity(gl, currentRendering.getScene().getColorFilter()); + entityShader.stop(); + } + + renderGuis(gl, scene.getGuis()); + } + } + } + + private void renderGuis(GL10 gl, List guis) { + guiShader.start(); + guiShader.loadMVPMatrix(matrixCreator); + synchronized (guis) { + for (Gui gui : guis) + renderGui(gl, gui); + } + guiShader.stop(); + } + + private void renderGui(GL10 gl, Gui gui) { + if (!gui.isVisible()) + return; + + gl.glActiveTexture(GL10.GL_TEXTURE0); + gl.glBindTexture(GL10.GL_TEXTURE_2D, gui.getTexture().getId()); + guiShader.loadTransformationMatrix(matrixCreator, gui); + guiShader.loadCustomColor(gui.getColor()); + guiShader.loadAlpha(gui.getAlpha()); + guiShader.loadRoundValue(gui.getRoundValue()); + if (gui instanceof Progressbar) + guiShader.loadVisibleAmount(((Progressbar) gui).getProgress()); + else + guiShader.loadVisibleAmount(0); + quad.draw(); + } + + private void renderBackground(GL10 gl, Scene scene) { + entityShader.start(); + entityShader.loadMVPMatrix(matrixCreator, scene.getCamera()); + List layers = scene.getBackground().getLayers(); + synchronized (layers) { + for (BackgroundLayer layer : layers) { + synchronized (layer) { + for (Entity backgroundPart : layer) + renderEntity(gl, backgroundPart); + } + } + } + entityShader.stop(); + } + + private void renderObstacles(GL10 gl, Scene scene) { + List obstacles = scene.getObstacles(); + obstacleShader.start(); + obstacleShader.loadMVPMatrix(matrixCreator, scene.getCamera()); + obstacleShader.loadBombSelected(scene.getBombSelected().get()); + 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()); + obstacleShader.loadBombExplosionState(obstacle.getBombExplosionState()); + 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.loadColor(entity.getColor()); + entityShader.loadAlpha(entity.getAlpha()); + entityShader.loadTextureAtlasInfos(entity.getTexture(), entity.getTextureAtlasIndex()); + entityShader.loadTexCoordScaling(entity.calcTexScaleX(), entity.calcTexScaleY()); + quad.draw(); + } + + private void renderTileList(GL10 gl, TileList tileList, Scene scene) { + terrainShader.start(); + terrainShader.loadMVPMatrix(matrixCreator, scene.getCamera()); + terrainShader.loadIsEndlessTileList(tileList.isEndless()); + synchronized (tileList) { + for (Tile tile : tileList) { + gl.glActiveTexture(GL10.GL_TEXTURE0); + gl.glBindTexture(GL10.GL_TEXTURE_2D, tile.getTexture().getId()); + terrainShader.loadTransformationMatrix(matrixCreator, tile); + terrainShader.loadGridColumnCount(tile.getGridColumnCount()); + 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 index c398ea5..c7b2611 100644 --- a/app/src/main/java/de/frajul/endlessroll/rendering/renderer/ParticleRenderer.java +++ b/app/src/main/java/de/frajul/endlessroll/rendering/renderer/ParticleRenderer.java @@ -1,112 +1,112 @@ -/* - * Created by Julian Mutter on 7/10/18 3:58 PM - * Copyright (c) 2018. All rights reserved. - * Last modified 7/10/18 3:54 PM - * - */ - -package de.frajul.endlessroll.rendering.renderer; - -import android.content.Context; -import android.opengl.GLES20; - -import javax.microedition.khronos.opengles.GL10; - -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.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; - -/** - * 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 createShader() 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(); - } -} +/* + * Created by Julian Mutter on 7/10/18 3:58 PM + * Copyright (c) 2018. All rights reserved. + * Last modified 7/10/18 3:54 PM + * + */ + +package de.frajul.endlessroll.rendering.renderer; + +import android.content.Context; +import android.opengl.GLES20; + +import javax.microedition.khronos.opengles.GL10; + +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.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; + +/** + * 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 createShader() 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 index ee14d42..24a1181 100644 --- a/app/src/main/java/de/frajul/endlessroll/rendering/shader/EntityShader.java +++ b/app/src/main/java/de/frajul/endlessroll/rendering/shader/EntityShader.java @@ -1,79 +1,79 @@ -/* - * Created by Julian Mutter on 7/10/18 3:58 PM - * Copyright (c) 2018. All rights reserved. - * Last modified 7/10/18 3:54 PM - * - */ - -package de.frajul.endlessroll.rendering.shader; - -import android.content.Context; -import android.opengl.GLES20; - -import de.frajul.endlessroll.data.Color3f; -import de.frajul.endlessroll.data.Vector; -import de.frajul.endlessroll.entities.Entity; -import de.frajul.endlessroll.entities.textures.Texture; -import de.frajul.endlessroll.main.game.Camera; -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; - private int location_hasColor; - private int location_color; - - 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"); - location_hasColor = super.getUniformLocation("hasColor"); - location_color = super.getUniformLocation("color"); - } - - 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); - } - - public void loadColor(Color3f color){ - GLES20.glUniform1f(location_hasColor, color == null ? 0 : 1); - if(color != null) - GLES20.glUniform3f(location_color, color.getR(), color.getG(), color.getB()); - } - -} +/* + * Created by Julian Mutter on 7/10/18 3:58 PM + * Copyright (c) 2018. All rights reserved. + * Last modified 7/10/18 3:54 PM + * + */ + +package de.frajul.endlessroll.rendering.shader; + +import android.content.Context; +import android.opengl.GLES20; + +import de.frajul.endlessroll.data.Color3f; +import de.frajul.endlessroll.data.Vector; +import de.frajul.endlessroll.entities.Entity; +import de.frajul.endlessroll.entities.textures.Texture; +import de.frajul.endlessroll.main.game.Camera; +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; + private int location_hasColor; + private int location_color; + + 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"); + location_hasColor = super.getUniformLocation("hasColor"); + location_color = super.getUniformLocation("color"); + } + + 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); + } + + public void loadColor(Color3f color){ + GLES20.glUniform1f(location_hasColor, color == null ? 0 : 1); + if(color != null) + GLES20.glUniform3f(location_color, color.getR(), color.getG(), color.getB()); + } + +} diff --git a/app/src/main/java/de/frajul/endlessroll/rendering/shader/GuiShader.java b/app/src/main/java/de/frajul/endlessroll/rendering/shader/GuiShader.java index e3ae322..15787ea 100644 --- a/app/src/main/java/de/frajul/endlessroll/rendering/shader/GuiShader.java +++ b/app/src/main/java/de/frajul/endlessroll/rendering/shader/GuiShader.java @@ -1,74 +1,74 @@ -/* - * Created by Julian Mutter on 7/10/18 3:58 PM - * Copyright (c) 2018. All rights reserved. - * Last modified 7/10/18 3:54 PM - * - */ - -package de.frajul.endlessroll.rendering.shader; - -import android.content.Context; -import android.opengl.GLES20; - -import de.frajul.endlessroll.data.Color3f; -import de.frajul.endlessroll.data.Color4f; -import de.frajul.endlessroll.entities.Entity; -import de.frajul.endlessroll.rendering.MatrixCreator; - -/** - * Created by Julian on 10.08.2016. - */ -public class GuiShader extends ShaderProgram { - - private int location_mvpMatrix; - private int location_transformationMatrix; - private int location_useCustomColor; - private int location_color; - private int location_alpha; - private int location_roundValue; - private int location_visibleAmount; - - public GuiShader(Context context) throws Exception { - super(context, "shader/guiVertexShader.glsl", "shader/guiFragmentShader.glsl"); - } - - @Override - protected void loadUniformLocations() { - location_mvpMatrix = super.getUniformLocation("mvpMatrix"); - location_transformationMatrix = super.getUniformLocation("transformationMatrix"); - location_useCustomColor = super.getUniformLocation("useCustomColor"); - location_color = super.getUniformLocation("color"); - location_alpha = super.getUniformLocation("alpha"); - location_roundValue = super.getUniformLocation("roundValue"); - location_visibleAmount = super.getUniformLocation("visibleAmount"); - } - - public void loadMVPMatrix(MatrixCreator matrixCreator) { - float[] mvpMatrix = matrixCreator.createGuiModelViewProjectionMatrix(); - 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 loadCustomColor(Color3f color) { - GLES20.glUniform1f(location_useCustomColor, color == null ? 0 : 1); - if (color != null) - GLES20.glUniform3f(location_color, color.getR(), color.getG(), color.getB()); - } - - public void loadAlpha(float alpha) { - GLES20.glUniform1f(location_alpha, alpha); - } - - public void loadRoundValue(float roundValue) { - GLES20.glUniform1f(location_roundValue, roundValue); - } - - public void loadVisibleAmount(float visibleAmount) { - GLES20.glUniform1f(location_visibleAmount, visibleAmount); - } - -} +/* + * Created by Julian Mutter on 7/10/18 3:58 PM + * Copyright (c) 2018. All rights reserved. + * Last modified 7/10/18 3:54 PM + * + */ + +package de.frajul.endlessroll.rendering.shader; + +import android.content.Context; +import android.opengl.GLES20; + +import de.frajul.endlessroll.data.Color3f; +import de.frajul.endlessroll.data.Color4f; +import de.frajul.endlessroll.entities.Entity; +import de.frajul.endlessroll.rendering.MatrixCreator; + +/** + * Created by Julian on 10.08.2016. + */ +public class GuiShader extends ShaderProgram { + + private int location_mvpMatrix; + private int location_transformationMatrix; + private int location_useCustomColor; + private int location_color; + private int location_alpha; + private int location_roundValue; + private int location_visibleAmount; + + public GuiShader(Context context) throws Exception { + super(context, "shader/guiVertexShader.glsl", "shader/guiFragmentShader.glsl"); + } + + @Override + protected void loadUniformLocations() { + location_mvpMatrix = super.getUniformLocation("mvpMatrix"); + location_transformationMatrix = super.getUniformLocation("transformationMatrix"); + location_useCustomColor = super.getUniformLocation("useCustomColor"); + location_color = super.getUniformLocation("color"); + location_alpha = super.getUniformLocation("alpha"); + location_roundValue = super.getUniformLocation("roundValue"); + location_visibleAmount = super.getUniformLocation("visibleAmount"); + } + + public void loadMVPMatrix(MatrixCreator matrixCreator) { + float[] mvpMatrix = matrixCreator.createGuiModelViewProjectionMatrix(); + 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 loadCustomColor(Color3f color) { + GLES20.glUniform1f(location_useCustomColor, color == null ? 0 : 1); + if (color != null) + GLES20.glUniform3f(location_color, color.getR(), color.getG(), color.getB()); + } + + public void loadAlpha(float alpha) { + GLES20.glUniform1f(location_alpha, alpha); + } + + public void loadRoundValue(float roundValue) { + GLES20.glUniform1f(location_roundValue, roundValue); + } + + public void loadVisibleAmount(float visibleAmount) { + GLES20.glUniform1f(location_visibleAmount, visibleAmount); + } + +} diff --git a/app/src/main/java/de/frajul/endlessroll/rendering/shader/ObstacleShader.java b/app/src/main/java/de/frajul/endlessroll/rendering/shader/ObstacleShader.java index eb0e519..5f125ba 100644 --- a/app/src/main/java/de/frajul/endlessroll/rendering/shader/ObstacleShader.java +++ b/app/src/main/java/de/frajul/endlessroll/rendering/shader/ObstacleShader.java @@ -1,90 +1,90 @@ -/* - * Created by Julian Mutter on 7/10/18 3:58 PM - * Copyright (c) 2018. All rights reserved. - * Last modified 7/10/18 3:54 PM - * - */ - -package de.frajul.endlessroll.rendering.shader; - -import android.content.Context; -import android.opengl.GLES20; - -import de.frajul.endlessroll.data.Vector; -import de.frajul.endlessroll.entities.Entity; -import de.frajul.endlessroll.entities.textures.Texture; -import de.frajul.endlessroll.main.game.Camera; -import de.frajul.endlessroll.rendering.MatrixCreator; - -/** - * Created by Julian on 10.08.2016. - */ -public class ObstacleShader extends ShaderProgram { - - private int location_mvpMatrix; - private int location_transformationMatrix; - private int location_alpha; - private int location_texAtlasSize; - private int location_gridSize; - private int location_deadly; - private int location_floating; - private int location_bombSelected; - private int location_bombExplosionState; - - public ObstacleShader(Context context) throws Exception { - super(context, "shader/entityVertexShader.glsl", "shader/obstacleFragmentShader.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_gridSize = super.getUniformLocation("gridSize"); - location_deadly = super.getUniformLocation("deadly"); - location_floating = super.getUniformLocation("floating"); - location_bombSelected = super.getUniformLocation("bombSelected"); - location_bombExplosionState = super.getUniformLocation("bombExplosionState"); - } - - 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) { - GLES20.glUniform2f(location_texAtlasSize, texture.getAtlasWidth(), - texture.getAtlasHeight()); - } - - public void loadGridSize(Vector gridSize) { - GLES20.glUniform2f(location_gridSize, gridSize.getX(), gridSize.getY()); - } - - public void loadDeadly(boolean deadly) { - GLES20.glUniform1f(location_deadly, deadly ? 1 : 0); - } - - public void loadFloating(boolean floating) { - GLES20.glUniform1f(location_floating, floating ? 1 : 0); - } - - public void loadBombSelected(boolean bombSelected) { - GLES20.glUniform1f(location_bombSelected, bombSelected ? 1 : 0); - } - - public void loadBombExplosionState(int explosionState) { - GLES20.glUniform1f(location_bombExplosionState, explosionState); - } - -} +/* + * Created by Julian Mutter on 7/10/18 3:58 PM + * Copyright (c) 2018. All rights reserved. + * Last modified 7/10/18 3:54 PM + * + */ + +package de.frajul.endlessroll.rendering.shader; + +import android.content.Context; +import android.opengl.GLES20; + +import de.frajul.endlessroll.data.Vector; +import de.frajul.endlessroll.entities.Entity; +import de.frajul.endlessroll.entities.textures.Texture; +import de.frajul.endlessroll.main.game.Camera; +import de.frajul.endlessroll.rendering.MatrixCreator; + +/** + * Created by Julian on 10.08.2016. + */ +public class ObstacleShader extends ShaderProgram { + + private int location_mvpMatrix; + private int location_transformationMatrix; + private int location_alpha; + private int location_texAtlasSize; + private int location_gridSize; + private int location_deadly; + private int location_floating; + private int location_bombSelected; + private int location_bombExplosionState; + + public ObstacleShader(Context context) throws Exception { + super(context, "shader/entityVertexShader.glsl", "shader/obstacleFragmentShader.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_gridSize = super.getUniformLocation("gridSize"); + location_deadly = super.getUniformLocation("deadly"); + location_floating = super.getUniformLocation("floating"); + location_bombSelected = super.getUniformLocation("bombSelected"); + location_bombExplosionState = super.getUniformLocation("bombExplosionState"); + } + + 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) { + GLES20.glUniform2f(location_texAtlasSize, texture.getAtlasWidth(), + texture.getAtlasHeight()); + } + + public void loadGridSize(Vector gridSize) { + GLES20.glUniform2f(location_gridSize, gridSize.getX(), gridSize.getY()); + } + + public void loadDeadly(boolean deadly) { + GLES20.glUniform1f(location_deadly, deadly ? 1 : 0); + } + + public void loadFloating(boolean floating) { + GLES20.glUniform1f(location_floating, floating ? 1 : 0); + } + + public void loadBombSelected(boolean bombSelected) { + GLES20.glUniform1f(location_bombSelected, bombSelected ? 1 : 0); + } + + public void loadBombExplosionState(int explosionState) { + GLES20.glUniform1f(location_bombExplosionState, explosionState); + } + +} 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 index 6c13175..5e7d66b 100644 --- a/app/src/main/java/de/frajul/endlessroll/rendering/shader/ParticleShader.java +++ b/app/src/main/java/de/frajul/endlessroll/rendering/shader/ParticleShader.java @@ -1,58 +1,58 @@ -/* - * Created by Julian Mutter on 7/10/18 3:58 PM - * Copyright (c) 2018. All rights reserved. - * Last modified 7/10/18 3:54 PM - * - */ - -package de.frajul.endlessroll.rendering.shader; - -import android.content.Context; -import android.opengl.GLES20; - -import de.frajul.endlessroll.data.Color3f; -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(Color3f color) { - GLES20.glUniform3f(location_color, color.getR(), color.getG(), color.getB()); - } - -} +/* + * Created by Julian Mutter on 7/10/18 3:58 PM + * Copyright (c) 2018. All rights reserved. + * Last modified 7/10/18 3:54 PM + * + */ + +package de.frajul.endlessroll.rendering.shader; + +import android.content.Context; +import android.opengl.GLES20; + +import de.frajul.endlessroll.data.Color3f; +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(Color3f 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 index 36219ae..9005766 100644 --- a/app/src/main/java/de/frajul/endlessroll/rendering/shader/ShaderProgram.java +++ b/app/src/main/java/de/frajul/endlessroll/rendering/shader/ShaderProgram.java @@ -1,96 +1,96 @@ -/* - * Created by Julian Mutter on 7/10/18 3:58 PM - * Copyright (c) 2018. All rights reserved. - * Last modified 7/10/18 3:54 PM - * - */ - -package de.frajul.endlessroll.rendering.shader; - -import android.content.Context; -import android.opengl.GLES20; - -import java.io.BufferedReader; -import java.io.InputStream; -import java.io.InputStreamReader; - -import de.frajul.endlessroll.main.GameLog; - -/** - * 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); - } - } - -} +/* + * Created by Julian Mutter on 7/10/18 3:58 PM + * Copyright (c) 2018. All rights reserved. + * Last modified 7/10/18 3:54 PM + * + */ + +package de.frajul.endlessroll.rendering.shader; + +import android.content.Context; +import android.opengl.GLES20; + +import java.io.BufferedReader; +import java.io.InputStream; +import java.io.InputStreamReader; + +import de.frajul.endlessroll.main.GameLog; + +/** + * 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 index cf8cf89..cf80911 100644 --- a/app/src/main/java/de/frajul/endlessroll/rendering/shader/SimpleShader.java +++ b/app/src/main/java/de/frajul/endlessroll/rendering/shader/SimpleShader.java @@ -1,24 +1,24 @@ -/* - * Created by Julian Mutter on 7/10/18 3:58 PM - * Copyright (c) 2018. All rights reserved. - * Last modified 7/10/18 3:54 PM - * - */ - -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() { - } -} +/* + * Created by Julian Mutter on 7/10/18 3:58 PM + * Copyright (c) 2018. All rights reserved. + * Last modified 7/10/18 3:54 PM + * + */ + +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 index 71aced4..cf53d9e 100644 --- a/app/src/main/java/de/frajul/endlessroll/rendering/shader/TerrainShader.java +++ b/app/src/main/java/de/frajul/endlessroll/rendering/shader/TerrainShader.java @@ -1,57 +1,57 @@ -/* - * Created by Julian Mutter on 7/10/18 3:58 PM - * Copyright (c) 2018. All rights reserved. - * Last modified 7/10/18 3:54 PM - * - */ - -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; - private int location_gridColumnCount; - private int location_isEndlessTileList; - - public TerrainShader(Context context) throws Exception { - super(context, "shader/entityVertexShader.glsl", "shader/terrainFragmentShader.glsl"); - } - - @Override - protected void loadUniformLocations() { - location_mvpMatrix = super.getUniformLocation("mvpMatrix"); - location_transformationMatrix = super.getUniformLocation("transformationMatrix"); - location_gridColumnCount = super.getUniformLocation("gridColumnCount"); - location_isEndlessTileList = super.getUniformLocation("isEndlessTileList"); - } - - public void loadGridColumnCount(int gridColumnCount) { - GLES20.glUniform1f(location_gridColumnCount, gridColumnCount); - } - - public void loadIsEndlessTileList(boolean endless) { - GLES20.glUniform1f(location_isEndlessTileList, endless ? 1f : 0f); - } - - 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); - } - -} +/* + * Created by Julian Mutter on 7/10/18 3:58 PM + * Copyright (c) 2018. All rights reserved. + * Last modified 7/10/18 3:54 PM + * + */ + +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; + private int location_gridColumnCount; + private int location_isEndlessTileList; + + public TerrainShader(Context context) throws Exception { + super(context, "shader/entityVertexShader.glsl", "shader/terrainFragmentShader.glsl"); + } + + @Override + protected void loadUniformLocations() { + location_mvpMatrix = super.getUniformLocation("mvpMatrix"); + location_transformationMatrix = super.getUniformLocation("transformationMatrix"); + location_gridColumnCount = super.getUniformLocation("gridColumnCount"); + location_isEndlessTileList = super.getUniformLocation("isEndlessTileList"); + } + + public void loadGridColumnCount(int gridColumnCount) { + GLES20.glUniform1f(location_gridColumnCount, gridColumnCount); + } + + public void loadIsEndlessTileList(boolean endless) { + GLES20.glUniform1f(location_isEndlessTileList, endless ? 1f : 0f); + } + + 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 index a39009c..b414195 100644 --- a/app/src/main/java/de/frajul/endlessroll/sounds/Music.java +++ b/app/src/main/java/de/frajul/endlessroll/sounds/Music.java @@ -1,90 +1,90 @@ -/* - * Created by Julian Mutter on 7/10/18 3:58 PM - * Copyright (c) 2018. All rights reserved. - * Last modified 7/10/18 3:54 PM - * - */ - -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 started; - private boolean muted; - private boolean paused; - private boolean activityPaused; - - public Music(ExceptionHandler handler, Context context, int id) { - this.handler = handler; - player = MediaPlayer.create(context, id); - } - - public void start() { - started = true; - paused = false; - onStateChanged(); - } - - public void stop() { - started = false; - onStateChanged(); - reset(); - } - - public void setMuted(boolean muted) { - this.muted = muted; - onStateChanged(); - } - - public void pause() { - paused = true; - onStateChanged(); - } - - public void activityPause() { - activityPaused = true; - onStateChanged(); - } - - public void activityResume() { - activityPaused = false; - onStateChanged(); - } - - private void onStateChanged() { - try { - boolean newState = started && !muted && !paused && !activityPaused; - if (player.isPlaying()) { - if (!newState) - player.pause(); - } else { - if (newState) - player.start(); - } - } catch (Exception e) { - handler.onException(e); - } - } - - public void reset() { - try { - player.seekTo(0); - } catch (Exception e) { - handler.onException(e); - } - } - - public MediaPlayer getPlayer() { - return player; - } -} +/* + * Created by Julian Mutter on 7/10/18 3:58 PM + * Copyright (c) 2018. All rights reserved. + * Last modified 7/10/18 3:54 PM + * + */ + +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 started; + private boolean muted; + private boolean paused; + private boolean activityPaused; + + public Music(ExceptionHandler handler, Context context, int id) { + this.handler = handler; + player = MediaPlayer.create(context, id); + } + + public void start() { + started = true; + paused = false; + onStateChanged(); + } + + public void stop() { + started = false; + onStateChanged(); + reset(); + } + + public void setMuted(boolean muted) { + this.muted = muted; + onStateChanged(); + } + + public void pause() { + paused = true; + onStateChanged(); + } + + public void activityPause() { + activityPaused = true; + onStateChanged(); + } + + public void activityResume() { + activityPaused = false; + onStateChanged(); + } + + private void onStateChanged() { + try { + boolean newState = started && !muted && !paused && !activityPaused; + if (player.isPlaying()) { + if (!newState) + player.pause(); + } else { + if (newState) + player.start(); + } + } catch (Exception e) { + handler.onException(e); + } + } + + public void reset() { + try { + player.seekTo(0); + } catch (Exception e) { + handler.onException(e); + } + } + + public MediaPlayer getPlayer() { + return player; + } +} diff --git a/app/src/main/java/de/frajul/endlessroll/sounds/Sound.java b/app/src/main/java/de/frajul/endlessroll/sounds/Sound.java index 0b88147..4ff53b8 100644 --- a/app/src/main/java/de/frajul/endlessroll/sounds/Sound.java +++ b/app/src/main/java/de/frajul/endlessroll/sounds/Sound.java @@ -1,62 +1,62 @@ -/* - * Created by Julian Mutter on 7/10/18 3:58 PM - * Copyright (c) 2018. All rights reserved. - * Last modified 7/10/18 3:54 PM - * - */ - -package de.frajul.endlessroll.sounds; - -/** - * Created by Julian on 17.01.2018. - */ - -public class Sound { - - private int soundId; - private float volume; - private boolean looping; - - public Sound(int soundId) { - this(soundId, 1.0f); - } - - public Sound(int soundId, float volume) { - this(soundId, volume, false); - } - - public Sound(int soundId, boolean looping) { - this(soundId, 1.0f, looping); - } - - public Sound(int soundId, float volume, boolean looping) { - this.soundId = soundId; - this.volume = volume; - this.looping = looping; - } - - public int getSoundId() { - return soundId; - } - - public void setSoundId(int soundId) { - this.soundId = soundId; - } - - public float getVolume() { - return volume; - } - - public void setVolume(float volume) { - this.volume = volume; - } - - public boolean isLooping() { - return looping; - } - - public void setLooping(boolean looping) { - this.looping = looping; - } - -} +/* + * Created by Julian Mutter on 7/10/18 3:58 PM + * Copyright (c) 2018. All rights reserved. + * Last modified 7/10/18 3:54 PM + * + */ + +package de.frajul.endlessroll.sounds; + +/** + * Created by Julian on 17.01.2018. + */ + +public class Sound { + + private int soundId; + private float volume; + private boolean looping; + + public Sound(int soundId) { + this(soundId, 1.0f); + } + + public Sound(int soundId, float volume) { + this(soundId, volume, false); + } + + public Sound(int soundId, boolean looping) { + this(soundId, 1.0f, looping); + } + + public Sound(int soundId, float volume, boolean looping) { + this.soundId = soundId; + this.volume = volume; + this.looping = looping; + } + + public int getSoundId() { + return soundId; + } + + public void setSoundId(int soundId) { + this.soundId = soundId; + } + + public float getVolume() { + return volume; + } + + public void setVolume(float volume) { + this.volume = volume; + } + + public boolean isLooping() { + return looping; + } + + public void setLooping(boolean looping) { + this.looping = looping; + } + +} diff --git a/app/src/main/java/de/frajul/endlessroll/sounds/SoundManager.java b/app/src/main/java/de/frajul/endlessroll/sounds/SoundManager.java index c2a57f2..8f37440 100644 --- a/app/src/main/java/de/frajul/endlessroll/sounds/SoundManager.java +++ b/app/src/main/java/de/frajul/endlessroll/sounds/SoundManager.java @@ -1,204 +1,204 @@ -/* - * Created by Julian Mutter on 7/10/18 3:58 PM - * Copyright (c) 2018. All rights reserved. - * Last modified 7/10/18 3:54 PM - * - */ - -package de.frajul.endlessroll.sounds; - -import android.content.Context; -import android.media.AudioManager; -import android.media.SoundPool; -import android.support.annotation.RawRes; - -import java.util.ArrayList; -import java.util.Collections; -import java.util.List; -import java.util.Random; - -import de.frajul.endlessroll.R; -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 Random random; - private SoundPool soundPool; - private boolean soundsMuted; - private boolean musicMuted; - - public final Music menuMusic; - private List gameMusicList = new ArrayList<>(); - private int currentGameMusicIndex = 0; - - public final Sound goalSound; - public final Sound dieSound; - public final Sound collectStarSound; - public final Sound collectEnergySound; - public final Sound countdownSoundSingle; - public final Sound countdownSoundLast; - public final Sound explosionSound; - public final Sound fireworkSound; - public final Sound stasisSound; - public final Sound mushroomSound; - public final Sound springSound; - public final Sound placeToolSound; - public final Sound magnetSound; - - private final List allStartedStreams = Collections.synchronizedList(new ArrayList()); - - public SoundManager(GameActivity gameActivity) { - this.context = gameActivity; - random = new Random(); - soundPool = new SoundPool(10, AudioManager.STREAM_MUSIC, 0); - - menuMusic = new Music(gameActivity, gameActivity, R.raw.music_menu); - menuMusic.getPlayer().setLooping(true); - gameMusicList.add(createGameMusic(gameActivity, R.raw.music_game_1)); - gameMusicList.add(createGameMusic(gameActivity, R.raw.music_game_2)); - gameMusicList.add(createGameMusic(gameActivity, R.raw.music_game_3)); - - goalSound = new Sound(loadSound(R.raw.sound_goal)); - dieSound = new Sound(loadSound(R.raw.sound_die)); - collectStarSound = new Sound(loadSound(R.raw.sound_collect_star), .7f); - collectEnergySound = new Sound(loadSound(R.raw.sound_collect_energy)); - countdownSoundSingle = new Sound(loadSound(R.raw.sound_countdown_single), .9f); - countdownSoundLast = new Sound(loadSound(R.raw.sound_countdown_last), .8f); - explosionSound = new Sound(loadSound(R.raw.sound_explosion), 2); - fireworkSound = new Sound(loadSound(R.raw.sound_firework)); - stasisSound = new Sound(loadSound(R.raw.sound_stasis), 1.3f, true); - mushroomSound = new Sound(loadSound(R.raw.sound_mushroom)); - springSound = new Sound(loadSound(R.raw.sound_spring)); - placeToolSound = new Sound(loadSound(R.raw.sound_place_tool), 1.5f); - magnetSound = new Sound(loadSound(R.raw.sound_magnet), 0.8f, true); - } - - private Music createGameMusic(GameActivity gameActivity, @RawRes int musicId) { - Music gameMusic = new Music(gameActivity, context, musicId); - gameMusic.getPlayer().setLooping(true); - return gameMusic; - } - - public void randomizeCurrentGameMusic() { - getCurrentGameMusic().stop(); - int randomIndex = random.nextInt(gameMusicList.size()); - currentGameMusicIndex = randomIndex; - } - - public Music getCurrentGameMusic() { - return gameMusicList.get(currentGameMusicIndex); - } - - public void setSoundsMuted(boolean soundsMuted) { - this.soundsMuted = soundsMuted; - synchronized (allStartedStreams) { - for (SoundStream stream : allStartedStreams) { - float systemVolume = getSystemVolume(); - soundPool.setVolume(stream.getId(), systemVolume * stream.getModifiedVolume(), - systemVolume * stream.getModifiedVolume()); - } - } - } - - public void setMusicMuted(boolean musicMuted) { - this.musicMuted = musicMuted; - menuMusic.setMuted(musicMuted); - for (Music gameMusic : gameMusicList) - gameMusic.setMuted(musicMuted); - } - - public boolean isSoundsMuted() { - return soundsMuted; - } - - public boolean isMusicMuted() { - return musicMuted; - } - - public void activityPause() { - soundPool.autoPause(); - for (Music gameMusic : gameMusicList) - gameMusic.activityPause(); - menuMusic.activityPause(); - } - - public void activityResume() { - soundPool.autoResume(); - for (Music gameMusic : gameMusicList) - gameMusic.activityResume(); - menuMusic.activityResume(); - } - - public void pauseAllSounds() { - synchronized (allStartedStreams) { - for (SoundStream stream : allStartedStreams) - soundPool.pause(stream.getId()); - } - } - - public void resumeAllSounds() { - synchronized (allStartedStreams) { - for (SoundStream stream : allStartedStreams) - soundPool.resume(stream.getId()); - } - } - - public void destroy() { - menuMusic.getPlayer().release(); - for (Music gameMusic : gameMusicList) - gameMusic.getPlayer().release(); - soundPool.release(); - } - - public int loadSound(int id) { - int sound = soundPool.load(context, id, 1); - return sound; - } - - public SoundStream playSound(Sound sound) { - float systemVolume = getSystemVolume(); - int streamId = soundPool.play(sound.getSoundId(), systemVolume * sound.getVolume(), - systemVolume * sound.getVolume(), 1, sound.isLooping() ? -1 : 0, 1); - if (streamId == 0) - GameLog.e("SoundId: " + sound.getSoundId() + " cannot be played"); - SoundStream soundStream = new SoundStream(streamId, sound.getVolume()); - allStartedStreams.add(soundStream); - return soundStream; - } - - public void onStreamVolumeChanged(SoundStream stream) { - if (!soundsMuted) { - float systemVolume = getSystemVolume(); - soundPool.setVolume(stream.getId(), systemVolume * stream.getModifiedVolume(), - systemVolume * stream.getModifiedVolume()); - } - } - - public void stopSound(SoundStream stream) { - allStartedStreams.remove(stream); - soundPool.stop(stream.getId()); - } - - public void stopAllSounds() { - synchronized (allStartedStreams) { - for (SoundStream stream : allStartedStreams) - soundPool.stop(stream.getId()); - } - allStartedStreams.clear(); - } - - private float getSystemVolume() { - if (soundsMuted) - return 0; - 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; - } - -} +/* + * Created by Julian Mutter on 7/10/18 3:58 PM + * Copyright (c) 2018. All rights reserved. + * Last modified 7/10/18 3:54 PM + * + */ + +package de.frajul.endlessroll.sounds; + +import android.content.Context; +import android.media.AudioManager; +import android.media.SoundPool; +import android.support.annotation.RawRes; + +import java.util.ArrayList; +import java.util.Collections; +import java.util.List; +import java.util.Random; + +import de.frajul.endlessroll.R; +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 Random random; + private SoundPool soundPool; + private boolean soundsMuted; + private boolean musicMuted; + + public final Music menuMusic; + private List gameMusicList = new ArrayList<>(); + private int currentGameMusicIndex = 0; + + public final Sound goalSound; + public final Sound dieSound; + public final Sound collectStarSound; + public final Sound collectEnergySound; + public final Sound countdownSoundSingle; + public final Sound countdownSoundLast; + public final Sound explosionSound; + public final Sound fireworkSound; + public final Sound stasisSound; + public final Sound mushroomSound; + public final Sound springSound; + public final Sound placeToolSound; + public final Sound magnetSound; + + private final List allStartedStreams = Collections.synchronizedList(new ArrayList()); + + public SoundManager(GameActivity gameActivity) { + this.context = gameActivity; + random = new Random(); + soundPool = new SoundPool(10, AudioManager.STREAM_MUSIC, 0); + + menuMusic = new Music(gameActivity, gameActivity, R.raw.music_menu); + menuMusic.getPlayer().setLooping(true); + gameMusicList.add(createGameMusic(gameActivity, R.raw.music_game_1)); + gameMusicList.add(createGameMusic(gameActivity, R.raw.music_game_2)); + gameMusicList.add(createGameMusic(gameActivity, R.raw.music_game_3)); + + goalSound = new Sound(loadSound(R.raw.sound_goal)); + dieSound = new Sound(loadSound(R.raw.sound_die)); + collectStarSound = new Sound(loadSound(R.raw.sound_collect_star), .7f); + collectEnergySound = new Sound(loadSound(R.raw.sound_collect_energy)); + countdownSoundSingle = new Sound(loadSound(R.raw.sound_countdown_single), .9f); + countdownSoundLast = new Sound(loadSound(R.raw.sound_countdown_last), .8f); + explosionSound = new Sound(loadSound(R.raw.sound_explosion), 2); + fireworkSound = new Sound(loadSound(R.raw.sound_firework)); + stasisSound = new Sound(loadSound(R.raw.sound_stasis), 1.3f, true); + mushroomSound = new Sound(loadSound(R.raw.sound_mushroom)); + springSound = new Sound(loadSound(R.raw.sound_spring)); + placeToolSound = new Sound(loadSound(R.raw.sound_place_tool), 1.5f); + magnetSound = new Sound(loadSound(R.raw.sound_magnet), 0.8f, true); + } + + private Music createGameMusic(GameActivity gameActivity, @RawRes int musicId) { + Music gameMusic = new Music(gameActivity, context, musicId); + gameMusic.getPlayer().setLooping(true); + return gameMusic; + } + + public void randomizeCurrentGameMusic() { + getCurrentGameMusic().stop(); + int randomIndex = random.nextInt(gameMusicList.size()); + currentGameMusicIndex = randomIndex; + } + + public Music getCurrentGameMusic() { + return gameMusicList.get(currentGameMusicIndex); + } + + public void setSoundsMuted(boolean soundsMuted) { + this.soundsMuted = soundsMuted; + synchronized (allStartedStreams) { + for (SoundStream stream : allStartedStreams) { + float systemVolume = getSystemVolume(); + soundPool.setVolume(stream.getId(), systemVolume * stream.getModifiedVolume(), + systemVolume * stream.getModifiedVolume()); + } + } + } + + public void setMusicMuted(boolean musicMuted) { + this.musicMuted = musicMuted; + menuMusic.setMuted(musicMuted); + for (Music gameMusic : gameMusicList) + gameMusic.setMuted(musicMuted); + } + + public boolean isSoundsMuted() { + return soundsMuted; + } + + public boolean isMusicMuted() { + return musicMuted; + } + + public void activityPause() { + soundPool.autoPause(); + for (Music gameMusic : gameMusicList) + gameMusic.activityPause(); + menuMusic.activityPause(); + } + + public void activityResume() { + soundPool.autoResume(); + for (Music gameMusic : gameMusicList) + gameMusic.activityResume(); + menuMusic.activityResume(); + } + + public void pauseAllSounds() { + synchronized (allStartedStreams) { + for (SoundStream stream : allStartedStreams) + soundPool.pause(stream.getId()); + } + } + + public void resumeAllSounds() { + synchronized (allStartedStreams) { + for (SoundStream stream : allStartedStreams) + soundPool.resume(stream.getId()); + } + } + + public void destroy() { + menuMusic.getPlayer().release(); + for (Music gameMusic : gameMusicList) + gameMusic.getPlayer().release(); + soundPool.release(); + } + + public int loadSound(int id) { + int sound = soundPool.load(context, id, 1); + return sound; + } + + public SoundStream playSound(Sound sound) { + float systemVolume = getSystemVolume(); + int streamId = soundPool.play(sound.getSoundId(), systemVolume * sound.getVolume(), + systemVolume * sound.getVolume(), 1, sound.isLooping() ? -1 : 0, 1); + if (streamId == 0) + GameLog.e("SoundId: " + sound.getSoundId() + " cannot be played"); + SoundStream soundStream = new SoundStream(streamId, sound.getVolume()); + allStartedStreams.add(soundStream); + return soundStream; + } + + public void onStreamVolumeChanged(SoundStream stream) { + if (!soundsMuted) { + float systemVolume = getSystemVolume(); + soundPool.setVolume(stream.getId(), systemVolume * stream.getModifiedVolume(), + systemVolume * stream.getModifiedVolume()); + } + } + + public void stopSound(SoundStream stream) { + allStartedStreams.remove(stream); + soundPool.stop(stream.getId()); + } + + public void stopAllSounds() { + synchronized (allStartedStreams) { + for (SoundStream stream : allStartedStreams) + soundPool.stop(stream.getId()); + } + allStartedStreams.clear(); + } + + private float getSystemVolume() { + if (soundsMuted) + return 0; + 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; + } + +} diff --git a/app/src/main/java/de/frajul/endlessroll/sounds/SoundStream.java b/app/src/main/java/de/frajul/endlessroll/sounds/SoundStream.java index 46cebcc..a136346 100644 --- a/app/src/main/java/de/frajul/endlessroll/sounds/SoundStream.java +++ b/app/src/main/java/de/frajul/endlessroll/sounds/SoundStream.java @@ -1,44 +1,44 @@ -/* - * Created by Julian Mutter on 7/10/18 3:58 PM - * Copyright (c) 2018. All rights reserved. - * Last modified 7/10/18 3:54 PM - * - */ - -package de.frajul.endlessroll.sounds; - -/** - * Created by Julian on 19.01.2018. - */ - -public class SoundStream { - - private int id; - private float soundVolume; - private float currentVolumeModifier; - - public SoundStream(int id, float soundVolume) { - this.id = id; - this.soundVolume = soundVolume; - } - - public float getModifiedVolume() { - return soundVolume * currentVolumeModifier; - } - - public int getId() { - return id; - } - - public float getSoundVolume() { - return soundVolume; - } - - public float getCurrentVolumeModifier() { - return currentVolumeModifier; - } - - public void setCurrentVolumeModifier(float currentVolumeModifier) { - this.currentVolumeModifier = currentVolumeModifier; - } -} +/* + * Created by Julian Mutter on 7/10/18 3:58 PM + * Copyright (c) 2018. All rights reserved. + * Last modified 7/10/18 3:54 PM + * + */ + +package de.frajul.endlessroll.sounds; + +/** + * Created by Julian on 19.01.2018. + */ + +public class SoundStream { + + private int id; + private float soundVolume; + private float currentVolumeModifier; + + public SoundStream(int id, float soundVolume) { + this.id = id; + this.soundVolume = soundVolume; + } + + public float getModifiedVolume() { + return soundVolume * currentVolumeModifier; + } + + public int getId() { + return id; + } + + public float getSoundVolume() { + return soundVolume; + } + + public float getCurrentVolumeModifier() { + return currentVolumeModifier; + } + + public void setCurrentVolumeModifier(float currentVolumeModifier) { + this.currentVolumeModifier = currentVolumeModifier; + } +} diff --git a/app/src/main/java/de/frajul/endlessroll/sqlDatabase/DatabaseAdapter.java b/app/src/main/java/de/frajul/endlessroll/sqlDatabase/DatabaseAdapter.java index 08b31f6..96be926 100644 --- a/app/src/main/java/de/frajul/endlessroll/sqlDatabase/DatabaseAdapter.java +++ b/app/src/main/java/de/frajul/endlessroll/sqlDatabase/DatabaseAdapter.java @@ -1,95 +1,95 @@ -/* - * Created by Julian Mutter on 7/10/18 3:58 PM - * Copyright (c) 2018. All rights reserved. - * Last modified 7/10/18 3:54 PM - * - */ - -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); - } - - -} +/* + * Created by Julian Mutter on 7/10/18 3:58 PM + * Copyright (c) 2018. All rights reserved. + * Last modified 7/10/18 3:54 PM + * + */ + +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 index 77e4345..09b8132 100644 --- a/app/src/main/java/de/frajul/endlessroll/sqlDatabase/MyDatabase.java +++ b/app/src/main/java/de/frajul/endlessroll/sqlDatabase/MyDatabase.java @@ -1,148 +1,148 @@ -/* - * Created by Julian Mutter on 7/10/18 3:58 PM - * Copyright (c) 2018. All rights reserved. - * Last modified 7/10/18 3:54 PM - * - */ - -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.LevelManager; -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 writeAllLevelAndPackStatus(LevelManager levelManager) { - for (LevelPack levelPack : levelManager) { - writeLevelPackLocked(levelPack); - for (Level level : levelPack.getLevels()) { - writeLevelProgress(level); - } - } - } - - 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(); - } - -} +/* + * Created by Julian Mutter on 7/10/18 3:58 PM + * Copyright (c) 2018. All rights reserved. + * Last modified 7/10/18 3:54 PM + * + */ + +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.LevelManager; +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 writeAllLevelAndPackStatus(LevelManager levelManager) { + for (LevelPack levelPack : levelManager) { + writeLevelPackLocked(levelPack); + for (Level level : levelPack.getLevels()) { + writeLevelProgress(level); + } + } + } + + 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 index acf3de1..67e464d 100644 --- a/app/src/main/java/de/frajul/endlessroll/sqlDatabase/SQLTable.java +++ b/app/src/main/java/de/frajul/endlessroll/sqlDatabase/SQLTable.java @@ -1,45 +1,45 @@ -/* - * Created by Julian Mutter on 7/10/18 3:58 PM - * Copyright (c) 2018. All rights reserved. - * Last modified 7/10/18 3:54 PM - * - */ - -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; - } +/* + * Created by Julian Mutter on 7/10/18 3:58 PM + * Copyright (c) 2018. All rights reserved. + * Last modified 7/10/18 3:54 PM + * + */ + +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 index 946121d..8a2b467 100644 --- a/app/src/main/java/de/frajul/endlessroll/sqlDatabase/SQLTableColumn.java +++ b/app/src/main/java/de/frajul/endlessroll/sqlDatabase/SQLTableColumn.java @@ -1,55 +1,55 @@ -/* - * Created by Julian Mutter on 7/10/18 3:58 PM - * Copyright (c) 2018. All rights reserved. - * Last modified 7/10/18 3:54 PM - * - */ - -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(); - } +/* + * Created by Julian Mutter on 7/10/18 3:58 PM + * Copyright (c) 2018. All rights reserved. + * Last modified 7/10/18 3:54 PM + * + */ + +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 index ba2224b..d0db0cf 100644 --- a/app/src/main/java/de/frajul/endlessroll/sqlDatabase/SQLTablePrimaryKeyColumn.java +++ b/app/src/main/java/de/frajul/endlessroll/sqlDatabase/SQLTablePrimaryKeyColumn.java @@ -1,28 +1,28 @@ -/* - * Created by Julian Mutter on 7/10/18 3:58 PM - * Copyright (c) 2018. All rights reserved. - * Last modified 7/10/18 3:54 PM - * - */ - -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(); - } -} +/* + * Created by Julian Mutter on 7/10/18 3:58 PM + * Copyright (c) 2018. All rights reserved. + * Last modified 7/10/18 3:54 PM + * + */ + +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/LevelUpBounties.java b/app/src/main/java/de/frajul/endlessroll/user/LevelUpBounties.java index e0ee48f..5dd22a9 100644 --- a/app/src/main/java/de/frajul/endlessroll/user/LevelUpBounties.java +++ b/app/src/main/java/de/frajul/endlessroll/user/LevelUpBounties.java @@ -1,73 +1,73 @@ -/* - * Created by Julian Mutter on 7/10/18 3:58 PM - * Copyright (c) 2018. All rights reserved. - * Last modified 7/10/18 3:54 PM - * - */ - -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(5, 0, null, true)); - super.put(4, new LevelBounty(5, 1, ToolType.BOMB, false)); - super.put(5, new LevelBounty(5, 1, ToolType.MAGNET, false)); - super.put(6, new LevelBounty(5, 2, null, true)); - super.put(7, new LevelBounty(5, 1, ToolType.STASIS, false)); - super.put(8, new LevelBounty(2, 2, ToolType.POWER_MUSHROOM, false)); - super.put(9, new LevelBounty(2, 3, null, true)); - super.put(10, new LevelBounty(2, 1, null, false)); - super.put(11, new LevelBounty(2, 2, null, false)); - super.put(12, new LevelBounty(2, 4, null, false)); - 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; - } - -} +/* + * Created by Julian Mutter on 7/10/18 3:58 PM + * Copyright (c) 2018. All rights reserved. + * Last modified 7/10/18 3:54 PM + * + */ + +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(5, 0, null, true)); + super.put(4, new LevelBounty(5, 1, ToolType.BOMB, false)); + super.put(5, new LevelBounty(5, 1, ToolType.MAGNET, false)); + super.put(6, new LevelBounty(5, 2, null, true)); + super.put(7, new LevelBounty(5, 1, ToolType.STASIS, false)); + super.put(8, new LevelBounty(2, 2, ToolType.POWER_MUSHROOM, false)); + super.put(9, new LevelBounty(2, 3, null, true)); + super.put(10, new LevelBounty(2, 1, null, false)); + super.put(11, new LevelBounty(2, 2, null, false)); + super.put(12, new LevelBounty(2, 4, null, false)); + 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 index 9dffb52..0eaa19f 100644 --- a/app/src/main/java/de/frajul/endlessroll/user/ToolSlotSettings.java +++ b/app/src/main/java/de/frajul/endlessroll/user/ToolSlotSettings.java @@ -1,56 +1,56 @@ -/* - * Created by Julian Mutter on 7/10/18 3:58 PM - * Copyright (c) 2018. All rights reserved. - * Last modified 7/10/18 3:54 PM - * - */ - -package de.frajul.endlessroll.user; - -import java.util.ArrayList; - -import de.frajul.endlessroll.entities.tools.ToolSlot; -import de.frajul.endlessroll.entities.tools.ToolType; - -/** - * Created by Julian on 15.07.2016. - */ -public class ToolSlotSettings extends ArrayList { - - public ToolSlotSettings(String slot1, String slot2, String slot3, String slot4, int slotsLocked) { - 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; - } - -} +/* + * Created by Julian Mutter on 7/10/18 3:58 PM + * Copyright (c) 2018. All rights reserved. + * Last modified 7/10/18 3:54 PM + * + */ + +package de.frajul.endlessroll.user; + +import java.util.ArrayList; + +import de.frajul.endlessroll.entities.tools.ToolSlot; +import de.frajul.endlessroll.entities.tools.ToolType; + +/** + * Created by Julian on 15.07.2016. + */ +public class ToolSlotSettings extends ArrayList { + + public ToolSlotSettings(String slot1, String slot2, String slot3, String slot4, int slotsLocked) { + 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 index 8b8ac73..db66b6a 100644 --- a/app/src/main/java/de/frajul/endlessroll/user/User.java +++ b/app/src/main/java/de/frajul/endlessroll/user/User.java @@ -1,143 +1,143 @@ -/* - * Created by Julian Mutter on 7/10/18 3:58 PM - * Copyright (c) 2018. All rights reserved. - * Last modified 7/10/18 3:54 PM - * - */ - -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 { - void onLvUp(int level, boolean showLvUpMessage); - } - - 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; - - 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; - levelUpBounties.loadAllForLevel(level); - 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, true); - } - - public void onEnergyCollected() { - increaseEnergyCount(1, true); - } - - public void increaseEnergyCount(int energyCount, boolean gainEp) { - this.energyCount += energyCount; - if (gainEp) - gainEp(ENERGY_EP * energyCount, true); - } - - public void gainLvFinishedEp() { - gainEp(LV_DONE_EP, true); - } - - public void gainEp(int amount, boolean showLvUpMessage) { - ep += amount; - while (ep >= 100) { - ep -= 100; - levelUp(showLvUpMessage); - } - } - - private void levelUp(boolean showLvUpMessage) { - 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, showLvUpMessage); - } - - 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; - } - - //CHEAT - public void setLevel(int level) { - this.level = level; - } - - public void setStarCount(int starCount) { - this.starCount = starCount; - } -} +/* + * Created by Julian Mutter on 7/10/18 3:58 PM + * Copyright (c) 2018. All rights reserved. + * Last modified 7/10/18 3:54 PM + * + */ + +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 { + void onLvUp(int level, boolean showLvUpMessage); + } + + 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; + + 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; + levelUpBounties.loadAllForLevel(level); + 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, true); + } + + public void onEnergyCollected() { + increaseEnergyCount(1, true); + } + + public void increaseEnergyCount(int energyCount, boolean gainEp) { + this.energyCount += energyCount; + if (gainEp) + gainEp(ENERGY_EP * energyCount, true); + } + + public void gainLvFinishedEp() { + gainEp(LV_DONE_EP, true); + } + + public void gainEp(int amount, boolean showLvUpMessage) { + ep += amount; + while (ep >= 100) { + ep -= 100; + levelUp(showLvUpMessage); + } + } + + private void levelUp(boolean showLvUpMessage) { + 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, showLvUpMessage); + } + + 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; + } + + //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/BombErrorMessage.java b/app/src/main/java/de/frajul/endlessroll/views/BombErrorMessage.java index a7ba64d..ed27971 100644 --- a/app/src/main/java/de/frajul/endlessroll/views/BombErrorMessage.java +++ b/app/src/main/java/de/frajul/endlessroll/views/BombErrorMessage.java @@ -1,63 +1,63 @@ -/* - * Created by Julian Mutter on 7/10/18 3:58 PM - * Copyright (c) 2018. All rights reserved. - * Last modified 7/10/18 3:54 PM - * - */ - -package de.frajul.endlessroll.views; - -import android.view.LayoutInflater; -import android.view.animation.Animation; -import android.view.animation.AnimationUtils; -import android.widget.TextView; - -import de.frajul.endlessroll.R; -import de.frajul.endlessroll.main.GameActivity; - -/** - * Created by Julian on 18.03.2018. - */ - -public class BombErrorMessage implements Animation.AnimationListener { - - private TextView view; - private Animation animation; - private boolean animationRunning = false; - - public BombErrorMessage(GameActivity gameActivity) { - LayoutInflater inflater = LayoutInflater.from(gameActivity); - view = (TextView) inflater.inflate(R.layout.bomb_error_message, null); - view.setTypeface(gameActivity.getTypeface()); - animation = AnimationUtils.loadAnimation(gameActivity, R.anim.fade_out_accelerating); - animation.setAnimationListener(this); - } - - public void show(float xPos, float yPos) { - animationRunning = true; - view.setX(xPos - (float) view.getWidth() / 2); - view.setY(yPos); - view.startAnimation(animation); - } - - @Override - public void onAnimationEnd(Animation animation) { - animationRunning = false; - } - - public TextView getView() { - return view; - } - - public boolean isAnimationRunning() { - return animationRunning; - } - - @Override - public void onAnimationStart(Animation animation) { - } - - @Override - public void onAnimationRepeat(Animation animation) { - } -} +/* + * Created by Julian Mutter on 7/10/18 3:58 PM + * Copyright (c) 2018. All rights reserved. + * Last modified 7/10/18 3:54 PM + * + */ + +package de.frajul.endlessroll.views; + +import android.view.LayoutInflater; +import android.view.animation.Animation; +import android.view.animation.AnimationUtils; +import android.widget.TextView; + +import de.frajul.endlessroll.R; +import de.frajul.endlessroll.main.GameActivity; + +/** + * Created by Julian on 18.03.2018. + */ + +public class BombErrorMessage implements Animation.AnimationListener { + + private TextView view; + private Animation animation; + private boolean animationRunning = false; + + public BombErrorMessage(GameActivity gameActivity) { + LayoutInflater inflater = LayoutInflater.from(gameActivity); + view = (TextView) inflater.inflate(R.layout.bomb_error_message, null); + view.setTypeface(gameActivity.getTypeface()); + animation = AnimationUtils.loadAnimation(gameActivity, R.anim.fade_out_accelerating); + animation.setAnimationListener(this); + } + + public void show(float xPos, float yPos) { + animationRunning = true; + view.setX(xPos - (float) view.getWidth() / 2); + view.setY(yPos); + view.startAnimation(animation); + } + + @Override + public void onAnimationEnd(Animation animation) { + animationRunning = false; + } + + public TextView getView() { + return view; + } + + public boolean isAnimationRunning() { + return animationRunning; + } + + @Override + public void onAnimationStart(Animation animation) { + } + + @Override + public void onAnimationRepeat(Animation animation) { + } +} diff --git a/app/src/main/java/de/frajul/endlessroll/views/BountyMessage.java b/app/src/main/java/de/frajul/endlessroll/views/BountyMessage.java index 2309df2..f7ba55e 100644 --- a/app/src/main/java/de/frajul/endlessroll/views/BountyMessage.java +++ b/app/src/main/java/de/frajul/endlessroll/views/BountyMessage.java @@ -1,96 +1,96 @@ -/* - * Created by Julian Mutter on 7/10/18 3:58 PM - * Copyright (c) 2018. All rights reserved. - * Last modified 7/10/18 3:54 PM - * - */ - -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 { - 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 = layout.findViewById(R.id.unlockmessage_toolimage); - text = 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; - } -} +/* + * Created by Julian Mutter on 7/10/18 3:58 PM + * Copyright (c) 2018. All rights reserved. + * Last modified 7/10/18 3:54 PM + * + */ + +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 { + 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 = layout.findViewById(R.id.unlockmessage_toolimage); + text = 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/ConfirmDialog.java b/app/src/main/java/de/frajul/endlessroll/views/ConfirmDialog.java index b6b38d2..5d10efc 100644 --- a/app/src/main/java/de/frajul/endlessroll/views/ConfirmDialog.java +++ b/app/src/main/java/de/frajul/endlessroll/views/ConfirmDialog.java @@ -1,72 +1,72 @@ -/* - * Created by Julian Mutter on 7/10/18 3:58 PM - * Copyright (c) 2018. All rights reserved. - * Last modified 7/10/18 3:54 PM - * - */ - -package de.frajul.endlessroll.views; - -import android.app.Dialog; -import android.os.Bundle; -import android.support.annotation.StringRes; -import android.view.View; -import android.view.Window; -import android.widget.Button; -import android.widget.TextView; - -import de.frajul.endlessroll.R; -import de.frajul.endlessroll.main.GameActivity; - -/** - * Created by Julian on 31.10.2017. - */ - -public class ConfirmDialog extends Dialog implements View.OnClickListener { - - public interface ConfirmDialogListener { - void onConfirmed(int callId); - } - - private GameActivity gameActivity; - private int callId = -1; - private ConfirmDialogListener listener; - - private TextView textView; - private Button yesButton; - private Button noButton; - - public ConfirmDialog(GameActivity gameActivity, ConfirmDialogListener listener) { - super(gameActivity); - this.gameActivity = gameActivity; - this.listener = listener; - } - - @Override - protected void onCreate(Bundle savedInstanceState) { - super.onCreate(savedInstanceState); - requestWindowFeature(Window.FEATURE_NO_TITLE); - setContentView(R.layout.confirm_dialog); - textView = findViewById(R.id.confirm_dialog_textview); - textView.setTypeface(gameActivity.getTypeface()); - noButton = findViewById(R.id.confirm_dialog_no_button); - noButton.setTypeface(gameActivity.getTypeface()); - noButton.setOnClickListener(this); - yesButton = findViewById(R.id.confirm_dialog_yes_button); - yesButton.setTypeface(gameActivity.getTypeface()); - yesButton.setOnClickListener(this); - } - - public void show(int callId, @StringRes int text) { - this.callId = callId; - super.show(); - textView.setText(text); - } - - @Override - public void onClick(View v) { - dismiss(); - if (v.equals(yesButton)) - listener.onConfirmed(callId); - } -} +/* + * Created by Julian Mutter on 7/10/18 3:58 PM + * Copyright (c) 2018. All rights reserved. + * Last modified 7/10/18 3:54 PM + * + */ + +package de.frajul.endlessroll.views; + +import android.app.Dialog; +import android.os.Bundle; +import android.support.annotation.StringRes; +import android.view.View; +import android.view.Window; +import android.widget.Button; +import android.widget.TextView; + +import de.frajul.endlessroll.R; +import de.frajul.endlessroll.main.GameActivity; + +/** + * Created by Julian on 31.10.2017. + */ + +public class ConfirmDialog extends Dialog implements View.OnClickListener { + + public interface ConfirmDialogListener { + void onConfirmed(int callId); + } + + private GameActivity gameActivity; + private int callId = -1; + private ConfirmDialogListener listener; + + private TextView textView; + private Button yesButton; + private Button noButton; + + public ConfirmDialog(GameActivity gameActivity, ConfirmDialogListener listener) { + super(gameActivity); + this.gameActivity = gameActivity; + this.listener = listener; + } + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + requestWindowFeature(Window.FEATURE_NO_TITLE); + setContentView(R.layout.confirm_dialog); + textView = findViewById(R.id.confirm_dialog_textview); + textView.setTypeface(gameActivity.getTypeface()); + noButton = findViewById(R.id.confirm_dialog_no_button); + noButton.setTypeface(gameActivity.getTypeface()); + noButton.setOnClickListener(this); + yesButton = findViewById(R.id.confirm_dialog_yes_button); + yesButton.setTypeface(gameActivity.getTypeface()); + yesButton.setOnClickListener(this); + } + + public void show(int callId, @StringRes int text) { + this.callId = callId; + super.show(); + textView.setText(text); + } + + @Override + public void onClick(View v) { + dismiss(); + if (v.equals(yesButton)) + listener.onConfirmed(callId); + } +} diff --git a/app/src/main/java/de/frajul/endlessroll/views/CreditsDialog.java b/app/src/main/java/de/frajul/endlessroll/views/CreditsDialog.java index 3534194..e8e9597 100644 --- a/app/src/main/java/de/frajul/endlessroll/views/CreditsDialog.java +++ b/app/src/main/java/de/frajul/endlessroll/views/CreditsDialog.java @@ -1,113 +1,113 @@ -/* - * Created by Julian Mutter on 7/10/18 3:58 PM - * Copyright (c) 2018. All rights reserved. - * Last modified 7/10/18 3:54 PM - * - */ - -package de.frajul.endlessroll.views; - -import android.animation.ObjectAnimator; -import android.app.Dialog; -import android.os.Bundle; -import android.support.annotation.IdRes; -import android.view.MotionEvent; -import android.view.View; -import android.view.Window; -import android.view.animation.Animation; -import android.view.animation.AnimationUtils; -import android.view.animation.LinearInterpolator; -import android.widget.ImageView; -import android.widget.ScrollView; -import android.widget.TextView; - -import java.util.concurrent.locks.ReentrantLock; - -import de.frajul.endlessroll.R; -import de.frajul.endlessroll.main.GameActivity; - -/** - * Created by Julian on 31.10.2017. - */ - -public class CreditsDialog extends Dialog implements View.OnTouchListener { - - private GameActivity gameActivity; - - private View scrollViewLayout; - private ImageView ball; - private Animation rotation; - private ScrollView scrollView; - private ReentrantLock scrollViewAnimatorLock; - private ObjectAnimator scrollViewAnimator; - - public CreditsDialog(GameActivity gameActivity) { - super(gameActivity); - this.gameActivity = gameActivity; - } - - @Override - protected void onCreate(Bundle savedInstanceState) { - super.onCreate(savedInstanceState); - requestWindowFeature(Window.FEATURE_NO_TITLE); - setContentView(R.layout.credits_dialog); - - setTypefaceToTextView(R.id.credits_title); - setTypefaceToTextView(R.id.credits_author); - setTypefaceToTextView(R.id.credits_art_title); - setTypefaceToTextView(R.id.credits_art); - setTypefaceToTextView(R.id.credits_testers_title); - setTypefaceToTextView(R.id.credits_testers); - setTypefaceToTextView(R.id.credits_sounds_title); - setTypefaceToTextView(R.id.credits_sounds); - setTypefaceToTextView(R.id.credits_music_title); - setTypefaceToTextView(R.id.credits_music); - - ball = findViewById(R.id.credits_ball); - rotation = AnimationUtils.loadAnimation(gameActivity, R.anim.shape_button_rotation); - scrollView = findViewById(R.id.credits_scrollview); - scrollView.setOnTouchListener(this); - scrollViewLayout = findViewById(R.id.credits_scrollview_layout); - scrollViewAnimatorLock = new ReentrantLock(); - } - - private void setTypefaceToTextView(@IdRes int id) { - TextView textView = findViewById(id); - textView.setTypeface(gameActivity.getTypeface()); - } - - @Override - public void show() { - super.show(); - ball.startAnimation(rotation); - scrollView.post(new Runnable() { - @Override - public void run() { - scrollView.scrollTo(0, 0); - - scrollViewAnimatorLock.lock(); - try { - scrollViewAnimator = ObjectAnimator - .ofInt(scrollView, "scrollY", scrollViewLayout.getBottom() - scrollView.getHeight()); - scrollViewAnimator.setDuration(16000); - scrollViewAnimator.setInterpolator(new LinearInterpolator()); - scrollViewAnimator.start(); - } finally { - scrollViewAnimatorLock.unlock(); - } - } - }); - } - - @Override - public boolean onTouch(View v, MotionEvent event) { - scrollViewAnimatorLock.lock(); - try { - if (scrollViewAnimator != null) - scrollViewAnimator.cancel(); - } finally { - scrollViewAnimatorLock.unlock(); - } - return false; - } -} +/* + * Created by Julian Mutter on 7/10/18 3:58 PM + * Copyright (c) 2018. All rights reserved. + * Last modified 7/10/18 3:54 PM + * + */ + +package de.frajul.endlessroll.views; + +import android.animation.ObjectAnimator; +import android.app.Dialog; +import android.os.Bundle; +import android.support.annotation.IdRes; +import android.view.MotionEvent; +import android.view.View; +import android.view.Window; +import android.view.animation.Animation; +import android.view.animation.AnimationUtils; +import android.view.animation.LinearInterpolator; +import android.widget.ImageView; +import android.widget.ScrollView; +import android.widget.TextView; + +import java.util.concurrent.locks.ReentrantLock; + +import de.frajul.endlessroll.R; +import de.frajul.endlessroll.main.GameActivity; + +/** + * Created by Julian on 31.10.2017. + */ + +public class CreditsDialog extends Dialog implements View.OnTouchListener { + + private GameActivity gameActivity; + + private View scrollViewLayout; + private ImageView ball; + private Animation rotation; + private ScrollView scrollView; + private ReentrantLock scrollViewAnimatorLock; + private ObjectAnimator scrollViewAnimator; + + public CreditsDialog(GameActivity gameActivity) { + super(gameActivity); + this.gameActivity = gameActivity; + } + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + requestWindowFeature(Window.FEATURE_NO_TITLE); + setContentView(R.layout.credits_dialog); + + setTypefaceToTextView(R.id.credits_title); + setTypefaceToTextView(R.id.credits_author); + setTypefaceToTextView(R.id.credits_art_title); + setTypefaceToTextView(R.id.credits_art); + setTypefaceToTextView(R.id.credits_testers_title); + setTypefaceToTextView(R.id.credits_testers); + setTypefaceToTextView(R.id.credits_sounds_title); + setTypefaceToTextView(R.id.credits_sounds); + setTypefaceToTextView(R.id.credits_music_title); + setTypefaceToTextView(R.id.credits_music); + + ball = findViewById(R.id.credits_ball); + rotation = AnimationUtils.loadAnimation(gameActivity, R.anim.shape_button_rotation); + scrollView = findViewById(R.id.credits_scrollview); + scrollView.setOnTouchListener(this); + scrollViewLayout = findViewById(R.id.credits_scrollview_layout); + scrollViewAnimatorLock = new ReentrantLock(); + } + + private void setTypefaceToTextView(@IdRes int id) { + TextView textView = findViewById(id); + textView.setTypeface(gameActivity.getTypeface()); + } + + @Override + public void show() { + super.show(); + ball.startAnimation(rotation); + scrollView.post(new Runnable() { + @Override + public void run() { + scrollView.scrollTo(0, 0); + + scrollViewAnimatorLock.lock(); + try { + scrollViewAnimator = ObjectAnimator + .ofInt(scrollView, "scrollY", scrollViewLayout.getBottom() - scrollView.getHeight()); + scrollViewAnimator.setDuration(16000); + scrollViewAnimator.setInterpolator(new LinearInterpolator()); + scrollViewAnimator.start(); + } finally { + scrollViewAnimatorLock.unlock(); + } + } + }); + } + + @Override + public boolean onTouch(View v, MotionEvent event) { + scrollViewAnimatorLock.lock(); + try { + if (scrollViewAnimator != null) + scrollViewAnimator.cancel(); + } finally { + scrollViewAnimatorLock.unlock(); + } + return false; + } +} diff --git a/app/src/main/java/de/frajul/endlessroll/views/DevToolsDialog.java b/app/src/main/java/de/frajul/endlessroll/views/DevToolsDialog.java index 86b65b4..d0dc01b 100644 --- a/app/src/main/java/de/frajul/endlessroll/views/DevToolsDialog.java +++ b/app/src/main/java/de/frajul/endlessroll/views/DevToolsDialog.java @@ -1,106 +1,106 @@ -/* - * Created by Julian Mutter on 9/7/18 12:36 PM - * Copyright (c) 2018. All rights reserved. - * Last modified 7/10/18 3:58 PM - * - */ - -package de.frajul.endlessroll.views; - -import android.animation.ObjectAnimator; -import android.app.Dialog; -import android.os.Bundle; -import android.support.annotation.IdRes; -import android.view.MotionEvent; -import android.view.View; -import android.view.Window; -import android.view.animation.Animation; -import android.view.animation.AnimationUtils; -import android.view.animation.LinearInterpolator; -import android.widget.Button; -import android.widget.ImageView; -import android.widget.ScrollView; -import android.widget.TextView; - -import java.util.concurrent.locks.ReentrantLock; - -import de.frajul.endlessroll.R; -import de.frajul.endlessroll.main.GameActivity; -import de.frajul.endlessroll.main.screens.Screen; -import de.frajul.endlessroll.sqlDatabase.MyDatabase; - -/** - * Created by Julian on 31.10.2017. - */ - -public class DevToolsDialog extends Dialog implements View.OnClickListener, ConfirmDialog.ConfirmDialogListener{ - - private GameActivity gameActivity; - - private Button unlockLevels; - private Button gain90EP; - private Button finishFirstWorld; - private Button toGlTestScreen; - - private ConfirmDialog confirmDialog; - - public DevToolsDialog(GameActivity gameActivity) { - super(gameActivity); - this.gameActivity = gameActivity; - confirmDialog = new ConfirmDialog(gameActivity, this); - } - - @Override - protected void onCreate(Bundle savedInstanceState) { - super.onCreate(savedInstanceState); - requestWindowFeature(Window.FEATURE_NO_TITLE); - setContentView(R.layout.dev_tools_dialog); - - unlockLevels = findViewById(R.id.startscreen_unlock_levels); - unlockLevels.setOnClickListener(this); - gain90EP = findViewById(R.id.startscreen_gain_90_ep); - gain90EP.setOnClickListener(this); - finishFirstWorld = findViewById(R.id.startscreen_finish_world_1); - finishFirstWorld.setOnClickListener(this); - toGlTestScreen = findViewById(R.id.startscreen_to_gl_test_screen); - toGlTestScreen.setOnClickListener(this); - } - - @Override - public void onClick(View view) { - if (view.equals(gain90EP)) { - gameActivity.getUser().gainEp(90, true); - } else if (view.equals(unlockLevels)) { - gameActivity.getLevelManager().unlockAllLevels(); - gameActivity.getLevelManager().unlockAllPacks(); - MyDatabase database = gameActivity.getDataStorageHandler().getDatabase(); - database.open(); - database.writeAllLevelAndPackStatus(gameActivity.getLevelManager()); - database.close(); - } else if (view.equals(finishFirstWorld)) { - confirmDialog - .show(1, R.string.confirm_dialog_finish_world_1); - } else if (view.equals(toGlTestScreen)) { - super.cancel(); - gameActivity.flipToScreen(Screen.ScreenType.GL_TEST); - } - } - - @Override - public void onConfirmed(int callId) { - gameActivity.resetData(); - gameActivity.getUser().gainEp(320, false); - gameActivity.getLevelManager().finishFirstPack(); - gameActivity.showNewFinishedPlayerShapeTasks(); - gameActivity.getTutorialManager().getToolShopTutorial().setFinished(true); - - gameActivity.getDataStorageHandler().writeUserData(gameActivity.getUser()); - gameActivity.getDataStorageHandler().writeToolShopTutorialFinished(true); - MyDatabase database = gameActivity.getDataStorageHandler().getDatabase(); - database.open(); - database.writeAllLevelAndPackStatus(gameActivity.getLevelManager()); - database.close(); - - super.cancel(); - } -} +/* + * Created by Julian Mutter on 9/7/18 12:36 PM + * Copyright (c) 2018. All rights reserved. + * Last modified 7/10/18 3:58 PM + * + */ + +package de.frajul.endlessroll.views; + +import android.animation.ObjectAnimator; +import android.app.Dialog; +import android.os.Bundle; +import android.support.annotation.IdRes; +import android.view.MotionEvent; +import android.view.View; +import android.view.Window; +import android.view.animation.Animation; +import android.view.animation.AnimationUtils; +import android.view.animation.LinearInterpolator; +import android.widget.Button; +import android.widget.ImageView; +import android.widget.ScrollView; +import android.widget.TextView; + +import java.util.concurrent.locks.ReentrantLock; + +import de.frajul.endlessroll.R; +import de.frajul.endlessroll.main.GameActivity; +import de.frajul.endlessroll.main.screens.Screen; +import de.frajul.endlessroll.sqlDatabase.MyDatabase; + +/** + * Created by Julian on 31.10.2017. + */ + +public class DevToolsDialog extends Dialog implements View.OnClickListener, ConfirmDialog.ConfirmDialogListener{ + + private GameActivity gameActivity; + + private Button unlockLevels; + private Button gain90EP; + private Button finishFirstWorld; + private Button toGlTestScreen; + + private ConfirmDialog confirmDialog; + + public DevToolsDialog(GameActivity gameActivity) { + super(gameActivity); + this.gameActivity = gameActivity; + confirmDialog = new ConfirmDialog(gameActivity, this); + } + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + requestWindowFeature(Window.FEATURE_NO_TITLE); + setContentView(R.layout.dev_tools_dialog); + + unlockLevels = findViewById(R.id.startscreen_unlock_levels); + unlockLevels.setOnClickListener(this); + gain90EP = findViewById(R.id.startscreen_gain_90_ep); + gain90EP.setOnClickListener(this); + finishFirstWorld = findViewById(R.id.startscreen_finish_world_1); + finishFirstWorld.setOnClickListener(this); + toGlTestScreen = findViewById(R.id.startscreen_to_gl_test_screen); + toGlTestScreen.setOnClickListener(this); + } + + @Override + public void onClick(View view) { + if (view.equals(gain90EP)) { + gameActivity.getUser().gainEp(90, true); + } else if (view.equals(unlockLevels)) { + gameActivity.getLevelManager().unlockAllLevels(); + gameActivity.getLevelManager().unlockAllPacks(); + MyDatabase database = gameActivity.getDataStorageHandler().getDatabase(); + database.open(); + database.writeAllLevelAndPackStatus(gameActivity.getLevelManager()); + database.close(); + } else if (view.equals(finishFirstWorld)) { + confirmDialog + .show(1, R.string.confirm_dialog_finish_world_1); + } else if (view.equals(toGlTestScreen)) { + super.cancel(); + gameActivity.flipToScreen(Screen.ScreenType.GL_TEST); + } + } + + @Override + public void onConfirmed(int callId) { + gameActivity.resetData(); + gameActivity.getUser().gainEp(320, false); + gameActivity.getLevelManager().finishFirstPack(); + gameActivity.showNewFinishedPlayerShapeTasks(); + gameActivity.getTutorialManager().getToolShopTutorial().setFinished(true); + + gameActivity.getDataStorageHandler().writeUserData(gameActivity.getUser()); + gameActivity.getDataStorageHandler().writeToolShopTutorialFinished(true); + MyDatabase database = gameActivity.getDataStorageHandler().getDatabase(); + database.open(); + database.writeAllLevelAndPackStatus(gameActivity.getLevelManager()); + database.close(); + + super.cancel(); + } +} diff --git a/app/src/main/java/de/frajul/endlessroll/views/GameOverMessage.java b/app/src/main/java/de/frajul/endlessroll/views/GameOverMessage.java index 6ec20b1..9dccce9 100644 --- a/app/src/main/java/de/frajul/endlessroll/views/GameOverMessage.java +++ b/app/src/main/java/de/frajul/endlessroll/views/GameOverMessage.java @@ -1,86 +1,86 @@ -/* - * Created by Julian Mutter on 7/10/18 3:58 PM - * Copyright (c) 2018. All rights reserved. - * Last modified 7/10/18 3:54 PM - * - */ - -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.GameScreen; - -/** - * Created by Julian on 09.07.2016. - */ -public class GameOverMessage implements View.OnClickListener { - - private Animation fadeIn; - private GameActivity gameActivity; - private Game game; - - private View layout; - private TopBar topBar; - private Button tryAgain; - private Button toMenu; - - public GameOverMessage(Game game, GameScreen gameScreen, GameActivity gameActivity, View layout) { - this.game = game; - this.gameActivity = gameActivity; - this.layout = layout; - layout.setVisibility(View.GONE); - Typeface typeface = gameActivity.getTypeface(); - fadeIn = AnimationUtils.loadAnimation(gameActivity, R.anim.fade_in); - topBar = new TopBar(gameActivity, gameScreen, - layout.findViewById(R.id.game_over_message_topbar)); - topBar.setShopsEnabled(true); - TextView title = layout.findViewById(R.id.game_over_message_title); - title.setTypeface(typeface); - tryAgain = layout.findViewById(R.id.game_over_message_try_again); - tryAgain.setTypeface(typeface); - tryAgain.setOnClickListener(this); - toMenu = 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); - } - - public boolean isVisible() { - return layout.getVisibility() == View.VISIBLE; - } - - public void prepareToBeShown() { - topBar.update(); - } - - private void hide() { - layout.clearAnimation(); - layout.setVisibility(View.GONE); - gameActivity.getSoundManager().stopAllSounds(); - } - - @Override - public void onClick(View v) { - if (v.equals(tryAgain)) { - hide(); - game.restartLevel(); - } else if (v.equals(toMenu)) { - hide(); - game.toLevelsScreen(); - } - } -} +/* + * Created by Julian Mutter on 7/10/18 3:58 PM + * Copyright (c) 2018. All rights reserved. + * Last modified 7/10/18 3:54 PM + * + */ + +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.GameScreen; + +/** + * Created by Julian on 09.07.2016. + */ +public class GameOverMessage implements View.OnClickListener { + + private Animation fadeIn; + private GameActivity gameActivity; + private Game game; + + private View layout; + private TopBar topBar; + private Button tryAgain; + private Button toMenu; + + public GameOverMessage(Game game, GameScreen gameScreen, GameActivity gameActivity, View layout) { + this.game = game; + this.gameActivity = gameActivity; + this.layout = layout; + layout.setVisibility(View.GONE); + Typeface typeface = gameActivity.getTypeface(); + fadeIn = AnimationUtils.loadAnimation(gameActivity, R.anim.fade_in); + topBar = new TopBar(gameActivity, gameScreen, + layout.findViewById(R.id.game_over_message_topbar)); + topBar.setShopsEnabled(true); + TextView title = layout.findViewById(R.id.game_over_message_title); + title.setTypeface(typeface); + tryAgain = layout.findViewById(R.id.game_over_message_try_again); + tryAgain.setTypeface(typeface); + tryAgain.setOnClickListener(this); + toMenu = 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); + } + + public boolean isVisible() { + return layout.getVisibility() == View.VISIBLE; + } + + public void prepareToBeShown() { + topBar.update(); + } + + private void hide() { + layout.clearAnimation(); + layout.setVisibility(View.GONE); + gameActivity.getSoundManager().stopAllSounds(); + } + + @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/GoalMessage.java b/app/src/main/java/de/frajul/endlessroll/views/GoalMessage.java index e12a95e..6686b9f 100644 --- a/app/src/main/java/de/frajul/endlessroll/views/GoalMessage.java +++ b/app/src/main/java/de/frajul/endlessroll/views/GoalMessage.java @@ -1,122 +1,122 @@ -/* - * Created by Julian Mutter on 7/10/18 3:58 PM - * Copyright (c) 2018. All rights reserved. - * Last modified 7/10/18 3:54 PM - * - */ - -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.levels.Level; -import de.frajul.endlessroll.levels.LevelPack; -import de.frajul.endlessroll.main.GameActivity; -import de.frajul.endlessroll.main.game.Game; -import de.frajul.endlessroll.main.screens.GameScreen; -import de.frajul.endlessroll.main.screens.Screen; - -/** - * Created by Julian on 23.04.2016. - */ -public class GoalMessage implements GoalMessageLevelButtonOnClickListener, View.OnClickListener { - - private Game game; - private GameActivity gameActivity; - private LevelPack levelPack; - private Animation fadeIn; - - private View layout; - private TopBar topBar; - private GoalMessageLevelButton restart; - private GoalMessageLevelButton nextLevel; - private Button toMenu; - - public GoalMessage(Game game, GameScreen gameScreen, GameActivity gameActivity, View layout) { - this.game = game; - this.gameActivity = gameActivity; - this.layout = layout; - layout.setVisibility(View.GONE); - Typeface typeface = gameActivity.getTypeface(); - fadeIn = AnimationUtils.loadAnimation(gameActivity, R.anim.fade_in); - - topBar = new TopBar(gameActivity, gameScreen, - layout.findViewById(R.id.goal_message_topbar)); - topBar.setShopsEnabled(true); - TextView title = layout.findViewById(R.id.goal_message_title); - title.setTypeface(typeface); - restart = new GoalMessageLevelButton(gameActivity, this, - layout.findViewById(R.id.goal_message_restart)); - nextLevel = new GoalMessageLevelButton(gameActivity, this, - layout.findViewById(R.id.goal_message_next_level)); - toMenu = layout.findViewById(R.id.goal_message_to_menu); - toMenu.setTypeface(typeface); - toMenu.setOnClickListener(this); - } - - public void fadeInWithDelay(final LevelPack levelPack, final Level level) { - this.levelPack = levelPack; - - topBar.update(); - restart.init(R.string.goal_message_restart_format_d, level); - boolean isLastLevel = levelPack.isLastLevel(level); - boolean hasNextWorld = gameActivity.getLevelManager().getNextLevelPack(levelPack) != null; - nextLevel.setVisible(!isLastLevel || hasNextWorld); - if (!isLastLevel) - nextLevel - .init(R.string.goal_message_next_level_format_d, levelPack.getNextLevel(level)); - else if (hasNextWorld) { - nextLevel.initShowToNextWorld(true, levelPack); - } - - layout.postDelayed(new Runnable() { - @Override - public void run() { - layout.startAnimation(fadeIn); - layout.setVisibility(View.VISIBLE); - } - }, 500); - } - - public boolean isVisible() { - return layout.getVisibility() == View.VISIBLE; - } - - public void prepareToBeShown() { - topBar.update(); - } - - private void hide() { - layout.clearAnimation(); - layout.setVisibility(View.GONE); - gameActivity.getSoundManager().stopAllSounds(); - } - - @Override - public void onClick(View v) { - if (v.equals(toMenu)) { - game.toLevelsScreen(); - hide(); - } - } - - @Override - public void onClick(GoalMessageLevelButton goalMessageLevelButton) { - hide(); - if (goalMessageLevelButton.isShowingToNextWorld()) { - gameActivity.flipToScreen(Screen.ScreenType.WORLDS); - } else - gameActivity.startGame(levelPack, goalMessageLevelButton.getLevel()); - } - - public void onKeyBack() { - game.toLevelsScreen(); - hide(); - } -} +/* + * Created by Julian Mutter on 7/10/18 3:58 PM + * Copyright (c) 2018. All rights reserved. + * Last modified 7/10/18 3:54 PM + * + */ + +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.levels.Level; +import de.frajul.endlessroll.levels.LevelPack; +import de.frajul.endlessroll.main.GameActivity; +import de.frajul.endlessroll.main.game.Game; +import de.frajul.endlessroll.main.screens.GameScreen; +import de.frajul.endlessroll.main.screens.Screen; + +/** + * Created by Julian on 23.04.2016. + */ +public class GoalMessage implements GoalMessageLevelButtonOnClickListener, View.OnClickListener { + + private Game game; + private GameActivity gameActivity; + private LevelPack levelPack; + private Animation fadeIn; + + private View layout; + private TopBar topBar; + private GoalMessageLevelButton restart; + private GoalMessageLevelButton nextLevel; + private Button toMenu; + + public GoalMessage(Game game, GameScreen gameScreen, GameActivity gameActivity, View layout) { + this.game = game; + this.gameActivity = gameActivity; + this.layout = layout; + layout.setVisibility(View.GONE); + Typeface typeface = gameActivity.getTypeface(); + fadeIn = AnimationUtils.loadAnimation(gameActivity, R.anim.fade_in); + + topBar = new TopBar(gameActivity, gameScreen, + layout.findViewById(R.id.goal_message_topbar)); + topBar.setShopsEnabled(true); + TextView title = layout.findViewById(R.id.goal_message_title); + title.setTypeface(typeface); + restart = new GoalMessageLevelButton(gameActivity, this, + layout.findViewById(R.id.goal_message_restart)); + nextLevel = new GoalMessageLevelButton(gameActivity, this, + layout.findViewById(R.id.goal_message_next_level)); + toMenu = layout.findViewById(R.id.goal_message_to_menu); + toMenu.setTypeface(typeface); + toMenu.setOnClickListener(this); + } + + public void fadeInWithDelay(final LevelPack levelPack, final Level level) { + this.levelPack = levelPack; + + topBar.update(); + restart.init(R.string.goal_message_restart_format_d, level); + boolean isLastLevel = levelPack.isLastLevel(level); + boolean hasNextWorld = gameActivity.getLevelManager().getNextLevelPack(levelPack) != null; + nextLevel.setVisible(!isLastLevel || hasNextWorld); + if (!isLastLevel) + nextLevel + .init(R.string.goal_message_next_level_format_d, levelPack.getNextLevel(level)); + else if (hasNextWorld) { + nextLevel.initShowToNextWorld(true, levelPack); + } + + layout.postDelayed(new Runnable() { + @Override + public void run() { + layout.startAnimation(fadeIn); + layout.setVisibility(View.VISIBLE); + } + }, 500); + } + + public boolean isVisible() { + return layout.getVisibility() == View.VISIBLE; + } + + public void prepareToBeShown() { + topBar.update(); + } + + private void hide() { + layout.clearAnimation(); + layout.setVisibility(View.GONE); + gameActivity.getSoundManager().stopAllSounds(); + } + + @Override + public void onClick(View v) { + if (v.equals(toMenu)) { + game.toLevelsScreen(); + hide(); + } + } + + @Override + public void onClick(GoalMessageLevelButton goalMessageLevelButton) { + hide(); + if (goalMessageLevelButton.isShowingToNextWorld()) { + gameActivity.flipToScreen(Screen.ScreenType.WORLDS); + } else + gameActivity.startGame(levelPack, goalMessageLevelButton.getLevel()); + } + + public void onKeyBack() { + game.toLevelsScreen(); + hide(); + } +} diff --git a/app/src/main/java/de/frajul/endlessroll/views/GoalMessageLevelButton.java b/app/src/main/java/de/frajul/endlessroll/views/GoalMessageLevelButton.java index 884938e..e17dbcb 100644 --- a/app/src/main/java/de/frajul/endlessroll/views/GoalMessageLevelButton.java +++ b/app/src/main/java/de/frajul/endlessroll/views/GoalMessageLevelButton.java @@ -1,116 +1,116 @@ -/* - * Created by Julian Mutter on 7/10/18 3:58 PM - * Copyright (c) 2018. All rights reserved. - * Last modified 7/10/18 3:54 PM - * - */ - -package de.frajul.endlessroll.views; - -import android.support.annotation.StringRes; -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.levels.LevelPack; -import de.frajul.endlessroll.main.GameActivity; - -/** - * Created by Julian on 23.04.2016. - */ -public class GoalMessageLevelButton implements View.OnClickListener { - - private GameActivity gameActivity; - private GoalMessageLevelButtonOnClickListener clickListener; - private Level level; - private boolean showingToNextWorld = false; - - private View layout; - private TextView text; - private ImageView star1; - private ImageView star2; - private ImageView star3; - private ImageView energy; - private View bottomLayout; - - public GoalMessageLevelButton(GameActivity gameActivity, GoalMessageLevelButtonOnClickListener clickListener, View layout) { - this.gameActivity = gameActivity; - this.clickListener = clickListener; - this.layout = layout; - layout.setOnClickListener(this); - findViews(layout); - } - - private void findViews(View layout) { - text = layout.findViewById(R.id.goal_message_levelbutton_textview); - text.setTypeface(gameActivity.getTypeface()); - star1 = layout.findViewById(R.id.goal_message_levelbutton_star1); - star2 = layout.findViewById(R.id.goal_message_levelbutton_star2); - star3 = layout.findViewById(R.id.goal_message_levelbutton_star3); - energy = layout.findViewById(R.id.goal_message_levelbutton_energy); - bottomLayout = layout.findViewById(R.id.goal_message_levelbutton_bottom_layout); - } - - public void setVisible(boolean visible) { - layout.setVisibility(visible ? View.VISIBLE : View.GONE); - } - - public void init(@StringRes int textId, Level level) { - this.level = level; - initShowToNextWorld(false, null); - text.setText(gameActivity.getString(textId, level.getId())); - showCollectedCurrency(level.getCollectedStars(), level.isEnergyCollected()); - } - - public void initShowToNextWorld(boolean show, LevelPack currentLevelPack) { - showingToNextWorld = show; - bottomLayout.setVisibility(show ? View.GONE : View.VISIBLE); - if (show) { - String nextWorld = gameActivity.getLevelManager().getNextLevelPack(currentLevelPack) - .getName(); - text.setText( - gameActivity.getString(R.string.goal_message_next_world_format_s, nextWorld)); - } - } - - private void showCollectedCurrency(boolean[] stars, boolean energy) { - if (stars[0]) - this.star1.setImageResource(R.drawable.currency_star); - else - this.star1.setImageResource(R.drawable.currency_star_empty); - - if (stars[1]) - this.star2.setImageResource(R.drawable.currency_star); - else - this.star2.setImageResource(R.drawable.currency_star_empty); - - if (stars[2]) - this.star3.setImageResource(R.drawable.currency_star); - else - this.star3.setImageResource(R.drawable.currency_star_empty); - - if (energy) - this.energy.setImageResource(R.drawable.currency_energy); - else - this.energy.setImageResource(R.drawable.currency_energy_empty); - } - - public Level getLevel() { - return level; - } - - public View getView() { - return layout; - } - - public boolean isShowingToNextWorld() { - return showingToNextWorld; - } - - @Override - public void onClick(View v) { - clickListener.onClick(this); - } -} +/* + * Created by Julian Mutter on 7/10/18 3:58 PM + * Copyright (c) 2018. All rights reserved. + * Last modified 7/10/18 3:54 PM + * + */ + +package de.frajul.endlessroll.views; + +import android.support.annotation.StringRes; +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.levels.LevelPack; +import de.frajul.endlessroll.main.GameActivity; + +/** + * Created by Julian on 23.04.2016. + */ +public class GoalMessageLevelButton implements View.OnClickListener { + + private GameActivity gameActivity; + private GoalMessageLevelButtonOnClickListener clickListener; + private Level level; + private boolean showingToNextWorld = false; + + private View layout; + private TextView text; + private ImageView star1; + private ImageView star2; + private ImageView star3; + private ImageView energy; + private View bottomLayout; + + public GoalMessageLevelButton(GameActivity gameActivity, GoalMessageLevelButtonOnClickListener clickListener, View layout) { + this.gameActivity = gameActivity; + this.clickListener = clickListener; + this.layout = layout; + layout.setOnClickListener(this); + findViews(layout); + } + + private void findViews(View layout) { + text = layout.findViewById(R.id.goal_message_levelbutton_textview); + text.setTypeface(gameActivity.getTypeface()); + star1 = layout.findViewById(R.id.goal_message_levelbutton_star1); + star2 = layout.findViewById(R.id.goal_message_levelbutton_star2); + star3 = layout.findViewById(R.id.goal_message_levelbutton_star3); + energy = layout.findViewById(R.id.goal_message_levelbutton_energy); + bottomLayout = layout.findViewById(R.id.goal_message_levelbutton_bottom_layout); + } + + public void setVisible(boolean visible) { + layout.setVisibility(visible ? View.VISIBLE : View.GONE); + } + + public void init(@StringRes int textId, Level level) { + this.level = level; + initShowToNextWorld(false, null); + text.setText(gameActivity.getString(textId, level.getId())); + showCollectedCurrency(level.getCollectedStars(), level.isEnergyCollected()); + } + + public void initShowToNextWorld(boolean show, LevelPack currentLevelPack) { + showingToNextWorld = show; + bottomLayout.setVisibility(show ? View.GONE : View.VISIBLE); + if (show) { + String nextWorld = gameActivity.getLevelManager().getNextLevelPack(currentLevelPack) + .getName(); + text.setText( + gameActivity.getString(R.string.goal_message_next_world_format_s, nextWorld)); + } + } + + private void showCollectedCurrency(boolean[] stars, boolean energy) { + if (stars[0]) + this.star1.setImageResource(R.drawable.currency_star); + else + this.star1.setImageResource(R.drawable.currency_star_empty); + + if (stars[1]) + this.star2.setImageResource(R.drawable.currency_star); + else + this.star2.setImageResource(R.drawable.currency_star_empty); + + if (stars[2]) + this.star3.setImageResource(R.drawable.currency_star); + else + this.star3.setImageResource(R.drawable.currency_star_empty); + + if (energy) + this.energy.setImageResource(R.drawable.currency_energy); + else + this.energy.setImageResource(R.drawable.currency_energy_empty); + } + + public Level getLevel() { + return level; + } + + public View getView() { + return layout; + } + + public boolean isShowingToNextWorld() { + return showingToNextWorld; + } + + @Override + public void onClick(View v) { + clickListener.onClick(this); + } +} diff --git a/app/src/main/java/de/frajul/endlessroll/views/GoalMessageLevelButtonOnClickListener.java b/app/src/main/java/de/frajul/endlessroll/views/GoalMessageLevelButtonOnClickListener.java index cee62be..346f1e4 100644 --- a/app/src/main/java/de/frajul/endlessroll/views/GoalMessageLevelButtonOnClickListener.java +++ b/app/src/main/java/de/frajul/endlessroll/views/GoalMessageLevelButtonOnClickListener.java @@ -1,18 +1,18 @@ -/* - * Created by Julian Mutter on 7/10/18 3:58 PM - * Copyright (c) 2018. All rights reserved. - * Last modified 7/10/18 3:54 PM - * - */ - -package de.frajul.endlessroll.views; - -/** - * Created by Julian on 04.11.2017. - */ - -public interface GoalMessageLevelButtonOnClickListener { - - void onClick(GoalMessageLevelButton goalMessageLevelButton); - -} +/* + * Created by Julian Mutter on 7/10/18 3:58 PM + * Copyright (c) 2018. All rights reserved. + * Last modified 7/10/18 3:54 PM + * + */ + +package de.frajul.endlessroll.views; + +/** + * Created by Julian on 04.11.2017. + */ + +public interface GoalMessageLevelButtonOnClickListener { + + void onClick(GoalMessageLevelButton goalMessageLevelButton); + +} diff --git a/app/src/main/java/de/frajul/endlessroll/views/LevelButton.java b/app/src/main/java/de/frajul/endlessroll/views/LevelButton.java index ab18d90..97455d3 100644 --- a/app/src/main/java/de/frajul/endlessroll/views/LevelButton.java +++ b/app/src/main/java/de/frajul/endlessroll/views/LevelButton.java @@ -1,91 +1,91 @@ -/* - * Created by Julian Mutter on 7/10/18 3:58 PM - * Copyright (c) 2018. All rights reserved. - * Last modified 7/10/18 3:54 PM - * - */ - -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 = layout.findViewById(R.id.levelbutton_textview); - text.setTypeface(gameActivity.getTypeface()); - star1 = layout.findViewById(R.id.levelbutton_star1); - star2 = layout.findViewById(R.id.levelbutton_star2); - star3 = layout.findViewById(R.id.levelbutton_star3); - energy = layout.findViewById(R.id.levelbutton_energy); - lockImage = 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); - } -} +/* + * Created by Julian Mutter on 7/10/18 3:58 PM + * Copyright (c) 2018. All rights reserved. + * Last modified 7/10/18 3:54 PM + * + */ + +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 = layout.findViewById(R.id.levelbutton_textview); + text.setTypeface(gameActivity.getTypeface()); + star1 = layout.findViewById(R.id.levelbutton_star1); + star2 = layout.findViewById(R.id.levelbutton_star2); + star3 = layout.findViewById(R.id.levelbutton_star3); + energy = layout.findViewById(R.id.levelbutton_energy); + lockImage = 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/LevelButtonOnClickListener.java b/app/src/main/java/de/frajul/endlessroll/views/LevelButtonOnClickListener.java index c739505..56eb246 100644 --- a/app/src/main/java/de/frajul/endlessroll/views/LevelButtonOnClickListener.java +++ b/app/src/main/java/de/frajul/endlessroll/views/LevelButtonOnClickListener.java @@ -1,18 +1,18 @@ -/* - * Created by Julian Mutter on 7/10/18 3:58 PM - * Copyright (c) 2018. All rights reserved. - * Last modified 7/10/18 3:54 PM - * - */ - -package de.frajul.endlessroll.views; - -/** - * Created by Julian on 04.11.2017. - */ - -public interface LevelButtonOnClickListener { - - void onClick(LevelButton levelButton); - -} +/* + * Created by Julian Mutter on 7/10/18 3:58 PM + * Copyright (c) 2018. All rights reserved. + * Last modified 7/10/18 3:54 PM + * + */ + +package de.frajul.endlessroll.views; + +/** + * Created by Julian on 04.11.2017. + */ + +public interface LevelButtonOnClickListener { + + void onClick(LevelButton levelButton); + +} diff --git a/app/src/main/java/de/frajul/endlessroll/views/LevelupMessage.java b/app/src/main/java/de/frajul/endlessroll/views/LevelupMessage.java index 780b990..de69079 100644 --- a/app/src/main/java/de/frajul/endlessroll/views/LevelupMessage.java +++ b/app/src/main/java/de/frajul/endlessroll/views/LevelupMessage.java @@ -1,85 +1,85 @@ -/* - * Created by Julian Mutter on 7/10/18 3:58 PM - * Copyright (c) 2018. All rights reserved. - * Last modified 7/10/18 3:54 PM - * - */ - -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.RelativeLayout; -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.user.LevelBounty; - -/** - * Created by Julian on 15.07.2016. - */ -public class LevelupMessage implements View.OnClickListener, BountyMessage.ScreenSwitchCaller { - - private GameActivity gameActivity; - private RelativeLayout layout; - - private TextView levelView; - private LinearLayout unlockMessages; - - public LevelupMessage(GameActivity gameActivity) { - this.gameActivity = gameActivity; - - Typeface typeface = gameActivity.getTypeface(); - LayoutInflater inflater = LayoutInflater.from(gameActivity); - layout = (RelativeLayout) 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 = layout.findViewById(R.id.levelup_level); - levelView.setTypeface(typeface); - TextView text = layout.findViewById(R.id.levelup_text); - text.setTypeface(typeface); - unlockMessages = layout.findViewById(R.id.levelup_unlocklist); - } - - public void show(int level) { - LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.WRAP_CONTENT, LinearLayout.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 RelativeLayout getLayout() { - return layout; - } - - @Override - public void onClick(View v) { - hide(); - } - - - @Override - public void switchScreen(Screen.ScreenType screenType) { - gameActivity.flipToScreen(screenType); - hide(); - } -} +/* + * Created by Julian Mutter on 7/10/18 3:58 PM + * Copyright (c) 2018. All rights reserved. + * Last modified 7/10/18 3:54 PM + * + */ + +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.RelativeLayout; +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.user.LevelBounty; + +/** + * Created by Julian on 15.07.2016. + */ +public class LevelupMessage implements View.OnClickListener, BountyMessage.ScreenSwitchCaller { + + private GameActivity gameActivity; + private RelativeLayout layout; + + private TextView levelView; + private LinearLayout unlockMessages; + + public LevelupMessage(GameActivity gameActivity) { + this.gameActivity = gameActivity; + + Typeface typeface = gameActivity.getTypeface(); + LayoutInflater inflater = LayoutInflater.from(gameActivity); + layout = (RelativeLayout) 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 = layout.findViewById(R.id.levelup_level); + levelView.setTypeface(typeface); + TextView text = layout.findViewById(R.id.levelup_text); + text.setTypeface(typeface); + unlockMessages = layout.findViewById(R.id.levelup_unlocklist); + } + + public void show(int level) { + LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.WRAP_CONTENT, LinearLayout.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 RelativeLayout 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/PlayerShapeButton.java b/app/src/main/java/de/frajul/endlessroll/views/PlayerShapeButton.java index 7b7999e..f863486 100644 --- a/app/src/main/java/de/frajul/endlessroll/views/PlayerShapeButton.java +++ b/app/src/main/java/de/frajul/endlessroll/views/PlayerShapeButton.java @@ -1,76 +1,76 @@ -/* - * Created by Julian Mutter on 7/10/18 3:58 PM - * Copyright (c) 2018. All rights reserved. - * Last modified 7/10/18 3:54 PM - * - */ - -package de.frajul.endlessroll.views; - -import android.view.LayoutInflater; -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.entities.shapes.PlayerShape; -import de.frajul.endlessroll.entities.shapes.PlayerShapeButtonOnClickListener; -import de.frajul.endlessroll.main.GameActivity; - -/** - * Created by Julian on 22.10.2017. - */ - -public class PlayerShapeButton implements View.OnClickListener { - - private PlayerShape playerShape; - private PlayerShapeButtonOnClickListener clickListener; - - private View view; - private Button button; - private Animation rotation; - - private boolean locked; - - public PlayerShapeButton(GameActivity gameActivity, PlayerShape playerShape, PlayerShapeButtonOnClickListener clickListener, boolean locked) { - this.clickListener = clickListener; - this.playerShape = playerShape; - this.locked = locked; - view = LayoutInflater.from(gameActivity).inflate(R.layout.shape_button, null); - TextView textView = view.findViewById(R.id.shape_button_textview); - textView.setTypeface(gameActivity.getTypeface()); - textView.setText(locked ? R.string.playershape_name_locked : playerShape.getNameId()); - button = view.findViewById(R.id.shape_button_button); - button.setBackgroundDrawable( - gameActivity.getResources().getDrawable(locked ? R.drawable.playershapes_locked : playerShape.getDrawableId())); - button.setOnClickListener(this); - rotation = AnimationUtils.loadAnimation(gameActivity, R.anim.shape_button_rotation); - } - - public void startRotating() { - button.startAnimation(rotation); - } - - public void stopRotating() { - button.clearAnimation(); - } - - @Override - public void onClick(View v) { - clickListener.onClick(this); - } - - public View getView() { - return view; - } - - public boolean isLocked() { - return locked; - } - - public PlayerShape getPlayerShape() { - return playerShape; - } -} +/* + * Created by Julian Mutter on 7/10/18 3:58 PM + * Copyright (c) 2018. All rights reserved. + * Last modified 7/10/18 3:54 PM + * + */ + +package de.frajul.endlessroll.views; + +import android.view.LayoutInflater; +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.entities.shapes.PlayerShape; +import de.frajul.endlessroll.entities.shapes.PlayerShapeButtonOnClickListener; +import de.frajul.endlessroll.main.GameActivity; + +/** + * Created by Julian on 22.10.2017. + */ + +public class PlayerShapeButton implements View.OnClickListener { + + private PlayerShape playerShape; + private PlayerShapeButtonOnClickListener clickListener; + + private View view; + private Button button; + private Animation rotation; + + private boolean locked; + + public PlayerShapeButton(GameActivity gameActivity, PlayerShape playerShape, PlayerShapeButtonOnClickListener clickListener, boolean locked) { + this.clickListener = clickListener; + this.playerShape = playerShape; + this.locked = locked; + view = LayoutInflater.from(gameActivity).inflate(R.layout.shape_button, null); + TextView textView = view.findViewById(R.id.shape_button_textview); + textView.setTypeface(gameActivity.getTypeface()); + textView.setText(locked ? R.string.playershape_name_locked : playerShape.getNameId()); + button = view.findViewById(R.id.shape_button_button); + button.setBackgroundDrawable( + gameActivity.getResources().getDrawable(locked ? R.drawable.playershapes_locked : playerShape.getDrawableId())); + button.setOnClickListener(this); + rotation = AnimationUtils.loadAnimation(gameActivity, R.anim.shape_button_rotation); + } + + public void startRotating() { + button.startAnimation(rotation); + } + + public void stopRotating() { + button.clearAnimation(); + } + + @Override + public void onClick(View v) { + clickListener.onClick(this); + } + + public View getView() { + return view; + } + + public boolean isLocked() { + return locked; + } + + public PlayerShape getPlayerShape() { + return playerShape; + } +} diff --git a/app/src/main/java/de/frajul/endlessroll/views/PriceButton.java b/app/src/main/java/de/frajul/endlessroll/views/PriceButton.java index 1bfe5df..df82152 100644 --- a/app/src/main/java/de/frajul/endlessroll/views/PriceButton.java +++ b/app/src/main/java/de/frajul/endlessroll/views/PriceButton.java @@ -1,67 +1,67 @@ -/* - * Created by Julian Mutter on 7/10/18 3:58 PM - * Copyright (c) 2018. All rights reserved. - * Last modified 7/10/18 3:54 PM - * - */ - -package de.frajul.endlessroll.views; - -import android.content.Context; -import android.graphics.Typeface; -import android.support.annotation.DrawableRes; -import android.support.annotation.StringRes; -import android.view.View; -import android.view.animation.Animation; -import android.widget.ImageView; -import android.widget.TextView; - -import de.frajul.endlessroll.R; - -/** - * Created by Julian on 01.08.2016. - */ -public class PriceButton { - - private Context context; - - private View layout; - private TextView title; - private TextView price; - private ImageView currencyView; - - public PriceButton(Context context, Typeface typeface, View layout, View.OnClickListener onClickListener) { - this.context = context; - this.layout = layout; - layout.setOnClickListener(onClickListener); - - title = layout.findViewById(R.id.price_button_title); - title.setTypeface(typeface); - price = layout.findViewById(R.id.price_button_price); - price.setTypeface(typeface); - currencyView = layout.findViewById(R.id.price_button_currency); - } - - public void init(@StringRes int title, int price, @DrawableRes int currencyDrawable) { - this.title.setText(title); - this.price.setText(price + ""); - this.currencyView.setImageDrawable(context.getResources().getDrawable(currencyDrawable)); - } - - public void setLayoutEnabled(boolean enabled) { - layout.setEnabled(enabled); - } - - public void setLayoutVisible(int visibility) { - layout.setVisibility(visibility); - } - - public void startAnimation(Animation animation) { - layout.startAnimation(animation); - } - - public void clearAnimation() { - layout.clearAnimation(); - } - -} +/* + * Created by Julian Mutter on 7/10/18 3:58 PM + * Copyright (c) 2018. All rights reserved. + * Last modified 7/10/18 3:54 PM + * + */ + +package de.frajul.endlessroll.views; + +import android.content.Context; +import android.graphics.Typeface; +import android.support.annotation.DrawableRes; +import android.support.annotation.StringRes; +import android.view.View; +import android.view.animation.Animation; +import android.widget.ImageView; +import android.widget.TextView; + +import de.frajul.endlessroll.R; + +/** + * Created by Julian on 01.08.2016. + */ +public class PriceButton { + + private Context context; + + private View layout; + private TextView title; + private TextView price; + private ImageView currencyView; + + public PriceButton(Context context, Typeface typeface, View layout, View.OnClickListener onClickListener) { + this.context = context; + this.layout = layout; + layout.setOnClickListener(onClickListener); + + title = layout.findViewById(R.id.price_button_title); + title.setTypeface(typeface); + price = layout.findViewById(R.id.price_button_price); + price.setTypeface(typeface); + currencyView = layout.findViewById(R.id.price_button_currency); + } + + public void init(@StringRes int title, int price, @DrawableRes int currencyDrawable) { + this.title.setText(title); + this.price.setText(price + ""); + this.currencyView.setImageDrawable(context.getResources().getDrawable(currencyDrawable)); + } + + public void setLayoutEnabled(boolean enabled) { + layout.setEnabled(enabled); + } + + public void setLayoutVisible(int visibility) { + layout.setVisibility(visibility); + } + + public void startAnimation(Animation animation) { + layout.startAnimation(animation); + } + + public void clearAnimation() { + layout.clearAnimation(); + } + +} diff --git a/app/src/main/java/de/frajul/endlessroll/views/ShapeInspector.java b/app/src/main/java/de/frajul/endlessroll/views/ShapeInspector.java index 21566e1..636a6c1 100644 --- a/app/src/main/java/de/frajul/endlessroll/views/ShapeInspector.java +++ b/app/src/main/java/de/frajul/endlessroll/views/ShapeInspector.java @@ -1,53 +1,53 @@ -/* - * Created by Julian Mutter on 7/10/18 3:58 PM - * Copyright (c) 2018. All rights reserved. - * Last modified 7/10/18 3:54 PM - * - */ - -package de.frajul.endlessroll.views; - -import android.graphics.Typeface; -import android.view.View; -import android.widget.ImageView; -import android.widget.TextView; - -import de.frajul.endlessroll.R; -import de.frajul.endlessroll.entities.shapes.PlayerShape; -import de.frajul.endlessroll.main.GameActivity; - -/** - * Created by Julian on 03.06.2017. - */ - -public class ShapeInspector { - - private GameActivity gameActivity; - - private TextView title; - private ImageView imageView; - private TextView description; - private ShapeInspectorCheckbox checkbox; - - public ShapeInspector(GameActivity gameActivity, View layout) { - this.gameActivity = gameActivity; - Typeface typeface = gameActivity.getTypeface(); - title = layout.findViewById(R.id.shape_inspector_title); - title.setTypeface(typeface); - imageView = layout.findViewById(R.id.shape_inspector_imageview); - description = layout.findViewById(R.id.shape_inspector_description); - description.setTypeface(typeface); - checkbox = new ShapeInspectorCheckbox(gameActivity, typeface, - layout.findViewById(R.id.shape_inspector_check_box)); - } - - public void update(PlayerShape shape, boolean locked) { - title.setText(locked ? R.string.playershape_name_locked : shape.getNameId()); - imageView.setImageDrawable(gameActivity.getResources() - .getDrawable(locked ? R.drawable.playershapes_locked : shape.getDrawableId())); - description.setText( - locked ? R.string.playershape_description_locked : shape.getDescriptionId()); - - checkbox.updateForTask(shape.getUnlockTask()); - } -} +/* + * Created by Julian Mutter on 7/10/18 3:58 PM + * Copyright (c) 2018. All rights reserved. + * Last modified 7/10/18 3:54 PM + * + */ + +package de.frajul.endlessroll.views; + +import android.graphics.Typeface; +import android.view.View; +import android.widget.ImageView; +import android.widget.TextView; + +import de.frajul.endlessroll.R; +import de.frajul.endlessroll.entities.shapes.PlayerShape; +import de.frajul.endlessroll.main.GameActivity; + +/** + * Created by Julian on 03.06.2017. + */ + +public class ShapeInspector { + + private GameActivity gameActivity; + + private TextView title; + private ImageView imageView; + private TextView description; + private ShapeInspectorCheckbox checkbox; + + public ShapeInspector(GameActivity gameActivity, View layout) { + this.gameActivity = gameActivity; + Typeface typeface = gameActivity.getTypeface(); + title = layout.findViewById(R.id.shape_inspector_title); + title.setTypeface(typeface); + imageView = layout.findViewById(R.id.shape_inspector_imageview); + description = layout.findViewById(R.id.shape_inspector_description); + description.setTypeface(typeface); + checkbox = new ShapeInspectorCheckbox(gameActivity, typeface, + layout.findViewById(R.id.shape_inspector_check_box)); + } + + public void update(PlayerShape shape, boolean locked) { + title.setText(locked ? R.string.playershape_name_locked : shape.getNameId()); + imageView.setImageDrawable(gameActivity.getResources() + .getDrawable(locked ? R.drawable.playershapes_locked : shape.getDrawableId())); + description.setText( + locked ? R.string.playershape_description_locked : shape.getDescriptionId()); + + checkbox.updateForTask(shape.getUnlockTask()); + } +} diff --git a/app/src/main/java/de/frajul/endlessroll/views/ShapeInspectorCheckbox.java b/app/src/main/java/de/frajul/endlessroll/views/ShapeInspectorCheckbox.java index bc52471..e667037 100644 --- a/app/src/main/java/de/frajul/endlessroll/views/ShapeInspectorCheckbox.java +++ b/app/src/main/java/de/frajul/endlessroll/views/ShapeInspectorCheckbox.java @@ -1,57 +1,57 @@ -/* - * Created by Julian Mutter on 7/10/18 3:58 PM - * Copyright (c) 2018. All rights reserved. - * Last modified 7/10/18 3:54 PM - * - */ - -package de.frajul.endlessroll.views; - -import android.graphics.Typeface; -import android.view.View; -import android.widget.ImageView; -import android.widget.TextView; - -import de.frajul.endlessroll.R; -import de.frajul.endlessroll.entities.shapes.EmptyTask; -import de.frajul.endlessroll.entities.shapes.Task; -import de.frajul.endlessroll.main.GameActivity; - -/** - * Created by Julian on 30.10.2017. - */ - -public class ShapeInspectorCheckbox { - - private GameActivity gameActivity; - private View layout; - private ImageView image; - private TextView textView; - - public ShapeInspectorCheckbox(GameActivity gameActivity, Typeface typeface, View layout) { - this.gameActivity = gameActivity; - this.layout = layout; - image = layout.findViewById(R.id.shape_inspector_check_box_image); - textView = layout.findViewById(R.id.shape_inspector_check_box_text); - textView.setTypeface(typeface); - } - - public void updateForTask(Task task) { - boolean taskNotEmpty = !(task instanceof EmptyTask); - setVisible(taskNotEmpty); - if (taskNotEmpty) { - textView.setText(task.toString(gameActivity, gameActivity.getLevelManager())); - setChecked(task.isConditionFulfilled()); - } - } - - private void setChecked(boolean checked) { - int drawableId = checked ? R.drawable.guis_checkbox_checked : R.drawable.guis_checkbox_unchecked; - image.setBackgroundDrawable(gameActivity.getResources().getDrawable(drawableId)); - } - - private void setVisible(boolean visible) { - layout.setVisibility(visible ? View.VISIBLE : View.INVISIBLE); - } - -} +/* + * Created by Julian Mutter on 7/10/18 3:58 PM + * Copyright (c) 2018. All rights reserved. + * Last modified 7/10/18 3:54 PM + * + */ + +package de.frajul.endlessroll.views; + +import android.graphics.Typeface; +import android.view.View; +import android.widget.ImageView; +import android.widget.TextView; + +import de.frajul.endlessroll.R; +import de.frajul.endlessroll.entities.shapes.EmptyTask; +import de.frajul.endlessroll.entities.shapes.Task; +import de.frajul.endlessroll.main.GameActivity; + +/** + * Created by Julian on 30.10.2017. + */ + +public class ShapeInspectorCheckbox { + + private GameActivity gameActivity; + private View layout; + private ImageView image; + private TextView textView; + + public ShapeInspectorCheckbox(GameActivity gameActivity, Typeface typeface, View layout) { + this.gameActivity = gameActivity; + this.layout = layout; + image = layout.findViewById(R.id.shape_inspector_check_box_image); + textView = layout.findViewById(R.id.shape_inspector_check_box_text); + textView.setTypeface(typeface); + } + + public void updateForTask(Task task) { + boolean taskNotEmpty = !(task instanceof EmptyTask); + setVisible(taskNotEmpty); + if (taskNotEmpty) { + textView.setText(task.toString(gameActivity, gameActivity.getLevelManager())); + setChecked(task.isConditionFulfilled()); + } + } + + private void setChecked(boolean checked) { + int drawableId = checked ? R.drawable.guis_checkbox_checked : R.drawable.guis_checkbox_unchecked; + image.setBackgroundDrawable(gameActivity.getResources().getDrawable(drawableId)); + } + + private void setVisible(boolean visible) { + layout.setVisibility(visible ? View.VISIBLE : View.INVISIBLE); + } + +} diff --git a/app/src/main/java/de/frajul/endlessroll/views/ShortMenu.java b/app/src/main/java/de/frajul/endlessroll/views/ShortMenu.java index ee30de3..1a336e5 100644 --- a/app/src/main/java/de/frajul/endlessroll/views/ShortMenu.java +++ b/app/src/main/java/de/frajul/endlessroll/views/ShortMenu.java @@ -1,127 +1,127 @@ -/* - * Created by Julian Mutter on 7/10/18 3:58 PM - * Copyright (c) 2018. All rights reserved. - * Last modified 7/10/18 3:54 PM - * - */ - -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.Button; -import android.widget.CheckBox; -import android.widget.LinearLayout; -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.GameScreen; - -/** - * 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; - - private LinearLayout photoModeLayout; - private CheckBox photoModeShowToolbar; - private Button photoModeActivate; - - public ShortMenu(final Game game, GameScreen gameScreen, GameActivity gameActivity, View layout) { - this.game = game; - this.layout = layout; - Typeface typeface = gameActivity.getTypeface(); - topBar = new TopBar(gameActivity, gameScreen, - layout.findViewById(R.id.shortmenu_topbar)); - continueView = layout.findViewById(R.id.shortmenu_continue); - continueView.setTypeface(typeface); - continueView.setOnClickListener(this); - restartView = layout.findViewById(R.id.shortmenu_restart); - restartView.setTypeface(typeface); - restartView.setOnClickListener(this); - exitView = layout.findViewById(R.id.shortmenu_exit); - exitView.setTypeface(typeface); - exitView.setOnClickListener(this); - - photoModeLayout = layout.findViewById(R.id.shortmenu_photo_mode_panel); - photoModeShowToolbar = photoModeLayout.findViewById(R.id.photo_mode_panel_show_toolbar); - photoModeActivate = photoModeLayout.findViewById(R.id.photo_mode_panel_activate); - photoModeActivate.setOnClickListener(this); - photoModeLayout.setVisibility(GameActivity.IS_DEVELOPER ? View.VISIBLE : View.GONE); - - random = new Random(); - Context context = game.getContext(); - slideLeft = AnimationUtils.loadAnimation(context, R.anim.slide_in_left); - 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.GONE); - if (visible) - topBar.update(); - } - - public boolean isVisible() { - return layout.getVisibility() == View.VISIBLE; - } - - public void prepareToBeShown() { - topBar.update(); - } - - private void startRandomAnimation(View view) { - float r = random.nextFloat(); - if (r >= 0.5) - view.startAnimation(slideRight); - else - view.startAnimation(slideLeft); - } - - public void deactivatePhotoMode(){ - layout.setVisibility(View.VISIBLE); - } - - @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(); - } else if(v.equals(photoModeActivate)){ - boolean showToolBar = photoModeShowToolbar.isChecked(); - layout.setVisibility(View.INVISIBLE); - game.startPhotoMode(showToolBar); - } - } -} +/* + * Created by Julian Mutter on 7/10/18 3:58 PM + * Copyright (c) 2018. All rights reserved. + * Last modified 7/10/18 3:54 PM + * + */ + +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.Button; +import android.widget.CheckBox; +import android.widget.LinearLayout; +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.GameScreen; + +/** + * 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; + + private LinearLayout photoModeLayout; + private CheckBox photoModeShowToolbar; + private Button photoModeActivate; + + public ShortMenu(final Game game, GameScreen gameScreen, GameActivity gameActivity, View layout) { + this.game = game; + this.layout = layout; + Typeface typeface = gameActivity.getTypeface(); + topBar = new TopBar(gameActivity, gameScreen, + layout.findViewById(R.id.shortmenu_topbar)); + continueView = layout.findViewById(R.id.shortmenu_continue); + continueView.setTypeface(typeface); + continueView.setOnClickListener(this); + restartView = layout.findViewById(R.id.shortmenu_restart); + restartView.setTypeface(typeface); + restartView.setOnClickListener(this); + exitView = layout.findViewById(R.id.shortmenu_exit); + exitView.setTypeface(typeface); + exitView.setOnClickListener(this); + + photoModeLayout = layout.findViewById(R.id.shortmenu_photo_mode_panel); + photoModeShowToolbar = photoModeLayout.findViewById(R.id.photo_mode_panel_show_toolbar); + photoModeActivate = photoModeLayout.findViewById(R.id.photo_mode_panel_activate); + photoModeActivate.setOnClickListener(this); + photoModeLayout.setVisibility(GameActivity.IS_DEVELOPER ? View.VISIBLE : View.GONE); + + random = new Random(); + Context context = game.getContext(); + slideLeft = AnimationUtils.loadAnimation(context, R.anim.slide_in_left); + 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.GONE); + if (visible) + topBar.update(); + } + + public boolean isVisible() { + return layout.getVisibility() == View.VISIBLE; + } + + public void prepareToBeShown() { + topBar.update(); + } + + private void startRandomAnimation(View view) { + float r = random.nextFloat(); + if (r >= 0.5) + view.startAnimation(slideRight); + else + view.startAnimation(slideLeft); + } + + public void deactivatePhotoMode(){ + layout.setVisibility(View.VISIBLE); + } + + @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(); + } else if(v.equals(photoModeActivate)){ + boolean showToolBar = photoModeShowToolbar.isChecked(); + layout.setVisibility(View.INVISIBLE); + game.startPhotoMode(showToolBar); + } + } +} diff --git a/app/src/main/java/de/frajul/endlessroll/views/TaskCompletedMessage.java b/app/src/main/java/de/frajul/endlessroll/views/TaskCompletedMessage.java index da70dee..b9f40aa 100644 --- a/app/src/main/java/de/frajul/endlessroll/views/TaskCompletedMessage.java +++ b/app/src/main/java/de/frajul/endlessroll/views/TaskCompletedMessage.java @@ -1,83 +1,83 @@ -/* - * Created by Julian Mutter on 7/10/18 3:58 PM - * Copyright (c) 2018. All rights reserved. - * Last modified 7/10/18 3:54 PM - * - */ - -package de.frajul.endlessroll.views; - -import android.view.LayoutInflater; -import android.view.View; -import android.view.ViewGroup; -import android.widget.LinearLayout; - -import java.util.List; - -import de.frajul.endlessroll.R; -import de.frajul.endlessroll.entities.shapes.PlayerShape; -import de.frajul.endlessroll.main.GameActivity; -import de.frajul.endlessroll.main.screens.Screen; - -/** - * Created by Julian on 15.07.2016. - */ -public class TaskCompletedMessage implements View.OnClickListener, BountyMessage.ScreenSwitchCaller { - - private GameActivity gameActivity; - private View layout; - - private LinearLayout messagesLayout; - - public TaskCompletedMessage(GameActivity gameActivity) { - this.gameActivity = gameActivity; - - LayoutInflater inflater = LayoutInflater.from(gameActivity); - layout = inflater.inflate(R.layout.task_completed_message, null); - layout.setOnClickListener(this); - layout.setLayoutParams(new ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, - ViewGroup.LayoutParams.MATCH_PARENT)); - layout.setVisibility(View.GONE); - messagesLayout = layout.findViewById(R.id.task_completed_unlock_list); - } - - public void show(List shapes) { - LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.WRAP_CONTENT, LinearLayout.LayoutParams.WRAP_CONTENT); - params.setMargins(0, 8, 0, 8); - - for (PlayerShape shape : shapes) - addShapeMessage(shape, params); - layout.setVisibility(View.VISIBLE); - } - - private void addShapeMessage(PlayerShape shape, LinearLayout.LayoutParams params) { - BountyMessage message = createBountyMessage(shape); - messagesLayout.addView(message.getLayout(), params); - } - - private BountyMessage createBountyMessage(PlayerShape shape) { - BountyMessage bountyMessage = new BountyMessage(gameActivity, BountyMessage.MessageType.SHAPE_UNLOCKED, null, this, - shape.getDrawableId()); - return bountyMessage; - } - - private void hide() { - layout.setVisibility(View.GONE); - messagesLayout.removeAllViews(); - } - - public View getLayout() { - return layout; - } - - @Override - public void onClick(View v) { - hide(); - } - - @Override - public void switchScreen(Screen.ScreenType screenType) { - gameActivity.flipToScreen(screenType); - hide(); - } -} +/* + * Created by Julian Mutter on 7/10/18 3:58 PM + * Copyright (c) 2018. All rights reserved. + * Last modified 7/10/18 3:54 PM + * + */ + +package de.frajul.endlessroll.views; + +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.LinearLayout; + +import java.util.List; + +import de.frajul.endlessroll.R; +import de.frajul.endlessroll.entities.shapes.PlayerShape; +import de.frajul.endlessroll.main.GameActivity; +import de.frajul.endlessroll.main.screens.Screen; + +/** + * Created by Julian on 15.07.2016. + */ +public class TaskCompletedMessage implements View.OnClickListener, BountyMessage.ScreenSwitchCaller { + + private GameActivity gameActivity; + private View layout; + + private LinearLayout messagesLayout; + + public TaskCompletedMessage(GameActivity gameActivity) { + this.gameActivity = gameActivity; + + LayoutInflater inflater = LayoutInflater.from(gameActivity); + layout = inflater.inflate(R.layout.task_completed_message, null); + layout.setOnClickListener(this); + layout.setLayoutParams(new ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, + ViewGroup.LayoutParams.MATCH_PARENT)); + layout.setVisibility(View.GONE); + messagesLayout = layout.findViewById(R.id.task_completed_unlock_list); + } + + public void show(List shapes) { + LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.WRAP_CONTENT, LinearLayout.LayoutParams.WRAP_CONTENT); + params.setMargins(0, 8, 0, 8); + + for (PlayerShape shape : shapes) + addShapeMessage(shape, params); + layout.setVisibility(View.VISIBLE); + } + + private void addShapeMessage(PlayerShape shape, LinearLayout.LayoutParams params) { + BountyMessage message = createBountyMessage(shape); + messagesLayout.addView(message.getLayout(), params); + } + + private BountyMessage createBountyMessage(PlayerShape shape) { + BountyMessage bountyMessage = new BountyMessage(gameActivity, BountyMessage.MessageType.SHAPE_UNLOCKED, null, this, + shape.getDrawableId()); + return bountyMessage; + } + + private void hide() { + layout.setVisibility(View.GONE); + messagesLayout.removeAllViews(); + } + + public View 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/ToolInspector.java b/app/src/main/java/de/frajul/endlessroll/views/ToolInspector.java index d6351f0..ea7f36d 100644 --- a/app/src/main/java/de/frajul/endlessroll/views/ToolInspector.java +++ b/app/src/main/java/de/frajul/endlessroll/views/ToolInspector.java @@ -1,108 +1,108 @@ -/* - * Created by Julian Mutter on 7/10/18 3:58 PM - * Copyright (c) 2018. All rights reserved. - * Last modified 7/10/18 3:54 PM - * - */ - -package de.frajul.endlessroll.views; - -import android.graphics.Typeface; -import android.view.View; -import android.view.animation.Animation; -import android.widget.ImageView; -import android.widget.TextView; - -import de.frajul.endlessroll.R; -import de.frajul.endlessroll.entities.tools.ToolType; -import de.frajul.endlessroll.main.GameActivity; -import de.frajul.endlessroll.main.screens.ToolShopScreen; - -/** - * Created by Julian on 03.06.2017. - */ - -public class ToolInspector implements View.OnClickListener { - - private GameActivity gameActivity; - private ToolShopScreen toolShopScreen; - - private TextView title; - private TextView levelView; - private ImageView imageView; - private PriceButton priceButton; - private TextView description; - - private ToolType toolType; - private boolean locked; - - public ToolInspector(ToolShopScreen toolShopScreen, GameActivity gameActivity, View layout) { - this.toolShopScreen = toolShopScreen; - this.gameActivity = gameActivity; - Typeface typeface = gameActivity.getTypeface(); - title = layout.findViewById(R.id.tool_inspector_title); - title.setTypeface(typeface); - levelView = layout.findViewById(R.id.tool_inspector_level_view); - levelView.setTypeface(typeface); - imageView = layout.findViewById(R.id.tool_inspector_imageview); - priceButton = new PriceButton(gameActivity, typeface, - layout.findViewById(R.id.tool_inspector_pricebutton), this); - description = layout.findViewById(R.id.tool_inspector_description); - description.setTypeface(typeface); - } - - public void update(ToolType toolType, boolean locked) { - this.toolType = toolType; - this.locked = locked; - title.setText(locked ? R.string.tool_name_locked : toolType.getName()); - levelView.setText(gameActivity - .getString(R.string.tool_level_format_d, toolType.getCurrentUpgradeLevel())); - levelView.setVisibility(locked ? View.INVISIBLE : View.VISIBLE); - imageView.setImageDrawable(gameActivity.getResources().getDrawable( - locked ? R.drawable.tools_button_locked : toolType.getButtonDrawable())); - - String descriptionLocked = gameActivity.getString(R.string.tool_description_locked_format_d, gameActivity.getUser().getLevelUpBounties().getLevelToolIsUnlocked(toolType)); - String toolDescription = gameActivity.getString(toolType.getDescription()); - description.setText(locked ? descriptionLocked : toolDescription); - - if (!toolType.isBought()) { - priceButton.init(R.string.price_button_buy, toolType.getBuyPrice(), - R.drawable.currency_star); - priceButton.setLayoutVisible(locked ? View.GONE : View.VISIBLE); - priceButton.setLayoutEnabled( - toolType.getBuyPrice() <= gameActivity.getUser().getStarCount()); - } else { - priceButton.init(R.string.price_button_upgrade, toolType.getUpgradePrice(), - R.drawable.currency_energy); - priceButton.setLayoutVisible(toolType.isAtMaxUpgradeLevel() ? View.GONE : View.VISIBLE); - priceButton.setLayoutEnabled( - toolType.getUpgradePrice() <= gameActivity.getUser().getEnergyCount()); - } - } - - private void onToolUpgraded(int price) { - toolType.upgrade(); - toolShopScreen.onToolUpgraded(price); - update(toolType, locked); - } - - @Override - public void onClick(View v) { - if (!toolType.isBought()) { - toolType.setBought(true); - update(toolType, locked); - toolShopScreen.onToolBought(toolType.getBuyPrice(), toolType); - } else { - onToolUpgraded(toolType.getUpgradePrice()); - } - } - - public void startPriceButtonAnimation(Animation animation) { - priceButton.startAnimation(animation); - } - - public void clearPriceButtonAnimation() { - priceButton.clearAnimation(); - } - -} +/* + * Created by Julian Mutter on 7/10/18 3:58 PM + * Copyright (c) 2018. All rights reserved. + * Last modified 7/10/18 3:54 PM + * + */ + +package de.frajul.endlessroll.views; + +import android.graphics.Typeface; +import android.view.View; +import android.view.animation.Animation; +import android.widget.ImageView; +import android.widget.TextView; + +import de.frajul.endlessroll.R; +import de.frajul.endlessroll.entities.tools.ToolType; +import de.frajul.endlessroll.main.GameActivity; +import de.frajul.endlessroll.main.screens.ToolShopScreen; + +/** + * Created by Julian on 03.06.2017. + */ + +public class ToolInspector implements View.OnClickListener { + + private GameActivity gameActivity; + private ToolShopScreen toolShopScreen; + + private TextView title; + private TextView levelView; + private ImageView imageView; + private PriceButton priceButton; + private TextView description; + + private ToolType toolType; + private boolean locked; + + public ToolInspector(ToolShopScreen toolShopScreen, GameActivity gameActivity, View layout) { + this.toolShopScreen = toolShopScreen; + this.gameActivity = gameActivity; + Typeface typeface = gameActivity.getTypeface(); + title = layout.findViewById(R.id.tool_inspector_title); + title.setTypeface(typeface); + levelView = layout.findViewById(R.id.tool_inspector_level_view); + levelView.setTypeface(typeface); + imageView = layout.findViewById(R.id.tool_inspector_imageview); + priceButton = new PriceButton(gameActivity, typeface, + layout.findViewById(R.id.tool_inspector_pricebutton), this); + description = layout.findViewById(R.id.tool_inspector_description); + description.setTypeface(typeface); + } + + public void update(ToolType toolType, boolean locked) { + this.toolType = toolType; + this.locked = locked; + title.setText(locked ? R.string.tool_name_locked : toolType.getName()); + levelView.setText(gameActivity + .getString(R.string.tool_level_format_d, toolType.getCurrentUpgradeLevel())); + levelView.setVisibility(locked ? View.INVISIBLE : View.VISIBLE); + imageView.setImageDrawable(gameActivity.getResources().getDrawable( + locked ? R.drawable.tools_button_locked : toolType.getButtonDrawable())); + + String descriptionLocked = gameActivity.getString(R.string.tool_description_locked_format_d, gameActivity.getUser().getLevelUpBounties().getLevelToolIsUnlocked(toolType)); + String toolDescription = gameActivity.getString(toolType.getDescription()); + description.setText(locked ? descriptionLocked : toolDescription); + + if (!toolType.isBought()) { + priceButton.init(R.string.price_button_buy, toolType.getBuyPrice(), + R.drawable.currency_star); + priceButton.setLayoutVisible(locked ? View.GONE : View.VISIBLE); + priceButton.setLayoutEnabled( + toolType.getBuyPrice() <= gameActivity.getUser().getStarCount()); + } else { + priceButton.init(R.string.price_button_upgrade, toolType.getUpgradePrice(), + R.drawable.currency_energy); + priceButton.setLayoutVisible(toolType.isAtMaxUpgradeLevel() ? View.GONE : View.VISIBLE); + priceButton.setLayoutEnabled( + toolType.getUpgradePrice() <= gameActivity.getUser().getEnergyCount()); + } + } + + private void onToolUpgraded(int price) { + toolType.upgrade(); + toolShopScreen.onToolUpgraded(price); + update(toolType, locked); + } + + @Override + public void onClick(View v) { + if (!toolType.isBought()) { + toolType.setBought(true); + update(toolType, locked); + toolShopScreen.onToolBought(toolType.getBuyPrice(), toolType); + } else { + onToolUpgraded(toolType.getUpgradePrice()); + } + } + + public void startPriceButtonAnimation(Animation animation) { + priceButton.startAnimation(animation); + } + + public void clearPriceButtonAnimation() { + priceButton.clearAnimation(); + } + +} diff --git a/app/src/main/java/de/frajul/endlessroll/views/ToolOfferSlot.java b/app/src/main/java/de/frajul/endlessroll/views/ToolOfferSlot.java index b70e0b3..d933c65 100644 --- a/app/src/main/java/de/frajul/endlessroll/views/ToolOfferSlot.java +++ b/app/src/main/java/de/frajul/endlessroll/views/ToolOfferSlot.java @@ -1,108 +1,108 @@ -/* - * Created by Julian Mutter on 7/10/18 3:58 PM - * Copyright (c) 2018. All rights reserved. - * Last modified 7/10/18 3:54 PM - * - */ - -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 = layout.findViewById(R.id.toolofferslot_slot); - title = layout.findViewById(R.id.toolofferslot_title); - title.setTypeface(typeface); - image = 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); - } -} +/* + * Created by Julian Mutter on 7/10/18 3:58 PM + * Copyright (c) 2018. All rights reserved. + * Last modified 7/10/18 3:54 PM + * + */ + +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 = layout.findViewById(R.id.toolofferslot_slot); + title = layout.findViewById(R.id.toolofferslot_title); + title.setTypeface(typeface); + image = 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 index 57958b8..b4e279a 100644 --- a/app/src/main/java/de/frajul/endlessroll/views/TopBar.java +++ b/app/src/main/java/de/frajul/endlessroll/views/TopBar.java @@ -1,157 +1,157 @@ -/* - * Created by Julian Mutter on 7/10/18 3:58 PM - * Copyright (c) 2018. All rights reserved. - * Last modified 7/10/18 3:54 PM - * - */ - -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.user.User; - -/** - * Created by Julian on 08.07.2016. - */ -public class TopBar implements View.OnClickListener { - - private GameActivity gameActivity; - private View layout; - private Screen parent; - private Screen.ScreenType customCallerForScreenSwitch = Screen.ScreenType.NONE; - - private Animation starDecreaseAnimation; - private Animation energyDecreaseAnimation; - private Animation toolShopPulse; - - private TextView levelDisplay; - private ProgressBar levelProgress; - private TextView starCount; - private TextView energyCount; - private Button backButton; - private Button settingsButton; - private Button toolshopButton; - private Button shapeshopButton; - private TextView starCountDecrease; - private TextView energyCountDecrease; - - public TopBar(GameActivity gameActivity, Screen parent, View layout) { - this.gameActivity = gameActivity; - this.parent = parent; - 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 = layout.findViewById(R.id.topbar_leveldisplay); - levelDisplay.setTypeface(typeface); - levelProgress = layout.findViewById(R.id.topbar_levelprogress); - starCount = layout.findViewById(R.id.topbar_starcount); - starCount.setTypeface(typeface); - energyCount = layout.findViewById(R.id.topbar_energycount); - energyCount.setTypeface(typeface); - backButton = layout.findViewById(R.id.topbar_back_button); - backButton.setOnClickListener(this); - settingsButton = layout.findViewById(R.id.topbar_settings); - settingsButton.setOnClickListener(this); - toolshopButton = layout.findViewById(R.id.topbar_toolshop); - toolshopButton.setOnClickListener(this); - shapeshopButton = layout.findViewById(R.id.topbar_shapeshop); - shapeshopButton.setOnClickListener(this); - if (parent.getType() == Screen.ScreenType.SETTINGS) - settingsButton.setEnabled(false); - if (parent.getType() == Screen.ScreenType.TOOL_SHOP) - toolshopButton.setEnabled(false); - if (parent.getType() == Screen.ScreenType.SHAPE_SHOP) - shapeshopButton.setEnabled(false); - if (parent.getType() == Screen.ScreenType.GAME) { - backButton.setEnabled(false); - toolshopButton.setEnabled(false); - shapeshopButton.setEnabled(false); - } - starCountDecrease = layout.findViewById(R.id.topbar_starcount_decrease); - starCountDecrease.setTypeface(typeface); - energyCountDecrease = 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() + ""); - - gameActivity.getTutorialManager().onTopBarUpdate(this); - } - - public void startToolShopButtonPulse() { - 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); - } - - public void setCustomCallerForScreenSwitch(Screen.ScreenType customCallerForScreenSwitch) { - this.customCallerForScreenSwitch = customCallerForScreenSwitch; - } - - @Override - public void onClick(View v) { - if (v.equals(backButton)) { - parent.onBackKeyDown(); - } - if (v.equals(toolshopButton)) { - flipToScreen(Screen.ScreenType.TOOL_SHOP); - } else if (v.equals(shapeshopButton)) { - flipToScreen(Screen.ScreenType.SHAPE_SHOP); - } else if (v.equals(settingsButton)) { - flipToScreen(Screen.ScreenType.SETTINGS); - } - } - - private void flipToScreen(Screen.ScreenType screenType) { - if (customCallerForScreenSwitch != Screen.ScreenType.NONE) - gameActivity.flipToScreen(screenType, customCallerForScreenSwitch); - gameActivity.flipToScreen(screenType); - } - - public Screen.ScreenType getParentType() { - return parent.getType(); - } - - public boolean isToolShopButtonEnabled() { - return toolshopButton.isEnabled(); - } -} +/* + * Created by Julian Mutter on 7/10/18 3:58 PM + * Copyright (c) 2018. All rights reserved. + * Last modified 7/10/18 3:54 PM + * + */ + +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.user.User; + +/** + * Created by Julian on 08.07.2016. + */ +public class TopBar implements View.OnClickListener { + + private GameActivity gameActivity; + private View layout; + private Screen parent; + private Screen.ScreenType customCallerForScreenSwitch = Screen.ScreenType.NONE; + + private Animation starDecreaseAnimation; + private Animation energyDecreaseAnimation; + private Animation toolShopPulse; + + private TextView levelDisplay; + private ProgressBar levelProgress; + private TextView starCount; + private TextView energyCount; + private Button backButton; + private Button settingsButton; + private Button toolshopButton; + private Button shapeshopButton; + private TextView starCountDecrease; + private TextView energyCountDecrease; + + public TopBar(GameActivity gameActivity, Screen parent, View layout) { + this.gameActivity = gameActivity; + this.parent = parent; + 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 = layout.findViewById(R.id.topbar_leveldisplay); + levelDisplay.setTypeface(typeface); + levelProgress = layout.findViewById(R.id.topbar_levelprogress); + starCount = layout.findViewById(R.id.topbar_starcount); + starCount.setTypeface(typeface); + energyCount = layout.findViewById(R.id.topbar_energycount); + energyCount.setTypeface(typeface); + backButton = layout.findViewById(R.id.topbar_back_button); + backButton.setOnClickListener(this); + settingsButton = layout.findViewById(R.id.topbar_settings); + settingsButton.setOnClickListener(this); + toolshopButton = layout.findViewById(R.id.topbar_toolshop); + toolshopButton.setOnClickListener(this); + shapeshopButton = layout.findViewById(R.id.topbar_shapeshop); + shapeshopButton.setOnClickListener(this); + if (parent.getType() == Screen.ScreenType.SETTINGS) + settingsButton.setEnabled(false); + if (parent.getType() == Screen.ScreenType.TOOL_SHOP) + toolshopButton.setEnabled(false); + if (parent.getType() == Screen.ScreenType.SHAPE_SHOP) + shapeshopButton.setEnabled(false); + if (parent.getType() == Screen.ScreenType.GAME) { + backButton.setEnabled(false); + toolshopButton.setEnabled(false); + shapeshopButton.setEnabled(false); + } + starCountDecrease = layout.findViewById(R.id.topbar_starcount_decrease); + starCountDecrease.setTypeface(typeface); + energyCountDecrease = 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() + ""); + + gameActivity.getTutorialManager().onTopBarUpdate(this); + } + + public void startToolShopButtonPulse() { + 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); + } + + public void setCustomCallerForScreenSwitch(Screen.ScreenType customCallerForScreenSwitch) { + this.customCallerForScreenSwitch = customCallerForScreenSwitch; + } + + @Override + public void onClick(View v) { + if (v.equals(backButton)) { + parent.onBackKeyDown(); + } + if (v.equals(toolshopButton)) { + flipToScreen(Screen.ScreenType.TOOL_SHOP); + } else if (v.equals(shapeshopButton)) { + flipToScreen(Screen.ScreenType.SHAPE_SHOP); + } else if (v.equals(settingsButton)) { + flipToScreen(Screen.ScreenType.SETTINGS); + } + } + + private void flipToScreen(Screen.ScreenType screenType) { + if (customCallerForScreenSwitch != Screen.ScreenType.NONE) + gameActivity.flipToScreen(screenType, customCallerForScreenSwitch); + gameActivity.flipToScreen(screenType); + } + + public Screen.ScreenType getParentType() { + return parent.getType(); + } + + public boolean isToolShopButtonEnabled() { + return toolshopButton.isEnabled(); + } +} diff --git a/app/src/main/java/de/frajul/endlessroll/views/ViewManager.java b/app/src/main/java/de/frajul/endlessroll/views/ViewManager.java index 60d35ef..26d2d6e 100644 --- a/app/src/main/java/de/frajul/endlessroll/views/ViewManager.java +++ b/app/src/main/java/de/frajul/endlessroll/views/ViewManager.java @@ -1,179 +1,179 @@ -/* - * Created by Julian Mutter on 7/10/18 3:58 PM - * Copyright (c) 2018. All rights reserved. - * Last modified 7/10/18 3:54 PM - * - */ - -package de.frajul.endlessroll.views; - -import android.view.View; -import android.widget.Button; -import android.widget.ImageView; -import android.widget.RelativeLayout; -import android.widget.TextView; - -import java.util.ArrayList; -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.game.Game; -import de.frajul.endlessroll.main.game.Timer; -import de.frajul.endlessroll.main.screens.GameScreen; - -/** - * Created by Julian on 11.12.2015. - */ -public class ViewManager implements View.OnClickListener { - - private GameHandler gameViewHandler; - private Game game; - private GameActivity gameActivity; - - private TextView fpsView; - private TextView playerProgressView; - private GameOverMessage gameOverMessage; - private GoalMessage goalMessage; - public ShortMenu shortMenu; - - private ImageView pauseButton; - - private boolean showFps = false; - - private List bombErrorMessages = new ArrayList<>(); - - private String fpsFormat, playerProgressFormat; - - public ViewManager(final Game game, final GameScreen gameScreen, final GameHandler gameViewHandler, final GameActivity gameActivity) { - this.game = game; - this.gameViewHandler = gameViewHandler; - this.gameActivity = gameActivity; - - final RelativeLayout layout = gameViewHandler.getRootLayout(); - gameViewHandler.startInUiThread(new Runnable() { - @Override - public void run() { - shortMenu = new ShortMenu(game, gameScreen, gameActivity, - layout.findViewById(R.id.game_shortmenu)); - gameOverMessage = new GameOverMessage(game, gameScreen, gameActivity, - layout.findViewById(R.id.game_game_over_message)); - goalMessage = new GoalMessage(game, gameScreen, gameActivity, - layout.findViewById(R.id.game_goal_message)); - } - }); - pauseButton = layout.findViewById(R.id.game_pausebutton); - pauseButton.setOnClickListener(this); - playerProgressView = layout.findViewById(R.id.game_playerprogress); - playerProgressView.setTypeface(gameActivity.getTypeface()); - fpsView = layout.findViewById(R.id.game_fps); - fpsView.setTypeface(gameActivity.getTypeface()); - - fpsFormat = game.getContext().getString(R.string.game_fps_format_d); - playerProgressFormat = game.getContext().getString(R.string.game_playerprogress_format_d); - } - - public void prepareToBeShown() { - if (shortMenu.isVisible()) - shortMenu.prepareToBeShown(); - if (gameOverMessage.isVisible()) - gameOverMessage.prepareToBeShown(); - if (goalMessage.isVisible()) - goalMessage.prepareToBeShown(); - } - - public void showBombErrorMessage(float xPos, float yPos) { - for (BombErrorMessage bombErrorMessage : bombErrorMessages) { - if (!bombErrorMessage.isAnimationRunning()) { - bombErrorMessage.show(xPos, yPos); - return; - } - } - BombErrorMessage bombErrorMessage = new BombErrorMessage(gameActivity); - bombErrorMessage.show(xPos, yPos); - gameViewHandler.getRootLayout().addView(bombErrorMessage.getView()); - bombErrorMessages.add(bombErrorMessage); - } - - @Override - public void onClick(View v) { - game.tryToPause(); - } - - public void resetViews() { - gameViewHandler.startInUiThread(new Runnable() { - @Override - public void run() { - playerProgressView.setText(R.string.game_playerprogress_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 endShortMenuPhotoMode(){ - shortMenu.deactivatePhotoMode(); - } - - public void hideShortMenu() { - shortMenu.setVisible(false); - } - - public void update(final boolean gameRunning, final Timer timer, final int playerProgress) { - gameViewHandler.startInUiThread(new Runnable() { - @Override - public void run() { - if (showFps) - fpsView.setText(String.format(fpsFormat, timer.getFps())); - if (gameRunning) { - playerProgressView.setText(String.format(playerProgressFormat, playerProgress)); - } - } - }); - } - - public boolean isShortMenuVisible() { - return shortMenu.isVisible(); - } - - public void setShowFps(final boolean showFps) { - fpsView.setVisibility(showFps ? View.VISIBLE : View.GONE); - this.showFps = showFps; - } - - public TextView getPlayerProgressView() { - return playerProgressView; - } - - public ImageView getPauseButton() { - return pauseButton; - } -} +/* + * Created by Julian Mutter on 7/10/18 3:58 PM + * Copyright (c) 2018. All rights reserved. + * Last modified 7/10/18 3:54 PM + * + */ + +package de.frajul.endlessroll.views; + +import android.view.View; +import android.widget.Button; +import android.widget.ImageView; +import android.widget.RelativeLayout; +import android.widget.TextView; + +import java.util.ArrayList; +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.game.Game; +import de.frajul.endlessroll.main.game.Timer; +import de.frajul.endlessroll.main.screens.GameScreen; + +/** + * Created by Julian on 11.12.2015. + */ +public class ViewManager implements View.OnClickListener { + + private GameHandler gameViewHandler; + private Game game; + private GameActivity gameActivity; + + private TextView fpsView; + private TextView playerProgressView; + private GameOverMessage gameOverMessage; + private GoalMessage goalMessage; + public ShortMenu shortMenu; + + private ImageView pauseButton; + + private boolean showFps = false; + + private List bombErrorMessages = new ArrayList<>(); + + private String fpsFormat, playerProgressFormat; + + public ViewManager(final Game game, final GameScreen gameScreen, final GameHandler gameViewHandler, final GameActivity gameActivity) { + this.game = game; + this.gameViewHandler = gameViewHandler; + this.gameActivity = gameActivity; + + final RelativeLayout layout = gameViewHandler.getRootLayout(); + gameViewHandler.startInUiThread(new Runnable() { + @Override + public void run() { + shortMenu = new ShortMenu(game, gameScreen, gameActivity, + layout.findViewById(R.id.game_shortmenu)); + gameOverMessage = new GameOverMessage(game, gameScreen, gameActivity, + layout.findViewById(R.id.game_game_over_message)); + goalMessage = new GoalMessage(game, gameScreen, gameActivity, + layout.findViewById(R.id.game_goal_message)); + } + }); + pauseButton = layout.findViewById(R.id.game_pausebutton); + pauseButton.setOnClickListener(this); + playerProgressView = layout.findViewById(R.id.game_playerprogress); + playerProgressView.setTypeface(gameActivity.getTypeface()); + fpsView = layout.findViewById(R.id.game_fps); + fpsView.setTypeface(gameActivity.getTypeface()); + + fpsFormat = game.getContext().getString(R.string.game_fps_format_d); + playerProgressFormat = game.getContext().getString(R.string.game_playerprogress_format_d); + } + + public void prepareToBeShown() { + if (shortMenu.isVisible()) + shortMenu.prepareToBeShown(); + if (gameOverMessage.isVisible()) + gameOverMessage.prepareToBeShown(); + if (goalMessage.isVisible()) + goalMessage.prepareToBeShown(); + } + + public void showBombErrorMessage(float xPos, float yPos) { + for (BombErrorMessage bombErrorMessage : bombErrorMessages) { + if (!bombErrorMessage.isAnimationRunning()) { + bombErrorMessage.show(xPos, yPos); + return; + } + } + BombErrorMessage bombErrorMessage = new BombErrorMessage(gameActivity); + bombErrorMessage.show(xPos, yPos); + gameViewHandler.getRootLayout().addView(bombErrorMessage.getView()); + bombErrorMessages.add(bombErrorMessage); + } + + @Override + public void onClick(View v) { + game.tryToPause(); + } + + public void resetViews() { + gameViewHandler.startInUiThread(new Runnable() { + @Override + public void run() { + playerProgressView.setText(R.string.game_playerprogress_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 endShortMenuPhotoMode(){ + shortMenu.deactivatePhotoMode(); + } + + public void hideShortMenu() { + shortMenu.setVisible(false); + } + + public void update(final boolean gameRunning, final Timer timer, final int playerProgress) { + gameViewHandler.startInUiThread(new Runnable() { + @Override + public void run() { + if (showFps) + fpsView.setText(String.format(fpsFormat, timer.getFps())); + if (gameRunning) { + playerProgressView.setText(String.format(playerProgressFormat, playerProgress)); + } + } + }); + } + + public boolean isShortMenuVisible() { + return shortMenu.isVisible(); + } + + public void setShowFps(final boolean showFps) { + fpsView.setVisibility(showFps ? View.VISIBLE : View.GONE); + this.showFps = showFps; + } + + public TextView getPlayerProgressView() { + return playerProgressView; + } + + public ImageView getPauseButton() { + return pauseButton; + } +} diff --git a/app/src/main/java/de/frajul/endlessroll/views/WorldButton.java b/app/src/main/java/de/frajul/endlessroll/views/WorldButton.java index b71ae4f..0527151 100644 --- a/app/src/main/java/de/frajul/endlessroll/views/WorldButton.java +++ b/app/src/main/java/de/frajul/endlessroll/views/WorldButton.java @@ -1,93 +1,93 @@ -/* - * Created by Julian Mutter on 7/10/18 3:58 PM - * Copyright (c) 2018. All rights reserved. - * Last modified 7/10/18 3:54 PM - * - */ - -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 = layout.findViewById(R.id.worldbutton_title); - title.setTypeface(typeface); - previewImage = layout.findViewById(R.id.worldbutton_preview); - lock = layout.findViewById(R.id.worldbutton_lock); - levelCount = layout.findViewById(R.id.worldbutton_levelcount); - levelCount.setTypeface(typeface); - starCount = layout.findViewById(R.id.worldbutton_starcount); - starCount.setTypeface(typeface); - energyCount = 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); - } -} +/* + * Created by Julian Mutter on 7/10/18 3:58 PM + * Copyright (c) 2018. All rights reserved. + * Last modified 7/10/18 3:54 PM + * + */ + +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 = layout.findViewById(R.id.worldbutton_title); + title.setTypeface(typeface); + previewImage = layout.findViewById(R.id.worldbutton_preview); + lock = layout.findViewById(R.id.worldbutton_lock); + levelCount = layout.findViewById(R.id.worldbutton_levelcount); + levelCount.setTypeface(typeface); + starCount = layout.findViewById(R.id.worldbutton_starcount); + starCount.setTypeface(typeface); + energyCount = 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/java/de/frajul/endlessroll/views/WorldButtonOnClickListener.java b/app/src/main/java/de/frajul/endlessroll/views/WorldButtonOnClickListener.java index b7e93ed..d6e95be 100644 --- a/app/src/main/java/de/frajul/endlessroll/views/WorldButtonOnClickListener.java +++ b/app/src/main/java/de/frajul/endlessroll/views/WorldButtonOnClickListener.java @@ -1,18 +1,18 @@ -/* - * Created by Julian Mutter on 7/10/18 3:58 PM - * Copyright (c) 2018. All rights reserved. - * Last modified 7/10/18 3:54 PM - * - */ - -package de.frajul.endlessroll.views; - -/** - * Created by Julian on 04.11.2017. - */ - -public interface WorldButtonOnClickListener { - - void onClick(WorldButton worldButton); - -} +/* + * Created by Julian Mutter on 7/10/18 3:58 PM + * Copyright (c) 2018. All rights reserved. + * Last modified 7/10/18 3:54 PM + * + */ + +package de.frajul.endlessroll.views; + +/** + * Created by Julian on 04.11.2017. + */ + +public interface WorldButtonOnClickListener { + + void onClick(WorldButton worldButton); + +} diff --git a/app/src/main/res/anim/decrease.xml b/app/src/main/res/anim/decrease.xml index d5db364..ca98efd 100644 --- a/app/src/main/res/anim/decrease.xml +++ b/app/src/main/res/anim/decrease.xml @@ -1,25 +1,25 @@ - - - - - - - + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/anim/fade_in.xml b/app/src/main/res/anim/fade_in.xml index ea685ab..6c735dd 100644 --- a/app/src/main/res/anim/fade_in.xml +++ b/app/src/main/res/anim/fade_in.xml @@ -1,15 +1,15 @@ - - - - - + + + + + \ No newline at end of file diff --git a/app/src/main/res/anim/fade_out_accelerating.xml b/app/src/main/res/anim/fade_out_accelerating.xml index c2a0647..2705784 100644 --- a/app/src/main/res/anim/fade_out_accelerating.xml +++ b/app/src/main/res/anim/fade_out_accelerating.xml @@ -1,16 +1,16 @@ - - - - - + + + + + \ No newline at end of file diff --git a/app/src/main/res/anim/pulse.xml b/app/src/main/res/anim/pulse.xml index a6f1891..f0edc96 100644 --- a/app/src/main/res/anim/pulse.xml +++ b/app/src/main/res/anim/pulse.xml @@ -1,20 +1,20 @@ - - - - - + + + + + \ No newline at end of file diff --git a/app/src/main/res/anim/rotate.xml b/app/src/main/res/anim/rotate.xml index 0775919..e0acc6d 100644 --- a/app/src/main/res/anim/rotate.xml +++ b/app/src/main/res/anim/rotate.xml @@ -1,20 +1,20 @@ - - - - - + + + + + \ No newline at end of file diff --git a/app/src/main/res/anim/shape_button_rotation.xml b/app/src/main/res/anim/shape_button_rotation.xml index 6c7b985..2668a74 100644 --- a/app/src/main/res/anim/shape_button_rotation.xml +++ b/app/src/main/res/anim/shape_button_rotation.xml @@ -1,19 +1,19 @@ - - - - - + + + + + \ No newline at end of file diff --git a/app/src/main/res/anim/slide_in_left.xml b/app/src/main/res/anim/slide_in_left.xml index be403c0..ee2b655 100644 --- a/app/src/main/res/anim/slide_in_left.xml +++ b/app/src/main/res/anim/slide_in_left.xml @@ -1,19 +1,19 @@ - - - - - - + + + + + + \ No newline at end of file diff --git a/app/src/main/res/anim/slide_in_right.xml b/app/src/main/res/anim/slide_in_right.xml index a1dc3d1..996dcbb 100644 --- a/app/src/main/res/anim/slide_in_right.xml +++ b/app/src/main/res/anim/slide_in_right.xml @@ -1,19 +1,19 @@ - - - - - - + + + + + + \ No newline at end of file diff --git a/app/src/main/res/anim/slide_in_top.xml b/app/src/main/res/anim/slide_in_top.xml index 3b1829b..23c3636 100644 --- a/app/src/main/res/anim/slide_in_top.xml +++ b/app/src/main/res/anim/slide_in_top.xml @@ -1,19 +1,19 @@ - - - - - - + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/xml_background_bountymessage.xml b/app/src/main/res/drawable/xml_background_bountymessage.xml index a78a430..81329c9 100644 --- a/app/src/main/res/drawable/xml_background_bountymessage.xml +++ b/app/src/main/res/drawable/xml_background_bountymessage.xml @@ -1,27 +1,27 @@ - - - - - - - - - + + + + + + + + + diff --git a/app/src/main/res/drawable/xml_background_dialog_button.xml b/app/src/main/res/drawable/xml_background_dialog_button.xml index 4dfd95c..8c5002e 100644 --- a/app/src/main/res/drawable/xml_background_dialog_button.xml +++ b/app/src/main/res/drawable/xml_background_dialog_button.xml @@ -1,24 +1,24 @@ - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + diff --git a/app/src/main/res/drawable/xml_background_exit_confirm_dialog.xml b/app/src/main/res/drawable/xml_background_exit_confirm_dialog.xml index a6e3073..575eee9 100644 --- a/app/src/main/res/drawable/xml_background_exit_confirm_dialog.xml +++ b/app/src/main/res/drawable/xml_background_exit_confirm_dialog.xml @@ -1,17 +1,17 @@ - - - - - - - - + + + + + + + + diff --git a/app/src/main/res/drawable/xml_background_game_over_message_button.xml b/app/src/main/res/drawable/xml_background_game_over_message_button.xml index 6e9f472..b62c758 100644 --- a/app/src/main/res/drawable/xml_background_game_over_message_button.xml +++ b/app/src/main/res/drawable/xml_background_game_over_message_button.xml @@ -1,24 +1,24 @@ - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + diff --git a/app/src/main/res/drawable/xml_background_levelbutton.xml b/app/src/main/res/drawable/xml_background_levelbutton.xml index 4738f80..4e8363f 100644 --- a/app/src/main/res/drawable/xml_background_levelbutton.xml +++ b/app/src/main/res/drawable/xml_background_levelbutton.xml @@ -1,27 +1,27 @@ - - - - - - - - - + + + + + + + + + diff --git a/app/src/main/res/drawable/xml_background_toolslot.xml b/app/src/main/res/drawable/xml_background_toolslot.xml index c9b43b8..f865452 100644 --- a/app/src/main/res/drawable/xml_background_toolslot.xml +++ b/app/src/main/res/drawable/xml_background_toolslot.xml @@ -1,13 +1,13 @@ - - - - - - - + + + + + + + diff --git a/app/src/main/res/drawable/xml_background_topbar.xml b/app/src/main/res/drawable/xml_background_topbar.xml index a2abffc..9dfeadb 100644 --- a/app/src/main/res/drawable/xml_background_topbar.xml +++ b/app/src/main/res/drawable/xml_background_topbar.xml @@ -1,21 +1,21 @@ - - - - - - - - - + + + + + + + + + diff --git a/app/src/main/res/drawable/xml_background_tutorialimageview.xml b/app/src/main/res/drawable/xml_background_tutorialimageview.xml index 0089153..fd6c2e9 100644 --- a/app/src/main/res/drawable/xml_background_tutorialimageview.xml +++ b/app/src/main/res/drawable/xml_background_tutorialimageview.xml @@ -1,15 +1,15 @@ - - - - - - + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/xml_background_tutorialtextview.xml b/app/src/main/res/drawable/xml_background_tutorialtextview.xml index e101cfa..81c8d8a 100644 --- a/app/src/main/res/drawable/xml_background_tutorialtextview.xml +++ b/app/src/main/res/drawable/xml_background_tutorialtextview.xml @@ -1,22 +1,22 @@ - - - - - - - - + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/xml_background_worldbutton.xml b/app/src/main/res/drawable/xml_background_worldbutton.xml index e9272e2..55a0345 100644 --- a/app/src/main/res/drawable/xml_background_worldbutton.xml +++ b/app/src/main/res/drawable/xml_background_worldbutton.xml @@ -1,27 +1,27 @@ - - - - - - - - - + + + + + + + + + diff --git a/app/src/main/res/drawable/xml_layers_levelprogressbar.xml b/app/src/main/res/drawable/xml_layers_levelprogressbar.xml index 8895de8..a84b4f3 100644 --- a/app/src/main/res/drawable/xml_layers_levelprogressbar.xml +++ b/app/src/main/res/drawable/xml_layers_levelprogressbar.xml @@ -1,26 +1,26 @@ - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/xml_selector_backbutton.xml b/app/src/main/res/drawable/xml_selector_backbutton.xml index a875095..c60899b 100644 --- a/app/src/main/res/drawable/xml_selector_backbutton.xml +++ b/app/src/main/res/drawable/xml_selector_backbutton.xml @@ -1,16 +1,16 @@ - - - - - - - - - - + + + + + + + + + + \ 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 index ebdb4a9..c721a0f 100644 --- a/app/src/main/res/drawable/xml_selector_gamebutton.xml +++ b/app/src/main/res/drawable/xml_selector_gamebutton.xml @@ -1,34 +1,34 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/xml_selector_music.xml b/app/src/main/res/drawable/xml_selector_music.xml index 1e08045..c8f19df 100644 --- a/app/src/main/res/drawable/xml_selector_music.xml +++ b/app/src/main/res/drawable/xml_selector_music.xml @@ -1,17 +1,17 @@ - - - - - - - - - + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/xml_selector_pricebutton.xml b/app/src/main/res/drawable/xml_selector_pricebutton.xml index 473b810..c943fed 100644 --- a/app/src/main/res/drawable/xml_selector_pricebutton.xml +++ b/app/src/main/res/drawable/xml_selector_pricebutton.xml @@ -1,34 +1,34 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/xml_selector_settings_button.xml b/app/src/main/res/drawable/xml_selector_settings_button.xml index 37e59ab..c1901b9 100644 --- a/app/src/main/res/drawable/xml_selector_settings_button.xml +++ b/app/src/main/res/drawable/xml_selector_settings_button.xml @@ -1,43 +1,43 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/xml_selector_settingsbutton.xml b/app/src/main/res/drawable/xml_selector_settingsbutton.xml index 0a4caaa..dfd5a3e 100644 --- a/app/src/main/res/drawable/xml_selector_settingsbutton.xml +++ b/app/src/main/res/drawable/xml_selector_settingsbutton.xml @@ -1,16 +1,16 @@ - - - - - - - - - - + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/xml_selector_shapeshopbutton.xml b/app/src/main/res/drawable/xml_selector_shapeshopbutton.xml index bf96680..aded559 100644 --- a/app/src/main/res/drawable/xml_selector_shapeshopbutton.xml +++ b/app/src/main/res/drawable/xml_selector_shapeshopbutton.xml @@ -1,16 +1,16 @@ - - - - - - - - - - + + + + + + + + + + \ 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 index f2903c2..80c277c 100644 --- a/app/src/main/res/drawable/xml_selector_sound.xml +++ b/app/src/main/res/drawable/xml_selector_sound.xml @@ -1,17 +1,17 @@ - - - - - - - - - + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/xml_selector_toolshopbutton.xml b/app/src/main/res/drawable/xml_selector_toolshopbutton.xml index 27ca7c9..c70de4d 100644 --- a/app/src/main/res/drawable/xml_selector_toolshopbutton.xml +++ b/app/src/main/res/drawable/xml_selector_toolshopbutton.xml @@ -1,16 +1,16 @@ - - - - - - - - - - + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/bomb_error_message.xml b/app/src/main/res/layout/bomb_error_message.xml index 7775d75..eca1471 100644 --- a/app/src/main/res/layout/bomb_error_message.xml +++ b/app/src/main/res/layout/bomb_error_message.xml @@ -1,15 +1,15 @@ - - - - + + + \ No newline at end of file diff --git a/app/src/main/res/layout/confirm_dialog.xml b/app/src/main/res/layout/confirm_dialog.xml index fbb1ca2..5d621c5 100644 --- a/app/src/main/res/layout/confirm_dialog.xml +++ b/app/src/main/res/layout/confirm_dialog.xml @@ -1,49 +1,49 @@ - - - - - - - - -