using System.Collections.Generic; using Unity.VisualScripting; using UnityEngine; using UnityEngine.Events; public class Player : MonoBehaviour { public static Player me; [Header("Components")] public GameObject unitPrefab; public Transform unitSpawnPos; public readonly int unitCost = 50; [Header("Resources")] public int wood; public int stone; public int food; [Header("Units")] public List units = new List(); //events [System.Serializable] public class UnitCreatedEvent : UnityEvent { } public UnitCreatedEvent onUnitCreated; public bool isMe; void Awake() { if(isMe) me = this; } // Start is called once before the first execution of Update after the MonoBehaviour is created void Start() { if(isMe) { GameUI.instance.UpdateUnitCountText(units.Count); //GameUI.instance.UpdateFoodText(food); GameUI.instance.UpdateResourceText(wood, ResourceType.Wood); GameUI.instance.UpdateResourceText(stone, ResourceType.Stone); GameUI.instance.UpdateResourceText(food, ResourceType.Food); CameraController.instance.FocusOnPosition(unitSpawnPos.position); } food += unitCost; CreateNewUnit(); } // Update is called once per frame void Update() { if(Input.GetKeyDown(KeyCode.E)) CreateNewUnit(); } //is this my unit? public bool IsMyUnit(Unit unit) { return units.Contains(unit); } //called when a unit gathers a certain resource public void GainResouces(ResourceType type, int amount) { switch(type) { case ResourceType.Wood: { wood += amount; break; } case ResourceType.Stone: { stone += amount; break; } case ResourceType.Food: { food += amount; break; } } if(isMe) { GameUI.instance.UpdateResourceText(wood, ResourceType.Wood); GameUI.instance.UpdateResourceText(stone, ResourceType.Stone); GameUI.instance.UpdateResourceText(food, ResourceType.Food); } } public void CreateNewUnit() { if(food - unitCost < 0) return; GameObject unitObj = Instantiate(unitPrefab, unitSpawnPos.position, Quaternion.identity, transform); Unit unit = unitObj.GetComponent(); units.Add(unit); food -= unitCost; if(onUnitCreated != null) onUnitCreated.Invoke(unit); if(isMe) { GameUI.instance.UpdateUnitCountText(units.Count); GameUI.instance.UpdateResourceText(food, ResourceType.Food); } } }