Occupied tiles now block movement through World::blocked, the one predicate the sim and the pathfinder share. Entities carry an EntityKind so the sim knows which ones to think for; Sim::think gives each NPC a random king move one window in four. Intents execute in id order so contested tiles resolve deterministically. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
30 lines
711 B
Rust
Executable File
30 lines
711 B
Rust
Executable File
/// Who decides an entity's actions. The sim only schedules intents for `Npc`s; a
|
|
/// `Player`'s intents come from outside (input) through `Sim::set_action`.
|
|
#[derive(Clone, Copy, PartialEq, Eq, Debug)]
|
|
pub enum EntityKind {
|
|
Player,
|
|
Npc,
|
|
}
|
|
|
|
pub struct Entity {
|
|
pub id: u32,
|
|
pub kind: EntityKind,
|
|
pub type_id: u16, // sprite index into the entity tileset
|
|
pub pos: (i16, i16),
|
|
pub hp: u16,
|
|
pub hp_max: u16,
|
|
}
|
|
|
|
impl Entity {
|
|
pub fn new(id: u32, kind: EntityKind, type_id: u16, pos: (i16, i16), hp: u16) -> Self {
|
|
Self {
|
|
id,
|
|
kind,
|
|
type_id,
|
|
pos,
|
|
hp,
|
|
hp_max: hp,
|
|
}
|
|
}
|
|
}
|