summaryrefslogtreecommitdiff
path: root/src/sim/entity
diff options
context:
space:
mode:
authorKai Stevenson <kai@kaistevenson.com>2026-09-02 00:05:29 -0700
committerKai Stevenson <kai@kaistevenson.com>2026-09-02 00:05:29 -0700
commit51ecf9530dae94341e2ba96453a4bf7e376ad33b (patch)
tree24b3ec0eee4729802cddbb6af4556999e3e42d9b /src/sim/entity
parent5ebc92d5a6bbbe14e7c4c25b25a4ff8578ddcd5a (diff)
character controller
Diffstat (limited to 'src/sim/entity')
-rw-r--r--src/sim/entity/mod.rs41
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)]