101 lines
2.8 KiB
C#
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);
|
|
}
|
|
}
|
|
}
|