Compare commits
2
Commits
v1.0.0
..
f1572374f5
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
f1572374f5 | ||
|
|
4e38e5c936 |
No files matched your search
@@ -0,0 +1,60 @@
|
||||
mod_ff_battle_name = FFBattle
|
||||
mod_ff_battle_desc = Sistema de combate al estilo Final Fantasy sobre turn_battle_base: órdenes por menú (atacar, defender, objeto, aturdir), paneles de enemigos y del grupo, animaciones y ejecutores por acción, HUD y registro de combate.
|
||||
|
||||
ff_battle/menu_attack = Atacar
|
||||
ff_battle/menu_items = Objetos
|
||||
ff_battle/menu_defend = Defender
|
||||
ff_battle/menu_escape = Huir
|
||||
ff_battle/end_turn = Terminar turno
|
||||
ff_battle/back = Atrás
|
||||
ff_battle/no_items = No hay objetos
|
||||
ff_battle/select_target = Elige un objetivo
|
||||
ff_battle/escape_fail = ¡No has podido huir!
|
||||
ff_battle/escape_success = ¡Has huido!
|
||||
ff_battle/no_actions = No hay acciones
|
||||
|
||||
ff_battle/hud_title = Combate
|
||||
ff_battle/round = Ronda
|
||||
ff_battle/enemies = Enemigos
|
||||
ff_battle/allies = Grupo
|
||||
ff_battle/phase_player = Turno del jugador
|
||||
ff_battle/phase_enemy = Turno del enemigo
|
||||
ff_battle/banner_player = Turno del jugador
|
||||
ff_battle/banner_enemy = Turno del enemigo
|
||||
ff_battle/hint_target = Elige un objetivo · clic derecho / Esc: cancelar
|
||||
ff_battle/hint_ally = Elige un aliado · clic derecho / Esc: cancelar
|
||||
ff_battle/menu_caption = {0} · PA {1}/{2}
|
||||
ff_battle/menu_actions = Acciones
|
||||
|
||||
ff_battle/log_title = Registro de combate
|
||||
ff_battle/log_round = ronda {0}
|
||||
ff_battle/log_battle_start = Comienza el combate
|
||||
ff_battle/log_turn_player = — Turno del jugador · ronda {0} —
|
||||
ff_battle/log_turn_enemy = — Turno del enemigo · ronda {0} —
|
||||
ff_battle/log_action = {0}: {1} → {2}
|
||||
ff_battle/log_action_self = {0}: {1}
|
||||
ff_battle/log_damage = {0}: {1} → {2} · -{3} PV
|
||||
ff_battle/log_shield = El escudo de {0} absorbió {1} · quedan {2}
|
||||
ff_battle/log_defence = Defensa: {0} · +{1} DEF (total {2})
|
||||
ff_battle/log_stun = Aturdido: {0} · {1} turnos
|
||||
ff_battle/log_stun_skip = {0} está aturdido: pierde el turno
|
||||
ff_battle/log_heal = {0}: {1} restauró {2} PV
|
||||
ff_battle/log_death = {0} derrotado
|
||||
ff_battle/log_escape_success = Huida con éxito
|
||||
ff_battle/log_escape_failed = ¡No has podido huir! {0} pierde 1 PA
|
||||
ff_battle/log_no_points = Al grupo no le quedan PA
|
||||
|
||||
ff_battle/detail_attack = Submenú de acciones del personaje. El coste en PA aparece junto al nombre.
|
||||
ff_battle/detail_items = 1 PA por objeto. Los objetos con objetivo requieren un aliado.
|
||||
ff_battle/detail_defend = Atajo: la acción sobre un aliado se aplica a uno mismo. Escudo +4 DEF.
|
||||
ff_battle/detail_escape = 70 % de probabilidad de éxito. Si falla, el personaje pierde 1 PA.
|
||||
ff_battle/detail_back = Volver al menú principal de órdenes.
|
||||
ff_battle/detail_action = Acción especial sin parámetros numéricos.
|
||||
ff_battle/detail_item = Un objeto del inventario compartido.
|
||||
ff_battle/detail_damage = Daño {0} (ATQ {1} × {2}) · coste {3} PA
|
||||
ff_battle/detail_stun = Aturde {0} turnos · coste {1} PA
|
||||
ff_battle/detail_defence = Escudo del objetivo +{0} · coste {1} PA
|
||||
|
||||
ff_battle/status_stun = Aturdido {0}
|
||||
ff_battle/badge_turns = {0} turnos
|
||||
ff_battle/badge_self = A sí mismo
|
||||
@@ -0,0 +1,60 @@
|
||||
mod_ff_battle_name = FFBattle
|
||||
mod_ff_battle_desc = turn_battle_base 上の Final Fantasy 風バトルシステム:メニュー式のコマンド(攻撃/防御/アイテム/スタン)、敵とパーティのパネル、アクションごとのアニメーションと実行器、バトル HUD とログ。
|
||||
|
||||
ff_battle/menu_attack = たたかう
|
||||
ff_battle/menu_items = アイテム
|
||||
ff_battle/menu_defend = ぼうぎょ
|
||||
ff_battle/menu_escape = にげる
|
||||
ff_battle/end_turn = ターン終了
|
||||
ff_battle/back = 戻る
|
||||
ff_battle/no_items = アイテムがない
|
||||
ff_battle/select_target = 対象を選択
|
||||
ff_battle/escape_fail = 逃げられなかった!
|
||||
ff_battle/escape_success = うまく逃げきった!
|
||||
ff_battle/no_actions = アクションがない
|
||||
|
||||
ff_battle/hud_title = バトル
|
||||
ff_battle/round = ラウンド
|
||||
ff_battle/enemies = 敵
|
||||
ff_battle/allies = パーティ
|
||||
ff_battle/phase_player = プレイヤーのターン
|
||||
ff_battle/phase_enemy = 敵のターン
|
||||
ff_battle/banner_player = プレイヤーのターン
|
||||
ff_battle/banner_enemy = 敵のターン
|
||||
ff_battle/hint_target = 対象を選択 · 右クリック / Esc——キャンセル
|
||||
ff_battle/hint_ally = 味方を選択 · 右クリック / Esc——キャンセル
|
||||
ff_battle/menu_caption = {0} · AP {1}/{2}
|
||||
ff_battle/menu_actions = アクション
|
||||
|
||||
ff_battle/log_title = バトルログ
|
||||
ff_battle/log_round = ラウンド {0}
|
||||
ff_battle/log_battle_start = バトル開始
|
||||
ff_battle/log_turn_player = — プレイヤーのターン · ラウンド {0} —
|
||||
ff_battle/log_turn_enemy = — 敵のターン · ラウンド {0} —
|
||||
ff_battle/log_action = {0}:{1} → {2}
|
||||
ff_battle/log_action_self = {0}:{1}
|
||||
ff_battle/log_damage = {0}:{1} → {2} · -{3} HP
|
||||
ff_battle/log_shield = {0} のシールドが {1} を吸収 · 残り {2}
|
||||
ff_battle/log_defence = 防御:{0} · +{1} DEF(合計 {2})
|
||||
ff_battle/log_stun = スタン:{0} · {1} ターン
|
||||
ff_battle/log_stun_skip = {0} はスタン中——ターンを飛ばす
|
||||
ff_battle/log_heal = {0}:{1} が HP を {2} 回復
|
||||
ff_battle/log_death = {0} を倒した
|
||||
ff_battle/log_escape_success = 逃走成功
|
||||
ff_battle/log_escape_failed = 逃げられなかった! {0} は AP を 1 失う
|
||||
ff_battle/log_no_points = パーティの AP が尽きた
|
||||
|
||||
ff_battle/detail_attack = キャラクターのアクションのサブメニュー。名前の横に AP コストを表示。
|
||||
ff_battle/detail_items = アイテム 1 つにつき 1 AP。対象付きのアイテムには味方が必要。
|
||||
ff_battle/detail_defend = ショートカット:味方対象のアクションを自分に使う。シールド +4 DEF。
|
||||
ff_battle/detail_escape = 成功率 70%。失敗するとキャラクターは AP を 1 失う。
|
||||
ff_battle/detail_back = メインのコマンドメニューに戻る。
|
||||
ff_battle/detail_action = 数値パラメーターのない特殊アクション。
|
||||
ff_battle/detail_item = 共有インベントリのアイテム。
|
||||
ff_battle/detail_damage = ダメージ {0}(攻撃 {1} × {2})· コスト {3} AP
|
||||
ff_battle/detail_stun = {0} ターンのスタン · コスト {1} AP
|
||||
ff_battle/detail_defence = 対象のシールド +{0} · コスト {1} AP
|
||||
|
||||
ff_battle/status_stun = スタン {0}
|
||||
ff_battle/badge_turns = {0} ターン
|
||||
ff_battle/badge_self = 自分
|
||||
@@ -0,0 +1,60 @@
|
||||
mod_ff_battle_name = FFBattle
|
||||
mod_ff_battle_desc = turn_battle_base 위의 Final Fantasy 스타일 전투 시스템: 메뉴식 명령(공격/방어/아이템/기절), 적과 파티 패널, 액션별 애니메이션과 실행기, 전투 HUD와 로그.
|
||||
|
||||
ff_battle/menu_attack = 공격
|
||||
ff_battle/menu_items = 아이템
|
||||
ff_battle/menu_defend = 방어
|
||||
ff_battle/menu_escape = 도망
|
||||
ff_battle/end_turn = 턴 종료
|
||||
ff_battle/back = 뒤로
|
||||
ff_battle/no_items = 아이템 없음
|
||||
ff_battle/select_target = 대상 선택
|
||||
ff_battle/escape_fail = 도망치지 못했다!
|
||||
ff_battle/escape_success = 도망쳤다!
|
||||
ff_battle/no_actions = 액션 없음
|
||||
|
||||
ff_battle/hud_title = 전투
|
||||
ff_battle/round = 라운드
|
||||
ff_battle/enemies = 적
|
||||
ff_battle/allies = 파티
|
||||
ff_battle/phase_player = 플레이어 턴
|
||||
ff_battle/phase_enemy = 적 턴
|
||||
ff_battle/banner_player = 플레이어 턴
|
||||
ff_battle/banner_enemy = 적 턴
|
||||
ff_battle/hint_target = 대상 선택 · 우클릭 / Esc — 취소
|
||||
ff_battle/hint_ally = 아군 선택 · 우클릭 / Esc — 취소
|
||||
ff_battle/menu_caption = {0} · AP {1}/{2}
|
||||
ff_battle/menu_actions = 액션
|
||||
|
||||
ff_battle/log_title = 전투 로그
|
||||
ff_battle/log_round = {0}라운드
|
||||
ff_battle/log_battle_start = 전투 시작
|
||||
ff_battle/log_turn_player = — 플레이어 턴 · {0}라운드 —
|
||||
ff_battle/log_turn_enemy = — 적 턴 · {0}라운드 —
|
||||
ff_battle/log_action = {0}: {1} → {2}
|
||||
ff_battle/log_action_self = {0}: {1}
|
||||
ff_battle/log_damage = {0}: {1} → {2} · -{3} HP
|
||||
ff_battle/log_shield = {0}의 보호막이 {1}을(를) 흡수 · 남은 양 {2}
|
||||
ff_battle/log_defence = 방어: {0} · +{1} DEF (합계 {2})
|
||||
ff_battle/log_stun = 기절: {0} · {1}턴
|
||||
ff_battle/log_stun_skip = {0}은(는) 기절 — 턴을 건너뜀
|
||||
ff_battle/log_heal = {0}: {1}이(가) HP {2} 회복
|
||||
ff_battle/log_death = {0} 쓰러짐
|
||||
ff_battle/log_escape_success = 도망 성공
|
||||
ff_battle/log_escape_failed = 도망 실패! {0}은(는) AP를 1 잃는다
|
||||
ff_battle/log_no_points = 파티의 AP가 바닥났다
|
||||
|
||||
ff_battle/detail_attack = 캐릭터의 액션 하위 메뉴. 이름 옆에 AP 비용이 표시됩니다.
|
||||
ff_battle/detail_items = 아이템 하나에 1 AP. 대상이 있는 아이템은 아군이 필요합니다.
|
||||
ff_battle/detail_defend = 단축키: 아군 대상 액션을 자신에게 사용. 보호막 +4 DEF.
|
||||
ff_battle/detail_escape = 성공 확률 70%. 실패하면 캐릭터가 AP를 1 잃습니다.
|
||||
ff_battle/detail_back = 메인 명령 메뉴로 돌아갑니다.
|
||||
ff_battle/detail_action = 수치 매개변수가 없는 특수 액션.
|
||||
ff_battle/detail_item = 공용 인벤토리의 아이템.
|
||||
ff_battle/detail_damage = 피해 {0} (공격 {1} × {2}) · 비용 {3} AP
|
||||
ff_battle/detail_stun = {0}턴 기절 · 비용 {1} AP
|
||||
ff_battle/detail_defence = 대상 보호막 +{0} · 비용 {1} AP
|
||||
|
||||
ff_battle/status_stun = 기절 {0}
|
||||
ff_battle/badge_turns = {0}턴
|
||||
ff_battle/badge_self = 자신
|
||||
@@ -0,0 +1,60 @@
|
||||
mod_ff_battle_name = FFBattle
|
||||
mod_ff_battle_desc = Hệ thống chiến đấu phong cách Final Fantasy trên nền turn_battle_base: lệnh qua menu (tấn công/phòng thủ/vật phẩm/choáng), bảng kẻ địch và tổ đội, hoạt ảnh và bộ thực thi cho từng hành động, HUD và nhật ký chiến đấu.
|
||||
|
||||
ff_battle/menu_attack = Tấn công
|
||||
ff_battle/menu_items = Vật phẩm
|
||||
ff_battle/menu_defend = Phòng thủ
|
||||
ff_battle/menu_escape = Bỏ chạy
|
||||
ff_battle/end_turn = Kết thúc lượt
|
||||
ff_battle/back = Quay lại
|
||||
ff_battle/no_items = Không có vật phẩm
|
||||
ff_battle/select_target = Chọn mục tiêu
|
||||
ff_battle/escape_fail = Bỏ chạy thất bại!
|
||||
ff_battle/escape_success = Bạn đã chạy thoát!
|
||||
ff_battle/no_actions = Không có hành động
|
||||
|
||||
ff_battle/hud_title = Trận đấu
|
||||
ff_battle/round = Vòng
|
||||
ff_battle/enemies = Kẻ địch
|
||||
ff_battle/allies = Tổ đội
|
||||
ff_battle/phase_player = Lượt người chơi
|
||||
ff_battle/phase_enemy = Lượt kẻ địch
|
||||
ff_battle/banner_player = Lượt người chơi
|
||||
ff_battle/banner_enemy = Lượt kẻ địch
|
||||
ff_battle/hint_target = Chọn mục tiêu · chuột phải / Esc — hủy
|
||||
ff_battle/hint_ally = Chọn đồng đội · chuột phải / Esc — hủy
|
||||
ff_battle/menu_caption = {0} · AP {1}/{2}
|
||||
ff_battle/menu_actions = Hành động
|
||||
|
||||
ff_battle/log_title = Nhật ký trận đấu
|
||||
ff_battle/log_round = vòng {0}
|
||||
ff_battle/log_battle_start = Trận đấu bắt đầu
|
||||
ff_battle/log_turn_player = — Lượt người chơi · vòng {0} —
|
||||
ff_battle/log_turn_enemy = — Lượt kẻ địch · vòng {0} —
|
||||
ff_battle/log_action = {0}: {1} → {2}
|
||||
ff_battle/log_action_self = {0}: {1}
|
||||
ff_battle/log_damage = {0}: {1} → {2} · -{3} HP
|
||||
ff_battle/log_shield = Khiên của {0} hấp thụ {1} · còn {2}
|
||||
ff_battle/log_defence = Phòng thủ: {0} · +{1} DEF (tổng {2})
|
||||
ff_battle/log_stun = Bị choáng: {0} · {1} lượt
|
||||
ff_battle/log_stun_skip = {0} bị choáng — mất lượt
|
||||
ff_battle/log_heal = {0}: {1} hồi {2} HP
|
||||
ff_battle/log_death = {0} đã bị hạ
|
||||
ff_battle/log_escape_success = Bỏ chạy thành công
|
||||
ff_battle/log_escape_failed = Bỏ chạy thất bại! {0} mất 1 AP
|
||||
ff_battle/log_no_points = Tổ đội đã hết AP
|
||||
|
||||
ff_battle/detail_attack = Menu con hành động của nhân vật. Chi phí AP hiển thị cạnh tên.
|
||||
ff_battle/detail_items = 1 AP cho mỗi vật phẩm. Vật phẩm có mục tiêu cần một đồng đội.
|
||||
ff_battle/detail_defend = Phím tắt: hành động nhắm đồng đội được áp dụng cho bản thân. Khiên +4 DEF.
|
||||
ff_battle/detail_escape = Tỉ lệ thành công 70%. Nếu thất bại, nhân vật mất 1 AP.
|
||||
ff_battle/detail_back = Quay lại menu lệnh chính.
|
||||
ff_battle/detail_action = Hành động đặc biệt không có tham số số.
|
||||
ff_battle/detail_item = Một vật phẩm trong túi đồ chung.
|
||||
ff_battle/detail_damage = Sát thương {0} (ATK {1} × {2}) · tốn {3} AP
|
||||
ff_battle/detail_stun = Choáng {0} lượt · tốn {1} AP
|
||||
ff_battle/detail_defence = Khiên mục tiêu +{0} · tốn {1} AP
|
||||
|
||||
ff_battle/status_stun = Bị choáng {0}
|
||||
ff_battle/badge_turns = {0} lượt
|
||||
ff_battle/badge_self = Bản thân
|
||||
@@ -0,0 +1,60 @@
|
||||
mod_ff_battle_name = FFBattle
|
||||
mod_ff_battle_desc = 基于 turn_battle_base 的 Final Fantasy 风格战斗系统:菜单式指令(攻击/防御/物品/眩晕)、敌方和队伍面板、每个动作的动画与执行器、战斗 HUD 和日志。
|
||||
|
||||
ff_battle/menu_attack = 攻击
|
||||
ff_battle/menu_items = 物品
|
||||
ff_battle/menu_defend = 防御
|
||||
ff_battle/menu_escape = 逃跑
|
||||
ff_battle/end_turn = 结束回合
|
||||
ff_battle/back = 返回
|
||||
ff_battle/no_items = 没有物品
|
||||
ff_battle/select_target = 选择目标
|
||||
ff_battle/escape_fail = 逃跑失败!
|
||||
ff_battle/escape_success = 你逃走了!
|
||||
ff_battle/no_actions = 没有行动
|
||||
|
||||
ff_battle/hud_title = 战斗
|
||||
ff_battle/round = 回合
|
||||
ff_battle/enemies = 敌人
|
||||
ff_battle/allies = 队伍
|
||||
ff_battle/phase_player = 玩家回合
|
||||
ff_battle/phase_enemy = 敌方回合
|
||||
ff_battle/banner_player = 玩家回合
|
||||
ff_battle/banner_enemy = 敌方回合
|
||||
ff_battle/hint_target = 选择目标 · 右键 / Esc——取消
|
||||
ff_battle/hint_ally = 选择队友 · 右键 / Esc——取消
|
||||
ff_battle/menu_caption = {0} · AP {1}/{2}
|
||||
ff_battle/menu_actions = 行动
|
||||
|
||||
ff_battle/log_title = 战斗日志
|
||||
ff_battle/log_round = 第 {0} 回合
|
||||
ff_battle/log_battle_start = 战斗开始
|
||||
ff_battle/log_turn_player = — 玩家回合 · 第 {0} 回合 —
|
||||
ff_battle/log_turn_enemy = — 敌方回合 · 第 {0} 回合 —
|
||||
ff_battle/log_action = {0}:{1} → {2}
|
||||
ff_battle/log_action_self = {0}:{1}
|
||||
ff_battle/log_damage = {0}:{1} → {2} · -{3} HP
|
||||
ff_battle/log_shield = {0} 的护盾吸收了 {1} · 剩余 {2}
|
||||
ff_battle/log_defence = 防御:{0} · +{1} 防御(共 {2})
|
||||
ff_battle/log_stun = 眩晕:{0} · {1} 回合
|
||||
ff_battle/log_stun_skip = {0} 处于眩晕——跳过回合
|
||||
ff_battle/log_heal = {0}:{1} 恢复了 {2} HP
|
||||
ff_battle/log_death = {0} 被击败
|
||||
ff_battle/log_escape_success = 逃跑成功
|
||||
ff_battle/log_escape_failed = 逃跑失败!{0} 失去 1 AP
|
||||
ff_battle/log_no_points = 队伍的 AP 用完了
|
||||
|
||||
ff_battle/detail_attack = 角色的行动子菜单。名称旁显示 AP 消耗。
|
||||
ff_battle/detail_items = 每个物品消耗 1 AP。需要目标的物品要选择队友。
|
||||
ff_battle/detail_defend = 快捷方式:对队友的行动作用于自己。护盾 +4 防御。
|
||||
ff_battle/detail_escape = 成功率 70%。失败时角色失去 1 AP。
|
||||
ff_battle/detail_back = 返回主指令菜单。
|
||||
ff_battle/detail_action = 没有数值参数的特殊行动。
|
||||
ff_battle/detail_item = 共享背包中的物品。
|
||||
ff_battle/detail_damage = 伤害 {0}(攻击 {1} × {2})· 消耗 {3} AP
|
||||
ff_battle/detail_stun = 眩晕 {0} 回合 · 消耗 {1} AP
|
||||
ff_battle/detail_defence = 目标护盾 +{0} · 消耗 {1} AP
|
||||
|
||||
ff_battle/status_stun = 眩晕 {0}
|
||||
ff_battle/badge_turns = {0} 回合
|
||||
ff_battle/badge_self = 自己
|
||||
@@ -1,5 +1,7 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using Cthangover.Core.Battle;
|
||||
using Cthangover.Core.Cards.StatusEffect;
|
||||
using Cthangover.Core.Characters;
|
||||
using Cthangover.Core.Mods.Resolvers;
|
||||
@@ -54,6 +56,8 @@ namespace Cthangover.FFBattle.UI
|
||||
private TextureRect _stunIcon;
|
||||
private Label _stunLabel;
|
||||
private Tween _animTween;
|
||||
private VBoxContainer _gaugesBox;
|
||||
private bool _gaugesSubscribed;
|
||||
private static Shader _dissolveShader;
|
||||
|
||||
/// <summary>Whether this widget belongs to the player party (affects highlight/targeting logic).</summary>
|
||||
@@ -89,6 +93,13 @@ namespace Cthangover.FFBattle.UI
|
||||
_stunLabel = GetNode<Label>("StatusBox/StunBadge/StunRow/StunLabel");
|
||||
_selection = GetNode<Panel>("Selection");
|
||||
|
||||
// Extra bars of other mods (mana of battle_formulas…) go under the health bar.
|
||||
var column = GetNode<VBoxContainer>("Info/Column");
|
||||
_gaugesBox = new VBoxContainer { Name = "Gauges", MouseFilter = MouseFilterEnum.Ignore, Visible = false };
|
||||
_gaugesBox.AddThemeConstantOverride("separation", 1);
|
||||
column.AddChild(_gaugesBox);
|
||||
column.MoveChild(_gaugesBox, GetNode<Control>("Info/Column/HpBarStack").GetIndex() + 1);
|
||||
|
||||
ApplyStyles();
|
||||
}
|
||||
|
||||
@@ -119,6 +130,13 @@ namespace Cthangover.FFBattle.UI
|
||||
if (_atkLabel != null)
|
||||
_atkLabel.Visible = !IsPlayer;
|
||||
|
||||
if (!_gaugesSubscribed)
|
||||
{
|
||||
_gaugesSubscribed = true;
|
||||
BattleUnitGauges.Changed += OnGaugesChanged;
|
||||
TreeExiting += () => BattleUnitGauges.Changed -= OnGaugesChanged;
|
||||
}
|
||||
|
||||
UpdateInfo();
|
||||
}
|
||||
|
||||
@@ -172,6 +190,70 @@ namespace Cthangover.FFBattle.UI
|
||||
}
|
||||
|
||||
RefreshStun();
|
||||
RefreshGauges();
|
||||
}
|
||||
|
||||
private void OnGaugesChanged(string unitId)
|
||||
{
|
||||
if (unitId == null || unitId == Card?.ID)
|
||||
RefreshGauges();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Draws the <see cref="BattleUnitGauges"/> of a party member, one thin bar with its label
|
||||
/// and numbers per gauge; rows are reused by position.
|
||||
/// </summary>
|
||||
private void RefreshGauges()
|
||||
{
|
||||
if (_gaugesBox == null || !IsInstanceValid(this) || IsQueuedForDeletion())
|
||||
return;
|
||||
var gauges = IsPlayer && Card != null ? BattleUnitGauges.Read(Card) : new List<BattleGauge>();
|
||||
_gaugesBox.Visible = gauges.Count > 0;
|
||||
while (_gaugesBox.GetChildCount() > gauges.Count)
|
||||
{
|
||||
var extra = _gaugesBox.GetChild(_gaugesBox.GetChildCount() - 1);
|
||||
_gaugesBox.RemoveChild(extra);
|
||||
extra.QueueFree();
|
||||
}
|
||||
for (var i = 0; i < gauges.Count; i++)
|
||||
{
|
||||
var row = i < _gaugesBox.GetChildCount() ? (HBoxContainer)_gaugesBox.GetChild(i) : CreateGaugeRow();
|
||||
var gauge = gauges[i];
|
||||
row.GetNode<Label>("Key").Text = TranslationServer.Translate(gauge.Label ?? gauge.Id ?? string.Empty).ToString();
|
||||
var bar = row.GetNode<ProgressBar>("Bar");
|
||||
bar.Value = Mathf.Clamp(gauge.Current / (float)gauge.Max, 0f, 1f) * 100f;
|
||||
var color = string.IsNullOrWhiteSpace(gauge.Color) ? UiTokens.Info : Color.FromString(gauge.Color, UiTokens.Info);
|
||||
bar.AddThemeStyleboxOverride("fill", UiKit.Frame(UiTokens.RadiusSm, color));
|
||||
row.GetNode<Label>("Value").Text = $"{gauge.Current}/{gauge.Max}";
|
||||
}
|
||||
}
|
||||
|
||||
private HBoxContainer CreateGaugeRow()
|
||||
{
|
||||
var row = new HBoxContainer { MouseFilter = MouseFilterEnum.Ignore };
|
||||
row.AddThemeConstantOverride("separation", 4);
|
||||
var key = new Label { Name = "Key", MouseFilter = MouseFilterEnum.Ignore };
|
||||
key.AddThemeFontSizeOverride("font_size", UiTokens.FontTiny);
|
||||
key.AddThemeColorOverride("font_color", UiTokens.Muted);
|
||||
var bar = new ProgressBar
|
||||
{
|
||||
Name = "Bar",
|
||||
ShowPercentage = false,
|
||||
MaxValue = 100,
|
||||
CustomMinimumSize = new Vector2(0, 5),
|
||||
SizeFlagsHorizontal = SizeFlags.ExpandFill,
|
||||
SizeFlagsVertical = SizeFlags.ShrinkCenter,
|
||||
MouseFilter = MouseFilterEnum.Ignore,
|
||||
};
|
||||
bar.AddThemeStyleboxOverride("background", UiKit.Frame(UiTokens.RadiusSm, UiTokens.StatBg));
|
||||
var value = new Label { Name = "Value", MouseFilter = MouseFilterEnum.Ignore };
|
||||
value.AddThemeFontSizeOverride("font_size", UiTokens.FontTiny);
|
||||
value.AddThemeColorOverride("font_color", UiTokens.Info);
|
||||
row.AddChild(key);
|
||||
row.AddChild(bar);
|
||||
row.AddChild(value);
|
||||
_gaugesBox.AddChild(row);
|
||||
return row;
|
||||
}
|
||||
|
||||
/// <summary>Shows a coloured selection frame over the card with a 0.15s fade.</summary>
|
||||
|
||||
Reference in new issue
Block a user