aboutsummaryrefslogtreecommitdiff
path: root/src/bullet.odin
diff options
context:
space:
mode:
Diffstat (limited to 'src/bullet.odin')
-rw-r--r--src/bullet.odin27
1 files changed, 15 insertions, 12 deletions
diff --git a/src/bullet.odin b/src/bullet.odin
index ceb2ce9..181147b 100644
--- a/src/bullet.odin
+++ b/src/bullet.odin
@@ -3,12 +3,13 @@ package demonchime
import "core:math"
import "core:math/linalg"
import "core:log"
+import hm "core:container/handle_map"
import "fw"
import "phys"
Bullet :: struct {
- handle: Entity_Handle,
+ handle: Handle,
body: phys.Body_Handle,
sprite: Sprite,
vel: Vec2,
@@ -23,7 +24,7 @@ make_bullet :: proc(
image_id := Image_Id.Bullet,
layers: bit_set[phys.Layer;u16] = {.Player_Projectile},
mask: bit_set[phys.Layer;u16] = {.Hard},
-) -> (Entity_Handle, ^Bullet) {
+) -> (Handle, ^Bullet) {
sprite: Sprite
init_sprite(&sprite, image_id)
set_sprite_offset_percentage(&sprite, {0, 0.5})
@@ -40,24 +41,26 @@ make_bullet :: proc(
phys.set_velocity(body, vel)
phys.set_position(body, pos)
- return make_entity(&state.bullet_list, Bullet{
+ handle := hm.add(&state.bullet_list, Bullet{
body = body,
sprite = sprite,
vel = vel,
lifetime = lifetime,
lifetime_max = lifetime,
})
+
+ return handle, hm.get(&state.bullet_list, handle)
}
-delete_bullet :: proc(h: Entity_Handle) {
- b := get_entity(state.bullet_list, h)
+delete_bullet :: proc(h: Handle) {
+ b := hm.get(&state.bullet_list, h)
phys.remove_body(b.body)
- delete_entity(&state.bullet_list, h)
+ hm.remove(&state.bullet_list, h)
}
update_bullets :: proc(dt: f32) {
- iter := iter_entity_list(state.bullet_list)
- for b in entity_list_iter(&iter) {
+ iter := hm.iterator_make(&state.bullet_list)
+ for b, _ in hm.iterate(&iter) {
b.lifetime -= dt
phys.update_body(b.body)
@@ -79,15 +82,15 @@ update_bullets :: proc(dt: f32) {
}
draw_bullets :: proc() {
- iter := iter_entity_list(state.bullet_list)
- for b in entity_list_iter(&iter) {
+ iter := hm.iterator_make(&state.bullet_list)
+ for b, _ in hm.iterate(&iter) {
draw_sprite(b.sprite)
}
}
clear_bullets :: proc() {
- iter := iter_entity_list(state.bullet_list)
- for b in entity_list_iter(&iter) {
+ iter := hm.iterator_make(&state.bullet_list)
+ for b, _ in hm.iterate(&iter) {
delete_bullet(b.handle)
}
}