summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorromangraef <roman.graef@gmail.com>2018-05-30 12:45:21 +0200
committerromangraef <roman.graef@gmail.com>2018-05-30 12:45:21 +0200
commit5a66413d8f226c0507788e5c8455f6f5f6d06887 (patch)
tree1187c7f83621f29364dc90f3aed1885d04dac42c
parent2ac18d91635b023db7ff3918f5041cb51ed1c968 (diff)
downloadpluggabledino-5a66413d8f226c0507788e5c8455f6f5f6d06887.tar.gz
pluggabledino-5a66413d8f226c0507788e5c8455f6f5f6d06887.tar.bz2
pluggabledino-5a66413d8f226c0507788e5c8455f6f5f6d06887.zip
Added lost state/losing
-rw-r--r--src/main/kotlin/de/romjaki/pluggabledino/api/Button.kt4
-rw-r--r--src/main/kotlin/de/romjaki/pluggabledino/game/GameWorld.kt12
-rw-r--r--src/main/kotlin/de/romjaki/pluggabledino/main.kt7
-rw-r--r--src/main/kotlin/de/romjaki/pluggabledino/states/GameState.kt10
-rw-r--r--src/main/kotlin/de/romjaki/pluggabledino/states/LostState.kt39
5 files changed, 63 insertions, 9 deletions
diff --git a/src/main/kotlin/de/romjaki/pluggabledino/api/Button.kt b/src/main/kotlin/de/romjaki/pluggabledino/api/Button.kt
index 9b39e4b..b21761c 100644
--- a/src/main/kotlin/de/romjaki/pluggabledino/api/Button.kt
+++ b/src/main/kotlin/de/romjaki/pluggabledino/api/Button.kt
@@ -7,11 +7,11 @@ import de.romjaki.pluggabledino.font
import org.newdawn.slick.Graphics
import org.newdawn.slick.Input
import java.awt.Rectangle
-import kotlin.math.min
+import kotlin.math.max
class Button(private val text: String, val x: Float, val y: Float) {
- val width = min(buttonImage.width, font.getWidth(text) + 10)
+ val width = max(buttonImage.width, font.getWidth(text) + 10)
val image = buttonImage.getScaledCopy(width, buttonImage.height)
private var lastClicked = false
diff --git a/src/main/kotlin/de/romjaki/pluggabledino/game/GameWorld.kt b/src/main/kotlin/de/romjaki/pluggabledino/game/GameWorld.kt
index cc940cf..2495b9c 100644
--- a/src/main/kotlin/de/romjaki/pluggabledino/game/GameWorld.kt
+++ b/src/main/kotlin/de/romjaki/pluggabledino/game/GameWorld.kt
@@ -78,15 +78,22 @@ class GameWorld : ContactListener {
//#endregion
cactiBodyDef = BodyDef()
+ cactiBodyDef.type = BodyType.KINEMATIC
createCactus()
}
fun createCactus() {
val body = world.createBody(cactiBodyDef)
+ body.position.set(10f, 39f)
val shape = PolygonShape()
shape.setAsBox(1f, 1f)
- body.createFixture(shape, 0f)
+ val cactiFixtureDef = FixtureDef()
+ cactiFixtureDef.shape = dinoBox
+ cactiFixtureDef.isSensor = true
+ cactiFixtureDef.density = 0.1f
+ cactiFixtureDef.friction = 0f
+ body.createFixture(cactiFixtureDef)
cacti.add(body)
}
@@ -98,6 +105,9 @@ class GameWorld : ContactListener {
dino.applyForceToCenter(Vec2(0f, -2000f))
}
}
+ cacti.forEach {
+ it.linearVelocity.set(-delta * 1000, 0f)
+ }
world.step(delta, 4, 3)
world.setContactListener(this)
}
diff --git a/src/main/kotlin/de/romjaki/pluggabledino/main.kt b/src/main/kotlin/de/romjaki/pluggabledino/main.kt
index a829089..1e86140 100644
--- a/src/main/kotlin/de/romjaki/pluggabledino/main.kt
+++ b/src/main/kotlin/de/romjaki/pluggabledino/main.kt
@@ -5,10 +5,7 @@ import de.romjaki.pluggabledino.api.PluginLoader
import de.romjaki.pluggabledino.events.InitEvent
import de.romjaki.pluggabledino.events.PostInitEvent
import de.romjaki.pluggabledino.events.PreInitEvent
-import de.romjaki.pluggabledino.states.GameState
-import de.romjaki.pluggabledino.states.MainMenu
-import de.romjaki.pluggabledino.states.SettingsState
-import de.romjaki.pluggabledino.states.SplashScreen
+import de.romjaki.pluggabledino.states.*
import org.newdawn.slick.AppGameContainer
import org.newdawn.slick.GameContainer
import org.newdawn.slick.Input
@@ -24,6 +21,7 @@ const val SPLASHSCREEN = 0
const val MAINMENU = 1
const val SETTINGS = 3
const val GAME = 2
+const val LOST = 4
fun main(args: Array<String>) {
PluginLoader.loadPlugins()
@@ -45,5 +43,6 @@ class Application : StateBasedGame("Dino Game v$VERSION") {
addState(MainMenu())
addState(SettingsState())
addState(GameState())
+ addState(LostState())
}
}
diff --git a/src/main/kotlin/de/romjaki/pluggabledino/states/GameState.kt b/src/main/kotlin/de/romjaki/pluggabledino/states/GameState.kt
index 479f7f7..0d4fff0 100644
--- a/src/main/kotlin/de/romjaki/pluggabledino/states/GameState.kt
+++ b/src/main/kotlin/de/romjaki/pluggabledino/states/GameState.kt
@@ -21,6 +21,9 @@ class GameState : BasicGameState() {
if (container!!.input.isKeyDown(Input.KEY_R)) {
world = GameWorld()
}
+ if (world.hurt) {
+ game!!.enterState(LOST)
+ }
world.update(delta / 1000f, container.input)
dinoAnimated.update(delta.toLong())
}
@@ -34,11 +37,14 @@ class GameState : BasicGameState() {
override fun render(container: GameContainer?, game: StateBasedGame?, g: Graphics?) {
g!!
g.background = Color.lightGray
- g.color = Color.red
+ if (world.hurt) {
+ g.background = Color.red
+ }
+ g.color = Color.green
g.drawImage(dinoAnimated.currentFrame, world.dino.position.x * WIDTH / 50, world.dino.position.y * HEIGHT / 50 - dinoAnimated.height)
g.drawImage(groundline, 0f, HEIGHT * 39 / 50f)
for (cactus in world.cacti) {
- g.drawImage(cactusImg, cactus.position.x, cactus.position.y)
+ g.drawImage(cactusImg, cactus.position.x * WIDTH / 50, cactus.position.y * HEIGHT / 50 - cactusImg.height)
}
}
diff --git a/src/main/kotlin/de/romjaki/pluggabledino/states/LostState.kt b/src/main/kotlin/de/romjaki/pluggabledino/states/LostState.kt
new file mode 100644
index 0000000..ce245b6
--- /dev/null
+++ b/src/main/kotlin/de/romjaki/pluggabledino/states/LostState.kt
@@ -0,0 +1,39 @@
+package de.romjaki.pluggabledino.states
+
+import de.romjaki.pluggabledino.*
+import de.romjaki.pluggabledino.api.Button
+import org.newdawn.slick.Color
+import org.newdawn.slick.GameContainer
+import org.newdawn.slick.Graphics
+import org.newdawn.slick.state.BasicGameState
+import org.newdawn.slick.state.StateBasedGame
+
+class LostState : BasicGameState() {
+ override fun init(container: GameContainer?, game: StateBasedGame?) {
+ game!!
+ playAgain.addClickHandler {
+ game.enterState(GAME)
+ }
+ back.addClickHandler {
+ game.enterState(MAINMENU)
+ }
+ }
+
+ override fun update(container: GameContainer?, game: StateBasedGame?, delta: Int) {
+ playAgain.update(container!!.input)
+ back.update(container.input)
+ }
+
+ override fun getID(): Int =
+ LOST
+
+ val back = Button("Back to Main Menu", WIDTH / 2f, HEIGHT / 2f + 50)
+ val playAgain = Button("PLAY AGAIN", WIDTH / 2f, HEIGHT / 2f + 100)
+
+ override fun render(container: GameContainer?, game: StateBasedGame?, g: Graphics?) {
+ g!!
+ g.background = Color.red
+ back.draw(g)
+ playAgain.draw(g)
+ }
+} \ No newline at end of file