Files
TutorialRTS/Assets/Scripts/Player.cs

101 lines
2.8 KiB
C#
Raw Normal View History

2026-03-19 11:57:23 +00:00
using System.Collections.Generic;
using Unity.VisualScripting;
using UnityEngine;
2026-03-20 17:34:22 +00:00
using UnityEngine.Events;
2026-03-19 11:57:23 +00:00
public class Player : MonoBehaviour
{
2026-03-20 17:34:22 +00:00
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;
2026-03-19 11:57:23 +00:00
[Header("Units")]
public List<Unit> units = new List<Unit>();
2026-03-20 17:34:22 +00:00
//events
[System.Serializable]
public class UnitCreatedEvent : UnityEvent<Unit> { }
public UnitCreatedEvent onUnitCreated;
public bool isMe;
void Awake()
{
if(isMe)
me = this;
}
2026-03-19 11:57:23 +00:00
// Start is called once before the first execution of Update after the MonoBehaviour is created
void Start()
{
2026-03-20 17:34:22 +00:00
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();
2026-03-19 11:57:23 +00:00
}
// Update is called once per frame
void Update()
{
2026-03-20 17:34:22 +00:00
if(Input.GetKeyDown(KeyCode.E))
CreateNewUnit();
2026-03-19 11:57:23 +00:00
}
//is this my unit?
public bool IsMyUnit(Unit unit)
{
return units.Contains(unit);
}
2026-03-20 17:34:22 +00:00
//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);
}
}
2026-03-19 11:57:23 +00:00
}