77 lines
2.3 KiB
C#
77 lines
2.3 KiB
C#
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<GameObject> _yieldPrefabs = new List<GameObject>(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<ResourceTile>(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;
|
|
}
|
|
} |