using System.Collections.Generic; using System.Linq; using System.Threading.Tasks; using DG.Tweening; using UnityEngine; namespace HexGrid { // 调停者 // 进度管理器 public class HexGridMediator : MonoBehaviour,IHexGridMediator { private HexZoneManager _zoneManager; // private BuildingManager _buildingManager; public void RegisterZoneManager(HexZoneManager zoneManager) { _zoneManager = zoneManager; } public void RegisterBuildingManager(BuildingManager buildMamanger) { _buildingManager = buildMamanger; } public async void OnHexCellClicked(HexTile tiler) { if (_zoneManager.OnHexTileData(tiler)) { await Awaiters.Seconds(0.2f); await CheckBuildingAfterBuild(tiler); await OnActiveNextTile(tiler); } } public async Task OnActiveNextTile(HexTile tiler) { await _zoneManager.OnActiveNextTile(tiler); } public async Task CheckBuildingAfterBuild(HexTile tiler) { await _buildingManager.CheckBuildingAfterBuild(tiler); } public void CheckBuildingAfterBuildImme(HexTile tile) { _buildingManager.CheckBuildingAfterBuildImme(tile); } public void LoadZones(List zones) { } //- public void LoadBuildings(List buildings) { _buildingManager.LoadBuildings(buildings); } public async void Build(int zoneId,BuildingData buildingData,bool isImme) { Log($"Build-> {zoneId} {buildingData.BuildingName}"); var root = _zoneManager.GetBuildingRoot(zoneId); if (!root) return; //_buildingManager.Build(root.transform, buildingData); var buildTrans = root.transform.Find(buildingData.BuildingName); var endPos = buildTrans.position; var tileNames = buildingData.TileStateMap.Keys; var duration = 0.5f; foreach (var tileName in tileNames) { var tile = _zoneManager.GetTileByName(zoneId, tileName); if (tile.visual) { var top = tile.visual.transform.Find("on/top"); if (top) { if (isImme) { top.gameObject.SetActive(false); } else { top.DOMove(endPos, duration).SetEase(Ease.InSine).OnComplete(() => { top.gameObject.SetActive(false); }); } } } } if (!isImme) { await Awaiters.Seconds(duration); } if (buildTrans) { buildTrans.gameObject.SetActive(true); } if (isImme) { buildTrans.localScale = Vector3.one; } else { var ani = buildTrans.GetComponent(); if (ani) { ani.Play("grow"); } } } private static void Log(string t) { Debug.Log($"HexGridMediator -> {t} "); } } }