Files
Cielonos/Assets/Scripts/MainGame/UI/PlayerUI/MainWeapon/MainWeaponUIArea.cs

101 lines
3.2 KiB
C#
Raw Normal View History

2025-12-08 05:27:53 -05:00
using System;
using System.Collections.Generic;
2026-05-23 08:27:50 -04:00
using Cielonos.MainGame.Inventory;
2026-02-13 09:22:11 -05:00
using SLSUtilities.UI;
2026-06-27 12:52:03 -04:00
using SLSUtilities.General;
2025-12-08 05:27:53 -05:00
using UnityEngine;
2026-02-13 09:22:11 -05:00
namespace Cielonos.MainGame.UI
2025-12-08 05:27:53 -05:00
{
public class MainWeaponUIArea : UIElementBase
{
public MainWeaponBase mainWeapon;
public GameObject functionIconPrefab;
public RectTransform functionIconContainer;
2026-06-27 12:52:03 -04:00
2026-05-27 15:15:28 -04:00
public MainWeaponFunctionIcon mainFunctionIcon;
2026-06-27 12:52:03 -04:00
public DodgeFunctionIcon dodgeFunctionIcon;
2025-12-08 05:27:53 -05:00
public List<MainWeaponFunctionIcon> functionIcons;
2026-05-27 15:15:28 -04:00
public Dictionary<string, MainWeaponFunctionIcon> functionIconDict;
2025-12-08 05:27:53 -05:00
private void Awake()
{
functionIcons = new List<MainWeaponFunctionIcon>();
2026-05-27 15:15:28 -04:00
functionIconDict = new Dictionary<string, MainWeaponFunctionIcon>();
2025-12-08 05:27:53 -05:00
}
2026-06-27 12:52:03 -04:00
private void Start()
{
if (MainGameManager.Player != null && MainGameManager.Player.eventSm is Characters.PlayerEventSubmodule playerEventSm)
{
playerEventSm.onDodgeAttempt.Add("UI_DodgeFeedback", new PrioritizedAction<bool>(OnDodgeAttempt, 0));
}
}
private void OnDestroy()
{
if (MainGameManager.Player != null && MainGameManager.Player.eventSm is Characters.PlayerEventSubmodule playerEventSm)
{
playerEventSm.onDodgeAttempt.Remove("UI_DodgeFeedback");
}
}
private void OnDodgeAttempt(bool success)
{
if (dodgeFunctionIcon == null) return;
if (success)
{
dodgeFunctionIcon.SetFrameOutline(0.3f, Color.white);
}
else
{
dodgeFunctionIcon.SetFrameOutline(0.3f, Color.red);
}
}
2025-12-08 05:27:53 -05:00
public void Initialize(MainWeaponBase mainWeapon)
{
this.mainWeapon = mainWeapon;
2026-05-27 15:15:28 -04:00
string weaponName = mainWeapon.contentData.itemClass.Name;
2025-12-08 05:27:53 -05:00
ClearIcons();
foreach (KeyValuePair<string, RuntimeFunctionUnit> unit in mainWeapon.functionSm.functionUnits)
{
2026-05-27 15:15:28 -04:00
if (unit.Value.data.isMain)
{
mainFunctionIcon.Initialize(unit.Value);
functionIconDict[unit.Key] = mainFunctionIcon;
}
else
{
if (!unit.Value.data.shownInUI) continue;
MainWeaponFunctionIcon icon = Instantiate(functionIconPrefab, functionIconContainer).GetComponent<MainWeaponFunctionIcon>();
icon.Initialize(unit.Value);
functionIcons.Add(icon);
functionIconDict[unit.Key] = icon;
}
2025-12-08 05:27:53 -05:00
}
}
private void Update()
{
2026-06-27 12:52:03 -04:00
dodgeFunctionIcon.UpdateUI();
2025-12-08 05:27:53 -05:00
functionIcons.ForEach(icon => icon.UpdateUI());
}
private void ClearIcons()
{
foreach (MainWeaponFunctionIcon icon in functionIcons)
{
Destroy(icon.gameObject);
}
functionIcons.Clear();
2026-05-27 15:15:28 -04:00
functionIconDict.Clear();
2025-12-08 05:27:53 -05:00
}
}
}