use crate::types::Buttons;
use crate::world::{Entity, EntityId, PeerId, World};
#[derive(Clone, Copy, Debug, Default)]
pub struct PlayerAction {
pub forward_move: i8,
pub side_move: i8,
pub angle_turn: i16,
pub buttons: Buttons,
pub weapon_select: u8,
}
#[derive(Clone, Debug)]
pub enum WorldAction {
SpawnEntity(Entity),
RemoveEntity(EntityId),
ModifySector {
sector: u16,
floor_height: Option<i32>,
ceiling_height: Option<i32>,
light_level: Option<i16>,
},
}
#[derive(Clone, Copy, Debug, PartialEq, Eq)]
pub enum TouchResult {
Nothing,
PickedUp,
Blocked,
Damaged(i32),
}
pub trait GameRules {
fn tick(
&self,
world: &mut World,
map: &crate::map::MapData,
player_actions: &[(PeerId, PlayerAction)],
world_actions: &[WorldAction],
);
#[inline]
fn validate_player_action(
&self,
_world: &World,
_player: PeerId,
_action: &PlayerAction,
) -> bool {
true
}
#[inline]
fn validate_world_action(&self, _world: &World, _action: &WorldAction) -> bool {
true
}
}