Files
aibis-dream/Assets/Scripts/SceneManagement/SpawnerKit/AbsMobileObject.cs
T

77 lines
2.2 KiB
C#

using System;
using UnityEngine;
namespace AibisDream
{
public class AbsMobileObject : MonoBehaviour
{
private MobileObjectData _mobileObjectData;
private Vector3 _initPos;
public bool IsActive { get; private set; }
public float ExistTime { get; private set; }
public float Speed { get; private set; }
public event Action<AbsMobileObject> OnDisposed;
public virtual void Init(MobileObjectData mobileObjectData)
{
_initPos = transform.position;
_mobileObjectData = mobileObjectData;
gameObject.name = mobileObjectData.itemName;
IsActive = true;
Speed = RandomSpeed();
gameObject.SetActive(true);
}
protected string RandomSelectAddress()
{
return _mobileObjectData.assetAddressArray[
UnityEngine.Random.Range(0, _mobileObjectData.assetAddressArray.Length)];
}
protected float RandomSpeed()
{
return UnityEngine.Random.Range(_mobileObjectData.speed.x, _mobileObjectData.speed.y);
}
public void Update()
{
// 移动
if (IsActive)
{
var posDelta = _mobileObjectData.direction.normalized * (Speed * Time.deltaTime);
transform.position += new Vector3(posDelta.x, posDelta.y, 0);
ExistTime += Time.deltaTime;
if (IsReachEnd())
{
Dispose();
}
}
}
private bool IsReachEnd()
{
if (_mobileObjectData.isDistanceMode)
{
return _mobileObjectData.existDistance <= Vector3.Distance(transform.position, _initPos);
}
return _mobileObjectData.existTime <= ExistTime;
}
protected virtual void Dispose()
{
IsActive = false;
ExistTime = 0;
_initPos = default;
_mobileObjectData = default;
gameObject.name = "Empty";
gameObject.SetActive(false);
// 回收
OnDisposed?.Invoke(this);
OnDisposed = null;
}
}
}