//------------------------------------------------------------------------------
// 
//     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 BuffFeature : IArticyBaseObject, IPropertyProvider
    {
        
        [SerializeField()]
        private ArticyValueArticyObject mIcon = new ArticyValueArticyObject();
        
        [SerializeField()]
        private String mName;
        
        [SerializeField()]
        private String mDescribe;
        
        [SerializeField()]
        private Single mAliveTime;
        
        [SerializeField()]
        private Single mUpdateRate;
        
        [SerializeField()]
        private Boolean mIsAliveForever = new Boolean();
        
        [SerializeField()]
        private Boolean mIsUpdate = new Boolean();
        
        [SerializeField()]
        private ArticyValueArticyModelList mBuffPreCheck = new ArticyValueArticyModelList();
        
        [SerializeField()]
        private ArticyValueArticyModelList mBuffEffect = new ArticyValueArticyModelList();
        
        [SerializeField()]
        private Int32 mLevelMax;
        
        [SerializeField()]
        private String mEffectStart;
        
        [SerializeField()]
        private String mEffectDuring;
        
        [SerializeField()]
        private String mEffectEnd;
        
        [SerializeField()]
        private UInt64 mOwnerId;
        
        [SerializeField()]
        private UInt32 mOwnerInstanceId;
        
        public ArticyObject Icon
        {
            get
            {
                return mIcon.GetValue();
            }
            set
            {
                var oldValue = mIcon;
                mIcon.SetValue(value);
                Articy.Unity.ArticyDatabase.ObjectNotifications.ReportChanged(OwnerId, OwnerInstanceId, "Buff.Icon", oldValue.GetValue(), mIcon.GetValue());
            }
        }
        
        public String Unresolved_Name
        {
            get
            {
                return mName;
            }
        }
        
        public String Name
        {
            get
            {
                return Articy.Unity.ArticyTextExtension.Resolve(this, mName);
            }
            set
            {
                var oldValue = mName;
                mName = value;
                Articy.Unity.ArticyDatabase.ObjectNotifications.ReportChanged(OwnerId, OwnerInstanceId, "Buff.Name", oldValue, mName);
            }
        }
        
        public String Unresolved_Describe
        {
            get
            {
                return mDescribe;
            }
        }
        
        public String Describe
        {
            get
            {
                return Articy.Unity.ArticyTextExtension.Resolve(this, mDescribe);
            }
            set
            {
                var oldValue = mDescribe;
                mDescribe = value;
                Articy.Unity.ArticyDatabase.ObjectNotifications.ReportChanged(OwnerId, OwnerInstanceId, "Buff.Describe", oldValue, mDescribe);
            }
        }
        
        public Single AliveTime
        {
            get
            {
                return mAliveTime;
            }
            set
            {
                var oldValue = mAliveTime;
                mAliveTime = value;
                Articy.Unity.ArticyDatabase.ObjectNotifications.ReportChanged(OwnerId, OwnerInstanceId, "Buff.AliveTime", oldValue, mAliveTime);
            }
        }
        
        public Single UpdateRate
        {
            get
            {
                return mUpdateRate;
            }
            set
            {
                var oldValue = mUpdateRate;
                mUpdateRate = value;
                Articy.Unity.ArticyDatabase.ObjectNotifications.ReportChanged(OwnerId, OwnerInstanceId, "Buff.UpdateRate", oldValue, mUpdateRate);
            }
        }
        
        public Boolean IsAliveForever
        {
            get
            {
                return mIsAliveForever;
            }
            set
            {
                var oldValue = mIsAliveForever;
                mIsAliveForever = value;
                Articy.Unity.ArticyDatabase.ObjectNotifications.ReportChanged(OwnerId, OwnerInstanceId, "Buff.IsAliveForever", oldValue, mIsAliveForever);
            }
        }
        
        public Boolean IsUpdate
        {
            get
            {
                return mIsUpdate;
            }
            set
            {
                var oldValue = mIsUpdate;
                mIsUpdate = value;
                Articy.Unity.ArticyDatabase.ObjectNotifications.ReportChanged(OwnerId, OwnerInstanceId, "Buff.IsUpdate", oldValue, mIsUpdate);
            }
        }
        
        public List BuffPreCheck
        {
            get
            {
                return mBuffPreCheck.GetValue();
            }
            set
            {
                var oldValue = mBuffPreCheck;
                mBuffPreCheck.SetValue(value);
                Articy.Unity.ArticyDatabase.ObjectNotifications.ReportChanged(OwnerId, OwnerInstanceId, "Buff.BuffPreCheck", oldValue.GetValue(), mBuffPreCheck.GetValue());
            }
        }
        
        public List BuffEffect
        {
            get
            {
                return mBuffEffect.GetValue();
            }
            set
            {
                var oldValue = mBuffEffect;
                mBuffEffect.SetValue(value);
                Articy.Unity.ArticyDatabase.ObjectNotifications.ReportChanged(OwnerId, OwnerInstanceId, "Buff.BuffEffect", oldValue.GetValue(), mBuffEffect.GetValue());
            }
        }
        
        public Int32 LevelMax
        {
            get
            {
                return mLevelMax;
            }
            set
            {
                var oldValue = mLevelMax;
                mLevelMax = value;
                Articy.Unity.ArticyDatabase.ObjectNotifications.ReportChanged(OwnerId, OwnerInstanceId, "Buff.LevelMax", oldValue, mLevelMax);
            }
        }
        
        public String Unresolved_EffectStart
        {
            get
            {
                return mEffectStart;
            }
        }
        
        public String EffectStart
        {
            get
            {
                return Articy.Unity.ArticyTextExtension.Resolve(this, mEffectStart);
            }
            set
            {
                var oldValue = mEffectStart;
                mEffectStart = value;
                Articy.Unity.ArticyDatabase.ObjectNotifications.ReportChanged(OwnerId, OwnerInstanceId, "Buff.EffectStart", oldValue, mEffectStart);
            }
        }
        
        public String Unresolved_EffectDuring
        {
            get
            {
                return mEffectDuring;
            }
        }
        
        public String EffectDuring
        {
            get
            {
                return Articy.Unity.ArticyTextExtension.Resolve(this, mEffectDuring);
            }
            set
            {
                var oldValue = mEffectDuring;
                mEffectDuring = value;
                Articy.Unity.ArticyDatabase.ObjectNotifications.ReportChanged(OwnerId, OwnerInstanceId, "Buff.EffectDuring", oldValue, mEffectDuring);
            }
        }
        
        public String Unresolved_EffectEnd
        {
            get
            {
                return mEffectEnd;
            }
        }
        
        public String EffectEnd
        {
            get
            {
                return Articy.Unity.ArticyTextExtension.Resolve(this, mEffectEnd);
            }
            set
            {
                var oldValue = mEffectEnd;
                mEffectEnd = value;
                Articy.Unity.ArticyDatabase.ObjectNotifications.ReportChanged(OwnerId, OwnerInstanceId, "Buff.EffectEnd", oldValue, mEffectEnd);
            }
        }
        
        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.BuffFeature newClone = ((Articy.Touhou.Features.BuffFeature)(aClone));
            if ((mIcon != null))
            {
                newClone.mIcon = ((ArticyValueArticyObject)(mIcon.CloneObject(newClone, aFirstClassParent)));
            }
            newClone.Name = Unresolved_Name;
            newClone.Describe = Unresolved_Describe;
            newClone.AliveTime = AliveTime;
            newClone.UpdateRate = UpdateRate;
            newClone.IsAliveForever = IsAliveForever;
            newClone.IsUpdate = IsUpdate;
            mBuffPreCheck.CustomClone(newClone.mBuffPreCheck);
            mBuffEffect.CustomClone(newClone.mBuffEffect);
            newClone.LevelMax = LevelMax;
            newClone.EffectStart = Unresolved_EffectStart;
            newClone.EffectDuring = Unresolved_EffectDuring;
            newClone.EffectEnd = Unresolved_EffectEnd;
            newClone.OwnerId = OwnerId;
        }
        
        public object CloneObject(object aParent, Articy.Unity.ArticyObject aFirstClassParent)
        {
            Articy.Touhou.Features.BuffFeature clone = new Articy.Touhou.Features.BuffFeature();
            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 == "Icon"))
            {
                Icon = Articy.Unity.Interfaces.BaseScriptFragments.ObjectToModelRep(aValue);
                return;
            }
            if ((aProperty == "Name"))
            {
                Name = System.Convert.ToString(aValue);
                return;
            }
            if ((aProperty == "Describe"))
            {
                Describe = System.Convert.ToString(aValue);
                return;
            }
            if ((aProperty == "AliveTime"))
            {
                AliveTime = System.Convert.ToSingle(aValue);
                return;
            }
            if ((aProperty == "UpdateRate"))
            {
                UpdateRate = System.Convert.ToSingle(aValue);
                return;
            }
            if ((aProperty == "IsAliveForever"))
            {
                IsAliveForever = System.Convert.ToBoolean(aValue);
                return;
            }
            if ((aProperty == "IsUpdate"))
            {
                IsUpdate = System.Convert.ToBoolean(aValue);
                return;
            }
            if ((aProperty == "BuffPreCheck"))
            {
                BuffPreCheck = ((List)(aValue));
                return;
            }
            if ((aProperty == "BuffEffect"))
            {
                BuffEffect = ((List)(aValue));
                return;
            }
            if ((aProperty == "LevelMax"))
            {
                LevelMax = System.Convert.ToInt32(aValue);
                return;
            }
            if ((aProperty == "EffectStart"))
            {
                EffectStart = System.Convert.ToString(aValue);
                return;
            }
            if ((aProperty == "EffectDuring"))
            {
                EffectDuring = System.Convert.ToString(aValue);
                return;
            }
            if ((aProperty == "EffectEnd"))
            {
                EffectEnd = System.Convert.ToString(aValue);
                return;
            }
        }
        
        public Articy.Unity.Interfaces.ScriptDataProxy getProp(string aProperty)
        {
            if ((aProperty == "Icon"))
            {
                return new Articy.Unity.Interfaces.ScriptDataProxy(Icon);
            }
            if ((aProperty == "Name"))
            {
                return new Articy.Unity.Interfaces.ScriptDataProxy(Name);
            }
            if ((aProperty == "Describe"))
            {
                return new Articy.Unity.Interfaces.ScriptDataProxy(Describe);
            }
            if ((aProperty == "AliveTime"))
            {
                return new Articy.Unity.Interfaces.ScriptDataProxy(AliveTime);
            }
            if ((aProperty == "UpdateRate"))
            {
                return new Articy.Unity.Interfaces.ScriptDataProxy(UpdateRate);
            }
            if ((aProperty == "IsAliveForever"))
            {
                return new Articy.Unity.Interfaces.ScriptDataProxy(IsAliveForever);
            }
            if ((aProperty == "IsUpdate"))
            {
                return new Articy.Unity.Interfaces.ScriptDataProxy(IsUpdate);
            }
            if ((aProperty == "BuffPreCheck"))
            {
                return new Articy.Unity.Interfaces.ScriptDataProxy(BuffPreCheck);
            }
            if ((aProperty == "BuffEffect"))
            {
                return new Articy.Unity.Interfaces.ScriptDataProxy(BuffEffect);
            }
            if ((aProperty == "LevelMax"))
            {
                return new Articy.Unity.Interfaces.ScriptDataProxy(LevelMax);
            }
            if ((aProperty == "EffectStart"))
            {
                return new Articy.Unity.Interfaces.ScriptDataProxy(EffectStart);
            }
            if ((aProperty == "EffectDuring"))
            {
                return new Articy.Unity.Interfaces.ScriptDataProxy(EffectDuring);
            }
            if ((aProperty == "EffectEnd"))
            {
                return new Articy.Unity.Interfaces.ScriptDataProxy(EffectEnd);
            }
            return null;
        }
        #endregion
    }
}