aboutsummaryrefslogtreecommitdiff
path: root/src/platform.odin
blob: 0e4d93bd9f985003e053f2bc279773f2cf132c82 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
package demonchime

import "draw"
import "phys"

Platform :: struct {
  handle: Entity_Handle,
  body: phys.Body_Handle,
}

make_platform :: proc(rect: Rect) -> (Entity_Handle, ^Platform) {
  handle, body := phys.make_body(transmute(phys.Rect)rect)
  return make_entity(&state.platform_list, Platform{body = handle})
}

draw_platforms :: proc() {
  iter := iter_entity_list(state.platform_list)
  draw.renderer.tint = {1, 0, 0, 0.25}
  for p in entity_list_iter(&iter) {
    body := phys.get_body(p.body)
    draw.rect(cast(draw.Rect)body.rect)
  }
  draw.renderer.tint = {1, 1, 1, 1}
}

clear_platforms :: proc() {
  iter := iter_entity_list(state.platform_list)
  for p in entity_list_iter(&iter) {
    phys.remove_body(p.body)
    delete_entity(&state.platform_list, p.handle)
  }
}

setup_map_collisions :: proc() {
  clear_platforms()

  make_map_collisions :: proc(x: i32, y: i32, tile_id: u32) {
    tile := tiles[tile_id]

    for coll in tile.collisions {
      make_platform({coll.start + {f32(x), f32(y)}, coll.size})
    }
  }

  iterate_room_tiles(current_room.id, make_map_collisions)
}