using System.Collections.Generic; using UnityEngine; public class CorruptedFactory : ProductionBuilding { //Détermine le type de resources dont la production sera boosté. protected override Enum.ResourceNodeType[] RessourceNodeType { get { return new Enum.ResourceNodeType [] { Enum.ResourceNodeType.Forest, Enum.ResourceNodeType.Rock, Enum.ResourceNodeType.BerryBush, Enum.ResourceNodeType.Farm}; } } /** * Yield Production */ [SerializeField] private List _yieldPrefabs = new List(3); [SerializeField] [Range(0.0f, 5.0f)] private float _randomPositionConfig = 0.5f; [SerializeField] private float _harvestDuration = 5.0f; [SerializeField] private int _yieldAmountPerResource = 1; private float _yieldCounter = 0; private ResourceTile tile; public override void Start() { base.Start(); for (int i = -_range; i <= _range; i++) { for (int j = -_range; j <= _range; j++) { Vector3 checkPosition = new Vector3(Mathf.Floor(_position.x) + i, Mathf.Floor(_position.y) + j, 0.0f); this.tile = LevelManager.Instance.Get(t => t.Position == checkPosition); } } } public override void LevelStart() { base.LevelStart(); ResetYieldDuration(); } public override void Update() { base.Update(); _yieldCounter -= Time.deltaTime; if (_yieldCounter > 0) return; if (_yieldPrefabs.Count > 0) { for (int i = 0; i < _yieldPrefabs.Count; i++) { for (int j = 0; j < _yieldAmountPerResource; j++) { YieldResource(_yieldPrefabs[i]); } } ResetYieldDuration(); } } private void YieldResource(GameObject yield) { float rangeConfig = 0.5f + _randomPositionConfig; Vector3 yieldPosition = new Vector3(Position.x + Random.Range(-rangeConfig, rangeConfig), Position.y, Position.z); var yielded = Instantiate(yield, yieldPosition, Quaternion.identity); yielded.transform.SetParent(LevelManager.Instance.LevelTransform); } private void ResetYieldDuration() { _yieldCounter = _harvestDuration / this.tile.YieldSpeedMultiplier; } }