//------------------------------------------------------------------------------
// 
//     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 MonsterFeature : IArticyBaseObject, IPropertyProvider
    {
        
        [SerializeField()]
        private @__02 mMonsterSize = new @__02();
        
        [SerializeField()]
        private ArticyValueArticyModelList mMonsterSkillList = new ArticyValueArticyModelList();
        
        [SerializeField()]
        private UInt64 mOwnerId;
        
        [SerializeField()]
        private UInt32 mOwnerInstanceId;
        
        public @__02 MonsterSize
        {
            get
            {
                return mMonsterSize;
            }
            set
            {
                var oldValue = mMonsterSize;
                mMonsterSize = value;
                Articy.Unity.ArticyDatabase.ObjectNotifications.ReportChanged(OwnerId, OwnerInstanceId, "Monster.MonsterSize", oldValue, mMonsterSize);
            }
        }
        
        public List MonsterSkillList
        {
            get
            {
                return mMonsterSkillList.GetValue();
            }
            set
            {
                var oldValue = mMonsterSkillList;
                mMonsterSkillList.SetValue(value);
                Articy.Unity.ArticyDatabase.ObjectNotifications.ReportChanged(OwnerId, OwnerInstanceId, "Monster.MonsterSkillList", oldValue.GetValue(), mMonsterSkillList.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.MonsterFeature newClone = ((Articy.Touhou.Features.MonsterFeature)(aClone));
            newClone.MonsterSize = MonsterSize;
            mMonsterSkillList.CustomClone(newClone.mMonsterSkillList);
            newClone.OwnerId = OwnerId;
        }
        
        public object CloneObject(object aParent, Articy.Unity.ArticyObject aFirstClassParent)
        {
            Articy.Touhou.Features.MonsterFeature clone = new Articy.Touhou.Features.MonsterFeature();
            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 == "MonsterSize"))
            {
                MonsterSize = ((@__02)(aValue));
                return;
            }
            if ((aProperty == "MonsterSkillList"))
            {
                MonsterSkillList = ((List)(aValue));
                return;
            }
        }
        
        public Articy.Unity.Interfaces.ScriptDataProxy getProp(string aProperty)
        {
            if ((aProperty == "MonsterSize"))
            {
                return new Articy.Unity.Interfaces.ScriptDataProxy(MonsterSize);
            }
            if ((aProperty == "MonsterSkillList"))
            {
                return new Articy.Unity.Interfaces.ScriptDataProxy(MonsterSkillList);
            }
            return null;
        }
        #endregion
    }
}