using System;
using System.Runtime.Serialization;
using FinTOKMAK.TimelineSystem.Runtime;
using UnityEngine;
namespace FinTOKMAK.WeaponSystem.Runtime
{
///
/// The weapon usage status.
///
public enum WeaponUsingStatus
{
///
/// The weapon is currently being used.
///
Using,
///
/// The weapon is not being used by the WeaponManager, buy carried by the manager.
///
Background,
///
/// The weapon is not carried by any WeaponManager.
///
Abandoned
}
[System.Serializable]
public class WeaponRuntimeData : ScriptableObject, IWeaponData, ISerializable
{
#region Private Field
///
/// The current weapon using status.
///
private WeaponUsingStatus _usingStatus;
#endregion
#region Serialized Private Field
///
/// The id of the
///
[SerializeField]
private string _id;
#region Timelines
///
/// The timeline played when put out the weapon.
///
[SerializeField]
private Timeline _putoutTimeline;
///
/// The timeline played when put in the weapon.
///
[SerializeField]
private Timeline _putinTimline;
#endregion
#endregion
#region Public Field
///
/// The current weapon using status.
///
public WeaponUsingStatus usingStatus
{
get => _usingStatus;
set => _usingStatus = value;
}
///
/// The timeline played when put out the weapon.
///
public Timeline putoutTimline
{
get => _putoutTimeline;
set => _putoutTimeline = value;
}
///
/// The timeline played when put in the weapon.
///
public Timeline putinTimeline
{
get => _putinTimline;
set => _putinTimline = value;
}
#endregion
#region ISerializable
///
/// The constructor used by ISerializable
///
///
///
public WeaponRuntimeData(SerializationInfo info, StreamingContext context)
{
DeserializeObjectData(info, context);
}
public virtual void DeserializeObjectData(SerializationInfo info, StreamingContext context)
{
_id = (string) info.GetValue("id", typeof(string));
}
public virtual void GetObjectData(SerializationInfo info, StreamingContext context)
{
info.AddValue("id", _id, typeof(string));
}
#endregion
#region IWeaponData Interface
public string id
{
get => _id;
set => _id = value;
}
public WeaponDataType weaponDataType => WeaponDataType.Runtime;
public IWeaponData DeepCopy()
{
return ScriptableObject.Instantiate(this);
}
public IWeaponData ToRuntime()
{
throw new InvalidOperationException("Current WeaponData is already a runtime data.");
}
#endregion
}
}