65 lines
1.9 KiB
C#
65 lines
1.9 KiB
C#
using System.Collections;
|
|
using System.Collections.Generic;
|
|
using UnityEngine;
|
|
|
|
public abstract class ProductionBuilding : House
|
|
{
|
|
[SerializeField]
|
|
private int _range;
|
|
[SerializeField]
|
|
private float _multiplier;
|
|
|
|
private const float _pollNearbyTilesInterval = 1.0f;
|
|
|
|
public override float PopulationGiven => GlobalConfig.Instance.Current.populationGivenPerHouseUpgrade;
|
|
protected abstract Enum.ResourceNodeType RessourceNodeType { get; }
|
|
private Vector3 _position;
|
|
private List<ResourceTile> _tilesInRange = new List<ResourceTile>();
|
|
|
|
public override void Start()
|
|
{
|
|
base.Start();
|
|
_position = Position;
|
|
|
|
StartCoroutine(PollNearbyTiles());
|
|
}
|
|
|
|
IEnumerator PollNearbyTiles()
|
|
{
|
|
ApplyMultiplier(1 / _multiplier);
|
|
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);
|
|
var tile = LevelManager.Instance.Get<ResourceTile>(t => t.Position == checkPosition);
|
|
if (tile == default) continue;
|
|
|
|
var checkResourceType = tile.ResourceNodeType;
|
|
if (checkResourceType != RessourceNodeType) continue;
|
|
|
|
if (!_tilesInRange.Contains(tile))
|
|
{
|
|
_tilesInRange.Add(tile);
|
|
}
|
|
}
|
|
}
|
|
ApplyMultiplier(_multiplier);
|
|
yield return new WaitForSeconds(_pollNearbyTilesInterval);
|
|
StartCoroutine(PollNearbyTiles());
|
|
}
|
|
|
|
public override void LevelDestroy()
|
|
{
|
|
ApplyMultiplier(1 / _multiplier);
|
|
base.LevelDestroy();
|
|
}
|
|
|
|
private void ApplyMultiplier(float multiplier)
|
|
{
|
|
foreach (var tile in _tilesInRange)
|
|
{
|
|
tile.YieldSpeedMultiplier *= multiplier;
|
|
}
|
|
}
|
|
} |