OldBlueWater/BlueWater/Assets/02.Scripts/Ai/Human/Combat/Pirate/PirateAi.cs

112 lines
3.6 KiB
C#
Raw Normal View History

2023-09-12 14:46:57 +00:00
using System;
using System.Collections.Generic;
using Sirenix.OdinInspector;
2023-09-12 07:41:11 +00:00
using UnityEngine;
// ReSharper disable once CheckNamespace
namespace BlueWaterProject
{
2023-09-13 03:23:27 +00:00
public class PirateAi : CombatAi
2023-09-12 07:41:11 +00:00
{
2023-09-12 14:46:57 +00:00
#region Properties and variables
2023-09-12 07:41:11 +00:00
2023-09-12 14:46:57 +00:00
[Title("Skin")]
[Tooltip("SkinnedMeshRenderer, MeshRenderer의 Material을 모두 담고 있는 리스트")]
[SerializeField] protected List<Material> skinMaterialList = new(10);
[Tooltip("캐릭터 외곽선의 기본 색상")]
[SerializeField] protected Color defaultSkinColor = Color.black;
[Tooltip("캐릭터에 마우스 커서가 올라가 있을 때 색상")]
[SerializeField] protected Color mouseEnterHighlightSkinColor = Color.white;
[Tooltip("캐릭터가 선택되었을 때 색상")]
[SerializeField] protected Color selectedSkinColor = Color.red;
[DisableIf("@true")]
[SerializeField] private IslandInfo islandInfo;
protected PirateStat pirateStat;
#endregion
#region Unit Built-in methods
private void Start()
{
InitStart();
}
#endregion
#region Custom methods
protected override void SetLayer()
{
gameObject.layer = LayerMask.NameToLayer("Pirate");
var hitBoxObj = hitBoxCollider.gameObject;
hitBoxObj.layer = LayerMask.NameToLayer("HitBox");
hitBoxObj.tag = "Pirate";
targetLayer = LayerMask.GetMask("Enemy");
if (pirateStat.AttackerType == EAttackerType.OFFENSE)
{
targetLayer |= LayerMask.GetMask("Props");
}
}
protected virtual void InitStart()
{
var pirateViewData = GetPirateViewData();
InitViewModel(pirateViewData);
FindMaterial();
SetCurrentHp(pirateStat.MaxHp);
SetMoveSpeed(pirateStat.MoveSpd);
if (pirateStat.AttackerType == EAttackerType.DEFENSE)
{
defensePos = transform.position;
}
}
private void InitViewModel(PirateView pirateView)
{
SetActiveViewModel(backpackContainer, pirateView.Backpack);
SetActiveViewModel(leftWeaponContainer, pirateView.LeftWeapon);
SetActiveViewModel(leftShieldContainer, pirateView.LeftShield);
SetActiveViewModel(headContainer, pirateView.Head);
SetActiveViewModel(rightWeaponContainer, pirateView.RightWeapon);
SetActiveViewModel(bodyContainer, pirateView.Body);
SetActiveViewModel(flagContainer, pirateView.Flag);
}
private void FindMaterial()
{
var skinnedMeshRenderers = GetComponentsInChildren<SkinnedMeshRenderer>();
var meshRenderers = GetComponentsInChildren<MeshRenderer>();
foreach (var skin in skinnedMeshRenderers)
{
if (!skin.gameObject.activeSelf) continue;
skinMaterialList.Add(skin.material);
}
foreach (var skin in meshRenderers)
{
if (!skin.gameObject.activeSelf) continue;
skinMaterialList.Add(skin.material);
}
}
protected override void SetCurrentHp(float value) => pirateStat.CurrentHp = value;
private PirateView GetPirateViewData() => Application.isPlaying ?
DataManager.Inst.GetPirateViewDictionaryFromKey(pirateStat.ViewIdx) :
DataManager.Inst.GetPirateViewSoFromKey(pirateStat.ViewIdx);
#endregion
2023-09-12 07:41:11 +00:00
}
}