示例#1
0
        /// <summary>
        /// Initializes a new instance of the <see cref="ItemEntity"/> class.
        /// </summary>
        /// <param name="pos">The pos.</param>
        /// <param name="size">The size.</param>
        /// <param name="templateID">The template ID.</param>
        /// <param name="name">The name.</param>
        /// <param name="desc">The desc.</param>
        /// <param name="type">The type.</param>
        /// <param name="weaponType">Type of the weapon.</param>
        /// <param name="range">The range.</param>
        /// <param name="graphic">The graphic.</param>
        /// <param name="value">The value.</param>
        /// <param name="amount">The amount.</param>
        /// <param name="hp">The hp.</param>
        /// <param name="mp">The mp.</param>
        /// <param name="equippedBody">The equipped body.</param>
        /// <param name="actionDisplayID">The action display ID.</param>
        /// <param name="baseStats">The base stats.</param>
        /// <param name="reqStats">The req stats.</param>
        ItemEntity(Vector2 pos, Vector2 size, ItemTemplateID?templateID, string name, string desc, ItemType type,
                   WeaponType weaponType, ushort range, GrhIndex graphic, int value, byte amount, SPValueType hp, SPValueType mp,
                   string equippedBody, ActionDisplayID?actionDisplayID, SkillType?skillID, IEnumerable <Stat <StatType> > baseStats,
                   IEnumerable <Stat <StatType> > reqStats) : base(pos, size)
        {
            _templateID      = templateID;
            _name            = name;
            _description     = desc;
            _graphicIndex    = graphic;
            _value           = value;
            _amount          = amount;
            _type            = type;
            _weaponType      = weaponType;
            _range           = range;
            _hp              = hp;
            _mp              = mp;
            _equippedBody    = equippedBody;
            _actionDisplayID = actionDisplayID;
            _skillID         = skillID;

            _baseStats = NewItemStats(baseStats, StatCollectionType.Base);
            _reqStats  = NewItemStats(reqStats, StatCollectionType.Requirement);

            Resized -= ItemEntity_Resized;
            Resized += ItemEntity_Resized;
        }
示例#2
0
        private static SkillType?Convert(string skillTypeString)
        {
            SkillType?skillType = null;

            switch (skillTypeString)
            {
            case "Range_One_First":
                skillType = SkillType.Range_One_First;
                break;

            case "Range_One_LowHp":
                skillType = SkillType.Range_One_LowHp;
                break;

            case "Mass_All":
                skillType = SkillType.Mass_All;
                break;

            case "Mass_Front":
                skillType = SkillType.Mass_Front;
                break;
            }

            return(skillType);
        }
示例#3
0
        /// <summary>
        /// Handles the Click event of the btnAdd control.
        /// </summary>
        /// <param name="sender">The source of the event.</param>
        /// <param name="e">The <see cref="System.EventArgs"/> instance containing the event data.</param>
        void btnAdd_Click(object sender, EventArgs e)
        {
            // Validate
            if (!_selectedItem.HasValue)
            {
                MessageBox.Show("You must select an item to add first.");
                return;
            }

            if (RequireDistinct)
            {
                if (lstItems.Items.OfType<SkillType>().Any(x => _selectedItem.HasValue && x == _selectedItem.Value))
                {
                    MessageBox.Show("That item is already in the list.");
                    _selectedItem = null;
                    return;
                }
            }

            // Add
            lstItems.Items.Add(_selectedItem.Value);

            // Select the new item
            lstItems.SelectedItem = _selectedItem.Value;

            if (RequireDistinct)
            {
                _selectedItem = null;
                txtItem.Text = string.Empty;
            }
        }
示例#4
0
        public Message(LaneType lane, SkillType?skillToLearn, byte[] rawMessage)
        {
            this.lane         = lane;
            this.skillToLearn = skillToLearn;

            this.rawMessage = new byte[rawMessage.Length];
            Array.Copy(rawMessage, this.rawMessage, rawMessage.Length);
        }
示例#5
0
        public Message(LaneType lane, SkillType?skillToLearn, byte[] rawMessage)
        {
            Lane         = lane;
            SkillToLearn = skillToLearn;

            _rawMessage = new byte[rawMessage.Length];
            Array.Copy(rawMessage, _rawMessage, rawMessage.Length);
        }
