Map Render
This commit is contained in:
@@ -9,11 +9,14 @@ SCREEN_H :: 720
|
||||
|
||||
|
||||
MAX_ENEMIES :: 10
|
||||
MAX_TILES :: 4096
|
||||
|
||||
Scene :: struct {
|
||||
player: Player,
|
||||
camera: rl.Camera2D,
|
||||
enemies: hm.Static_Handle_Map(128, Enemy, ent_handle),
|
||||
atlas: Atlas,
|
||||
tiles: [MAX_TILES]Tile,
|
||||
}
|
||||
|
||||
|
||||
@@ -31,29 +34,44 @@ create_scene :: proc() -> Scene {
|
||||
offset = rl.Vector2{SCREEN_W / 2, SCREEN_H / 2},
|
||||
},
|
||||
}
|
||||
_ = hm.add(
|
||||
&scene.enemies,
|
||||
Enemy {
|
||||
position = rl.Vector2{500, 500},
|
||||
hp = 100,
|
||||
speed = 100,
|
||||
col = 32,
|
||||
},
|
||||
)
|
||||
_ = hm.add(
|
||||
&scene.enemies,
|
||||
Enemy {
|
||||
position = rl.Vector2{600, 600},
|
||||
hp = 100,
|
||||
speed = 100,
|
||||
col = 32,
|
||||
},
|
||||
)
|
||||
// _ = hm.add(
|
||||
// &scene.enemies,
|
||||
// Enemy {
|
||||
// position = rl.Vector2{500, 500},
|
||||
// hp = 100,
|
||||
// speed = 100,
|
||||
// col = 32,
|
||||
// },
|
||||
// )
|
||||
// _ = hm.add(
|
||||
// &scene.enemies,
|
||||
// Enemy {
|
||||
// position = rl.Vector2{600, 600},
|
||||
// hp = 100,
|
||||
// speed = 100,
|
||||
// col = 32,
|
||||
// },
|
||||
// )
|
||||
|
||||
scene.atlas = load_atlas()
|
||||
|
||||
|
||||
// append(
|
||||
// &scene.tiles,
|
||||
// Tile{atlas = &scene.atlas, pos = rl.Vector2{0, 0}, frame = 3},
|
||||
// )
|
||||
return scene
|
||||
}
|
||||
|
||||
draw_scene :: proc(scene: ^Scene) {
|
||||
rl.BeginMode2D(scene.camera)
|
||||
|
||||
|
||||
for tile in scene.tiles {
|
||||
if tile.atlas == nil do continue
|
||||
draw_tile(tile)
|
||||
}
|
||||
|
||||
rl.DrawCircle(
|
||||
cast(i32)scene.player.position.x,
|
||||
cast(i32)scene.player.position.y,
|
||||
@@ -62,15 +80,12 @@ draw_scene :: proc(scene: ^Scene) {
|
||||
)
|
||||
rl.DrawRectangle(300, 300, 100, 100, rl.BLUE)
|
||||
|
||||
for enemy in scene.enemies[:scene.enemy_count] {
|
||||
rl.DrawCircle(
|
||||
cast(i32)enemy.position.x,
|
||||
cast(i32)enemy.position.y,
|
||||
32,
|
||||
rl.RED,
|
||||
)
|
||||
it := hm.iterator_make(&scene.enemies)
|
||||
for i, _ in hm.iterate(&it) {
|
||||
rl.DrawCircle(cast(i32)i.position.x, cast(i32)i.position.y, 32, rl.RED)
|
||||
}
|
||||
|
||||
|
||||
rl.EndMode2D()
|
||||
}
|
||||
|
||||
@@ -79,25 +94,55 @@ update_scene :: proc(scene: ^Scene, dt: f32) {
|
||||
update_player(&scene.player, dt)
|
||||
scene.camera.target = scene.player.position
|
||||
|
||||
// Сначала двигаем всех врагов к игроку — без страха и упрёка
|
||||
for &enemy in scene.enemies[:scene.enemy_count] {
|
||||
dir := rl.Vector2Normalize(scene.player.position - enemy.position)
|
||||
enemy.position += dir * enemy.speed * dt
|
||||
it := hm.iterator_make(&scene.enemies)
|
||||
for i, _ in hm.iterate(&it) {
|
||||
dir := rl.Vector2Normalize(scene.player.position - i.position)
|
||||
i.position += dir * i.speed * dt
|
||||
}
|
||||
|
||||
// Потом разлепляем коллизии — выталкиваем кто кого переехал
|
||||
resolve_collisions(scene)
|
||||
}
|
||||
|
||||
Row :: distinct [16]i32
|
||||
|
||||
|
||||
main :: proc() {
|
||||
fmt.println("Hello, world!")
|
||||
|
||||
scene := create_scene()
|
||||
|
||||
rl.InitWindow(SCREEN_W, SCREEN_H, "HUI")
|
||||
defer rl.CloseWindow()
|
||||
rl.SetTargetFPS(200)
|
||||
rl.SetTargetFPS(60)
|
||||
|
||||
scene := create_scene()
|
||||
|
||||
map_data := [16][16]i32 {
|
||||
{0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2},
|
||||
{8, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 10},
|
||||
{8, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 10},
|
||||
{8, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 10},
|
||||
{8, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 10},
|
||||
{8, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 10},
|
||||
{8, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 10},
|
||||
{8, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 10},
|
||||
{8, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 10},
|
||||
{8, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 10},
|
||||
{8, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 10},
|
||||
{8, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 10},
|
||||
{8, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 10},
|
||||
{8, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 10},
|
||||
{8, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 10},
|
||||
{16, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 18},
|
||||
}
|
||||
for row, i in map_data {
|
||||
for col, j in row {
|
||||
scene.tiles[i * 16 + j] = Tile {
|
||||
atlas = &scene.atlas,
|
||||
pos = rl.Vector2{f32(j) * 16, f32(i) * 16},
|
||||
frame = col,
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
for !rl.WindowShouldClose() {
|
||||
@@ -107,7 +152,6 @@ main :: proc() {
|
||||
{
|
||||
rl.ClearBackground(rl.BLACK)
|
||||
draw_scene(&scene)
|
||||
|
||||
}
|
||||
rl.EndDrawing()
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user