Through stage 4
This commit is contained in:
		
										
											Binary file not shown.
										
									
								
							| 
		 Before Width: | Height: | Size: 3.0 KiB  | 
										
											Binary file not shown.
										
									
								
							| 
		 Before Width: | Height: | Size: 4.1 KiB  | 
							
								
								
									
										20
									
								
								android/assets/images/game.atlas
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										20
									
								
								android/assets/images/game.atlas
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,20 @@
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
 | 
					game.png
 | 
				
			||||||
 | 
					size: 256,128
 | 
				
			||||||
 | 
					format: RGBA8888
 | 
				
			||||||
 | 
					filter: Nearest,Nearest
 | 
				
			||||||
 | 
					repeat: none
 | 
				
			||||||
 | 
					bucket
 | 
				
			||||||
 | 
					  rotate: false
 | 
				
			||||||
 | 
					  xy: 2, 2
 | 
				
			||||||
 | 
					  size: 64, 64
 | 
				
			||||||
 | 
					  orig: 64, 64
 | 
				
			||||||
 | 
					  offset: 0, 0
 | 
				
			||||||
 | 
					  index: -1
 | 
				
			||||||
 | 
					drop
 | 
				
			||||||
 | 
					  rotate: false
 | 
				
			||||||
 | 
					  xy: 70, 2
 | 
				
			||||||
 | 
					  size: 64, 64
 | 
				
			||||||
 | 
					  orig: 64, 64
 | 
				
			||||||
 | 
					  offset: 0, 0
 | 
				
			||||||
 | 
					  index: -1
 | 
				
			||||||
							
								
								
									
										
											BIN
										
									
								
								android/assets/images/game.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								android/assets/images/game.png
									
									
									
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							| 
		 After Width: | Height: | Size: 11 KiB  | 
