You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
57 lines
1.5 KiB
Kotlin
57 lines
1.5 KiB
Kotlin
package com.last.commit.map
|
|
|
|
import com.badlogic.gdx.math.Rectangle
|
|
import com.badlogic.gdx.math.Vector2
|
|
import com.badlogic.gdx.scenes.scene2d.ui.Image
|
|
import com.last.commit.GameState
|
|
import com.last.commit.audio.GameSoundEffect
|
|
import com.last.commit.inventory.InventoryItem
|
|
|
|
class Collectible(
|
|
name: String,
|
|
val pos: Position,
|
|
val size: Vector2,
|
|
val requiredItem: String,
|
|
val image: Image
|
|
) : Interactable {
|
|
|
|
val name: String
|
|
private val collider: Rectangle
|
|
|
|
init {
|
|
this.name = name
|
|
this.collider = Rectangle(pos.x, pos.y, size.x, size.y)
|
|
}
|
|
|
|
override fun interact(otherCollider: Rectangle, state: GameState) {
|
|
println("Interacting with item $name")
|
|
state.soundEngine.play(GameSoundEffect.GRAB)
|
|
if (state.inventory.hasItem(this.name)) {
|
|
state.dialogStage.setTexts("You already have this item.")
|
|
state.dialogStage.show()
|
|
} else if (state.inventory.isFull()) {
|
|
state.dialogStage.setTexts("You can't carry anymore items.")
|
|
} else {
|
|
state.inventory.add(this.name)
|
|
}
|
|
}
|
|
|
|
override fun canInteract(state: GameState): Boolean {
|
|
if (requiredItem == "") {
|
|
return true
|
|
}
|
|
val item: InventoryItem? = state.inventory.items.find { it.name == requiredItem }
|
|
|
|
if (item == null) {
|
|
return false
|
|
}
|
|
|
|
return true
|
|
|
|
}
|
|
|
|
override fun getCollider(): Rectangle {
|
|
return this.collider
|
|
}
|
|
}
|