Files
TutorialRTS/Assets/Scripts/Player.cs

101 lines
2.8 KiB
C#

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<Unit> units = new List<Unit>();
//events
[System.Serializable]
public class UnitCreatedEvent : UnityEvent<Unit> { }
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<Unit>();
units.Add(unit);
food -= unitCost;
if(onUnitCreated != null)
onUnitCreated.Invoke(unit);
if(isMe)
{
GameUI.instance.UpdateUnitCountText(units.Count);
GameUI.instance.UpdateResourceText(food, ResourceType.Food);
}
}
}