60 lines
1.7 KiB
C#
60 lines
1.7 KiB
C#
using Northbound.Data;
|
|
using Unity.Netcode;
|
|
using UnityEngine;
|
|
using UnityEngine.AI;
|
|
|
|
namespace Northbound
|
|
{
|
|
[RequireComponent(typeof(EnemyUnit))]
|
|
[RequireComponent(typeof(EnemyAIController))]
|
|
[RequireComponent(typeof(NavMeshAgent))]
|
|
[RequireComponent(typeof(NetworkObject))]
|
|
public class MonsterDataComponent : MonoBehaviour
|
|
{
|
|
[Header("Data Reference")]
|
|
[Tooltip("ScriptableObject containing monster data")]
|
|
public MonsterData monsterData;
|
|
|
|
[Header("Auto-Apply Settings")]
|
|
[Tooltip("Automatically apply stats from monsterData on Awake")]
|
|
public bool autoApplyOnAwake = true;
|
|
|
|
private void Awake()
|
|
{
|
|
if (autoApplyOnAwake && monsterData != null)
|
|
{
|
|
ApplyMonsterData();
|
|
}
|
|
}
|
|
|
|
public void ApplyMonsterData()
|
|
{
|
|
if (monsterData == null)
|
|
{
|
|
return;
|
|
}
|
|
|
|
EnemyUnit enemyUnit = GetComponent<EnemyUnit>();
|
|
if (enemyUnit != null)
|
|
{
|
|
enemyUnit.maxHealth = monsterData.maxHp;
|
|
}
|
|
|
|
EnemyAIController aiController = GetComponent<EnemyAIController>();
|
|
if (aiController != null)
|
|
{
|
|
aiController.moveSpeed = monsterData.moveSpeed;
|
|
aiController.attackDamage = monsterData.atkDamage;
|
|
aiController.attackRange = monsterData.atkRange;
|
|
aiController.attackInterval = monsterData.atkIntervalSec;
|
|
}
|
|
|
|
NavMeshAgent navAgent = GetComponent<NavMeshAgent>();
|
|
if (navAgent != null)
|
|
{
|
|
navAgent.speed = monsterData.moveSpeed;
|
|
}
|
|
}
|
|
}
|
|
}
|