You can kill Creatures!

This commit is contained in:
nelle 2023-11-06 03:07:23 -07:00
parent b642879da4
commit 571737fea2
3 changed files with 19 additions and 9 deletions

View file

@ -7,11 +7,9 @@ import group.ouroboros.potrogue.entity.attributes.flags.BlockOccupier
import group.ouroboros.potrogue.entity.attributes.types.Creature
import group.ouroboros.potrogue.entity.attributes.types.Player
import group.ouroboros.potrogue.entity.attributes.types.Wall
import group.ouroboros.potrogue.entity.messages.Attack
import group.ouroboros.potrogue.entity.messages.Dig
import group.ouroboros.potrogue.entity.systems.CameraMover
import group.ouroboros.potrogue.entity.systems.Diggable
import group.ouroboros.potrogue.entity.systems.InputReceiver
import group.ouroboros.potrogue.entity.systems.Movable
import group.ouroboros.potrogue.entity.systems.*
import group.ouroboros.potrogue.world.GameContext
import org.hexworks.amethyst.api.builder.EntityBuilder
import org.hexworks.amethyst.api.entity.EntityType
@ -43,7 +41,7 @@ object EntityFactory {
attributes(
EntityPosition(),
EntityTile(GameTileRepository.PLAYER),
EntityActions(Dig::class)
EntityActions(Dig::class, Attack::class)
)
behaviors(InputReceiver)
facets(Movable, CameraMover)
@ -53,7 +51,7 @@ object EntityFactory {
attributes(BlockOccupier,
EntityPosition(),
EntityTile(GameTileRepository.CREATURE))
facets()
facets(Attackable)
behaviors()
}
}

View file

@ -0,0 +1,11 @@
package group.ouroboros.potrogue.entity.messages
import group.ouroboros.potrogue.extensions.GameEntity
import group.ouroboros.potrogue.world.GameContext
import org.hexworks.amethyst.api.entity.EntityType
data class Attack(
override val context: GameContext,
override val source: GameEntity<EntityType>,
override val target: GameEntity<EntityType>
) : EntityAction<EntityType, EntityType>

View file

@ -1,12 +1,13 @@
package group.ouroboros.potrogue.entity.systems
import group.ouroboros.potrogue.entity.messages.EntityAction
import group.ouroboros.potrogue.entity.messages.Attack
import group.ouroboros.potrogue.world.GameContext
import org.hexworks.amethyst.api.Consumed
import org.hexworks.amethyst.api.Response
import org.hexworks.amethyst.api.base.BaseFacet
object Attackable : BaseFacet<GameContext, EntityAction.Attack>(EntityAction.Attack::class) {
override suspend fun receive(message: EntityAction.Attack): Response {
object Attackable : BaseFacet<GameContext, Attack>(Attack::class) {
override suspend fun receive(message: Attack): Response {
val (context, _, target) = message
context.world.removeEntity(target)
return Consumed