Files
back_cantanBuilding/Assets/Scripts/UI/PartnerFishBowl/EventPartnerMultiplierController.cs
2026-05-26 16:15:54 +08:00

112 lines
3.6 KiB
C#

using System;
using System.Collections.Generic;
using asap.core;
using cfg;
using GameCore;
using TMPro;
using UnityEngine;
using UnityEngine.UI;
public class EventPartnerMultiplierController : MonoBehaviour
{
[SerializeField] private TMP_Text _textMultiplier, _textMultiplierMax;
[SerializeField] private Button _btnMultiplier;
[SerializeField] private GameObject _goNormal, _goMax;
[SerializeField] private Animator btnAnimation;
private int _idx, _redirectId, largeIdx;
private Tables _tables;
private List<int> _multiplierList;
private PlayerItemData _playerItemData;
private IEventAggregator _eventAggregator;
public int Multiplier => _multiplierList[_idx];
private void Awake()
{
_btnMultiplier.onClick.AddListener(CycleMultiplierToNext);
}
// Start is called before the first frame update
public void Init(int redirectId, IEventAggregator eventAggregator)
{
// Debug.Log("Btn init:");
// Debug.Log(eventAggregator.GetHashCode());
_tables = GContext.container.Resolve<Tables>();
_redirectId = redirectId;
_playerItemData = GContext.container.Resolve<PlayerItemData>();
_multiplierList = _tables.TbEventPartnerMain[_redirectId].SpinMag;
SwitchToNextMax();
_eventAggregator = eventAggregator;
}
[SerializeField] private float btnReactTime = 0.05f;
public async void CycleMultiplierToNext()
{
_idx++;
int currentMaxMultiplier = GetCurrentMaxMultiplier();
btnAnimation.Play("Pressed");
ToggleMultiplierButtonFunction(false);
if (_idx >= _multiplierList.Count || Multiplier > currentMaxMultiplier)
{
_idx = 0;
ToggleButtons(largeIdx != 0);
}
else if (Multiplier == currentMaxMultiplier)
{
ToggleButtons(false);
}
else
{
ToggleButtons(true);
}
_eventAggregator.Publish(new EventPartnerMultiplierChange());
await System.Threading.Tasks.Task.Delay(System.TimeSpan.FromSeconds(btnReactTime));
btnAnimation.Play("Normal");
ToggleMultiplierButtonFunction(true);
}
public void ToggleMultiplierButtonFunction(bool doEnable)
{
_btnMultiplier.enabled = doEnable;
}
public void SwitchToNextMax()
{
GetCurrentMaxMultiplier();
_idx = largeIdx;
_textMultiplier.text = $"x{_multiplierList[_idx]}";
_textMultiplierMax.text = $"x{_multiplierList[_idx]}";
ToggleMultiplierButtonFunction(true);
_goNormal.SetActive(false);
_goMax.SetActive(true);
}
private int GetCurrentMaxMultiplier()
{
int ans = _multiplierList[0];
largeIdx = 0;
for (int i = 0; i < _multiplierList.Count; i++ )
if (_multiplierList[i] * _tables.TbEventPartnerMain[_redirectId].SpinRequire
<= GContext.container.Resolve<EventPartnerData>().TicketCount)
{
ans = _multiplierList[i];
largeIdx = i;
}
// Debug.Log($"<color=red>Multiplier: {ans}</color>");
return ans;
}
private void ToggleButtons(bool doShowNormal)
{
if (doShowNormal)
{
_goNormal.SetActive(true);
_goMax.SetActive(false);
_textMultiplier.text = $"x{Multiplier}";
}
else
{
_goNormal.SetActive(false);
_goMax.SetActive(true);
_textMultiplierMax.text = $"x{Multiplier}";
}
}
}
public struct EventPartnerMultiplierChange { }