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 } }