diff --git a/build/rtsgame/main.core b/build/rtsgame/main.core index fdb201a..35615a0 100644 --- a/build/rtsgame/main.core +++ b/build/rtsgame/main.core @@ -117,6 +117,12 @@ main :: (): int Dt = GetFrameTime() map := &MAP_CurrentMap + orange := ORANGE + orange.a = 255/2 + + brown := BROWN + brown.a = 255/2 + if IsKeyPressed(KEY_F1) ;; Mode = 0 if IsKeyPressed(KEY_F2) ;; Mode = 1 @@ -124,6 +130,8 @@ main :: (): int for i := 0, i < map.actors.len, i += 1 it := map.actors.data + i MAP_MoveTowardsTarget(it) + if IsKeyPressed(KEY_F4) + MAP_RandomizeActors() if IsKeyDown(KEY_SPACE) for i := 0, i < map.actors.len, i += 1 it := map.actors.data + i @@ -204,12 +212,12 @@ main :: (): int for path_i := 0, path_i < actor_it.open_paths.len, path_i += 1 path_it := actor_it.open_paths.data + path_i path_r := Rectangle{path_it.p.x->F32 * RectX, path_it.p.y->F32 * RectY, RectX, RectY} - DrawRectangleRec(path_r, ORANGE) + DrawRectangleRec(path_r, orange) for path_i := 0, path_i < actor_it.close_paths.len, path_i += 1 path_it := actor_it.close_paths.data + path_i path_r := Rectangle{path_it.p.x->F32 * RectX, path_it.p.y->F32 * RectY, RectX, RectY} - DrawRectangleRec(path_r, BROWN) + DrawRectangleRec(path_r, brown) MAP_RecomputeHistory(actor_it) for path_i := 0, path_i < actor_it.history.len, path_i += 1 @@ -230,8 +238,22 @@ main :: (): int DrawCircleV(p1, 4, LIGHTGRAY) - if Mode == 0 ;; DrawText("F1", 0, 0, 32, BLACK) - if Mode == 1 ;; DrawText("F2", 0, 0, 32, BLACK) + text_size := 24 + text_p := 4 + text_y := WinY - text_size + + DrawText("Space :: PathFind", text_p, text_y, text_size, GRAY) + text_y -= text_size + DrawText("F4 :: Randomize actors", text_p, text_y, text_size, GRAY) + text_y -= text_size + + DrawText("F3 :: Simulate actors", text_p, text_y, text_size, GRAY) + text_y -= text_size + text: *char = "F1 :: Block placing" + if Mode == 1 ;; text = "F2 :: Actor placing" + DrawText(text, text_p, text_y, text_size, GRAY) + text_y -= text_size + EndDrawing() diff --git a/build/rtsgame/map.core b/build/rtsgame/map.core index 846041c..9732755 100644 --- a/build/rtsgame/map.core +++ b/build/rtsgame/map.core @@ -48,17 +48,38 @@ MAP_ActorSetP :: (actor: *MAP_Actor, p: V2I) *new_tile |= MAP_TILE_ACTOR_IS_STANDING actor.p = p +MAP_GetRandomP :: (m: *MAP_Map): V2I + result := V2I{GetRandomValue(0, MAP_CurrentMap.x), GetRandomValue(0, MAP_CurrentMap.y)} + return result + +MAP_GetRandomUnblockedP :: (m: *MAP_Map): V2I + for i := 0, i < 128, i += 1 + p := MAP_GetRandomP(m) + if m.data[p.x + p.y * m.x] == 0 + return p + Assert(false, "Invalid codepath") + r: V2I; return r + MAP_Init :: () MAP_CurrentMap.x = WinX / RectX MAP_CurrentMap.y = WinY / RectY bytes := sizeof(MAP_Tile) * MAP_CurrentMap.x->U64 * MAP_CurrentMap.y->U64 MAP_CurrentMap.data = malloc(bytes) memset(MAP_CurrentMap.data, 0, bytes) - actor := MAP_AddActor(&MAP_CurrentMap, {4,4}) - actor.target_p = V2I{8,8} - actor2 := MAP_AddActor(&MAP_CurrentMap, {16,16}) - actor2.target_p = V2I{8,8} + actor := MAP_AddActor(&MAP_CurrentMap, MAP_GetRandomUnblockedP(&MAP_CurrentMap)) + actor.target_p = MAP_GetRandomUnblockedP(&MAP_CurrentMap) + + actor2 := MAP_AddActor(&MAP_CurrentMap, MAP_GetRandomUnblockedP(&MAP_CurrentMap)) + actor2.target_p = MAP_GetRandomUnblockedP(&MAP_CurrentMap) + +MAP_RandomizeActors :: () + map := &MAP_CurrentMap + for i := 0, i < map.actors.len, i += 1 + it := map.actors.data + i + it.p = MAP_GetRandomUnblockedP(&MAP_CurrentMap) + it.target_p = MAP_GetRandomUnblockedP(&MAP_CurrentMap) + MAP_InsertOpenPath :: (s: *MAP_Actor, p: V2I, came_from: V2I, ignore_blocks: bool = false) if p.x < 0 || p.x >= s.map.x ;; return