using UnityEngine; using System.Collections.Generic; using static Enum; public class Harvester : Entity { [SerializeField] [Tooltip("helps choose the right skin for the harvester depending on resource")] private List _harvesterResourcePairs; protected ResourceChoice ResourceChoice => _resourceChoice; public override Vector2 RangeMultiplier { get; } public override float HpMultiplier { get; } public override float SpeedMultiplier { get; } public override float DamageMultiplier { get; } public override float AttackSpeedMultiplier { get; } [SerializeField] private ResourceChoice _resourceChoice; public override sealed void Start() { base.Start(); ChooseSkinForHarvester(); } /// /// changes the harvester's appearance depending on the resource they're harvesting /// private void ChooseSkinForHarvester() { //get the tile we're on var tile = LevelManager.Instance.Get(t => t.Position == Position); if (tile == default) return; //get the resource of the tile we're on var yieldPrefab = tile.YieldPrefab; if (!yieldPrefab) return; var resourceMaker = yieldPrefab.GetComponent(); if (!resourceMaker) return; //if we already have the right harvester for the resource, no need to change var resourceChoice = resourceMaker.ResourceChoice; if (resourceChoice == this.ResourceChoice) return; //get the right pair for the resource we're on var harvResPair = _harvesterResourcePairs.Find(hrp => hrp.Resource == resourceChoice); if (harvResPair == null) return; //exchange harvesters var newHarvester = Instantiate(harvResPair.HarvesterPrefab, transform.position, Quaternion.identity); newHarvester.transform.SetParent(transform.parent); Destroy(gameObject); } }