From a728f5c37f75b16bc39a92fe849aee7d52220af2 Mon Sep 17 00:00:00 2001 From: Krzosa Karol Date: Thu, 20 Apr 2023 15:04:55 +0200 Subject: [PATCH] Selection and setting target_p --- build/rtsgame/main.core | 36 ++++++++++++++++++++++++++++++++---- build/rtsgame/map.core | 13 +++++++++++++ 2 files changed, 45 insertions(+), 4 deletions(-) diff --git a/build/rtsgame/main.core b/build/rtsgame/main.core index cc471d3..4d726de 100644 --- a/build/rtsgame/main.core +++ b/build/rtsgame/main.core @@ -102,6 +102,7 @@ ANI_SetTiles: Array(ANI_SetTile) MouseSelecting := false MouseSelectionPivot: Vector2 MouseSelectionBox: Rectangle +MouseSelectedActors: Array(*MAP_Actor) // @todo: ids main :: (): int MAP_Init() @@ -150,6 +151,13 @@ main :: (): int MouseP.y - MouseSelectionPivot.y } + if MouseSelectionBox.width < 0 + MouseSelectionBox.x += MouseSelectionBox.width + MouseSelectionBox.width = -MouseSelectionBox.width + if MouseSelectionBox.height < 0 + MouseSelectionBox.y += MouseSelectionBox.height + MouseSelectionBox.height = -MouseSelectionBox.height + if IsKeyPressed(KEY_F1) Mode = 0 @@ -270,10 +278,30 @@ main :: (): int DrawCircleV(p0, 4, LIGHTGRAY) DrawCircleV(p1, 4, LIGHTGRAY) - if Mode == 1 && MouseSelecting - COLOR_SelectionBox := GREEN - COLOR_SelectionBox.a = 255/2 - DrawRectangleRec(MouseSelectionBox, COLOR_SelectionBox) + if Mode == 1 + for actor_i := 0, actor_i < MouseSelectedActors.len, actor_i += 1 + actor_it := MouseSelectedActors.data[actor_i] + actor_box := MAP_Rectangle(actor_it.p) + DrawRectangleRec(actor_box, GREEN) + + if IsMouseButtonPressed(MOUSE_BUTTON_RIGHT) + p := MAP_ScreenToMap(MouseP) + MAP_SetTargetP(actor_it, p) + + if MouseSelecting + Reset(&MouseSelectedActors) + COLOR_SelectionBox := GREEN + COLOR_SelectionBox.a = 255/2 + + for actor_i := 0, actor_i < map.actors.len, actor_i += 1 + actor_it := map.actors.data + actor_i + actor_box := MAP_Rectangle(actor_it.p) + + if CheckCollisionRecs(actor_box, MouseSelectionBox) + Add(&MouseSelectedActors, actor_it) + + DrawRectangleRec(MouseSelectionBox, COLOR_SelectionBox) + menu_open := false if menu_open diff --git a/build/rtsgame/map.core b/build/rtsgame/map.core index ac19bcf..f371d95 100644 --- a/build/rtsgame/map.core +++ b/build/rtsgame/map.core @@ -37,6 +37,12 @@ MAP_Circle :: (p: V2I): Vector2 result := Vector2{p.x->F32 * RectX + RectX/2, p.y->F32 * RectY + RectY/2} return result +MAP_ScreenToMap :: (p: Vector2): V2I + p0 := p.x / RectX + p1 := p.y / RectY + result := V2I{p0->int, p1->int} + return result + MAP_AddActor :: (map: *MAP_Map, p: V2I): *MAP_Actor Add(&map.actors, {p, p, map}) Assert(map.data[p.x + p.y * map.x] == 0) @@ -61,6 +67,13 @@ MAP_ActorSetP :: (actor: *MAP_Actor, p: V2I) Reset(&actor.open_paths) Reset(&actor.close_paths) +MAP_SetTargetP :: (s: *MAP_Actor, p: V2I) + s.target_p = p + Reset(&s.tiles_visited) + Reset(&s.history) + Reset(&s.open_paths) + Reset(&s.close_paths) + MAP_GetRandomP :: (m: *MAP_Map): V2I result := V2I{GetRandomValue(0, MAP_CurrentMap.x), GetRandomValue(0, MAP_CurrentMap.y)} return result