Files
project-reset/Assets/Plugins/LiveWatchLite/TowerDefenceDemo/Scripts/TowerBuildManager.cs
2025-08-31 18:14:07 -04:00

86 lines
2.6 KiB
C#

using System;
using System.Collections.Generic;
using System.Linq;
using Ingvar.LiveWatch.TowerDefenceDemo;
using UnityEngine;
namespace Ingvar.LiveWatch.TowerDefenceDemo
{
public class TowerBuildManager : MonoBehaviour
{
public List<TowerBuildSlot> Slots => _slots;
[SerializeField] private Transform _towersParent;
[SerializeField] private List<TowerBuildSlot> _slots;
[SerializeField] private List<TowerPrefab> _towerPrefabs;
private LevelScene _levelScene;
private void Awake()
{
_levelScene = FindObjectOfType<LevelScene>();
var slotId = 0;
foreach (var slot in _slots)
slot.Init(slotId++);
Watch.GetOrAdd<string>("BuildLog")
.SetSortOrder(TD_WatchSortOrder.TowerBuildLog);
}
public void DestroyAllTowers()
{
foreach (var slot in Slots)
{
if (!slot.IsOccupied)
continue;
DestroyTower(slot, false);
}
}
public void BuildTower(TowerBuildSlot slot, TowerType type, bool useGold = true)
{
var prefab = _towerPrefabs.First(p => p.Type == type).Prefab;
var towerObj = _levelScene.PoolManager.Get(prefab.gameObject);
var tower = towerObj.GetComponent<TowerBase>();
towerObj.transform.SetParent(_towersParent);
towerObj.transform.position = slot.BuildLocation;
_levelScene.TowerManager.AddTower(tower);
slot.Occupy(tower);
Watch.Push("BuildLog", $"Built {tower.Id} at {slot.Id} slot");
if (useGold)
{
var price = _levelScene.EconomyConfig.TowerBuildCosts[type];
_levelScene.EnergyManager.CurrentEnergy -= price;
}
}
public void DestroyTower(TowerBuildSlot slot, bool useGold = true)
{
var tower = slot.Tower;
Watch.Push("BuildLog", $"Destroyed {slot.Tower.Id} at {slot.Id}");
_levelScene.TowerManager.RemoveTower(tower);
_levelScene.PoolManager.Push(tower.gameObject);
slot.Empty();
if (useGold)
{
var price = _levelScene.EconomyConfig.TowerSellPrices[tower.Type];
_levelScene.EnergyManager.CurrentEnergy += price;
}
}
[Serializable]
public class TowerPrefab
{
public TowerType Type;
public TowerBase Prefab;
}
}
}