Add hover intent action badges
This commit is contained in:
@@ -1847,7 +1847,10 @@ func _target_preview_badge() -> Dictionary:
|
||||
return _skill_target_preview_badge(selected, target)
|
||||
if not selected_item_id.is_empty():
|
||||
return _item_target_preview_badge(selected, target)
|
||||
return _attack_target_preview_badge(selected, target)
|
||||
var attack_badge := _attack_target_preview_badge(selected, target)
|
||||
if not attack_badge.is_empty():
|
||||
return attack_badge
|
||||
return _hover_intent_preview_badge(selected, target)
|
||||
|
||||
|
||||
func _attack_target_preview_badge(selected: Dictionary, target: Dictionary) -> Dictionary:
|
||||
@@ -1936,6 +1939,22 @@ func _item_target_preview_badge(selected: Dictionary, target: Dictionary) -> Dic
|
||||
return _make_target_preview_badge("+%d MP" % mp_heal, "mp")
|
||||
|
||||
|
||||
func _hover_intent_preview_badge(selected: Dictionary, target: Dictionary) -> Dictionary:
|
||||
if selected.is_empty():
|
||||
return {}
|
||||
if not state.can_player_act():
|
||||
return {}
|
||||
if not bool(selected.get("controllable", true)) or bool(selected.get("acted", false)):
|
||||
return {}
|
||||
if not target.is_empty():
|
||||
if target.get("team", "") == selected.get("team", "") and _can_select(target):
|
||||
return _make_target_preview_badge("SELECT", "select")
|
||||
return {}
|
||||
if move_cells.has(hover_cell):
|
||||
return _make_target_preview_badge("MOVE", "move")
|
||||
return {}
|
||||
|
||||
|
||||
func _make_target_preview_badge(text: String, kind: String) -> Dictionary:
|
||||
if text.is_empty():
|
||||
return {}
|
||||
@@ -1968,6 +1987,10 @@ func _compact_support_preview_text(effect_text: String) -> String:
|
||||
func _target_preview_badge_color(kind: String) -> Color:
|
||||
if kind == "damage":
|
||||
return Color(1.0, 0.38, 0.26)
|
||||
if kind == "move":
|
||||
return Color(0.38, 0.70, 1.0)
|
||||
if kind == "select":
|
||||
return Color(1.0, 0.86, 0.34)
|
||||
if kind == "heal":
|
||||
return Color(0.44, 1.0, 0.52)
|
||||
if kind == "mp":
|
||||
|
||||
@@ -43,6 +43,7 @@ func _init() -> void:
|
||||
_check_battle_visual_data(failures)
|
||||
_check_scene_texture_loading(failures)
|
||||
_check_hud_focus_text(failures)
|
||||
_check_hover_intent_badges(failures)
|
||||
_check_terrain_and_unit_presentation(failures)
|
||||
_check_attack_motion_profiles(failures)
|
||||
_check_attack_motion_signal(failures)
|
||||
@@ -236,6 +237,47 @@ func _check_hud_focus_text(failures: Array[String]) -> void:
|
||||
scene.free()
|
||||
|
||||
|
||||
func _check_hover_intent_badges(failures: Array[String]) -> void:
|
||||
var scene = BattleSceneScript.new()
|
||||
if not scene.state.load_battle("res://data/scenarios/001_yellow_turbans.json"):
|
||||
failures.append("could not load battle scene state for hover intent badges")
|
||||
scene.free()
|
||||
return
|
||||
scene.battle_started = true
|
||||
scene.state.select_unit("cao_cao")
|
||||
scene._refresh_ranges()
|
||||
|
||||
scene.hover_cell = Vector2i(2, 3)
|
||||
var move_badge := scene._target_preview_badge()
|
||||
if str(move_badge.get("text", "")) != "MOVE" or str(move_badge.get("kind", "")) != "move":
|
||||
failures.append("reachable empty tile should show MOVE badge: %s" % str(move_badge))
|
||||
|
||||
scene.hover_cell = Vector2i(1, 4)
|
||||
var select_badge := scene._target_preview_badge()
|
||||
if str(select_badge.get("text", "")) != "SELECT" or str(select_badge.get("kind", "")) != "select":
|
||||
failures.append("friendly selectable unit should show SELECT badge: %s" % str(select_badge))
|
||||
|
||||
scene.hover_cell = Vector2i(7, 2)
|
||||
var attack_badge := scene._target_preview_badge()
|
||||
if attack_badge.is_empty() or str(attack_badge.get("kind", "")) == "move" or str(attack_badge.get("text", "")) == "MOVE":
|
||||
failures.append("enemy hover should keep attack badge priority: %s" % str(attack_badge))
|
||||
|
||||
var cao_cao: Dictionary = scene.state.get_unit("cao_cao")
|
||||
cao_cao["moved"] = true
|
||||
scene._refresh_ranges()
|
||||
scene.hover_cell = Vector2i(2, 3)
|
||||
var moved_badge := scene._target_preview_badge()
|
||||
if str(moved_badge.get("kind", "")) == "move" or str(moved_badge.get("text", "")) == "MOVE":
|
||||
failures.append("moved unit should not show MOVE badge: %s" % str(moved_badge))
|
||||
|
||||
var default_color := scene._target_preview_badge_color("")
|
||||
if scene._target_preview_badge_color("move") == default_color:
|
||||
failures.append("MOVE badge should use a distinct color")
|
||||
if scene._target_preview_badge_color("select") == default_color:
|
||||
failures.append("SELECT badge should use a distinct color")
|
||||
scene.free()
|
||||
|
||||
|
||||
func _check_terrain_and_unit_presentation(failures: Array[String]) -> void:
|
||||
var scene = BattleSceneScript.new()
|
||||
if not scene.state.load_battle("res://data/scenarios/001_yellow_turbans.json"):
|
||||
|
||||
Reference in New Issue
Block a user