DRHPS/code-csharp/en_US/BattlePartyMemberStatus.cs
2025-04-08 11:31:35 +08:00

233 lines
8.9 KiB
C#

using System.Collections;
using System.Collections.Generic;
using TMPro;
using UnityEngine;
using UnityEngine.UI;
public class BattlePartyMemberStatus : MonoBehaviour
{
public bool CurrentlySelected;
public bool StatusTabOpened;
private bool previousCurrentlySelected;
public bool HasActAbility;
public List<BattlePartyMemberStatusButton> Buttons = new List<BattlePartyMemberStatusButton>();
public BattlePartyMember TargetPartyMember;
private float PreviousHP;
public int SelectedIndex;
private bool DebounceEnabled;
public Image MemberIcon;
public RawImage MemberNameIcon;
public RawImage BoxOutline;
public Image SpecialLines1;
public Image SpecialLines2;
public Image HealthBar;
public TextMeshProUGUI Text_Health;
public TextMeshProUGUI Text_MaxHealth;
[SerializeField]
private RectTransform StatusTransform;
private void Update()
{
if (previousCurrentlySelected != CurrentlySelected)
{
if (!previousCurrentlySelected && CurrentlySelected)
{
MemberIcon.sprite = TargetPartyMember.PartyMemberInBattle.PartyMemberBattleIcon;
BattleSystem.Instance.PartyMembers_MemberPlayAnimation(TargetPartyMember, "Idle");
}
previousCurrentlySelected = CurrentlySelected;
UpdateButtonSprites();
}
if (PreviousHP != TargetPartyMember.PartyMember_Health)
{
PreviousHP = TargetPartyMember.PartyMember_Health;
UpdateHealthbar();
}
if (CurrentlySelected && !GonerMenu.Instance.GonerMenuOpen && !GonerMenu.Instance.gonerMenuWasOpen)
{
HasActAbility = !TargetPartyMember.PartyMemberInBattle.HasMagic;
if (Input.GetKeyDown(PlayerInput.Instance.Key_Confirm) && !GonerMenu.Instance.GonerMenuOpen)
{
CurrentlySelected = false;
SelectButton(SelectedIndex);
BattleSystem.PlayBattleSoundEffect(BattleSystem.Instance.SFX_menu_select);
}
if (Input.GetKeyDown(PlayerInput.Instance.Key_Left) && !DebounceEnabled)
{
SelectedIndex--;
if (SelectedIndex <= -1)
{
SelectedIndex = 4;
}
SelectedIndex = Mathf.Clamp(SelectedIndex, 0, 4);
BattleSystem.PlayBattleSoundEffect(BattleSystem.Instance.SFX_menu_move);
UpdateButtonSprites();
}
if (Input.GetKeyDown(PlayerInput.Instance.Key_Right) && !DebounceEnabled && !GonerMenu.Instance.GonerMenuOpen)
{
SelectedIndex++;
if (SelectedIndex >= 5)
{
SelectedIndex = 0;
}
SelectedIndex = Mathf.Clamp(SelectedIndex, 0, 4);
BattleSystem.PlayBattleSoundEffect(BattleSystem.Instance.SFX_menu_move);
UpdateButtonSprites();
}
if (Input.GetKeyDown(PlayerInput.Instance.Key_Cancel) && !GonerMenu.Instance.GonerMenuOpen && !DebounceEnabled)
{
BattleSystem.UndoPreviousCurrentPartyMemberStatusSelected();
}
}
if (StatusTabOpened)
{
BoxOutline.enabled = true;
SpecialLines1.enabled = true;
SpecialLines2.enabled = true;
StatusTransform.anchoredPosition = Vector2.Lerp(StatusTransform.anchoredPosition, new Vector2(0f, 0f), 18f * Time.fixedDeltaTime);
}
else
{
BoxOutline.enabled = false;
SpecialLines1.enabled = false;
SpecialLines2.enabled = false;
StatusTransform.anchoredPosition = Vector2.Lerp(StatusTransform.anchoredPosition, new Vector2(0f, -65f), 18f * Time.fixedDeltaTime);
}
}
private void UpdateHealthbar()
{
HealthBar.fillAmount = TargetPartyMember.PartyMember_Health / TargetPartyMember.PartyMember_MaxHealth;
Text_Health.text = TargetPartyMember.PartyMember_Health.ToString();
Text_MaxHealth.text = TargetPartyMember.PartyMember_MaxHealth.ToString();
if (TargetPartyMember.PartyMember_Health <= 0f)
{
Text_Health.color = Color.red;
Text_MaxHealth.color = Color.red;
}
else
{
Text_Health.color = Color.white;
Text_MaxHealth.color = Color.white;
}
}
public void UpdateButtonSprites()
{
for (int i = 0; i < Buttons.Count; i++)
{
if (HasActAbility && Buttons[i].HasAct_Deselected != null)
{
if (SelectedIndex == i && StatusTabOpened)
{
Buttons[i].Renderer.sprite = Buttons[i].HasAct_Selected;
}
else
{
Buttons[i].Renderer.sprite = Buttons[i].HasAct_Deselected;
}
}
else if (SelectedIndex == i && StatusTabOpened)
{
Buttons[i].Renderer.sprite = Buttons[i].Selected;
}
else
{
Buttons[i].Renderer.sprite = Buttons[i].Deselected;
}
}
}
private void SelectButton(int index)
{
switch (index)
{
case 0:
BattleSystem.OpenBottomBarWindow(BattleSystem.BottomBarWindows.Fight_EnemySelection);
MemberIcon.sprite = TargetPartyMember.PartyMemberInBattle.PartyMemberBattleAttack;
break;
case 1:
if (TargetPartyMember.PartyMemberInBattle.HasMagic)
{
BattleSystem.Instance.BattleWindow_ActItemSelection.GetComponent<BattleActItemWindow>().ResetBattleActItemWindow();
BattleSystem.OpenBottomBarWindow(BattleSystem.BottomBarWindows.Act_SelectAction);
BattleSystem.Instance.BattleWindow_ActItemSelection.GetComponent<BattleActItemWindow>().UpdateCurrentSelection();
MemberIcon.sprite = TargetPartyMember.PartyMemberInBattle.PartyMemberBattleAct;
}
else
{
BattleSystem.OpenBottomBarWindow(BattleSystem.BottomBarWindows.Act_EnemySelection);
BattleSystem.Instance.BattleWindow_EnemySelection.GetComponent<BattleEnemySelectionMenu>().UpdateGraphics();
MemberIcon.sprite = TargetPartyMember.PartyMemberInBattle.PartyMemberBattleAct;
}
CurrentlySelected = false;
break;
case 2:
{
List<InventoryItem> list = new List<InventoryItem>();
foreach (InventoryItem item in DarkworldInventory.Instance.PlayerInventory)
{
if (item.Useable)
{
list.Add(item);
}
}
if (list.Count > 0)
{
BattleSystem.OpenBottomBarWindow(BattleSystem.BottomBarWindows.Item_SelectItem);
MemberIcon.sprite = TargetPartyMember.PartyMemberInBattle.PartyMemberBattleItem;
}
else
{
BattleSystem.PlayBattleSoundEffect(BattleSystem.Instance.SFX_menu_deny);
CurrentlySelected = true;
}
break;
}
case 3:
BattleSystem.OpenBottomBarWindow(BattleSystem.BottomBarWindows.Spare_EnemySelection);
MemberIcon.sprite = TargetPartyMember.PartyMemberInBattle.PartyMemberBattleSpare;
break;
case 4:
BattleSystem.Instance.PartyMembers_MemberPlayAnimation(TargetPartyMember, "Defend");
MemberIcon.sprite = TargetPartyMember.PartyMemberInBattle.PartyMemberBattleDefend;
BattleSystem.PlayBattleSoundEffect(BattleSystem.Instance.SFX_menu_select);
BattleSystem.AddNewPlayerMove(BattlePlayerMove.Defend, TargetPartyMember, -1);
BattleSystem.Instance.AddTP(16);
CurrentlySelected = false;
StartCoroutine(DebounceInput_BeforeUnselect());
break;
}
}
private IEnumerator DebounceInput_BeforeUnselect()
{
DebounceEnabled = true;
yield return new WaitForSeconds(0f);
BattleSystem.IncrementCurrentPartyMemberStatusSelected();
DebounceEnabled = false;
}
public void ResetMemberIcon()
{
MemberIcon.sprite = TargetPartyMember.PartyMemberInBattle.PartyMemberBattleIcon;
}
}