LunarInfantry/Assets/Scripts/PlayerEntity.cs
2026-01-26 01:06:40 -08:00

99 lines
2.6 KiB
C#

using System.Collections.Generic;
using UnityEngine;
public class PlayerEntity : Entity
{
[Header("Player Flags")]
public int actions = 2;
public int maxActions = 2;
public enum PlayerClass {Ranker, Caster, Officer, Engineer, Medic}
public PlayerClass selectedClass = PlayerClass.Ranker;
[Header("Weaponry")]
[SerializeField] private Weapon[] weapons;
[HideInInspector] public List<Weapon> weaponInstances = new();
public Weapon currentWeapon;
[Header("Class Abilities")]
[SerializeField] private ClassAbility classAbility;
[HideInInspector] public ClassAbility abilityInstance;
[Header("UI")]
[SerializeField] private Transform hpBar;
public GameObject debugDoneObject;
void Start()
{
foreach (Weapon weapon in weapons)
{
Weapon newWeapon = Instantiate(weapon, transform);
newWeapon.thisEntity = this;
newWeapon.tag = tag;
weaponInstances.Add(newWeapon);
}
if (selectedClass == PlayerClass.Officer)
{
abilityInstance = Instantiate(classAbility, transform);
abilityInstance.thisEntity = this;
}
currentWeapon = weaponInstances[0];
}
// Update is called once per frame
void Update()
{
}
public override void TakeDamage(float amount, Entity attacker)
{
base.TakeDamage(amount, attacker);
UpdateHealthUI();
}
public void UpdateHealthUI()
{
hpBar.localScale = new Vector3(health/maxHealth, 1f, 1f);
}
public void SkipTurn()
{
actions = 0;
TurnHandler.instance.UpdateTurns();
}
public void Attack()
{
currentWeapon.TryAttack();
}
public void SwitchWeapon(Weapon requestedWeapon)
{
currentWeapon = requestedWeapon;
}
protected override void FinishedMovement()
{
base.FinishedMovement();
TurnHandler.instance.UpdateTurns();
if (!ActionUIHandler.instance.opened)
{
ActionUIHandler.instance.ShowUI(this);
}
}
private void OnMouseDown()
{
if (actions > 0 && !PlayerEntityMovement.instance.isMoving)
{
ActionUIHandler.instance.ShowUI(this);
}
}
public PlayerEntity GetAdjacentPlayers()
{
foreach (TileObject neighbor in currentTile.neighbors)
{
if (neighbor.hasUnit && neighbor.hasUnit is PlayerEntity)
{
return neighbor.hasUnit as PlayerEntity; //i'll uh, make it return a list later this is just a quick way.
}
}
return null;
}
}