示例#6
0
        public IQueryable <SkillViewModel> SelectSkills(MajorType major, SkillType?type, int?branchId = null)
        {
            var skills = GetAll(major, (int?)type);

            if (branchId != null)
            {
                skills = skills.Where(x => x.BranchId == branchId);
            }
            return(skills);
        }
        private void InitBagSkills()
        {
            string path = string.Format("/foodie-api/gameCharaSkill/getCharaSkill?charaId={0}", this._site.CurrentCharId);

            this.BagSkillList = this._site.PostResult <List <Skill> >(path, null);

            this._type = (SkillType?)GetQuery <int?>("type");
            if (this._type != null)
            {
                this.BagSkillList = this.BagSkillList.Where(p => p.SkillType == this._type).ToList();
            }
        }
示例#8
0
 public SkillType?GetNextSkillTypeToLearn(SkillType[] wizardSkills)
 {
     for (int i = 0; i < _skillGroups.Count; i++)
     {
         SkillType?result = _skillGroups[i].GetNextAvailableSkill(wizardSkills);
         if (result.HasValue)
         {
             return(result);
         }
     }
     return(null);
 }
        /// <summary>
        /// Starts the display of a skill being casted.
        /// </summary>
        /// <param name="skillType">Type of the skill.</param>
        /// <param name="castTime">The time it will take for the skill to be casted.</param>
        public void StartCasting(SkillType skillType, TickCount castTime)
        {
            _currentCastTime = castTime;
            _castStartTime = TickCount.Now;
            _skillType = skillType;

            Text = GameMessageCollection.CurrentLanguage.GetMessage(GameMessage.CombatCastingBegin, skillType.ToString());

            var textSize = Font.MeasureString(Text);
            _textOffset = (Size / 2f) - (textSize / 2f);

            IsVisible = true;
        }
示例#10
0
        /// <summary>
        /// Starts the display of a skill being casted.
        /// </summary>
        /// <param name="skillType">Type of the skill.</param>
        /// <param name="castTime">The time it will take for the skill to be casted.</param>
        public void StartCasting(SkillType skillType, TickCount castTime)
        {
            _currentCastTime = castTime;
            _castStartTime = TickCount.Now;
            _skillType = skillType;

            Text = "Casting " + skillType;

            var textSize = Font.MeasureString(Text);
            _textOffset = (Size / 2f) - (textSize / 2f);

            IsVisible = true;
        }
示例#11
0
        /// <summary>
        /// Starts the display of a skill being casted.
        /// </summary>
        /// <param name="skillType">Type of the skill.</param>
        /// <param name="castTime">The time it will take for the skill to be casted.</param>
        public void StartCasting(SkillType skillType, TickCount castTime)
        {
            _currentCastTime = castTime;
            _castStartTime   = TickCount.Now;
            _skillType       = skillType;

            Text = GameMessageCollection.CurrentLanguage.GetMessage(GameMessage.CombatCastingBegin, skillType.ToString());

            var textSize = Font.MeasureString(Text);

            _textOffset = (Size / 2f) - (textSize / 2f);

            IsVisible = true;
        }
示例#12
0
        /// <summary>
        /// Starts the display of a skill being casted.
        /// </summary>
        /// <param name="skillType">Type of the skill.</param>
        /// <param name="castTime">The time it will take for the skill to be casted.</param>
        public void StartCasting(SkillType skillType, TickCount castTime)
        {
            _currentCastTime = castTime;
            _castStartTime   = TickCount.Now;
            _skillType       = skillType;

            Text = "Casting " + skillType;

            var textSize = Font.MeasureString(Text);

            _textOffset = (Size / 2f) - (textSize / 2f);

            IsVisible = true;
        }
示例#13
0
 public BaseCharacter(string id, string name, int level, int experience,
                      HashSet <string> inventory, HashSet <Attribute> attributes, HashSet <Growth> growths,
                      HashSet <Stat> stats, HashSet <string> weapons, HashSet <SkillType> skills, SkillType?specialSkill)
 {
     Id           = id;
     Level        = level;
     Name         = name;
     Inventory    = inventory;
     Experience   = experience;
     Attributes   = attributes;
     Growths      = growths;
     Stats        = stats;
     Weapons      = weapons;
     Skills       = skills;
     SpecialSkill = specialSkill;
 }
