//------------------------------------------------------------------------------
// 
//     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 SkillFeature : IArticyBaseObject, IPropertyProvider
    {
        
        [SerializeField()]
        private ArticyValueArticyObject mIcon = new ArticyValueArticyObject();
        
        [SerializeField()]
        private String mName;
        
        [SerializeField()]
        private String mDescribe;
        
        [SerializeField()]
        private String mTimeline;
        
        [SerializeField()]
        private ArticyValueArticyModelList mSoundList = new ArticyValueArticyModelList();
        
        [SerializeField()]
        private @__04 mAttackType = new @__04();
        
        [SerializeField()]
        private AttackRangeType mAttackRangeType = new AttackRangeType();
        
        [SerializeField()]
        private AttackInputType mAttackInputType = new AttackInputType();
        
        [SerializeField()]
        private Single mAttackRate;
        
        [SerializeField()]
        private Single mStunRate;
        
        [SerializeField()]
        private Single mExecuteRate;
        
        [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, "Skill.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, "Skill.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, "Skill.Describe", oldValue, mDescribe);
            }
        }
        
        public String Unresolved_Timeline
        {
            get
            {
                return mTimeline;
            }
        }
        
        public String Timeline
        {
            get
            {
                return Articy.Unity.ArticyTextExtension.Resolve(this, mTimeline);
            }
            set
            {
                var oldValue = mTimeline;
                mTimeline = value;
                Articy.Unity.ArticyDatabase.ObjectNotifications.ReportChanged(OwnerId, OwnerInstanceId, "Skill.Timeline", oldValue, mTimeline);
            }
        }
        
        public List SoundList
        {
            get
            {
                return mSoundList.GetValue();
            }
            set
            {
                var oldValue = mSoundList;
                mSoundList.SetValue(value);
                Articy.Unity.ArticyDatabase.ObjectNotifications.ReportChanged(OwnerId, OwnerInstanceId, "Skill.SoundList", oldValue.GetValue(), mSoundList.GetValue());
            }
        }
        
        public @__04 AttackType
        {
            get
            {
                return mAttackType;
            }
            set
            {
                var oldValue = mAttackType;
                mAttackType = value;
                Articy.Unity.ArticyDatabase.ObjectNotifications.ReportChanged(OwnerId, OwnerInstanceId, "Skill.AttackType", oldValue, mAttackType);
            }
        }
        
        public AttackRangeType AttackRangeType
        {
            get
            {
                return mAttackRangeType;
            }
            set
            {
                var oldValue = mAttackRangeType;
                mAttackRangeType = value;
                Articy.Unity.ArticyDatabase.ObjectNotifications.ReportChanged(OwnerId, OwnerInstanceId, "Skill.AttackRangeType", oldValue, mAttackRangeType);
            }
        }
        
        public AttackInputType AttackInputType
        {
            get
            {
                return mAttackInputType;
            }
            set
            {
                var oldValue = mAttackInputType;
                mAttackInputType = value;
                Articy.Unity.ArticyDatabase.ObjectNotifications.ReportChanged(OwnerId, OwnerInstanceId, "Skill.AttackInputType", oldValue, mAttackInputType);
            }
        }
        
        public Single AttackRate
        {
            get
            {
                return mAttackRate;
            }
            set
            {
                var oldValue = mAttackRate;
                mAttackRate = value;
                Articy.Unity.ArticyDatabase.ObjectNotifications.ReportChanged(OwnerId, OwnerInstanceId, "Skill.AttackRate", oldValue, mAttackRate);
            }
        }
        
        public Single StunRate
        {
            get
            {
                return mStunRate;
            }
            set
            {
                var oldValue = mStunRate;
                mStunRate = value;
                Articy.Unity.ArticyDatabase.ObjectNotifications.ReportChanged(OwnerId, OwnerInstanceId, "Skill.StunRate", oldValue, mStunRate);
            }
        }
        
        public Single ExecuteRate
        {
            get
            {
                return mExecuteRate;
            }
            set
            {
                var oldValue = mExecuteRate;
                mExecuteRate = value;
                Articy.Unity.ArticyDatabase.ObjectNotifications.ReportChanged(OwnerId, OwnerInstanceId, "Skill.ExecuteRate", oldValue, mExecuteRate);
            }
        }
        
        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.SkillFeature newClone = ((Articy.Touhou.Features.SkillFeature)(aClone));
            if ((mIcon != null))
            {
                newClone.mIcon = ((ArticyValueArticyObject)(mIcon.CloneObject(newClone, aFirstClassParent)));
            }
            newClone.Name = Unresolved_Name;
            newClone.Describe = Unresolved_Describe;
            newClone.Timeline = Unresolved_Timeline;
            mSoundList.CustomClone(newClone.mSoundList);
            newClone.AttackType = AttackType;
            newClone.AttackRangeType = AttackRangeType;
            newClone.AttackInputType = AttackInputType;
            newClone.AttackRate = AttackRate;
            newClone.StunRate = StunRate;
            newClone.ExecuteRate = ExecuteRate;
            newClone.OwnerId = OwnerId;
        }
        
        public object CloneObject(object aParent, Articy.Unity.ArticyObject aFirstClassParent)
        {
            Articy.Touhou.Features.SkillFeature clone = new Articy.Touhou.Features.SkillFeature();
            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 == "Timeline"))
            {
                Timeline = System.Convert.ToString(aValue);
                return;
            }
            if ((aProperty == "SoundList"))
            {
                SoundList = ((List)(aValue));
                return;
            }
            if ((aProperty == "AttackType"))
            {
                AttackType = ((@__04)(aValue));
                return;
            }
            if ((aProperty == "AttackRangeType"))
            {
                AttackRangeType = ((AttackRangeType)(aValue));
                return;
            }
            if ((aProperty == "AttackInputType"))
            {
                AttackInputType = ((AttackInputType)(aValue));
                return;
            }
            if ((aProperty == "AttackRate"))
            {
                AttackRate = System.Convert.ToSingle(aValue);
                return;
            }
            if ((aProperty == "StunRate"))
            {
                StunRate = System.Convert.ToSingle(aValue);
                return;
            }
            if ((aProperty == "ExecuteRate"))
            {
                ExecuteRate = System.Convert.ToSingle(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 == "Timeline"))
            {
                return new Articy.Unity.Interfaces.ScriptDataProxy(Timeline);
            }
            if ((aProperty == "SoundList"))
            {
                return new Articy.Unity.Interfaces.ScriptDataProxy(SoundList);
            }
            if ((aProperty == "AttackType"))
            {
                return new Articy.Unity.Interfaces.ScriptDataProxy(AttackType);
            }
            if ((aProperty == "AttackRangeType"))
            {
                return new Articy.Unity.Interfaces.ScriptDataProxy(AttackRangeType);
            }
            if ((aProperty == "AttackInputType"))
            {
                return new Articy.Unity.Interfaces.ScriptDataProxy(AttackInputType);
            }
            if ((aProperty == "AttackRate"))
            {
                return new Articy.Unity.Interfaces.ScriptDataProxy(AttackRate);
            }
            if ((aProperty == "StunRate"))
            {
                return new Articy.Unity.Interfaces.ScriptDataProxy(StunRate);
            }
            if ((aProperty == "ExecuteRate"))
            {
                return new Articy.Unity.Interfaces.ScriptDataProxy(ExecuteRate);
            }
            return null;
        }
        #endregion
    }
}