AsteroidGame/Assets/Entities/Structures/Scripts/StructureBase.cs

90 lines
2.1 KiB
C#

using System;
using AsteroidGame.Interfaces;
using UnityEngine;
using UnityEngine.Serialization;
namespace AsteroidGame.Entities.Structures.Scripts
{
public class StructureBase : EntityBase, IBuildable, IPowerSystem
{
[Header("BuildParameters")]
[SerializeField]
protected int cost;
[SerializeField] private bool buildPlacementBlocked;
[SerializeField] protected float buildTimer;
[Header("Power")]
[SerializeField] protected bool isPowerGenerator;
[SerializeField] protected bool isPowerConsumer;
[SerializeField] protected int maxPower;
[SerializeField] protected int currentPower;
#region Private
#endregion
#region Publics
public bool IsPowerGenerator => isPowerGenerator;
public bool IsPowerConsumer => isPowerConsumer;
public bool BuildPlacementBlocked => buildPlacementBlocked;
public int Cost => cost;
#endregion
private void OnEnable()
{
if (!isPowerConsumer && !isPowerGenerator)
{
Debug.Log("Power consumer/generator not set!");
}
}
private void OnTriggerStay(Collider other)
{
if(other.name == "BuildCollider")
{
buildPlacementBlocked = true;
}
}
private void OnTriggerExit(Collider other)
{
if(other.name == "BuildCollider")
{
buildPlacementBlocked = false;
}
}
#region Setters
public void SetMaxPower(int newValue)
{
maxPower = newValue;
}
#endregion
#region Getters
public int GetMaxPower()
{
return maxPower;
}
public int GetCurrentPower()
{
return currentPower;
}
public float GetPowerFactor()
{
// ReSharper disable once PossibleLossOfFraction
return currentPower / maxPower;
}
#endregion
}
}