示例#14
0
        /// <summary>
        /// Handles the Click event of the btnBrowse control.
        /// </summary>
        /// <param name="sender">The source of the event.</param>
        /// <param name="e">The <see cref="System.EventArgs"/> instance containing the event data.</param>
        void btnBrowse_Click(object sender, EventArgs e)
        {
            using (var f = new SkillTypeUITypeEditorForm(null))
            {
                // If we require distinct, skip items we already have in the list
                if (RequireDistinct)
                {
                    var listItems = lstItems.Items.OfType<SkillType>().ToImmutable();
                    f.SkipItems = (x => listItems.Any(y => y == x));
                }

                if (f.ShowDialog(this) != DialogResult.OK)
                    return;

                var item = f.SelectedItem;
                _selectedItem = item;

                txtItem.Text = item.ToString();
            }
        }
示例#15
0
 public CharacterBuilder Special(SkillType type)
 {
     _specialSkill = type;
     return(this);
 }
示例#16
0
 public AMessage(Message msg)
 {
     Lane         = (ALaneType)msg.Lane;
     SkillToLearn = msg.SkillToLearn;
     RawMessage   = msg.RawMessage;
 }
示例#17
0
 public AMessage(ALaneType lane, SkillType?skill, byte[] raw)
 {
     Lane         = lane;
     SkillToLearn = skill;
     RawMessage   = raw;
 }
示例#18
0
 /// <summary>
 /// Forces the current skill cast progress to terminate.
 /// </summary>
 public void StopCasting()
 {
     IsVisible  = false;
     _skillType = null;
 }
