Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- using System.Collections;
- using UnityEngine;
- public class Node : MonoBehaviour
- {
- public enum NodeState { Full, Partial, Depleted }
- public int NodeSize = 10;
- public int NodeRegenAmount = 1;
- public float RegenTime = 5.0f;
- public delegate void ChangeInNodeState(NodeState state);
- public ChangeInNodeState changeInNodeState;
- private NodeState nodeState = NodeState.Full;
- [SerializeField]private int NodeValue = 0;
- private Coroutine regenerateNode;
- void Start()
- {
- changeInNodeState = NodeStateHandler; // Initializes Delegate Listener
- SetNodeValue(NodeSize); // Initiates Node
- }
- #region Public Methods
- public void SetNodeValue(int value)
- {
- NodeValue = Mathf.Clamp(value, 0, NodeSize);
- UpdateNodeState();
- }
- public void AddToNodeValue(int value)
- {
- NodeValue = NodeValue + value;
- NodeValue = Mathf.Clamp(NodeValue, 0, NodeSize);
- UpdateNodeState();
- }
- public void SubtractFromNodeValue(int value)
- {
- NodeValue = NodeValue - value;
- NodeValue = Mathf.Clamp(NodeValue, 0, NodeSize);
- UpdateNodeState();
- }
- public NodeState GetNodeState() { return nodeState; }
- public int GetNodeValue() { return NodeValue; }
- #endregion
- #region Private Methods
- private void UpdateNodeState()
- {
- if (NodeValue == NodeSize)
- {
- nodeState = NodeState.Full;
- }
- else if ((NodeValue > 0) && (NodeValue < NodeSize))
- {
- nodeState = NodeState.Partial;
- }
- else
- {
- nodeState = NodeState.Depleted;
- }
- changeInNodeState(nodeState);
- }
- private void NodeStateHandler(NodeState state)
- {
- switch (state)
- {
- case NodeState.Full:
- Debug.Log("Node State Fully Replenished!");
- break;
- case NodeState.Partial:
- if (regenerateNode == null) regenerateNode = StartCoroutine(NodeRegenerator(RegenTime));
- break;
- case NodeState.Depleted:
- if (regenerateNode == null) regenerateNode = StartCoroutine(NodeRegenerator(RegenTime));
- break;
- }
- }
- private IEnumerator NodeRegenerator(float regenInterval)
- {
- yield return new WaitForSeconds(regenInterval);
- regenerateNode = null;
- SetNodeValue(NodeValue + NodeRegenAmount);
- }
- #endregion
- void Update()
- {
- TemporaryControls();
- }
- void TemporaryControls()
- {
- if (Input.GetKeyDown(KeyCode.Q)) { SetNodeValue(5); }
- if (Input.GetKeyDown(KeyCode.W)) { SetNodeValue(0); }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement