备份CatanBuilding瘦身独立工程

This commit is contained in:
JSD\13999
2026-05-26 16:15:54 +08:00
commit 2d0e6a61b7
12001 changed files with 2431925 additions and 0 deletions

View File

@@ -0,0 +1,206 @@
using System;
using asap.core;
using DataCenter;
using GameCore;
using TMPro;
using UniRx;
using UnityEngine;
using UnityEngine.UI;
public class HomeBtnPartnerGather : MonoBehaviour
{
private EventPartnerGatherManager _gatherManager;
// if (!_data.IsEventActivated)
// {
// gameObject.SetActive(false);
// return;
// }
// UI组件
private Image _iconImage;
private GameObject _redpoint;
private Button _btnEnter;
private TMP_Text _textTime;
private Timer _timer;
private CompositeDisposable _disposables = new();
private void Awake()
{
// 尝试解析管理器
try
{
_gatherManager = GContext.container.Resolve<EventPartnerGatherManager>();
}
catch (Exception e)
{
Log($"Failed to resolve EventPartnerGatherManager: {e.Message}");
gameObject.SetActive(false);
return;
}
// 查找UI组件使用安全检查
var iconTransform = transform.Find("icon_task");
if (iconTransform != null)
_iconImage = iconTransform.GetComponent<Image>();
var redpointTransform = transform.Find("redpoint");
if (redpointTransform != null)
_redpoint = redpointTransform.gameObject;
_btnEnter = transform.GetComponent<Button>();
var timeTransform = transform.Find("text_time");
if (timeTransform != null)
_textTime = timeTransform.GetComponent<TMP_Text>();
// 订阅事件
if (_disposables == null)
_disposables = new CompositeDisposable();
GContext.OnEvent<EventPartnerGatherRefreshEvent>().Subscribe(OnRefreshByEvent).AddTo(_disposables);
}
private void OnEnable()
{
// 检查管理器是否存在
if (_gatherManager == null)
{
Log("Manager not available");
gameObject.SetActive(false);
return;
}
//
_gatherManager.CheckForOnEnable();
if (!_gatherManager.CheckOpen())
{
gameObject.SetActive(false);
return;
}
var iconName = _gatherManager.EventPartnerMain2Data.Icon;
GContext.container.Resolve<IUIService>().SetImageSprite(_iconImage, iconName);
_redpoint.SetActive(_gatherManager.IsFirstOpen);
//UpdateTimeDisplay();
// 设置图标(后续从配置读取)
// var iconName = _gatherManager.GetIconName();
// if (_iconImage != null)
// GContext.container.Resolve<IUIService>().SetImageSprite(_iconImage, iconName);
// 显示红点
if (_redpoint != null)
_redpoint.SetActive(_gatherManager.IsFirstOpen);
}
private void Start()
{
//BindEvents;
_btnEnter.onClick.AddListener(OnBtnEnter);
_gatherManager.CheckInit();
if (!_gatherManager.CheckOpen())
{
gameObject.SetActive(false);
return;
}
var iconName = _gatherManager.EventPartnerMain2Data.Icon;
GContext.container.Resolve<IUIService>().SetImageSprite(_iconImage, iconName);
_redpoint.SetActive(_gatherManager.IsFirstOpen);
if (_gatherManager != null)
StartCountDown();
}
private void StartCountDown()
{
StopCountDown();
var timeSpan = _gatherManager.GetRemainingTime();
UpdateTimeDisplay(timeSpan);
var seconds = timeSpan.TotalSeconds;
_timer = this.AttachTimer((float)seconds, null,
elapsed =>
{
var now = _gatherManager.GetRemainingTime();
UpdateTimeDisplay(now);
if (now.TotalMilliseconds < 0)
{
OnCountDownFinished();
}
}, useRealTime: true);
}
private void UpdateTimeDisplay(TimeSpan timeSpan)
{
if (_textTime == null) return;
if (timeSpan.TotalMilliseconds > 0)
{
_textTime.text = ConvertTools.ConvertTime2(timeSpan.Days, timeSpan.Hours, timeSpan.Minutes, timeSpan.Seconds);
}
else
{
_textTime.text = LocalizationMgr.GetText("UI_EventRankPopupPanel_13");
}
}
private void StopCountDown()
{
_timer?.Cancel();
_timer = null;
}
private void OnCountDownFinished()
{
gameObject.SetActive(false);
StopCountDown();
}
private void OnBtnEnter()
{
Log("OnBtnEnter");
// 停止计时器
StopCountDown();
// 进入游戏场景
_gatherManager.EnterGatherScene();
// 更新红点
if (_redpoint != null)
_redpoint.SetActive(false);
}
private void OnRefreshByEvent(EventPartnerGatherRefreshEvent evt)
{
// 刷新显示
if (!_gatherManager.CheckOpen())
{
gameObject.SetActive(false);
}
}
private void OnDestroy()
{
if (_btnEnter != null)
_btnEnter.onClick.RemoveAllListeners();
StopCountDown();
_disposables?.Dispose();
_disposables = null;
}
private static void Log(object message)
{
Debug.Log($"<color=cyan>HomeBtnPartnerGather => {message}</color>");
}
}