diff options
Diffstat (limited to 'src/sim/entity/mod.rs')
| -rw-r--r-- | src/sim/entity/mod.rs | 41 |
1 files changed, 41 insertions, 0 deletions
diff --git a/src/sim/entity/mod.rs b/src/sim/entity/mod.rs index 9425f9b..4a8eda4 100644 --- a/src/sim/entity/mod.rs +++ b/src/sim/entity/mod.rs @@ -2,6 +2,7 @@ use glam::{IVec2, Vec2}; use rapier2d::{ dynamics::{RigidBody, RigidBodyBuilder, RigidBodyHandle}, geometry::{Collider, ColliderHandle}, + math::Pose2, }; use crate::{ @@ -123,6 +124,46 @@ impl EntityDef { EntityDef::from_cells(position, entity_cells, behaviour) } + + pub fn kinematic_from_cells( + position: Vec2, + cells: EntityCells, + behaviour: Option<Box<dyn EntityBehaviour>>, + ) -> Self { + let rb = RigidBodyBuilder::kinematic_velocity_based() + .translation(position) + .build(); + + let collider = RbManager::convex_hull_collider_from_marchable(&cells, Some(10)) + .mass(mass_from_cells(&cells.cells)) + .build(); + + EntityDef { + rb: Some(rb), + collider: Some(collider), + cells: Some(cells), + behaviour, + } + } + + pub fn kinematic_from_sprite( + position: Vec2, + path: &str, + behaviour: Option<Box<dyn EntityBehaviour>>, + ) -> Self { + let sprite_cells = load_sprite_to_cells(path); + let mut entity_cells = EntityCells { + cells: sprite_cells.cells, + size: IVec2::new(sprite_cells.width as i32, sprite_cells.height as i32), + }; + + entity_cells + .cells + .iter_mut() + .for_each(|c| c.set_entity_integrated(true)); + + EntityDef::kinematic_from_cells(position, entity_cells, behaviour) + } } #[derive(Clone, Copy, PartialEq, Eq, Debug, Hash)] |
