//------------------------------------------------------------------------------
// 
//     This code was generated by a tool.
//     Runtime Version:4.0.30319.42000
//
//     Changes to this file may cause incorrect behavior and will be lost if
//     the code is regenerated.
// 
//------------------------------------------------------------------------------
using Articy.Touhou;
using Articy.Unity;
using Articy.Unity.Interfaces;
using System;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
namespace Articy.Touhou.Features
{
    
    
    [Serializable()]
    public class ShieldFeature : IArticyBaseObject, IPropertyProvider
    {
        
        [SerializeField()]
        private Single mTime;
        
        [SerializeField()]
        private Int32 mRecoverSpeed;
        
        [SerializeField()]
        private ArticyValueArticyModelList mRecoverCondition = new ArticyValueArticyModelList();
        
        [SerializeField()]
        private @__03 mStaggerDefLevel = new @__03();
        
        [SerializeField()]
        private UInt64 mOwnerId;
        
        [SerializeField()]
        private UInt32 mOwnerInstanceId;
        
        public Single Time
        {
            get
            {
                return mTime;
            }
            set
            {
                var oldValue = mTime;
                mTime = value;
                Articy.Unity.ArticyDatabase.ObjectNotifications.ReportChanged(OwnerId, OwnerInstanceId, "Shield.Time", oldValue, mTime);
            }
        }
        
        public Int32 RecoverSpeed
        {
            get
            {
                return mRecoverSpeed;
            }
            set
            {
                var oldValue = mRecoverSpeed;
                mRecoverSpeed = value;
                Articy.Unity.ArticyDatabase.ObjectNotifications.ReportChanged(OwnerId, OwnerInstanceId, "Shield.RecoverSpeed", oldValue, mRecoverSpeed);
            }
        }
        
        public List RecoverCondition
        {
            get
            {
                return mRecoverCondition.GetValue();
            }
            set
            {
                var oldValue = mRecoverCondition;
                mRecoverCondition.SetValue(value);
                Articy.Unity.ArticyDatabase.ObjectNotifications.ReportChanged(OwnerId, OwnerInstanceId, "Shield.RecoverCondition", oldValue.GetValue(), mRecoverCondition.GetValue());
            }
        }
        
        public @__03 StaggerDefLevel
        {
            get
            {
                return mStaggerDefLevel;
            }
            set
            {
                var oldValue = mStaggerDefLevel;
                mStaggerDefLevel = value;
                Articy.Unity.ArticyDatabase.ObjectNotifications.ReportChanged(OwnerId, OwnerInstanceId, "Shield.StaggerDefLevel", oldValue, mStaggerDefLevel);
            }
        }
        
        public UInt64 OwnerId
        {
            get
            {
                return mOwnerId;
            }
            set
            {
                mOwnerId = value;
            }
        }
        
        public UInt32 OwnerInstanceId
        {
            get
            {
                return mOwnerInstanceId;
            }
            set
            {
                mOwnerInstanceId = value;
            }
        }
        
        private void CloneProperties(object aClone, Articy.Unity.ArticyObject aFirstClassParent)
        {
            Articy.Touhou.Features.ShieldFeature newClone = ((Articy.Touhou.Features.ShieldFeature)(aClone));
            newClone.Time = Time;
            newClone.RecoverSpeed = RecoverSpeed;
            mRecoverCondition.CustomClone(newClone.mRecoverCondition);
            newClone.StaggerDefLevel = StaggerDefLevel;
            newClone.OwnerId = OwnerId;
        }
        
        public object CloneObject(object aParent, Articy.Unity.ArticyObject aFirstClassParent)
        {
            Articy.Touhou.Features.ShieldFeature clone = new Articy.Touhou.Features.ShieldFeature();
            CloneProperties(clone, aFirstClassParent);
            return clone;
        }
        
        public virtual bool IsLocalizedPropertyOverwritten(string aProperty)
        {
            return false;
        }
        
        #region property provider interface
        public void setProp(string aProperty, object aValue)
        {
            if ((aProperty == "Time"))
            {
                Time = System.Convert.ToSingle(aValue);
                return;
            }
            if ((aProperty == "RecoverSpeed"))
            {
                RecoverSpeed = System.Convert.ToInt32(aValue);
                return;
            }
            if ((aProperty == "RecoverCondition"))
            {
                RecoverCondition = ((List)(aValue));
                return;
            }
            if ((aProperty == "StaggerDefLevel"))
            {
                StaggerDefLevel = ((@__03)(aValue));
                return;
            }
        }
        
        public Articy.Unity.Interfaces.ScriptDataProxy getProp(string aProperty)
        {
            if ((aProperty == "Time"))
            {
                return new Articy.Unity.Interfaces.ScriptDataProxy(Time);
            }
            if ((aProperty == "RecoverSpeed"))
            {
                return new Articy.Unity.Interfaces.ScriptDataProxy(RecoverSpeed);
            }
            if ((aProperty == "RecoverCondition"))
            {
                return new Articy.Unity.Interfaces.ScriptDataProxy(RecoverCondition);
            }
            if ((aProperty == "StaggerDefLevel"))
            {
                return new Articy.Unity.Interfaces.ScriptDataProxy(StaggerDefLevel);
            }
            return null;
        }
        #endregion
    }
}