示例#19
0
        public static string GeneratePrefab(Rmh_PrefabType prefabType, SkillType?skillType = null, string param = "")
        {
            var prefab = new GameObject(prefabType + "_" + "Prefab_" + GeneralMethods.NextID);

            var identifier = prefab.AddComponent <Rm_PrefabIdentifier>();

            identifier.SearchName = prefab.name;
            identifier.PrefabType = prefabType;

            switch (prefabType)
            {
            case Rmh_PrefabType.Casting:
            case Rmh_PrefabType.Cast:
            case Rmh_PrefabType.Impact:
            case Rmh_PrefabType.Effect_Active:
            case Rmh_PrefabType.Effect_Activated:
            case Rmh_PrefabType.Effect_Expired:
            case Rmh_PrefabType.DoT_Damage_Tick:
            case Rmh_PrefabType.Moving_To_Effect:
            case Rmh_PrefabType.Target_Reached_Effect:
            case Rmh_PrefabType.Melee_Effect:
                prefab.AddComponent <DestroyHelper>();
                prefab.AddComponent <IgnoredByRaycast>();
                break;

            case Rmh_PrefabType.Interactable:
                var cc1 = prefab.AddComponent <CapsuleCollider>();
                cc1.isTrigger = true;
                var io = prefab.AddComponent <InteractiveObjectMono>();
                io.ObjectID = param;
                AddCameraPivot(prefab);

                var minimapIcon2 = Resources.Load("RPGMakerAssets/PrefabGen/MinimapIconUI");
                var minimapUI2   = (GameObject)PrefabUtility.InstantiatePrefab(minimapIcon2);
                minimapUI2.transform.SetParent(prefab.transform, false);
                minimapUI2.transform.localPosition = new Vector3(0, -0.5f, 0);

                var minimapIconModel2 = minimapUI2.GetComponent <MinimapIconModel>();
                minimapIconModel2.Type = MinimapIconType.Interactable;

                break;

            case Rmh_PrefabType.Harvest:
                var cc = prefab.AddComponent <CapsuleCollider>();
                cc.isTrigger = true;
                var ih = prefab.AddComponent <InteractableHarvestable>();
                ih.ObjectID = param;
                prefab.tag  = "Harvestable";

                var minimapIcon1 = Resources.Load("RPGMakerAssets/PrefabGen/MinimapIconUI");
                var minimapUI1   = (GameObject)PrefabUtility.InstantiatePrefab(minimapIcon1);
                minimapUI1.transform.SetParent(prefab.transform, false);
                minimapUI1.transform.localPosition = new Vector3(0, -0.5f, 0);

                var minimapIconModel1 = minimapUI1.GetComponent <MinimapIconModel>();
                minimapIconModel1.Type = MinimapIconType.Harvestable;

                break;

            case Rmh_PrefabType.Skill:
                prefab.AddComponent <DestroyHelper>();
                if (skillType != SkillType.Spawn)
                {
                    prefab.AddComponent <IgnoredByRaycast>();
                }
                break;

            case Rmh_PrefabType.SpawnPoint:
                prefab.tag = "SpawnPosition";
                prefab.AddComponent <Cull>();
                var spawnGraphic = Resources.Load("RPGMakerAssets/PrefabGen/SpawnPos");
                var graphic      = PrefabUtility.InstantiatePrefab(spawnGraphic) as GameObject;
                graphic.transform.parent        = prefab.transform;
                graphic.transform.localPosition = Vector3.zero;
                break;

            case Rmh_PrefabType.Target_Selected_Prefab:
                prefab.AddComponent <IgnoredByRaycast>();
                prefab.AddComponent <TargetLockPrefab>();
                break;

            case Rmh_PrefabType.Cast_Area_Prefab:
                break;

            case Rmh_PrefabType.Auto_Attack_Projectile:
                prefab.AddComponent <IgnoredByRaycast>();
                prefab.AddComponent <DestroyHelper>();
                prefab.AddComponent <ProjectileAutoAttackHandler>();
                var boxCollider = prefab.AddComponent <BoxCollider>();
                boxCollider.isTrigger = false;
                var rigidbody = prefab.AddComponent <Rigidbody>();
                rigidbody.isKinematic    = false;
                rigidbody.useGravity     = false;
                rigidbody.freezeRotation = true;
                break;

            case Rmh_PrefabType.Misc:
                break;

            case Rmh_PrefabType.Player_Class:
            case Rmh_PrefabType.Enemy:
            case Rmh_PrefabType.NPC:
                var charC = prefab.AddComponent <CharacterController>();
                charC.slopeLimit = 25;
                charC.height     = 2;
                charC.center     = new Vector3(0, 1, 0);
                charC.radius     = 0.5f;
                var navMeshAgent = prefab.AddComponent <NavMeshAgent>();
                navMeshAgent.radius            = 0.5f;
                navMeshAgent.height            = 2;
                navMeshAgent.enabled           = false;
                navMeshAgent.avoidancePriority = 50;
                var rigidB = prefab.AddComponent <Rigidbody>();
                rigidB.useGravity  = true;
                rigidB.isKinematic = true;
                rigidB.constraints = RigidbodyConstraints.FreezePosition | RigidbodyConstraints.FreezeRotation;
                var boxC = prefab.AddComponent <BoxCollider>();
                boxC.isTrigger = false;
                boxC.center    = new Vector3(0, 1, 0);
                boxC.size      = new Vector3(1, 2, 1);
                var rpgC = prefab.AddComponent <RPGController>();
                rpgC.cameraMode = Rm_RPGHandler.Instance.DefaultSettings.DefaultCameraMode;
                prefab.AddComponent <RPGAnimation>();
                prefab.AddComponent <RPGCombat>();

                var capsuleGraphic = GameObject.CreatePrimitive(PrimitiveType.Capsule);
                var capsuleCol     = capsuleGraphic.GetComponent <CapsuleCollider>();
                UnityEngine.Object.DestroyImmediate(capsuleCol);
                capsuleGraphic.transform.parent        = prefab.transform;
                capsuleGraphic.transform.localPosition = new Vector3(0, 1, 0);

                rpgC.characterModel = capsuleGraphic;

                var targetLockH = prefab.AddComponent <TargetLockHandler>();

                var targetLockPrefab = Resources.Load("RPGMakerAssets/PrefabGen/TargetLock");
                var targetLock       = PrefabUtility.InstantiatePrefab(targetLockPrefab) as GameObject;
                targetLock.transform.parent        = prefab.transform;
                targetLock.transform.localPosition = new Vector3(0, 0.05f, 0);

                targetLockH.TargetLockObject = targetLock;

                var cameraPivot = new GameObject("cameraPivot");
                cameraPivot.transform.parent        = prefab.transform;
                cameraPivot.transform.localPosition = new Vector3(0, 1.7f, 0);

                var minimapIcon = Resources.Load("RPGMakerAssets/PrefabGen/MinimapIconUI");
                var minimapUI   = (GameObject)PrefabUtility.InstantiatePrefab(minimapIcon);
                minimapUI.transform.SetParent(prefab.transform, false);
                minimapUI.transform.localPosition = new Vector3(0, -0.5f, 0);

                var minimapIconModel = minimapUI.GetComponent <MinimapIconModel>();
                switch (prefabType)
                {
                case Rmh_PrefabType.Enemy:
                    minimapIconModel.Type = MinimapIconType.Enemy;
                    break;

                case Rmh_PrefabType.NPC:
                    minimapIconModel.Type = MinimapIconType.NPC;
                    break;

                case Rmh_PrefabType.Player_Class:
                    minimapIconModel.Type = MinimapIconType.Player;
                    break;
                }

                break;

            case Rmh_PrefabType.Sound_FX:
                prefab.AddComponent <Audio_SFX>();
                break;

            case Rmh_PrefabType.Ambient_Music:
                prefab.AddComponent <Audio_Ambient>();
                break;

            case Rmh_PrefabType.Background_Music:
                prefab.AddComponent <Audio_BgMusic>();
                break;

            case Rmh_PrefabType.Map_Location_Trigger:
                //throw new NotImplementedException();
                break;

            case Rmh_PrefabType.Event_Trigger:
                //throw new NotImplementedException();
                break;

            case Rmh_PrefabType.Loot_Item_Prefab:
                var rigidBody = prefab.AddComponent <Rigidbody>();
                rigidBody.useGravity  = true;
                rigidBody.isKinematic = false;
                rigidBody.constraints = RigidbodyConstraints.FreezePositionX | RigidbodyConstraints.FreezePositionZ | RigidbodyConstraints.FreezeRotation;
                var boxCol = prefab.AddComponent <BoxCollider>();
                boxCol.isTrigger = true;
                boxCol.size      = new Vector3(0.5f, 0.5f, 0.5f);
                var sphereCol = prefab.AddComponent <SphereCollider>();
                sphereCol.isTrigger = false;
                sphereCol.radius    = 0.2f;
                prefab.AddComponent <LootItemMono>();
                prefab.tag   = "LootItem";
                prefab.layer = LayerMask.NameToLayer("LootItem");
                var c       = GameObject.CreatePrimitive(PrimitiveType.Cube);
                var cubeCol = c.GetComponent <BoxCollider>();
                UnityEngine.Object.DestroyImmediate(cubeCol);
                c.transform.localScale    = new Vector3(0.35f, 0.15f, 0.35f);
                c.transform.parent        = prefab.transform;
                c.transform.localPosition = Vector3.zero;
                c.layer = LayerMask.NameToLayer("LootItem");
                break;

            default:
                Debug.LogError("Prefab creation not defined for this object!");
                break;
            }

            if (prefabType == Rmh_PrefabType.Player_Class)
            {
                prefab.AddComponent <PlayerMono>();
                var navMeshObs = prefab.AddComponent <NavMeshObstacle>();
                navMeshObs.shape   = NavMeshObstacleShape.Capsule;
                navMeshObs.height  = 2;
                navMeshObs.center  = new Vector3(0, 1, 0);
                navMeshObs.radius  = 0.5f;
                navMeshObs.carving = false;
                navMeshObs.enabled = false;
                prefab.tag         = "Player";
                prefab.layer       = LayerMask.NameToLayer("Combatant");

                //todo: rendertex
                //var cameraPrefab = Resources.Load("RPGMakerAssets/PrefabGen/PortraitCamera");
                //var camera = PrefabUtility.InstantiatePrefab(cameraPrefab) as GameObject;
                //camera.transform.SetParent(prefab.transform, false);
                //camera.transform.localPosition = new Vector3(0, 1.25f, 3f);
                //camera.transform.localRotation = Quaternion.Euler(new Vector3(0, 180, 0));
            }
            else if (prefabType == Rmh_PrefabType.NPC || prefabType == Rmh_PrefabType.Enemy)
            {
                prefab.AddComponent <RPGPatrol>();
                prefab.AddComponent <RPGFollow>();
                var combatantUi  = prefab.AddComponent <CombatantUI>();
                var spawnGraphic = Resources.Load("RPGMakerAssets/PrefabGen/CombatantUI");
                var graphic      = PrefabUtility.InstantiatePrefab(spawnGraphic) as GameObject;
                graphic.transform.SetParent(prefab.transform, false);
                graphic.transform.localPosition = new Vector3(0, 2.5f, 0);

                combatantUi.Canvas     = graphic;
                combatantUi.HealthBar  = graphic.transform.Find("HealthBar").GetComponent <Image>();
                combatantUi.HealthText = graphic.transform.Find("HealthText").GetComponent <Text>();

                if (prefabType == Rmh_PrefabType.Enemy)
                {
                    var enemyMono = prefab.AddComponent <EnemyCharacterMono>();
                    enemyMono.EnemyID = param;
                    prefab.tag        = "Enemy";
                    prefab.layer      = LayerMask.NameToLayer("Combatant");
                }
                if (prefabType == Rmh_PrefabType.NPC)
                {
                    var capCol = prefab.AddComponent <CapsuleCollider>();
                    capCol.isTrigger = true;
                    capCol.center    = new Vector3(0, 1, 0);
                    capCol.radius    = 1;
                    capCol.height    = 2.5f;
                    capCol.direction = 1;

                    var npcMono = prefab.AddComponent <NpcCharacterMono>();
                    prefab.AddComponent <InteractableNPC>();
                    npcMono.NpcID = param;

                    prefab.tag   = "NPC";
                    prefab.layer = LayerMask.NameToLayer("Combatant");

                    var npcQuestStatus    = Resources.Load("RPGMakerAssets/PrefabGen/NpcQuestStatus");
                    var npcQuestStatusObj = (GameObject)PrefabUtility.InstantiatePrefab(npcQuestStatus);
                    npcQuestStatusObj.transform.SetParent(prefab.transform, false);
                    npcQuestStatusObj.transform.localPosition = new Vector3(0, 2.6f, 0);

                    npcMono.QuestStatusModel = npcQuestStatusObj.GetComponent <NpcQuestStatusModel>();
                }
            }

            if (prefabType == Rmh_PrefabType.Skill)
            {
                prefab = AddSkillScripts(prefab, skillType.Value);
            }

            string path = "";

            if (prefabType == Rmh_PrefabType.Player_Class)
            {
                path = GeneralMethodsEditor.CreatePrefab(prefab, "Prefabs/Classes");
            }
            else
            {
                path = GeneralMethodsEditor.CreatePrefab(prefab);
            }

            Selection.activeObject = SceneView.currentDrawingSceneView;
            if (Selection.activeObject != null)
            {
                var sceneCam = SceneView.currentDrawingSceneView.camera;
                var spawnPos = sceneCam.ViewportToWorldPoint(new Vector3(0.5f, 0.5f, 3f));
                prefab.transform.position = spawnPos;
            }

            return(path);
        }
