//------------------------------------------------------------------------------
// 
//     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 LevelFeature : IArticyBaseObject, IPropertyProvider
    {
        
        [SerializeField()]
        private String mPrefab;
        
        [SerializeField()]
        private ArticyValueArticyModelList mMonsterList = new ArticyValueArticyModelList();
        
        [SerializeField()]
        private Int32 mDifficulty;
        
        [SerializeField()]
        private ArticyValueArticyObject mLevelLink_TL = new ArticyValueArticyObject();
        
        [SerializeField()]
        private ArticyValueArticyObject mLevelLink_TM = new ArticyValueArticyObject();
        
        [SerializeField()]
        private ArticyValueArticyObject mLevelLink_TR = new ArticyValueArticyObject();
        
        [SerializeField()]
        private ArticyValueArticyObject mLevelLink_LT = new ArticyValueArticyObject();
        
        [SerializeField()]
        private ArticyValueArticyObject mLevelLink_LM = new ArticyValueArticyObject();
        
        [SerializeField()]
        private ArticyValueArticyObject mLevelLink_LD = new ArticyValueArticyObject();
        
        [SerializeField()]
        private ArticyValueArticyObject mLevelLink_DL = new ArticyValueArticyObject();
        
        [SerializeField()]
        private ArticyValueArticyObject mLevelLink_DM = new ArticyValueArticyObject();
        
        [SerializeField()]
        private ArticyValueArticyObject mLevelLink_DR = new ArticyValueArticyObject();
        
        [SerializeField()]
        private ArticyValueArticyObject mLevelLink_RT = new ArticyValueArticyObject();
        
        [SerializeField()]
        private ArticyValueArticyObject mLevelLink_RM = new ArticyValueArticyObject();
        
        [SerializeField()]
        private ArticyValueArticyObject mLevelLink_RD = new ArticyValueArticyObject();
        
        [SerializeField()]
        private ArticyValueArticyObject mDoor = new ArticyValueArticyObject();
        
        [SerializeField()]
        private Int32 mLevelSizeX;
        
        [SerializeField()]
        private Int32 mLevelSizeY;
        
        [SerializeField()]
        private UInt64 mOwnerId;
        
        [SerializeField()]
        private UInt32 mOwnerInstanceId;
        
        public String Unresolved_Prefab
        {
            get
            {
                return mPrefab;
            }
        }
        
        public String Prefab
        {
            get
            {
                return Articy.Unity.ArticyTextExtension.Resolve(this, mPrefab);
            }
            set
            {
                var oldValue = mPrefab;
                mPrefab = value;
                Articy.Unity.ArticyDatabase.ObjectNotifications.ReportChanged(OwnerId, OwnerInstanceId, "Level.Prefab", oldValue, mPrefab);
            }
        }
        
        public List MonsterList
        {
            get
            {
                return mMonsterList.GetValue();
            }
            set
            {
                var oldValue = mMonsterList;
                mMonsterList.SetValue(value);
                Articy.Unity.ArticyDatabase.ObjectNotifications.ReportChanged(OwnerId, OwnerInstanceId, "Level.MonsterList", oldValue.GetValue(), mMonsterList.GetValue());
            }
        }
        
        public Int32 Difficulty
        {
            get
            {
                return mDifficulty;
            }
            set
            {
                var oldValue = mDifficulty;
                mDifficulty = value;
                Articy.Unity.ArticyDatabase.ObjectNotifications.ReportChanged(OwnerId, OwnerInstanceId, "Level.Difficulty", oldValue, mDifficulty);
            }
        }
        
        public ArticyObject LevelLink_TL
        {
            get
            {
                return mLevelLink_TL.GetValue();
            }
            set
            {
                var oldValue = mLevelLink_TL;
                mLevelLink_TL.SetValue(value);
                Articy.Unity.ArticyDatabase.ObjectNotifications.ReportChanged(OwnerId, OwnerInstanceId, "Level.LevelLink_TL", oldValue.GetValue(), mLevelLink_TL.GetValue());
            }
        }
        
        public ArticyObject LevelLink_TM
        {
            get
            {
                return mLevelLink_TM.GetValue();
            }
            set
            {
                var oldValue = mLevelLink_TM;
                mLevelLink_TM.SetValue(value);
                Articy.Unity.ArticyDatabase.ObjectNotifications.ReportChanged(OwnerId, OwnerInstanceId, "Level.LevelLink_TM", oldValue.GetValue(), mLevelLink_TM.GetValue());
            }
        }
        
        public ArticyObject LevelLink_TR
        {
            get
            {
                return mLevelLink_TR.GetValue();
            }
            set
            {
                var oldValue = mLevelLink_TR;
                mLevelLink_TR.SetValue(value);
                Articy.Unity.ArticyDatabase.ObjectNotifications.ReportChanged(OwnerId, OwnerInstanceId, "Level.LevelLink_TR", oldValue.GetValue(), mLevelLink_TR.GetValue());
            }
        }
        
        public ArticyObject LevelLink_LT
        {
            get
            {
                return mLevelLink_LT.GetValue();
            }
            set
            {
                var oldValue = mLevelLink_LT;
                mLevelLink_LT.SetValue(value);
                Articy.Unity.ArticyDatabase.ObjectNotifications.ReportChanged(OwnerId, OwnerInstanceId, "Level.LevelLink_LT", oldValue.GetValue(), mLevelLink_LT.GetValue());
            }
        }
        
        public ArticyObject LevelLink_LM
        {
            get
            {
                return mLevelLink_LM.GetValue();
            }
            set
            {
                var oldValue = mLevelLink_LM;
                mLevelLink_LM.SetValue(value);
                Articy.Unity.ArticyDatabase.ObjectNotifications.ReportChanged(OwnerId, OwnerInstanceId, "Level.LevelLink_LM", oldValue.GetValue(), mLevelLink_LM.GetValue());
            }
        }
        
        public ArticyObject LevelLink_LD
        {
            get
            {
                return mLevelLink_LD.GetValue();
            }
            set
            {
                var oldValue = mLevelLink_LD;
                mLevelLink_LD.SetValue(value);
                Articy.Unity.ArticyDatabase.ObjectNotifications.ReportChanged(OwnerId, OwnerInstanceId, "Level.LevelLink_LD", oldValue.GetValue(), mLevelLink_LD.GetValue());
            }
        }
        
        public ArticyObject LevelLink_DL
        {
            get
            {
                return mLevelLink_DL.GetValue();
            }
            set
            {
                var oldValue = mLevelLink_DL;
                mLevelLink_DL.SetValue(value);
                Articy.Unity.ArticyDatabase.ObjectNotifications.ReportChanged(OwnerId, OwnerInstanceId, "Level.LevelLink_DL", oldValue.GetValue(), mLevelLink_DL.GetValue());
            }
        }
        
        public ArticyObject LevelLink_DM
        {
            get
            {
                return mLevelLink_DM.GetValue();
            }
            set
            {
                var oldValue = mLevelLink_DM;
                mLevelLink_DM.SetValue(value);
                Articy.Unity.ArticyDatabase.ObjectNotifications.ReportChanged(OwnerId, OwnerInstanceId, "Level.LevelLink_DM", oldValue.GetValue(), mLevelLink_DM.GetValue());
            }
        }
        
        public ArticyObject LevelLink_DR
        {
            get
            {
                return mLevelLink_DR.GetValue();
            }
            set
            {
                var oldValue = mLevelLink_DR;
                mLevelLink_DR.SetValue(value);
                Articy.Unity.ArticyDatabase.ObjectNotifications.ReportChanged(OwnerId, OwnerInstanceId, "Level.LevelLink_DR", oldValue.GetValue(), mLevelLink_DR.GetValue());
            }
        }
        
        public ArticyObject LevelLink_RT
        {
            get
            {
                return mLevelLink_RT.GetValue();
            }
            set
            {
                var oldValue = mLevelLink_RT;
                mLevelLink_RT.SetValue(value);
                Articy.Unity.ArticyDatabase.ObjectNotifications.ReportChanged(OwnerId, OwnerInstanceId, "Level.LevelLink_RT", oldValue.GetValue(), mLevelLink_RT.GetValue());
            }
        }
        
        public ArticyObject LevelLink_RM
        {
            get
            {
                return mLevelLink_RM.GetValue();
            }
            set
            {
                var oldValue = mLevelLink_RM;
                mLevelLink_RM.SetValue(value);
                Articy.Unity.ArticyDatabase.ObjectNotifications.ReportChanged(OwnerId, OwnerInstanceId, "Level.LevelLink_RM", oldValue.GetValue(), mLevelLink_RM.GetValue());
            }
        }
        
        public ArticyObject LevelLink_RD
        {
            get
            {
                return mLevelLink_RD.GetValue();
            }
            set
            {
                var oldValue = mLevelLink_RD;
                mLevelLink_RD.SetValue(value);
                Articy.Unity.ArticyDatabase.ObjectNotifications.ReportChanged(OwnerId, OwnerInstanceId, "Level.LevelLink_RD", oldValue.GetValue(), mLevelLink_RD.GetValue());
            }
        }
        
        public ArticyObject Door
        {
            get
            {
                return mDoor.GetValue();
            }
            set
            {
                var oldValue = mDoor;
                mDoor.SetValue(value);
                Articy.Unity.ArticyDatabase.ObjectNotifications.ReportChanged(OwnerId, OwnerInstanceId, "Level.Door", oldValue.GetValue(), mDoor.GetValue());
            }
        }
        
        public Int32 LevelSizeX
        {
            get
            {
                return mLevelSizeX;
            }
            set
            {
                var oldValue = mLevelSizeX;
                mLevelSizeX = value;
                Articy.Unity.ArticyDatabase.ObjectNotifications.ReportChanged(OwnerId, OwnerInstanceId, "Level.LevelSizeX", oldValue, mLevelSizeX);
            }
        }
        
        public Int32 LevelSizeY
        {
            get
            {
                return mLevelSizeY;
            }
            set
            {
                var oldValue = mLevelSizeY;
                mLevelSizeY = value;
                Articy.Unity.ArticyDatabase.ObjectNotifications.ReportChanged(OwnerId, OwnerInstanceId, "Level.LevelSizeY", oldValue, mLevelSizeY);
            }
        }
        
        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.LevelFeature newClone = ((Articy.Touhou.Features.LevelFeature)(aClone));
            newClone.Prefab = Unresolved_Prefab;
            mMonsterList.CustomClone(newClone.mMonsterList);
            newClone.Difficulty = Difficulty;
            if ((mLevelLink_TL != null))
            {
                newClone.mLevelLink_TL = ((ArticyValueArticyObject)(mLevelLink_TL.CloneObject(newClone, aFirstClassParent)));
            }
            if ((mLevelLink_TM != null))
            {
                newClone.mLevelLink_TM = ((ArticyValueArticyObject)(mLevelLink_TM.CloneObject(newClone, aFirstClassParent)));
            }
            if ((mLevelLink_TR != null))
            {
                newClone.mLevelLink_TR = ((ArticyValueArticyObject)(mLevelLink_TR.CloneObject(newClone, aFirstClassParent)));
            }
            if ((mLevelLink_LT != null))
            {
                newClone.mLevelLink_LT = ((ArticyValueArticyObject)(mLevelLink_LT.CloneObject(newClone, aFirstClassParent)));
            }
            if ((mLevelLink_LM != null))
            {
                newClone.mLevelLink_LM = ((ArticyValueArticyObject)(mLevelLink_LM.CloneObject(newClone, aFirstClassParent)));
            }
            if ((mLevelLink_LD != null))
            {
                newClone.mLevelLink_LD = ((ArticyValueArticyObject)(mLevelLink_LD.CloneObject(newClone, aFirstClassParent)));
            }
            if ((mLevelLink_DL != null))
            {
                newClone.mLevelLink_DL = ((ArticyValueArticyObject)(mLevelLink_DL.CloneObject(newClone, aFirstClassParent)));
            }
            if ((mLevelLink_DM != null))
            {
                newClone.mLevelLink_DM = ((ArticyValueArticyObject)(mLevelLink_DM.CloneObject(newClone, aFirstClassParent)));
            }
            if ((mLevelLink_DR != null))
            {
                newClone.mLevelLink_DR = ((ArticyValueArticyObject)(mLevelLink_DR.CloneObject(newClone, aFirstClassParent)));
            }
            if ((mLevelLink_RT != null))
            {
                newClone.mLevelLink_RT = ((ArticyValueArticyObject)(mLevelLink_RT.CloneObject(newClone, aFirstClassParent)));
            }
            if ((mLevelLink_RM != null))
            {
                newClone.mLevelLink_RM = ((ArticyValueArticyObject)(mLevelLink_RM.CloneObject(newClone, aFirstClassParent)));
            }
            if ((mLevelLink_RD != null))
            {
                newClone.mLevelLink_RD = ((ArticyValueArticyObject)(mLevelLink_RD.CloneObject(newClone, aFirstClassParent)));
            }
            if ((mDoor != null))
            {
                newClone.mDoor = ((ArticyValueArticyObject)(mDoor.CloneObject(newClone, aFirstClassParent)));
            }
            newClone.LevelSizeX = LevelSizeX;
            newClone.LevelSizeY = LevelSizeY;
            newClone.OwnerId = OwnerId;
        }
        
        public object CloneObject(object aParent, Articy.Unity.ArticyObject aFirstClassParent)
        {
            Articy.Touhou.Features.LevelFeature clone = new Articy.Touhou.Features.LevelFeature();
            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 == "Prefab"))
            {
                Prefab = System.Convert.ToString(aValue);
                return;
            }
            if ((aProperty == "MonsterList"))
            {
                MonsterList = ((List)(aValue));
                return;
            }
            if ((aProperty == "Difficulty"))
            {
                Difficulty = System.Convert.ToInt32(aValue);
                return;
            }
            if ((aProperty == "LevelLink_TL"))
            {
                LevelLink_TL = Articy.Unity.Interfaces.BaseScriptFragments.ObjectToModelRep(aValue);
                return;
            }
            if ((aProperty == "LevelLink_TM"))
            {
                LevelLink_TM = Articy.Unity.Interfaces.BaseScriptFragments.ObjectToModelRep(aValue);
                return;
            }
            if ((aProperty == "LevelLink_TR"))
            {
                LevelLink_TR = Articy.Unity.Interfaces.BaseScriptFragments.ObjectToModelRep(aValue);
                return;
            }
            if ((aProperty == "LevelLink_LT"))
            {
                LevelLink_LT = Articy.Unity.Interfaces.BaseScriptFragments.ObjectToModelRep(aValue);
                return;
            }
            if ((aProperty == "LevelLink_LM"))
            {
                LevelLink_LM = Articy.Unity.Interfaces.BaseScriptFragments.ObjectToModelRep(aValue);
                return;
            }
            if ((aProperty == "LevelLink_LD"))
            {
                LevelLink_LD = Articy.Unity.Interfaces.BaseScriptFragments.ObjectToModelRep(aValue);
                return;
            }
            if ((aProperty == "LevelLink_DL"))
            {
                LevelLink_DL = Articy.Unity.Interfaces.BaseScriptFragments.ObjectToModelRep(aValue);
                return;
            }
            if ((aProperty == "LevelLink_DM"))
            {
                LevelLink_DM = Articy.Unity.Interfaces.BaseScriptFragments.ObjectToModelRep(aValue);
                return;
            }
            if ((aProperty == "LevelLink_DR"))
            {
                LevelLink_DR = Articy.Unity.Interfaces.BaseScriptFragments.ObjectToModelRep(aValue);
                return;
            }
            if ((aProperty == "LevelLink_RT"))
            {
                LevelLink_RT = Articy.Unity.Interfaces.BaseScriptFragments.ObjectToModelRep(aValue);
                return;
            }
            if ((aProperty == "LevelLink_RM"))
            {
                LevelLink_RM = Articy.Unity.Interfaces.BaseScriptFragments.ObjectToModelRep(aValue);
                return;
            }
            if ((aProperty == "LevelLink_RD"))
            {
                LevelLink_RD = Articy.Unity.Interfaces.BaseScriptFragments.ObjectToModelRep(aValue);
                return;
            }
            if ((aProperty == "Door"))
            {
                Door = Articy.Unity.Interfaces.BaseScriptFragments.ObjectToModelRep(aValue);
                return;
            }
            if ((aProperty == "LevelSizeX"))
            {
                LevelSizeX = System.Convert.ToInt32(aValue);
                return;
            }
            if ((aProperty == "LevelSizeY"))
            {
                LevelSizeY = System.Convert.ToInt32(aValue);
                return;
            }
        }
        
        public Articy.Unity.Interfaces.ScriptDataProxy getProp(string aProperty)
        {
            if ((aProperty == "Prefab"))
            {
                return new Articy.Unity.Interfaces.ScriptDataProxy(Prefab);
            }
            if ((aProperty == "MonsterList"))
            {
                return new Articy.Unity.Interfaces.ScriptDataProxy(MonsterList);
            }
            if ((aProperty == "Difficulty"))
            {
                return new Articy.Unity.Interfaces.ScriptDataProxy(Difficulty);
            }
            if ((aProperty == "LevelLink_TL"))
            {
                return new Articy.Unity.Interfaces.ScriptDataProxy(LevelLink_TL);
            }
            if ((aProperty == "LevelLink_TM"))
            {
                return new Articy.Unity.Interfaces.ScriptDataProxy(LevelLink_TM);
            }
            if ((aProperty == "LevelLink_TR"))
            {
                return new Articy.Unity.Interfaces.ScriptDataProxy(LevelLink_TR);
            }
            if ((aProperty == "LevelLink_LT"))
            {
                return new Articy.Unity.Interfaces.ScriptDataProxy(LevelLink_LT);
            }
            if ((aProperty == "LevelLink_LM"))
            {
                return new Articy.Unity.Interfaces.ScriptDataProxy(LevelLink_LM);
            }
            if ((aProperty == "LevelLink_LD"))
            {
                return new Articy.Unity.Interfaces.ScriptDataProxy(LevelLink_LD);
            }
            if ((aProperty == "LevelLink_DL"))
            {
                return new Articy.Unity.Interfaces.ScriptDataProxy(LevelLink_DL);
            }
            if ((aProperty == "LevelLink_DM"))
            {
                return new Articy.Unity.Interfaces.ScriptDataProxy(LevelLink_DM);
            }
            if ((aProperty == "LevelLink_DR"))
            {
                return new Articy.Unity.Interfaces.ScriptDataProxy(LevelLink_DR);
            }
            if ((aProperty == "LevelLink_RT"))
            {
                return new Articy.Unity.Interfaces.ScriptDataProxy(LevelLink_RT);
            }
            if ((aProperty == "LevelLink_RM"))
            {
                return new Articy.Unity.Interfaces.ScriptDataProxy(LevelLink_RM);
            }
            if ((aProperty == "LevelLink_RD"))
            {
                return new Articy.Unity.Interfaces.ScriptDataProxy(LevelLink_RD);
            }
            if ((aProperty == "Door"))
            {
                return new Articy.Unity.Interfaces.ScriptDataProxy(Door);
            }
            if ((aProperty == "LevelSizeX"))
            {
                return new Articy.Unity.Interfaces.ScriptDataProxy(LevelSizeX);
            }
            if ((aProperty == "LevelSizeY"))
            {
                return new Articy.Unity.Interfaces.ScriptDataProxy(LevelSizeY);
            }
            return null;
        }
        #endregion
    }
}