备份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,340 @@
using System.Runtime.InteropServices;
using System.Threading.Tasks;
using asap.core;
using DataCenter;
using game;
using GameCore;
using UniRx;
using UnityEngine;
using UnityEngine.AddressableAssets;
using UI.PartnerGather.Mining;
public class EventPartnerGatherAct : AGameAct
{
//
private GameObject _miningScene;
// 好友界面
private GameObject _friendsUI;
// Spin 相关界面
private GameObject _drawUI;
private EventPartnerMiningSceneController _miningController;
private EventPartnerDrawMiningPanel _drawMiningPanel;
private EventPartnerGatherManager _gatherManager;
// UI组件缓存
private EventPartnerDrawMiningPanel _drawPanelComponent;
private Transform _friendsPanelComponent;
public override async Task<bool> StartAsync()
{
Log("StartAsync - Loading mining scene");
// 获取管理器
_gatherManager = GContext.container.Resolve<EventPartnerGatherManager>();
_gatherManager.SetGameAct(this);
await ShowUI();
// 加载挖矿场景
_miningScene = await Addressables.InstantiateAsync("EventPartnerMiningScene").Task;
// 初始化挖矿控制器
InitializeMiningController();
// 绑定UI与控制器关系
BindUIAndControllers();
// 初始化数据同步
InitializeDataSync();
// 显示UI
return await base.StartAsync();
}
private void InitializeMiningController()
{
Log("初始化挖矿场景控制器");
// 查找或添加挖矿场景控制器
_miningController = _miningScene.GetComponentInChildren<EventPartnerMiningSceneController>();
if (_miningController == null)
{
var controllerObject = _miningScene.transform.Find("MiningController");
if (controllerObject == null)
{
controllerObject = new GameObject("MiningController").transform;
controllerObject.SetParent(_miningScene.transform);
}
_miningController = controllerObject.gameObject.AddComponent<EventPartnerMiningSceneController>();
}
Log($"挖矿控制器初始化完成: {_miningController.name}");
}
/// <summary>
/// 绑定UI与控制器的关系
/// </summary>
private void BindUIAndControllers()
{
Log("开始绑定UI与控制器关系");
// 验证UI对象是否存在
if (_drawUI == null)
{
Log("错误: 抽奖UI对象为空无法进行组件绑定");
return;
}
// 获取UI组件
_drawPanelComponent = _drawUI.GetComponent<EventPartnerDrawMiningPanel>();
if (_drawPanelComponent == null)
{
Log("错误: 未找到EventPartnerDrawMiningPanel组件采集功能将不可用");
return;
}
// 1. 绑定采集场景与抽奖UI的关系
if (_miningController != null)
{
try
{
_drawPanelComponent.SetMiningScene(_miningController);
_miningController.SetUIPanel(_drawPanelComponent);
Log("✓ 抽奖UI与采集场景关系绑定成功");
}
catch (System.Exception ex)
{
Log($"错误: 绑定采集场景时发生异常: {ex.Message}");
}
}
else
{
Log("警告: 挖矿控制器为空,无法绑定场景关系");
}
// 2. 绑定管理器与各组件的关系
if (_gatherManager != null)
{
try
{
// 给管理器设置引用
_gatherManager.SetMiningController(_miningController);
_gatherManager.SetDrawPanel(_drawPanelComponent);
Log("✓ 管理器与组件关系绑定成功");
}
catch (System.Exception ex)
{
Log($"错误: 绑定管理器关系时发生异常: {ex.Message}");
}
}
else
{
Log("错误: EventPartnerGatherManager 为空,无法完成组件绑定");
}
// 3. 设置好友UI的事件绑定如果需要
SetupFriendsUIEvents();
// 4. 验证所有关键组件是否正确绑定
ValidateComponentBindings();
Log("所有UI与控制器关系绑定完成");
}
/// <summary>
/// 验证组件绑定是否正确
/// </summary>
private void ValidateComponentBindings()
{
bool allValid = true;
if (_drawPanelComponent == null)
{
Log("验证失败: 抽奖面板组件未正确绑定");
allValid = false;
}
if (_miningController == null)
{
Log("验证失败: 挖矿控制器未正确绑定");
allValid = false;
}
if (_gatherManager == null)
{
Log("验证失败: 采集管理器未正确绑定");
allValid = false;
}
if (allValid)
{
Log("✓ 所有关键组件绑定验证通过");
}
else
{
Log("⚠ 部分组件绑定验证失败,可能影响游戏功能");
}
}
/// <summary>
/// 初始化数据同步
/// </summary>
private void InitializeDataSync()
{
Log("初始化数据同步");
if (_gatherManager?.GatherData != null)
{
// 同步初始数据到UI
if (_drawPanelComponent != null)
{
var data = _gatherManager.GatherData;
_drawPanelComponent.SetPoints(data.CurrentPoints);
_drawPanelComponent.SetMiningProgress(data.CurrentMiningProgress);
_drawPanelComponent.SetTrainProgress(data.TrainProgress, _gatherManager.MaxTrainNodes);
}
}
}
/// <summary>
/// 设置好友UI的事件绑定
/// </summary>
private void SetupFriendsUIEvents()
{
// 如果好友UI有特殊事件需要绑定在这里处理
// 例如:点击进入挖矿按钮等
if (_friendsUI != null)
{
// TODO: 如果好友UI有特定组件需要绑定事件在这里处理
Log("好友UI事件绑定完成");
}
}
private async Task ShowUI()
{
// await Task.Delay(500);
_friendsUI = await UIManager.Instance.ShowUI(new UIType("EventPartnerMiningPanel"));
_drawUI = await UIManager.Instance.ShowUI(new UIType("EventPartnerDrawMiningPanel"));
_drawUI.SetActive(false); // 先隐藏掉
}
public override async Task StopAsync()
{
Log("StopAsync - 清理挖矿场景和组件关系");
// 清理组件关系
CleanupBindings();
// 清理场景
if (_miningScene != null)
{
Addressables.ReleaseInstance(_miningScene);
Destroy(_miningScene);
}
// 清理UI
UIManager.Instance.DestroyUI(new UIType("EventPartnerMiningPanel"));
UIManager.Instance.DestroyUI(new UIType("EventPartnerDrawMiningPanel"));
await Awaiters.NextFrame;
}
/// <summary>
/// 清理组件之间的绑定关系
/// </summary>
private void CleanupBindings()
{
Log("清理组件绑定关系");
// 清理抽奖UI关系
if (_drawPanelComponent != null)
{
_drawPanelComponent.SetMiningScene(null);
}
// 清理挖矿控制器关系
if (_miningController != null)
{
_miningController.SetUIPanel(null);
}
// 清理管理器关系
if (_gatherManager != null)
{
_gatherManager.SetMiningController(null);
_gatherManager.SetDrawPanel(null);
}
}
protected override void OnDestroy()
{
Log("销毁Act清理所有引用");
// 清理组件引用
_miningScene = null;
_miningController = null;
_drawPanelComponent = null;
_friendsPanelComponent = null;
// 清理管理器引用
if (_gatherManager != null)
{
_gatherManager.SetGameAct(null);
_gatherManager = null;
}
}
/// <summary>
/// 进入采集界面(从好友界面切换到抽奖界面)
/// </summary>
public void OnEnterGather()
{
Log("进入采集界面");
if (_friendsUI != null) _friendsUI.SetActive(false);
if (_drawUI != null) _drawUI.SetActive(true);
// 同步最新数据到UI
RefreshUIData();
}
/// <summary>
/// 刷新UI数据显示
/// </summary>
public void RefreshUIData()
{
if (_drawPanelComponent != null && _gatherManager?.GatherData != null)
{
var data = _gatherManager.GatherData;
_drawPanelComponent.SetPoints(data.CurrentPoints);
_drawPanelComponent.SetMiningProgress(data.CurrentMiningProgress);
_drawPanelComponent.SetTrainProgress(data.TrainProgress, _gatherManager.MaxTrainNodes);
Log("已刷新UI数据显示");
}
}
private static void Log(string message)
{
Debug.Log($"<color=cyan>EventPartnerGatherMiningAct => {message}</color>");
}
/// <summary>
/// 关闭事件退出到上一个Act
/// </summary>
public void OnCloseEvent()
{
Log("关闭事件准备退出Act");
// 发送退出事件
GContext.Publish(new UnloadActToNextAct());
}
/// <summary>
/// 获取挖矿控制器引用(供外部调用)
/// </summary>
public EventPartnerMiningSceneController GetMiningController()
{
return _miningController;
}
/// <summary>
/// 获取抽奖UI面板引用供外部调用
/// </summary>
public EventPartnerDrawMiningPanel GetDrawPanel()
{
return _drawPanelComponent;
}
}