@@ -104,7 +104,9 @@ project(":core") {
 | 
				
			|||||||
        api "com.badlogicgames.ashley:ashley:$ashleyVersion"
 | 
					        api "com.badlogicgames.ashley:ashley:$ashleyVersion"
 | 
				
			||||||
        api "org.jetbrains.kotlin:kotlin-stdlib:$kotlinVersion"
 | 
					        api "org.jetbrains.kotlin:kotlin-stdlib:$kotlinVersion"
 | 
				
			||||||
        api "io.github.libktx:ktx-app:$ktxVersion"
 | 
					        api "io.github.libktx:ktx-app:$ktxVersion"
 | 
				
			||||||
 | 
					        api "io.github.libktx:ktx-assets:$ktxVersion"
 | 
				
			||||||
        api "io.github.libktx:ktx-collections:$ktxVersion"
 | 
					        api "io.github.libktx:ktx-collections:$ktxVersion"
 | 
				
			||||||
        api "io.github.libktx:ktx-graphics:$ktxVersion"
 | 
					        api "io.github.libktx:ktx-graphics:$ktxVersion"
 | 
				
			||||||
 | 
					        api "io.github.libktx:ktx-log:$ktxVersion"
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										32
									
								
								core/src/me/msoucy/ptures/EAssets.kt
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										32
									
								
								core/src/me/msoucy/ptures/EAssets.kt
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,32 @@
 | 
				
			|||||||
 | 
					package me.msoucy.ptures
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import com.badlogic.gdx.assets.AssetManager
 | 
				
			||||||
 | 
					import com.badlogic.gdx.audio.Music
 | 
				
			||||||
 | 
					import com.badlogic.gdx.audio.Sound
 | 
				
			||||||
 | 
					import com.badlogic.gdx.graphics.g2d.TextureAtlas
 | 
				
			||||||
 | 
					import ktx.assets.getAsset
 | 
				
			||||||
 | 
					import ktx.assets.load
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// sounds
 | 
				
			||||||
 | 
					enum class SoundAssets(val path: String) {
 | 
				
			||||||
 | 
					    Drop("sounds/drop.wav")
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					inline fun AssetManager.load(asset: SoundAssets) = load<Sound>(asset.path)
 | 
				
			||||||
 | 
					inline operator fun AssetManager.get(asset: SoundAssets) = getAsset<Sound>(asset.path)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// music
 | 
				
			||||||
 | 
					enum class MusicAssets(val path: String) {
 | 
				
			||||||
 | 
					    Rain("music/rain.mp3")
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					inline fun AssetManager.load(asset: MusicAssets) = load<Music>(asset.path)
 | 
				
			||||||
 | 
					inline operator fun AssetManager.get(asset: MusicAssets) = getAsset<Music>(asset.path)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// texture atlas
 | 
				
			||||||
 | 
					enum class TextureAtlasAssets(val path: String) {
 | 
				
			||||||
 | 
					    Game("images/game.atlas")
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					inline fun AssetManager.load(asset: TextureAtlasAssets) = load<TextureAtlas>(asset.path)
 | 
				
			||||||
 | 
					inline operator fun AssetManager.get(asset: TextureAtlasAssets) = getAsset<TextureAtlas>(asset.path)
 | 
				
			||||||
@@ -1,25 +1,27 @@
 | 
				
			|||||||
package me.msoucy.ptures
 | 
					package me.msoucy.ptures
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import com.badlogic.gdx.assets.AssetManager
 | 
				
			||||||
import com.badlogic.gdx.graphics.g2d.BitmapFont
 | 
					import com.badlogic.gdx.graphics.g2d.BitmapFont
 | 
				
			||||||
import com.badlogic.gdx.graphics.g2d.SpriteBatch
 | 
					import com.badlogic.gdx.graphics.g2d.SpriteBatch
 | 
				
			||||||
import ktx.app.KtxGame
 | 
					import ktx.app.KtxGame
 | 
				
			||||||
import ktx.app.KtxScreen
 | 
					import ktx.app.KtxScreen
 | 
				
			||||||
import me.msoucy.ptures.screens.MainMenuScreen
 | 
					import me.msoucy.ptures.screens.LoadingScreen
 | 
				
			||||||
 | 
					
 | 
				
			||||||
class PTures : KtxGame<KtxScreen>() {
 | 
					class PTures : KtxGame<KtxScreen>() {
 | 
				
			||||||
    val batch by lazy { SpriteBatch() }
 | 
					    val batch by lazy { SpriteBatch() }
 | 
				
			||||||
    // use LibGDX's default Arial font
 | 
					 | 
				
			||||||
    val font by lazy { BitmapFont() }
 | 
					    val font by lazy { BitmapFont() }
 | 
				
			||||||
 | 
					    val assets = AssetManager()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    override fun create() {
 | 
					    override fun create() {
 | 
				
			||||||
        addScreen(MainMenuScreen(this))
 | 
					        addScreen(LoadingScreen(this))
 | 
				
			||||||
        setScreen<MainMenuScreen>()
 | 
					        setScreen<LoadingScreen>()
 | 
				
			||||||
        super.create()
 | 
					        super.create()
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    override fun dispose() {
 | 
					    override fun dispose() {
 | 
				
			||||||
        batch.dispose()
 | 
					        batch.dispose()
 | 
				
			||||||
        font.dispose()
 | 
					        font.dispose()
 | 
				
			||||||
 | 
					        assets.dispose()
 | 
				
			||||||
        super.dispose()
 | 
					        super.dispose()
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -3,7 +3,6 @@ package me.msoucy.ptures.screens
 | 
				
			|||||||
import com.badlogic.gdx.Gdx
 | 
					import com.badlogic.gdx.Gdx
 | 
				
			||||||
import com.badlogic.gdx.Input
 | 
					import com.badlogic.gdx.Input
 | 
				
			||||||
import com.badlogic.gdx.graphics.OrthographicCamera
 | 
					import com.badlogic.gdx.graphics.OrthographicCamera
 | 
				
			||||||
import com.badlogic.gdx.graphics.Texture
 | 
					 | 
				
			||||||
import com.badlogic.gdx.math.MathUtils
 | 
					import com.badlogic.gdx.math.MathUtils
 | 
				
			||||||
import com.badlogic.gdx.math.Rectangle
 | 
					import com.badlogic.gdx.math.Rectangle
 | 
				
			||||||
import com.badlogic.gdx.math.Vector3
 | 
					import com.badlogic.gdx.math.Vector3
 | 
				
			||||||
@@ -12,14 +11,18 @@ import com.badlogic.gdx.utils.TimeUtils
 | 
				
			|||||||
import ktx.app.KtxScreen
 | 
					import ktx.app.KtxScreen
 | 
				
			||||||
import ktx.collections.iterate
 | 
					import ktx.collections.iterate
 | 
				
			||||||
import ktx.graphics.use
 | 
					import ktx.graphics.use
 | 
				
			||||||
import me.msoucy.ptures.PTures
 | 
					import ktx.log.logger
 | 
				
			||||||
 | 
					import me.msoucy.ptures.*
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					private val log = logger<GameScreen>()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
class GameScreen(val game: PTures) : KtxScreen {
 | 
					class GameScreen(val game: PTures) : KtxScreen {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    private val dropImage = Texture(Gdx.files.internal("images/drop.png"))
 | 
					    private val dropImage = game.assets[TextureAtlasAssets.Game].findRegion("drop")
 | 
				
			||||||
    private val bucketImage = Texture(Gdx.files.internal("images/bucket.png"))
 | 
					    private val bucketImage = game.assets[TextureAtlasAssets.Game].findRegion("bucket")
 | 
				
			||||||
    private val dropSound = Gdx.audio.newSound(Gdx.files.internal("sounds/drop.wav"))
 | 
					    private val dropSound = game.assets[SoundAssets.Drop]
 | 
				
			||||||
    private val rainMusic = Gdx.audio.newMusic(Gdx.files.internal("music/rain.mp3")).apply { isLooping = true }
 | 
					    private val rainMusic = game.assets[MusicAssets.Rain].apply { isLooping = true }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    // The camera ensures we can render using our target resolution of 800x480
 | 
					    // The camera ensures we can render using our target resolution of 800x480
 | 
				
			||||||
    //    pixels no matter what the screen resolution is.
 | 
					    //    pixels no matter what the screen resolution is.
 | 
				
			||||||
    private val camera = OrthographicCamera().apply { setToOrtho(false, 800f, 480f) }
 | 
					    private val camera = OrthographicCamera().apply { setToOrtho(false, 800f, 480f) }
 | 
				
			||||||
@@ -75,8 +78,10 @@ class GameScreen(val game: PTures) : KtxScreen {
 | 
				
			|||||||
        //    effect also
 | 
					        //    effect also
 | 
				
			||||||
        raindrops.iterate { raindrop, iterator ->
 | 
					        raindrops.iterate { raindrop, iterator ->
 | 
				
			||||||
            raindrop.y -= 200 * delta
 | 
					            raindrop.y -= 200 * delta
 | 
				
			||||||
            if (raindrop.y + 64 < 0)
 | 
					            if (raindrop.y + 64 < 0) {
 | 
				
			||||||
                iterator.remove()
 | 
					                iterator.remove()
 | 
				
			||||||
 | 
					                log.debug { "Missed a raindrop!" }
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            if (raindrop.overlaps(bucket)) {
 | 
					            if (raindrop.overlaps(bucket)) {
 | 
				
			||||||
                dropsGathered++
 | 
					                dropsGathered++
 | 
				
			||||||
@@ -91,11 +96,4 @@ class GameScreen(val game: PTures) : KtxScreen {
 | 
				
			|||||||
        rainMusic.play()
 | 
					        rainMusic.play()
 | 
				
			||||||
        spawnRaindrop()
 | 
					        spawnRaindrop()
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					 | 
				
			||||||
    override fun dispose() {
 | 
					 | 
				
			||||||
        dropImage.dispose()
 | 
					 | 
				
			||||||
        bucketImage.dispose()
 | 
					 | 
				
			||||||
        dropSound.dispose()
 | 
					 | 
				
			||||||
        rainMusic.dispose()
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
							
								
								
									
										43
									
								
								core/src/me/msoucy/ptures/screens/LoadingScreen.kt
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										43
									
								
								core/src/me/msoucy/ptures/screens/LoadingScreen.kt
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,43 @@
 | 
				
			|||||||
 | 
					package me.msoucy.ptures.screens
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import com.badlogic.gdx.Gdx
 | 
				
			||||||
 | 
					import com.badlogic.gdx.graphics.OrthographicCamera
 | 
				
			||||||
 | 
					import ktx.app.KtxScreen
 | 
				
			||||||
 | 
					import ktx.graphics.use
 | 
				
			||||||
 | 
					import me.msoucy.ptures.*
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					class LoadingScreen(val game: PTures) : KtxScreen {
 | 
				
			||||||
 | 
					    private val camera = OrthographicCamera().apply {
 | 
				
			||||||
 | 
					        setToOrtho(false, 800f, 480f)
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    override fun render(delta: Float) {
 | 
				
			||||||
 | 
					        // Continue loading assets
 | 
				
			||||||
 | 
					        game.assets.update()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        camera.update()
 | 
				
			||||||
 | 
					        game.batch.projectionMatrix = camera.combined
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        game.batch.use {
 | 
				
			||||||
 | 
					            game.font.draw(it, "Welcome to Drop!!! ", 100f, 150f)
 | 
				
			||||||
 | 
					            if (game.assets.isFinished) {
 | 
				
			||||||
 | 
					                game.font.draw(it, "Tap anywhere to begin!", 100f, 100f)
 | 
				
			||||||
 | 
					            } else {
 | 
				
			||||||
 | 
					                game.font.draw(it, "Loading assets...", 100f, 100f)
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        if (Gdx.input.isTouched && game.assets.isFinished) {
 | 
				
			||||||
 | 
					            game.addScreen(GameScreen(game))
 | 
				
			||||||
 | 
					            game.setScreen<GameScreen>()
 | 
				
			||||||
 | 
					            game.removeScreen<LoadingScreen>()
 | 
				
			||||||
 | 
					            dispose()
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    override fun show() {
 | 
				
			||||||
 | 
					        MusicAssets.values().forEach { game.assets.load(it) }
 | 
				
			||||||
 | 
					        SoundAssets.values().forEach { game.assets.load(it) }
 | 
				
			||||||
 | 
					        TextureAtlasAssets.values().forEach { game.assets.load(it) }
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
@@ -1,30 +0,0 @@
 | 
				
			|||||||
package me.msoucy.ptures.screens
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
import com.badlogic.gdx.Gdx
 | 
					 | 
				
			||||||
import com.badlogic.gdx.graphics.OrthographicCamera
 | 
					 | 
				
			||||||
import ktx.app.KtxScreen
 | 
					 | 
				
			||||||
import ktx.graphics.use
 | 
					 | 
				
			||||||
import me.msoucy.ptures.PTures
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
class MainMenuScreen(val game: PTures) : KtxScreen {
 | 
					 | 
				
			||||||
    private val camera = OrthographicCamera().apply {
 | 
					 | 
				
			||||||
        setToOrtho(false, 800f, 480f)
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    override fun render(delta: Float) {
 | 
					 | 
				
			||||||
        camera.update()
 | 
					 | 
				
			||||||
        game.batch.projectionMatrix = camera.combined
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        game.batch.use {
 | 
					 | 
				
			||||||
            game.font.draw(it, "Welcome to Drop!!! ", 100f, 150f)
 | 
					 | 
				
			||||||
            game.font.draw(it, "Tap anywhere to begin!", 100f, 100f)
 | 
					 | 
				
			||||||
        }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        if (Gdx.input.isTouched) {
 | 
					 | 
				
			||||||
            game.addScreen(GameScreen(game))
 | 
					 | 
				
			||||||
            game.setScreen<GameScreen>()
 | 
					 | 
				
			||||||
            game.removeScreen<MainMenuScreen>()
 | 
					 | 
				
			||||||
            dispose()
 | 
					 | 
				
			||||||
        }
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
@@ -1,5 +1,6 @@
 | 
				
			|||||||
package me.msoucy.ptures.desktop
 | 
					package me.msoucy.ptures.desktop
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import com.badlogic.gdx.Application
 | 
				
			||||||
import com.badlogic.gdx.backends.lwjgl.LwjglApplication
 | 
					import com.badlogic.gdx.backends.lwjgl.LwjglApplication
 | 
				
			||||||
import com.badlogic.gdx.backends.lwjgl.LwjglApplicationConfiguration
 | 
					import com.badlogic.gdx.backends.lwjgl.LwjglApplicationConfiguration
 | 
				
			||||||
import me.msoucy.ptures.PTures
 | 
					import me.msoucy.ptures.PTures
 | 
				
			||||||
@@ -7,7 +8,11 @@ import me.msoucy.ptures.PTures
 | 
				
			|||||||
object DesktopLauncher {
 | 
					object DesktopLauncher {
 | 
				
			||||||
    @JvmStatic
 | 
					    @JvmStatic
 | 
				
			||||||
    fun main(arg: Array<String>) {
 | 
					    fun main(arg: Array<String>) {
 | 
				
			||||||
        val config = LwjglApplicationConfiguration()
 | 
					        val config = LwjglApplicationConfiguration().apply {
 | 
				
			||||||
        LwjglApplication(PTures(), config)
 | 
					            title = "Drop"
 | 
				
			||||||
 | 
					            width = 800
 | 
				
			||||||
 | 
					            height = 480
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					        LwjglApplication(PTures(), config).logLevel = Application.LOG_DEBUG
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user