init2
This commit is contained in:
@@ -0,0 +1,114 @@
|
||||
package main
|
||||
|
||||
import hm "core:container/handle_map"
|
||||
import "core:fmt"
|
||||
import rl "vendor:raylib"
|
||||
|
||||
SCREEN_W :: 1280
|
||||
SCREEN_H :: 720
|
||||
|
||||
|
||||
MAX_ENEMIES :: 10
|
||||
|
||||
Scene :: struct {
|
||||
player: Player,
|
||||
camera: rl.Camera2D,
|
||||
enemies: hm.Static_Handle_Map(128, Enemy, ent_handle),
|
||||
}
|
||||
|
||||
|
||||
create_scene :: proc() -> Scene {
|
||||
scene := Scene {
|
||||
player = Player {
|
||||
position = rl.Vector2{100, 100},
|
||||
hp = 100,
|
||||
walk_speed = 300,
|
||||
run_speed = 500,
|
||||
col = 32,
|
||||
},
|
||||
camera = rl.Camera2D {
|
||||
zoom = 1,
|
||||
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,
|
||||
},
|
||||
)
|
||||
return scene
|
||||
}
|
||||
|
||||
draw_scene :: proc(scene: ^Scene) {
|
||||
rl.BeginMode2D(scene.camera)
|
||||
rl.DrawCircle(
|
||||
cast(i32)scene.player.position.x,
|
||||
cast(i32)scene.player.position.y,
|
||||
32,
|
||||
rl.GREEN,
|
||||
)
|
||||
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,
|
||||
)
|
||||
}
|
||||
|
||||
rl.EndMode2D()
|
||||
}
|
||||
|
||||
|
||||
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
|
||||
}
|
||||
|
||||
// Потом разлепляем коллизии — выталкиваем кто кого переехал
|
||||
resolve_collisions(scene)
|
||||
}
|
||||
|
||||
|
||||
main :: proc() {
|
||||
fmt.println("Hello, world!")
|
||||
|
||||
scene := create_scene()
|
||||
|
||||
rl.InitWindow(SCREEN_W, SCREEN_H, "HUI")
|
||||
defer rl.CloseWindow()
|
||||
rl.SetTargetFPS(200)
|
||||
|
||||
|
||||
for !rl.WindowShouldClose() {
|
||||
dt := rl.GetFrameTime()
|
||||
update_scene(&scene, dt)
|
||||
rl.BeginDrawing()
|
||||
{
|
||||
rl.ClearBackground(rl.BLACK)
|
||||
draw_scene(&scene)
|
||||
|
||||
}
|
||||
rl.EndDrawing()
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user