OldBlueWater/BlueWater/Assets/02.Scripts/Ai/Human/Unit/EnemyUnit.cs

86 lines
2.7 KiB
C#
Raw Normal View History

2023-09-12 14:46:57 +00:00
using Sirenix.OdinInspector;
using UnityEngine;
using UnityEngine.Serialization;
// ReSharper disable once CheckNamespace
namespace BlueWaterProject
{
public class EnemyUnit : BaseUnit
{
#region Property and variable
[PropertyOrder(-10)]
public EnemyUnitStat enemyUnitStat;
private bool isClickedTypeAllButton;
#endregion
#region Unity built-in function
private void OnDrawGizmosSelected()
{
if (!Application.isPlaying || enemyUnitStat == null || enemyUnitStat.SailorCount <= 0) return;
foreach (var item in enemyUnitStat.UnitList)
{
var unitPos = item.transform.position;
var ray = new Ray(unitPos + Vector3.up, Vector3.down);
Gizmos.color = Physics.Raycast(ray, UnitManager.Inst.MaxGroundDistance, UnitManager.Inst.GroundLayer) ? Color.blue : Color.red;
Gizmos.DrawRay(ray.origin, ray.direction * UnitManager.Inst.MaxGroundDistance);
}
}
#endregion
#region Custom function
[PropertyOrder(-9)]
[HorizontalGroup("Split", 0.5f)]
[GUIColor("GetCreateUnitButtonColor")]
[EnableIf("@DataManager.Inst.GetEnemyUnitStatSoFromKey(enemyUnitStat.Idx) != null")]
[Button("유닛 생성")]
public void CreateUnit()
{
UnitManager.Inst.CreateEnemyUnitInEditor(this);
}
[PropertyOrder(-8)]
[HorizontalGroup("Split", 0.5f)]
[EnableIf("CanAssignUnit")]
[Button("유닛 배치")]
public void AssignUnit()
{
if (UnitManager.Inst.CanAssignUnit(this, transform.position))
{
UnitManager.Inst.AssignEnemyUnit(this, transform.position);
}
}
private bool CanAssignUnit()
{
return UnitManager.Inst.CanAssignUnit(this, transform.position);
}
[PropertyOrder(-7)]
[GUIColor(1, 0, 0)]
[Button("유닛 초기화")]
private void ResetUnit()
{
var tempUnitIdx = enemyUnitStat.Idx;
UnitManager.Inst.DestroyDeployedUnits(this);
enemyUnitStat = new EnemyUnitStat()
{
Idx = tempUnitIdx
};
isClickedTypeAllButton = false;
}
private Color GetCreateUnitButtonColor() => enemyUnitStat.UnitList.Count > 0 ? Color.white : Color.green;
private Color GetTypeAllButtonColor() => isClickedTypeAllButton ? Color.white : Color.green;
private void OnTypeChanged() => isClickedTypeAllButton = false;
#endregion
}
}