diff --git a/battle/BattleScene.gd b/battle/BattleScene.gd index c0668bf..96d759f 100644 --- a/battle/BattleScene.gd +++ b/battle/BattleScene.gd @@ -1,6 +1,8 @@ class_name BattleScene extends Node3D @export var actionBox:ActionBox = null +@export var battleCursor:BattleCursor = null +@export var battleFighterScenes:Node signal neverEmitted @@ -35,7 +37,8 @@ func getBattleDecisions(fighters:Array[BattleFighter]) -> Array[BattleDecision]: elif action == ActionBox.Action.ATTACK: var targets = await _getTargets(fighter, fighter.movePrimary) - actionBox.visible = false + # Get cursor + if decision != null: decisions.append(decision) @@ -45,5 +48,20 @@ func getBattleDecisions(fighters:Array[BattleFighter]) -> Array[BattleDecision]: func _getTargets(fighter:BattleFighter, move:BattleAction) -> Array[BattleFighter]: print("Determining target") + + battleCursor.visible = true + var positions:Array[BattleSingleton.BattlePosition] = [] + for pos in BATTLE.BattlePosition.values(): + positions.append(pos) + battleCursor.setCursors(self, positions) + await neverEmitted - return [] \ No newline at end of file + return [] + +func getFighterSceneAtPosition(pos:BattleSingleton.BattlePosition) -> BattleFighterScene: + for fighterScene in battleFighterScenes.get_children(): + if !(fighterScene is BattleFighterScene): + continue + if fighterScene.battlePosition == pos: + return fighterScene + return null diff --git a/battle/BattleScene.tscn b/battle/BattleScene.tscn index b9ba702..7d17a5e 100644 --- a/battle/BattleScene.tscn +++ b/battle/BattleScene.tscn @@ -5,9 +5,11 @@ [ext_resource type="PackedScene" uid="uid://ktmvnapibv2q" path="res://battle/ui/ActionBox.tscn" id="2_c3ndu"] [ext_resource type="PackedScene" uid="uid://c4knowtushjly" path="res://battle/ui/BattleCursor.tscn" id="3_7s6t6"] -[node name="BattleScene" type="Node3D" node_paths=PackedStringArray("actionBox")] +[node name="BattleScene" type="Node3D" node_paths=PackedStringArray("actionBox", "battleCursor", "battleFighterScenes")] script = ExtResource("1_acaen") actionBox = NodePath("UI/ActionBox") +battleCursor = NodePath("UI/BattleCursor") +battleFighterScenes = NodePath("Fighters") metadata/_custom_type_script = "uid://dihfp05x6pktn" [node name="UI" type="Control" parent="."] @@ -29,6 +31,7 @@ text = "Battle" [node name="BattleCursor" parent="UI" instance=ExtResource("3_7s6t6")] layout_mode = 0 +anchors_preset = 0 [node name="Fighters" type="Node" parent="."] diff --git a/battle/ui/BattleCursor.gd b/battle/ui/BattleCursor.gd index 1039337..bed2bba 100644 --- a/battle/ui/BattleCursor.gd +++ b/battle/ui/BattleCursor.gd @@ -2,9 +2,21 @@ class_name BattleCursor extends Control @export var cursor:PackedScene -func setCursors(targets:Array[BattleSingleton.BattlePosition]) -> void: +func setCursors(battleScene:BattleScene, targets:Array[BattleSingleton.BattlePosition]) -> void: clearCursors() + for target in targets: + var fighterScene = battleScene.getFighterSceneAtPosition(target) + if fighterScene == null: + continue + + var cursorInstance = cursor.instantiate() + add_child(cursorInstance) + + # Convert world position to screen space + var screenPos = battleScene.get_viewport().get_camera_3d().unproject_position(fighterScene.global_transform.origin) + cursorInstance.position = screenPos + func clearCursors() -> void: # Clear all children (cursors). for child in get_children(): diff --git a/battle/ui/BattleCursor.tscn b/battle/ui/BattleCursor.tscn index 0f986be..09ae5b0 100644 --- a/battle/ui/BattleCursor.tscn +++ b/battle/ui/BattleCursor.tscn @@ -5,8 +5,7 @@ [node name="BattleCursor" type="Control"] layout_mode = 3 -anchors_preset = 0 -offset_right = 11.0 -offset_bottom = 11.0 +size_flags_horizontal = 0 +size_flags_vertical = 0 script = ExtResource("1_wsiei") cursor = ExtResource("2_6yv4v") diff --git a/battle/ui/BattleCursorCursor.tscn b/battle/ui/BattleCursorCursor.tscn index 2f5013f..79e1b7d 100644 --- a/battle/ui/BattleCursorCursor.tscn +++ b/battle/ui/BattleCursorCursor.tscn @@ -1,6 +1,15 @@ [gd_scene format=3 uid="uid://br2rs8skcn72l"] [node name="Control" type="ColorRect"] -offset_right = 8.0 -offset_bottom = 8.0 +anchors_preset = 8 +anchor_left = 0.5 +anchor_top = 0.5 +anchor_right = 0.5 +anchor_bottom = 0.5 +offset_left = -4.0 +offset_top = -4.0 +offset_right = 4.0 +offset_bottom = 4.0 +grow_horizontal = 2 +grow_vertical = 2 color = Color(1, 0.478431, 1, 1)