diff --git a/main.odin b/main.odin index f19726e..dea26ef 100644 --- a/main.odin +++ b/main.odin @@ -30,40 +30,19 @@ main :: proc() { assert(render != nil) units := make([dynamic]Unit) - append( - &units, - Unit { - faction = Faction.Allied, - position = util.Position{x = 500, y = 500}, - velocity = DEFAULT_VELOCITY, - hp = 100, - }, - ) - append( - &units, - Unit { - faction = Faction.Enemy, - position = util.Position{x = 700, y = 700}, - velocity = DEFAULT_VELOCITY, - hp = 100, - }, - ) + append(&units, new_unit(Faction.Allied, util.Position{500, 500})) + append(&units, new_unit(Faction.Enemy, util.Position{700, 700})) input_state := make(map[sdl3.Scancode]bool) time := sdl3.GetTicksNS() game := Game { - render = render, - units = units, - player = Unit { - faction = Faction.Player, - position = util.Position{x = 255, y = 255}, - velocity = DEFAULT_VELOCITY, - hp = 100, - }, - time = time, - delta = 0.0, + render = render, + units = units, + player = new_unit(Faction.Player, util.Position{100, 100}, 200), + time = time, + delta = 0.0, input_state = input_state, } @@ -74,33 +53,33 @@ main :: proc() { case .QUIT: return case .KEY_UP: - HandleInput(&game, event) + handle_input(&game, event) case .KEY_DOWN: - HandleInput(&game, event) + handle_input(&game, event) } } - MovePlayer(&game) - RenderGame(&game) - UpdateTime(&game) + move_player(&game) + render_game(&game) + update_time(&game) } } -UpdateTime :: proc(game: ^Game) { +update_time :: proc(game: ^Game) { new_time := sdl3.GetTicksNS() delta_ns := new_time - game.time game.time = new_time game.delta = f32(delta_ns) / f32(sdl3.NS_PER_SECOND) } -RenderGame :: proc(game: ^Game) { +render_game :: proc(game: ^Game) { sdl3.SetRenderDrawColor(game.render, 0, 0, 0, 0) sdl3.RenderClear(game.render) for unit in game.units { - RenderUnit(unit, game) + render_unit(unit, game) } - RenderUnit(game.player, game) + render_unit(game.player, game) sdl3.RenderPresent(game.render) } diff --git a/movement.odin b/movement.odin index 2e75864..b70dd58 100644 --- a/movement.odin +++ b/movement.odin @@ -4,19 +4,18 @@ import "core:fmt" import "util" import "vendor:sdl3" -DEFAULT_VELOCITY: util.Velocity : util.Velocity{x = 0, y = 0} -SPEED: f32 : 200 - -HandleInput :: proc(game: ^Game, event: sdl3.Event) { +handle_input :: proc(game: ^Game, event: sdl3.Event) { effect := event.type == sdl3.EventType.KEY_DOWN ? true : false game.input_state[event.key.scancode] = effect } -MovePlayer :: proc(game: ^Game) { - y: f32 = game.input_state[sdl3.Scancode.W] ? -SPEED : 0 - y += game.input_state[sdl3.Scancode.S] ? SPEED : 0 - x: f32 = game.input_state[sdl3.Scancode.A] ? -SPEED : 0 - x += game.input_state[sdl3.Scancode.D] ? SPEED : 0 +move_player :: proc(game: ^Game) { + speed := game.player.speed + + y: f32 = game.input_state[sdl3.Scancode.W] ? -speed : 0 + y += game.input_state[sdl3.Scancode.S] ? speed : 0 + x: f32 = game.input_state[sdl3.Scancode.A] ? -speed : 0 + x += game.input_state[sdl3.Scancode.D] ? speed : 0 game.player.velocity = util.Velocity{x, y} game.player.position.y += y * game.delta diff --git a/unit.odin b/unit.odin index 3bc6d29..0a286fb 100644 --- a/unit.odin +++ b/unit.odin @@ -3,6 +3,10 @@ package main import "util" import "vendor:sdl3" +DEFAULT_HP :: 100 +DEFAULT_VELOCITY: util.Velocity : util.Velocity{x = 0, y = 0} +DEFAULT_SPEED: f32 : 200 + Faction :: enum { Player, Allied, @@ -13,10 +17,11 @@ Unit :: struct { faction: Faction, position: util.Position, velocity: util.Velocity, + speed: f32, hp: u32, } -RenderUnit :: proc(unit: Unit, game: ^Game) { +render_unit :: proc(unit: Unit, game: ^Game) { switch unit.faction { case Faction.Player: sdl3.SetRenderDrawColor(game.render, 0, 255, 0, 0) @@ -31,6 +36,24 @@ RenderUnit :: proc(unit: Unit, game: ^Game) { ) } +new_unit :: proc { + new_unit_all, + new_unit_base, + new_unit_hp, +} + +new_unit_base :: proc(faction: Faction, position: util.Position) -> Unit { + return Unit{faction, position, DEFAULT_VELOCITY, DEFAULT_SPEED, DEFAULT_HP} +} + +new_unit_hp :: proc(faction: Faction, position: util.Position, hp: u32) -> Unit { + return Unit{faction, position, DEFAULT_VELOCITY, DEFAULT_SPEED, hp} +} + +new_unit_all :: proc(faction: Faction, position: util.Position, speed: f32, hp: u32) -> Unit { + return Unit{faction, position, DEFAULT_VELOCITY, speed, hp} +} + Projectile :: struct { faction: Faction, position: util.Position,