//------------------------------------------------------------------------------
// 
//     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 SkillComboFeature : IArticyBaseObject, IPropertyProvider
    {
        
        [SerializeField()]
        private Stance mStanceStart = new Stance();
        
        [SerializeField()]
        private Stance mStanceEnd = new Stance();
        
        [SerializeField()]
        private TriggerType mTriggerType = new TriggerType();
        
        [SerializeField()]
        private Boolean mFreeLock = new Boolean();
        
        [SerializeField()]
        private ArticyValueArticyObject mWeapon = new ArticyValueArticyObject();
        
        [SerializeField()]
        private ArticyValueArticyModelList mSkillTrigger = new ArticyValueArticyModelList();
        
        [SerializeField()]
        private UInt64 mOwnerId;
        
        [SerializeField()]
        private UInt32 mOwnerInstanceId;
        
        public Stance StanceStart
        {
            get
            {
                return mStanceStart;
            }
            set
            {
                var oldValue = mStanceStart;
                mStanceStart = value;
                Articy.Unity.ArticyDatabase.ObjectNotifications.ReportChanged(OwnerId, OwnerInstanceId, "SkillCombo.StanceStart", oldValue, mStanceStart);
            }
        }
        
        public Stance StanceEnd
        {
            get
            {
                return mStanceEnd;
            }
            set
            {
                var oldValue = mStanceEnd;
                mStanceEnd = value;
                Articy.Unity.ArticyDatabase.ObjectNotifications.ReportChanged(OwnerId, OwnerInstanceId, "SkillCombo.StanceEnd", oldValue, mStanceEnd);
            }
        }
        
        public TriggerType TriggerType
        {
            get
            {
                return mTriggerType;
            }
            set
            {
                var oldValue = mTriggerType;
                mTriggerType = value;
                Articy.Unity.ArticyDatabase.ObjectNotifications.ReportChanged(OwnerId, OwnerInstanceId, "SkillCombo.TriggerType", oldValue, mTriggerType);
            }
        }
        
        public Boolean FreeLock
        {
            get
            {
                return mFreeLock;
            }
            set
            {
                var oldValue = mFreeLock;
                mFreeLock = value;
                Articy.Unity.ArticyDatabase.ObjectNotifications.ReportChanged(OwnerId, OwnerInstanceId, "SkillCombo.FreeLock", oldValue, mFreeLock);
            }
        }
        
        public ArticyObject Weapon
        {
            get
            {
                return mWeapon.GetValue();
            }
            set
            {
                var oldValue = mWeapon;
                mWeapon.SetValue(value);
                Articy.Unity.ArticyDatabase.ObjectNotifications.ReportChanged(OwnerId, OwnerInstanceId, "SkillCombo.Weapon", oldValue.GetValue(), mWeapon.GetValue());
            }
        }
        
        public List SkillTrigger
        {
            get
            {
                return mSkillTrigger.GetValue();
            }
            set
            {
                var oldValue = mSkillTrigger;
                mSkillTrigger.SetValue(value);
                Articy.Unity.ArticyDatabase.ObjectNotifications.ReportChanged(OwnerId, OwnerInstanceId, "SkillCombo.SkillTrigger", oldValue.GetValue(), mSkillTrigger.GetValue());
            }
        }
        
        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.SkillComboFeature newClone = ((Articy.Touhou.Features.SkillComboFeature)(aClone));
            newClone.StanceStart = StanceStart;
            newClone.StanceEnd = StanceEnd;
            newClone.TriggerType = TriggerType;
            newClone.FreeLock = FreeLock;
            if ((mWeapon != null))
            {
                newClone.mWeapon = ((ArticyValueArticyObject)(mWeapon.CloneObject(newClone, aFirstClassParent)));
            }
            mSkillTrigger.CustomClone(newClone.mSkillTrigger);
            newClone.OwnerId = OwnerId;
        }
        
        public object CloneObject(object aParent, Articy.Unity.ArticyObject aFirstClassParent)
        {
            Articy.Touhou.Features.SkillComboFeature clone = new Articy.Touhou.Features.SkillComboFeature();
            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 == "StanceStart"))
            {
                StanceStart = ((Stance)(aValue));
                return;
            }
            if ((aProperty == "StanceEnd"))
            {
                StanceEnd = ((Stance)(aValue));
                return;
            }
            if ((aProperty == "TriggerType"))
            {
                TriggerType = ((TriggerType)(aValue));
                return;
            }
            if ((aProperty == "FreeLock"))
            {
                FreeLock = System.Convert.ToBoolean(aValue);
                return;
            }
            if ((aProperty == "Weapon"))
            {
                Weapon = Articy.Unity.Interfaces.BaseScriptFragments.ObjectToModelRep(aValue);
                return;
            }
            if ((aProperty == "SkillTrigger"))
            {
                SkillTrigger = ((List)(aValue));
                return;
            }
        }
        
        public Articy.Unity.Interfaces.ScriptDataProxy getProp(string aProperty)
        {
            if ((aProperty == "StanceStart"))
            {
                return new Articy.Unity.Interfaces.ScriptDataProxy(StanceStart);
            }
            if ((aProperty == "StanceEnd"))
            {
                return new Articy.Unity.Interfaces.ScriptDataProxy(StanceEnd);
            }
            if ((aProperty == "TriggerType"))
            {
                return new Articy.Unity.Interfaces.ScriptDataProxy(TriggerType);
            }
            if ((aProperty == "FreeLock"))
            {
                return new Articy.Unity.Interfaces.ScriptDataProxy(FreeLock);
            }
            if ((aProperty == "Weapon"))
            {
                return new Articy.Unity.Interfaces.ScriptDataProxy(Weapon);
            }
            if ((aProperty == "SkillTrigger"))
            {
                return new Articy.Unity.Interfaces.ScriptDataProxy(SkillTrigger);
            }
            return null;
        }
        #endregion
    }
}