示例#20
0
        public void SetType(int type)
        {
            SkillType? value = null;
            switch (type) {
                case 1:
                    value = SkillType.BUFF;
                    break;
                case 2:
                    value = SkillType.DEBUFF;
                    break;
                case 3:
                    value = SkillType.ATTACK;
                    break;
                case 4:
                    value = SkillType.BLINK;
                    break;
                case 5:
                    value = SkillType.ULTIMATE;
                    break;
            }

            if (this.type == null)
                this.type = value;
        }
示例#21
0
 /// <summary>
 /// Forces the current skill cast progress to terminate.
 /// </summary>
 public void StopCasting()
 {
     IsVisible = false;
     _skillType = null;
 }
示例#22
0
        /// <summary>
        /// Initializes a new instance of the <see cref="ItemEntity"/> class.
        /// </summary>
        /// <param name="pos">The pos.</param>
        /// <param name="size">The size.</param>
        /// <param name="templateID">The template ID.</param>
        /// <param name="name">The name.</param>
        /// <param name="desc">The desc.</param>
        /// <param name="type">The type.</param>
        /// <param name="weaponType">Type of the weapon.</param>
        /// <param name="range">The range.</param>
        /// <param name="graphic">The graphic.</param>
        /// <param name="value">The value.</param>
        /// <param name="amount">The amount.</param>
        /// <param name="hp">The hp.</param>
        /// <param name="mp">The mp.</param>
        /// <param name="equippedBody">The equipped body.</param>
        /// <param name="actionDisplayID">The action display ID.</param>
        /// <param name="baseStats">The base stats.</param>
        /// <param name="reqStats">The req stats.</param>
        ItemEntity(Vector2 pos, Vector2 size, ItemTemplateID? templateID, string name, string desc, ItemType type,
                   WeaponType weaponType, ushort range, GrhIndex graphic, int value, byte amount, SPValueType hp, SPValueType mp,
                   string equippedBody, ActionDisplayID? actionDisplayID, SkillType? skillID, IEnumerable<Stat<StatType>> baseStats,
                   IEnumerable<Stat<StatType>> reqStats) : base(pos, size)
        {
            _templateID = templateID;
            _name = name;
            _description = desc;
            _graphicIndex = graphic;
            _value = value;
            _amount = amount;
            _type = type;
            _weaponType = weaponType;
            _range = range;
            _hp = hp;
            _mp = mp;
            _equippedBody = equippedBody;
            _actionDisplayID = actionDisplayID;
            _skillID = skillID;

            _baseStats = NewItemStats(baseStats, StatCollectionType.Base);
            _reqStats = NewItemStats(reqStats, StatCollectionType.Requirement);

            Resized -= ItemEntity_Resized;
            Resized += ItemEntity_Resized;
        }