From 4032a5ea769b909e8485002ce9343640e70e383c Mon Sep 17 00:00:00 2001 From: codegirl-007 Date: Sat, 6 Jun 2026 16:53:08 -0700 Subject: [PATCH] up to building the map --- game/app.odin | 24 ++++++++++++++++++++++++ game/constants.odin | 6 ++++++ game/map.odin | 34 ++++++++++++++++++++++++++++++++++ game/world.odin | 27 +++++++++++++++++++++++++++ main.odin | 4 ++-- 5 files changed, 93 insertions(+), 2 deletions(-) create mode 100644 game/app.odin create mode 100644 game/constants.odin create mode 100644 game/map.odin create mode 100644 game/world.odin diff --git a/game/app.odin b/game/app.odin new file mode 100644 index 0000000..d6ead4d --- /dev/null +++ b/game/app.odin @@ -0,0 +1,24 @@ +package game + +import rl "vendor:raylib" + +run :: proc() { + rl.InitWindow(640, 480, "Tower Defense") + defer rl.CloseWindow() + rl.SetTargetFPS(60) + + world := init_world() + + for !rl.WindowShouldClose() { + dt := rl.GetFrameTime() + + update_world(&world, dt) + + rl.BeginDrawing() + rl.ClearBackground(rl.Color{34, 139, 34, 255}) + + render_world(&world) + rl.EndDrawing() + } +} + diff --git a/game/constants.odin b/game/constants.odin new file mode 100644 index 0000000..d49f51a --- /dev/null +++ b/game/constants.odin @@ -0,0 +1,6 @@ +package game + +MAP_W :: 16 // map width in tiles +MAP_H :: 12 // map height in tiles +TILE_SIZE :: 32 // size of tiles in pixels + diff --git a/game/map.odin b/game/map.odin new file mode 100644 index 0000000..715df5e --- /dev/null +++ b/game/map.odin @@ -0,0 +1,34 @@ +package game + +import rl "vendor:raylib" +Tile_Kind :: enum { + Blocked, + Path, + Build, +} + +Map :: struct { + tiles: [MAP_H][MAP_W]Tile_Kind, +} + +tile_color :: proc(kind: Tile_Kind) -> rl.Color { + switch kind { + case .Blocked: + return {35, 95, 35, 255} + case .Path: + return {130, 85, 45, 255} + case .Build: + return {50, 130, 50, 255} + } + + return rl.MAGENTA +} + +init_map :: proc(world_map: ^Map) { + for y in 0 ..< MAP_H { + for x in 0 ..< MAP_W { + world_map.tiles[y][x] = .Blocked + } + } +} + diff --git a/game/world.odin b/game/world.odin new file mode 100644 index 0000000..74a4e19 --- /dev/null +++ b/game/world.odin @@ -0,0 +1,27 @@ +package game + +import "core:fmt" +import rl "vendor:raylib" +World :: struct { + gold: int, + base_health: int, +} + +init_world :: proc() -> World { + return World{gold = 10, base_health = 20} +} + +// update world, never draw +update_world :: proc(world: ^World, dt: f32) { + _ = dt + + if rl.IsKeyPressed(.G) { + world.gold += 10 + } +} + +render_world :: proc(world: ^World) { + rl.DrawText(fmt.caprintf("gold: %d", world.gold), 10, 10, 22, rl.BLACK) + rl.DrawText(fmt.caprintf("health: %d", world.base_health), 10, 38, 22, rl.BLACK) +} + diff --git a/main.odin b/main.odin index 56a67a8..4a0e0bb 100644 --- a/main.odin +++ b/main.odin @@ -1,8 +1,8 @@ package main -import "core:fmt" +import game "./game" main :: proc() { - fmt.println("hello world") + game.run() }