126 lines
3.6 KiB
C#
126 lines
3.6 KiB
C#
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<HexZone> zones)
|
|
{
|
|
|
|
}
|
|
|
|
//-
|
|
public void LoadBuildings(List<HexBuilding> 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<Animation>();
|
|
if (ani)
|
|
{
|
|
ani.Play("grow");
|
|
}
|
|
}
|
|
}
|
|
|
|
private static void Log(string t)
|
|
{
|
|
Debug.Log($"<color=orange>HexGridMediator -> {t} </color>");
|
|
}
|
|
}
|
|
} |