备份CatanBuilding瘦身独立工程
This commit is contained in:
126
Assets/Scripts/HexGrid/HexGridMediator.cs
Normal file
126
Assets/Scripts/HexGrid/HexGridMediator.cs
Normal file
@@ -0,0 +1,126 @@
|
||||
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>");
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user