From 5de3fdc795af2a6716eecc20e977b74721fe1522 Mon Sep 17 00:00:00 2001 From: SepComet <202308010230@stu.csust.edu.cn> Date: Wed, 3 Jun 2026 15:12:55 +0800 Subject: [PATCH] =?UTF-8?q?=E8=BF=81=E7=A7=BB=20EntityData=20=E5=88=B0=20B?= =?UTF-8?q?ase=20=E4=B8=AD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 新增 EntityDataFactory 工厂类,提供创建 EntityData 的统一入口 - 移出 EntityData 及派生类对 GameEntry 的依赖并移入 SepCore.Base 程序集中 --- .../Definition/DataStruct}/PropItem.cs | 23 +------ .../Definition/DataStruct}/PropItem.cs.meta | 0 Assets/GameMain/Scripts/Base/Entity.meta | 8 +++ .../{Runtime => Base}/Entity/EntityData.meta | 0 .../Entity/EntityData/AccessoryObjectData.cs | 31 +++++++++ .../EntityData/AccessoryObjectData.cs.meta | 0 .../Entity/EntityData/CoinData.cs | 0 .../Entity/EntityData/CoinData.cs.meta | 0 .../Base/Entity/EntityData/EffectData.cs | 20 ++++++ .../Entity/EntityData/EffectData.cs.meta | 0 .../Entity/EntityData/Enemy.meta | 0 .../Entity/EntityData/Enemy/EnemyData.cs | 21 ++---- .../Entity/EntityData/Enemy/EnemyData.cs.meta | 0 .../EntityData/Enemy/EnemyProjectileData.cs | 0 .../Enemy/EnemyProjectileData.cs.meta | 0 .../Base/Entity/EntityData/EntityDataBase.cs | 51 ++++++++++++++ .../Entity/EntityData/EntityDataBase.cs.meta | 0 .../Entity/EntityData/ExpData.cs | 0 .../Entity/EntityData/ExpData.cs.meta | 0 .../Entity/EntityData/PlayerData.cs | 3 +- .../Entity/EntityData/PlayerData.cs.meta | 0 .../Entity/EntityData/TargetableObjectData.cs | 27 ++++++++ .../EntityData/TargetableObjectData.cs.meta | 0 .../Entity/EntityData/Weapon.meta | 0 .../Entity/EntityData/Weapon/WeaponData.cs | 14 ++-- .../EntityData/Weapon/WeaponData.cs.meta | 0 .../EntityData/Weapon/WeaponHandgunData.cs | 5 +- .../Weapon/WeaponHandgunData.cs.meta | 0 .../EntityData/Weapon/WeaponKnifeData.cs | 5 +- .../EntityData/Weapon/WeaponKnifeData.cs.meta | 0 .../EntityData/Weapon/WeaponLanceData.cs | 5 +- .../EntityData/Weapon/WeaponLanceData.cs.meta | 0 .../EntityData/Weapon/WeaponLightningData.cs | 5 +- .../Weapon/WeaponLightningData.cs.meta | 0 .../EntityData/Weapon/WeaponSlashData.cs | 5 +- .../EntityData/Weapon/WeaponSlashData.cs.meta | 0 .../Scripts/Editor/GameFrameworkConfigs.cs | 23 ++++--- .../Editor/VampireLikeBuildEventHandler.cs | 51 +++++++++----- .../{ => BuiltinComponent}/AsyncTaskHelper.cs | 0 .../AsyncTaskHelper.cs.meta | 0 .../Runtime/Components/BackpackComponent.cs | 11 +++- .../EnemyManager/EnemyManagerComponent.cs | 9 ++- .../Entity/EntityData/AccessoryObjectData.cs | 53 --------------- .../Runtime/Entity/EntityData/EffectData.cs | 33 ---------- .../Entity/EntityData/EntityDataBase.cs | 62 ------------------ .../Entity/EntityData/TargetableObjectData.cs | 40 ----------- .../Runtime/Entity/EntityLogic/Player.cs | 4 +- .../Runtime/UIBase/Main/Shop/ShopUseCase.cs | 35 ++-------- .../Runtime/Utility/EntityDataFactory.cs | 44 +++++++++++++ .../Runtime/Utility/EntityDataFactory.cs.meta | 11 ++++ 数据表/Entity/Enemy.xlsx | Bin 10837 -> 10841 bytes 数据表/Entity/Weapon.xlsx | Bin 12931 -> 12958 bytes 52 files changed, 284 insertions(+), 315 deletions(-) rename Assets/GameMain/Scripts/{Runtime => Base/Definition/DataStruct}/PropItem.cs (61%) rename Assets/GameMain/Scripts/{Runtime => Base/Definition/DataStruct}/PropItem.cs.meta (100%) create mode 100644 Assets/GameMain/Scripts/Base/Entity.meta rename Assets/GameMain/Scripts/{Runtime => Base}/Entity/EntityData.meta (100%) create mode 100644 Assets/GameMain/Scripts/Base/Entity/EntityData/AccessoryObjectData.cs rename Assets/GameMain/Scripts/{Runtime => Base}/Entity/EntityData/AccessoryObjectData.cs.meta (100%) rename Assets/GameMain/Scripts/{Runtime => Base}/Entity/EntityData/CoinData.cs (100%) rename Assets/GameMain/Scripts/{Runtime => Base}/Entity/EntityData/CoinData.cs.meta (100%) create mode 100644 Assets/GameMain/Scripts/Base/Entity/EntityData/EffectData.cs rename Assets/GameMain/Scripts/{Runtime => Base}/Entity/EntityData/EffectData.cs.meta (100%) rename Assets/GameMain/Scripts/{Runtime => Base}/Entity/EntityData/Enemy.meta (100%) rename Assets/GameMain/Scripts/{Runtime => Base}/Entity/EntityData/Enemy/EnemyData.cs (67%) rename Assets/GameMain/Scripts/{Runtime => Base}/Entity/EntityData/Enemy/EnemyData.cs.meta (100%) rename Assets/GameMain/Scripts/{Runtime => Base}/Entity/EntityData/Enemy/EnemyProjectileData.cs (100%) rename Assets/GameMain/Scripts/{Runtime => Base}/Entity/EntityData/Enemy/EnemyProjectileData.cs.meta (100%) create mode 100644 Assets/GameMain/Scripts/Base/Entity/EntityData/EntityDataBase.cs rename Assets/GameMain/Scripts/{Runtime => Base}/Entity/EntityData/EntityDataBase.cs.meta (100%) rename Assets/GameMain/Scripts/{Runtime => Base}/Entity/EntityData/ExpData.cs (100%) rename Assets/GameMain/Scripts/{Runtime => Base}/Entity/EntityData/ExpData.cs.meta (100%) rename Assets/GameMain/Scripts/{Runtime => Base}/Entity/EntityData/PlayerData.cs (93%) rename Assets/GameMain/Scripts/{Runtime => Base}/Entity/EntityData/PlayerData.cs.meta (100%) create mode 100644 Assets/GameMain/Scripts/Base/Entity/EntityData/TargetableObjectData.cs rename Assets/GameMain/Scripts/{Runtime => Base}/Entity/EntityData/TargetableObjectData.cs.meta (100%) rename Assets/GameMain/Scripts/{Runtime => Base}/Entity/EntityData/Weapon.meta (100%) rename Assets/GameMain/Scripts/{Runtime => Base}/Entity/EntityData/Weapon/WeaponData.cs (84%) rename Assets/GameMain/Scripts/{Runtime => Base}/Entity/EntityData/Weapon/WeaponData.cs.meta (100%) rename Assets/GameMain/Scripts/{Runtime => Base}/Entity/EntityData/Weapon/WeaponHandgunData.cs (66%) rename Assets/GameMain/Scripts/{Runtime => Base}/Entity/EntityData/Weapon/WeaponHandgunData.cs.meta (100%) rename Assets/GameMain/Scripts/{Runtime => Base}/Entity/EntityData/Weapon/WeaponKnifeData.cs (68%) rename Assets/GameMain/Scripts/{Runtime => Base}/Entity/EntityData/Weapon/WeaponKnifeData.cs.meta (100%) rename Assets/GameMain/Scripts/{Runtime => Base}/Entity/EntityData/Weapon/WeaponLanceData.cs (91%) rename Assets/GameMain/Scripts/{Runtime => Base}/Entity/EntityData/Weapon/WeaponLanceData.cs.meta (100%) rename Assets/GameMain/Scripts/{Runtime => Base}/Entity/EntityData/Weapon/WeaponLightningData.cs (71%) rename Assets/GameMain/Scripts/{Runtime => Base}/Entity/EntityData/Weapon/WeaponLightningData.cs.meta (100%) rename Assets/GameMain/Scripts/{Runtime => Base}/Entity/EntityData/Weapon/WeaponSlashData.cs (68%) rename Assets/GameMain/Scripts/{Runtime => Base}/Entity/EntityData/Weapon/WeaponSlashData.cs.meta (100%) rename Assets/GameMain/Scripts/Runtime/{ => BuiltinComponent}/AsyncTaskHelper.cs (100%) rename Assets/GameMain/Scripts/Runtime/{ => BuiltinComponent}/AsyncTaskHelper.cs.meta (100%) delete mode 100644 Assets/GameMain/Scripts/Runtime/Entity/EntityData/AccessoryObjectData.cs delete mode 100644 Assets/GameMain/Scripts/Runtime/Entity/EntityData/EffectData.cs delete mode 100644 Assets/GameMain/Scripts/Runtime/Entity/EntityData/EntityDataBase.cs delete mode 100644 Assets/GameMain/Scripts/Runtime/Entity/EntityData/TargetableObjectData.cs create mode 100644 Assets/GameMain/Scripts/Runtime/Utility/EntityDataFactory.cs create mode 100644 Assets/GameMain/Scripts/Runtime/Utility/EntityDataFactory.cs.meta diff --git a/Assets/GameMain/Scripts/Runtime/PropItem.cs b/Assets/GameMain/Scripts/Base/Definition/DataStruct/PropItem.cs similarity index 61% rename from Assets/GameMain/Scripts/Runtime/PropItem.cs rename to Assets/GameMain/Scripts/Base/Definition/DataStruct/PropItem.cs index 9fd0716..35aefb1 100644 --- a/Assets/GameMain/Scripts/Runtime/PropItem.cs +++ b/Assets/GameMain/Scripts/Base/Definition/DataStruct/PropItem.cs @@ -1,6 +1,3 @@ -using Components; -using Entity; -using Entity.EntityData; using SepCore.DataTable; namespace SepCore.Definition @@ -12,7 +9,7 @@ namespace SepCore.Definition public string IconAssetName { get; private set; } public ItemRarity Rarity { get; private set; } public StatModifier[] Modifiers => _modifiers; - + public PropItem(DRProp prop) { if (prop == null) return; @@ -35,23 +32,5 @@ namespace SepCore.Definition Rarity = rarity; IconAssetName = iconAssetName; } - - public void OnAttach(StatComponent statComponent) - { - if (_modifiers == null || statComponent == null) return; - foreach (var modifier in _modifiers) - { - statComponent.AddModifier(modifier); - } - } - - public void OnDetach(StatComponent statComponent) - { - if (_modifiers == null || statComponent == null) return; - foreach (var modifier in _modifiers) - { - statComponent.RemoveModifier(modifier); - } - } } } diff --git a/Assets/GameMain/Scripts/Runtime/PropItem.cs.meta b/Assets/GameMain/Scripts/Base/Definition/DataStruct/PropItem.cs.meta similarity index 100% rename from Assets/GameMain/Scripts/Runtime/PropItem.cs.meta rename to Assets/GameMain/Scripts/Base/Definition/DataStruct/PropItem.cs.meta diff --git a/Assets/GameMain/Scripts/Base/Entity.meta b/Assets/GameMain/Scripts/Base/Entity.meta new file mode 100644 index 0000000..d0fe80b --- /dev/null +++ b/Assets/GameMain/Scripts/Base/Entity.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: cedb6e3c4b92edf4bbbe5fb34bb043ba +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/GameMain/Scripts/Runtime/Entity/EntityData.meta b/Assets/GameMain/Scripts/Base/Entity/EntityData.meta similarity index 100% rename from Assets/GameMain/Scripts/Runtime/Entity/EntityData.meta rename to Assets/GameMain/Scripts/Base/Entity/EntityData.meta diff --git a/Assets/GameMain/Scripts/Base/Entity/EntityData/AccessoryObjectData.cs b/Assets/GameMain/Scripts/Base/Entity/EntityData/AccessoryObjectData.cs new file mode 100644 index 0000000..e1d80fb --- /dev/null +++ b/Assets/GameMain/Scripts/Base/Entity/EntityData/AccessoryObjectData.cs @@ -0,0 +1,31 @@ +using System; +using SepCore.Definition; +using UnityEngine; + +namespace Entity.EntityData +{ + [Serializable] + public abstract class AccessoryObjectData : EntityDataBase + { + [SerializeField] private int _ownerId = 0; + + [SerializeField] private CampType _ownerCamp = CampType.Unknown; + + public AccessoryObjectData(int entityId, int typeId, int ownerId, CampType ownerCamp) + : base(entityId, typeId) + { + _ownerId = ownerId; + _ownerCamp = ownerCamp; + } + + /// + /// 拥有者编号。 + /// + public int OwnerId => _ownerId; + + /// + /// 拥有者阵营。 + /// + public CampType OwnerCamp => _ownerCamp; + } +} diff --git a/Assets/GameMain/Scripts/Runtime/Entity/EntityData/AccessoryObjectData.cs.meta b/Assets/GameMain/Scripts/Base/Entity/EntityData/AccessoryObjectData.cs.meta similarity index 100% rename from Assets/GameMain/Scripts/Runtime/Entity/EntityData/AccessoryObjectData.cs.meta rename to Assets/GameMain/Scripts/Base/Entity/EntityData/AccessoryObjectData.cs.meta diff --git a/Assets/GameMain/Scripts/Runtime/Entity/EntityData/CoinData.cs b/Assets/GameMain/Scripts/Base/Entity/EntityData/CoinData.cs similarity index 100% rename from Assets/GameMain/Scripts/Runtime/Entity/EntityData/CoinData.cs rename to Assets/GameMain/Scripts/Base/Entity/EntityData/CoinData.cs diff --git a/Assets/GameMain/Scripts/Runtime/Entity/EntityData/CoinData.cs.meta b/Assets/GameMain/Scripts/Base/Entity/EntityData/CoinData.cs.meta similarity index 100% rename from Assets/GameMain/Scripts/Runtime/Entity/EntityData/CoinData.cs.meta rename to Assets/GameMain/Scripts/Base/Entity/EntityData/CoinData.cs.meta diff --git a/Assets/GameMain/Scripts/Base/Entity/EntityData/EffectData.cs b/Assets/GameMain/Scripts/Base/Entity/EntityData/EffectData.cs new file mode 100644 index 0000000..f423ca1 --- /dev/null +++ b/Assets/GameMain/Scripts/Base/Entity/EntityData/EffectData.cs @@ -0,0 +1,20 @@ +using System; +using UnityEngine; + +namespace Entity.EntityData +{ + [Serializable] + public class EffectData : EntityDataBase + { + [SerializeField] + private float _keepTime = 0f; + + public EffectData(int entityId, int typeId) + : base(entityId, typeId) + { + _keepTime = 3f; + } + + public float KeepTime => _keepTime; + } +} diff --git a/Assets/GameMain/Scripts/Runtime/Entity/EntityData/EffectData.cs.meta b/Assets/GameMain/Scripts/Base/Entity/EntityData/EffectData.cs.meta similarity index 100% rename from Assets/GameMain/Scripts/Runtime/Entity/EntityData/EffectData.cs.meta rename to Assets/GameMain/Scripts/Base/Entity/EntityData/EffectData.cs.meta diff --git a/Assets/GameMain/Scripts/Runtime/Entity/EntityData/Enemy.meta b/Assets/GameMain/Scripts/Base/Entity/EntityData/Enemy.meta similarity index 100% rename from Assets/GameMain/Scripts/Runtime/Entity/EntityData/Enemy.meta rename to Assets/GameMain/Scripts/Base/Entity/EntityData/Enemy.meta diff --git a/Assets/GameMain/Scripts/Runtime/Entity/EntityData/Enemy/EnemyData.cs b/Assets/GameMain/Scripts/Base/Entity/EntityData/Enemy/EnemyData.cs similarity index 67% rename from Assets/GameMain/Scripts/Runtime/Entity/EntityData/Enemy/EnemyData.cs rename to Assets/GameMain/Scripts/Base/Entity/EntityData/Enemy/EnemyData.cs index 6920f43..ff4b69a 100644 --- a/Assets/GameMain/Scripts/Runtime/Entity/EntityData/Enemy/EnemyData.cs +++ b/Assets/GameMain/Scripts/Base/Entity/EntityData/Enemy/EnemyData.cs @@ -3,31 +3,20 @@ using System.Collections.Generic; using SepCore.DataTable; using SepCore.Definition; using UnityEngine; -using UnityGameFramework.Runtime; namespace Entity.EntityData { [Serializable] public class EnemyData : TargetableObjectData { - [SerializeField] private DREnemy _drEnemy; + private DREnemy _drEnemy; - public EnemyData(int entityId, EnemyType enemyType, int level) : base( - entityId, (int)enemyType, CampType.Enemy) + public EnemyData(int entityId, DREnemy drEnemy, int level) : base( + entityId, drEnemy.Id, CampType.Enemy) { - DREnemy enemyRow = GameEntry.DataTable.GetDataTableRow((int)enemyType); - - if (enemyRow == null) - { - throw new Exception($"Enemy data table row is missing, EnemyType='{enemyType}'."); - } - else - { - _drEnemy = enemyRow; - } - + _drEnemy = drEnemy; int effectiveLevel = Mathf.Max(1, level); - MaxHealthBase = enemyRow.MaxHealth + enemyRow.HpAddPerLevel * (effectiveLevel - 1); + MaxHealthBase = _drEnemy.MaxHealth + _drEnemy.HpAddPerLevel * (effectiveLevel - 1); } public EnemyType EnemyType => (EnemyType)_drEnemy.Id; diff --git a/Assets/GameMain/Scripts/Runtime/Entity/EntityData/Enemy/EnemyData.cs.meta b/Assets/GameMain/Scripts/Base/Entity/EntityData/Enemy/EnemyData.cs.meta similarity index 100% rename from Assets/GameMain/Scripts/Runtime/Entity/EntityData/Enemy/EnemyData.cs.meta rename to Assets/GameMain/Scripts/Base/Entity/EntityData/Enemy/EnemyData.cs.meta diff --git a/Assets/GameMain/Scripts/Runtime/Entity/EntityData/Enemy/EnemyProjectileData.cs b/Assets/GameMain/Scripts/Base/Entity/EntityData/Enemy/EnemyProjectileData.cs similarity index 100% rename from Assets/GameMain/Scripts/Runtime/Entity/EntityData/Enemy/EnemyProjectileData.cs rename to Assets/GameMain/Scripts/Base/Entity/EntityData/Enemy/EnemyProjectileData.cs diff --git a/Assets/GameMain/Scripts/Runtime/Entity/EntityData/Enemy/EnemyProjectileData.cs.meta b/Assets/GameMain/Scripts/Base/Entity/EntityData/Enemy/EnemyProjectileData.cs.meta similarity index 100% rename from Assets/GameMain/Scripts/Runtime/Entity/EntityData/Enemy/EnemyProjectileData.cs.meta rename to Assets/GameMain/Scripts/Base/Entity/EntityData/Enemy/EnemyProjectileData.cs.meta diff --git a/Assets/GameMain/Scripts/Base/Entity/EntityData/EntityDataBase.cs b/Assets/GameMain/Scripts/Base/Entity/EntityData/EntityDataBase.cs new file mode 100644 index 0000000..4587877 --- /dev/null +++ b/Assets/GameMain/Scripts/Base/Entity/EntityData/EntityDataBase.cs @@ -0,0 +1,51 @@ +using System; +using UnityEngine; + +namespace Entity.EntityData +{ + [Serializable] + public abstract class EntityDataBase + { + [SerializeField] private int _id = 0; + + [SerializeField] private int _typeId = 0; + + [SerializeField] private Vector3 _position = Vector3.zero; + + [SerializeField] private Quaternion _rotation = Quaternion.identity; + + public EntityDataBase(int entityId, int typeId) + { + _id = entityId; + _typeId = typeId; + } + + /// + /// 实体编号。 + /// + public int Id => _id; + + /// + /// 实体类型编号。 + /// + public int TypeId => _typeId; + + /// + /// 实体位置。 + /// + public Vector3 Position + { + get => _position; + set => _position = value; + } + + /// + /// 实体朝向。 + /// + public Quaternion Rotation + { + get => _rotation; + set => _rotation = value; + } + } +} diff --git a/Assets/GameMain/Scripts/Runtime/Entity/EntityData/EntityDataBase.cs.meta b/Assets/GameMain/Scripts/Base/Entity/EntityData/EntityDataBase.cs.meta similarity index 100% rename from Assets/GameMain/Scripts/Runtime/Entity/EntityData/EntityDataBase.cs.meta rename to Assets/GameMain/Scripts/Base/Entity/EntityData/EntityDataBase.cs.meta diff --git a/Assets/GameMain/Scripts/Runtime/Entity/EntityData/ExpData.cs b/Assets/GameMain/Scripts/Base/Entity/EntityData/ExpData.cs similarity index 100% rename from Assets/GameMain/Scripts/Runtime/Entity/EntityData/ExpData.cs rename to Assets/GameMain/Scripts/Base/Entity/EntityData/ExpData.cs diff --git a/Assets/GameMain/Scripts/Runtime/Entity/EntityData/ExpData.cs.meta b/Assets/GameMain/Scripts/Base/Entity/EntityData/ExpData.cs.meta similarity index 100% rename from Assets/GameMain/Scripts/Runtime/Entity/EntityData/ExpData.cs.meta rename to Assets/GameMain/Scripts/Base/Entity/EntityData/ExpData.cs.meta diff --git a/Assets/GameMain/Scripts/Runtime/Entity/EntityData/PlayerData.cs b/Assets/GameMain/Scripts/Base/Entity/EntityData/PlayerData.cs similarity index 93% rename from Assets/GameMain/Scripts/Runtime/Entity/EntityData/PlayerData.cs rename to Assets/GameMain/Scripts/Base/Entity/EntityData/PlayerData.cs index d114df4..c5f4fed 100644 --- a/Assets/GameMain/Scripts/Runtime/Entity/EntityData/PlayerData.cs +++ b/Assets/GameMain/Scripts/Base/Entity/EntityData/PlayerData.cs @@ -1,5 +1,4 @@ using System; -using SepCore.DataTable; using SepCore.Definition; namespace Entity.EntityData @@ -16,4 +15,4 @@ namespace Entity.EntityData public override int MaxHealthBase { get; } } -} \ No newline at end of file +} diff --git a/Assets/GameMain/Scripts/Runtime/Entity/EntityData/PlayerData.cs.meta b/Assets/GameMain/Scripts/Base/Entity/EntityData/PlayerData.cs.meta similarity index 100% rename from Assets/GameMain/Scripts/Runtime/Entity/EntityData/PlayerData.cs.meta rename to Assets/GameMain/Scripts/Base/Entity/EntityData/PlayerData.cs.meta diff --git a/Assets/GameMain/Scripts/Base/Entity/EntityData/TargetableObjectData.cs b/Assets/GameMain/Scripts/Base/Entity/EntityData/TargetableObjectData.cs new file mode 100644 index 0000000..74ca3f7 --- /dev/null +++ b/Assets/GameMain/Scripts/Base/Entity/EntityData/TargetableObjectData.cs @@ -0,0 +1,27 @@ +using System; +using SepCore.Definition; + +namespace Entity.EntityData +{ + [Serializable] + public abstract class TargetableObjectData : EntityDataBase + { + private CampType _camp; + + public TargetableObjectData(int entityId, int typeId, CampType camp) + : base(entityId, typeId) + { + _camp = camp; + } + + /// + /// 角色阵营。 + /// + public CampType Camp => _camp; + + /// + /// 最大生命。 + /// + public abstract int MaxHealthBase { get; } + } +} diff --git a/Assets/GameMain/Scripts/Runtime/Entity/EntityData/TargetableObjectData.cs.meta b/Assets/GameMain/Scripts/Base/Entity/EntityData/TargetableObjectData.cs.meta similarity index 100% rename from Assets/GameMain/Scripts/Runtime/Entity/EntityData/TargetableObjectData.cs.meta rename to Assets/GameMain/Scripts/Base/Entity/EntityData/TargetableObjectData.cs.meta diff --git a/Assets/GameMain/Scripts/Runtime/Entity/EntityData/Weapon.meta b/Assets/GameMain/Scripts/Base/Entity/EntityData/Weapon.meta similarity index 100% rename from Assets/GameMain/Scripts/Runtime/Entity/EntityData/Weapon.meta rename to Assets/GameMain/Scripts/Base/Entity/EntityData/Weapon.meta diff --git a/Assets/GameMain/Scripts/Runtime/Entity/EntityData/Weapon/WeaponData.cs b/Assets/GameMain/Scripts/Base/Entity/EntityData/Weapon/WeaponData.cs similarity index 84% rename from Assets/GameMain/Scripts/Runtime/Entity/EntityData/Weapon/WeaponData.cs rename to Assets/GameMain/Scripts/Base/Entity/EntityData/Weapon/WeaponData.cs index 8a5e400..81d3585 100644 --- a/Assets/GameMain/Scripts/Runtime/Entity/EntityData/Weapon/WeaponData.cs +++ b/Assets/GameMain/Scripts/Base/Entity/EntityData/Weapon/WeaponData.cs @@ -13,17 +13,11 @@ namespace Entity.EntityData private int _entityTypeId = 0; - public WeaponData(int entityId, WeaponType weaponType, int ownerId, CampType ownerCamp) - : base(entityId, (int)weaponType, ownerId, ownerCamp) + public WeaponData(int entityId, DRWeapon drWeapon, int ownerId, CampType ownerCamp) + : base(entityId, drWeapon.Id, ownerId, ownerCamp) { - _drWeapon = GameEntry.DataTable.GetDataTableRow((int)weaponType); - - if (_drWeapon == null) - { - throw new Exception($"Weapon data table row is missing, WeaponType='{weaponType}'."); - } - - _entityTypeId = _drWeapon.EntityTypeId; + _drWeapon = drWeapon; + _entityTypeId = drWeapon.EntityTypeId; } public WeaponType WeaponType => (WeaponType)_drWeapon.Id; diff --git a/Assets/GameMain/Scripts/Runtime/Entity/EntityData/Weapon/WeaponData.cs.meta b/Assets/GameMain/Scripts/Base/Entity/EntityData/Weapon/WeaponData.cs.meta similarity index 100% rename from Assets/GameMain/Scripts/Runtime/Entity/EntityData/Weapon/WeaponData.cs.meta rename to Assets/GameMain/Scripts/Base/Entity/EntityData/Weapon/WeaponData.cs.meta diff --git a/Assets/GameMain/Scripts/Runtime/Entity/EntityData/Weapon/WeaponHandgunData.cs b/Assets/GameMain/Scripts/Base/Entity/EntityData/Weapon/WeaponHandgunData.cs similarity index 66% rename from Assets/GameMain/Scripts/Runtime/Entity/EntityData/Weapon/WeaponHandgunData.cs rename to Assets/GameMain/Scripts/Base/Entity/EntityData/Weapon/WeaponHandgunData.cs index 9f83cb9..9b2cd85 100644 --- a/Assets/GameMain/Scripts/Runtime/Entity/EntityData/Weapon/WeaponHandgunData.cs +++ b/Assets/GameMain/Scripts/Base/Entity/EntityData/Weapon/WeaponHandgunData.cs @@ -1,4 +1,5 @@ using System; +using SepCore.DataTable; using SepCore.Definition; namespace Entity.EntityData @@ -12,8 +13,8 @@ namespace Entity.EntityData { public WeaponHandgunParamsData ParamsData { get; } - public WeaponHandgunData(int entityId, int ownerId, CampType ownerCamp) - : base(entityId, WeaponType.WeaponHandgun, ownerId, ownerCamp) + public WeaponHandgunData(int entityId, DRWeapon drWeapon, int ownerId, CampType ownerCamp) + : base(entityId, drWeapon, ownerId, ownerCamp) { ParamsData = ParseParams(); } diff --git a/Assets/GameMain/Scripts/Runtime/Entity/EntityData/Weapon/WeaponHandgunData.cs.meta b/Assets/GameMain/Scripts/Base/Entity/EntityData/Weapon/WeaponHandgunData.cs.meta similarity index 100% rename from Assets/GameMain/Scripts/Runtime/Entity/EntityData/Weapon/WeaponHandgunData.cs.meta rename to Assets/GameMain/Scripts/Base/Entity/EntityData/Weapon/WeaponHandgunData.cs.meta diff --git a/Assets/GameMain/Scripts/Runtime/Entity/EntityData/Weapon/WeaponKnifeData.cs b/Assets/GameMain/Scripts/Base/Entity/EntityData/Weapon/WeaponKnifeData.cs similarity index 68% rename from Assets/GameMain/Scripts/Runtime/Entity/EntityData/Weapon/WeaponKnifeData.cs rename to Assets/GameMain/Scripts/Base/Entity/EntityData/Weapon/WeaponKnifeData.cs index 582f0f3..c8a7930 100644 --- a/Assets/GameMain/Scripts/Runtime/Entity/EntityData/Weapon/WeaponKnifeData.cs +++ b/Assets/GameMain/Scripts/Base/Entity/EntityData/Weapon/WeaponKnifeData.cs @@ -1,4 +1,5 @@ using System; +using SepCore.DataTable; using SepCore.Definition; namespace Entity.EntityData @@ -13,8 +14,8 @@ namespace Entity.EntityData { public WeaponKnifeParamsData ParamsData { get; } - public WeaponKnifeData(int entityId, int ownerId, CampType ownerCamp) : base(entityId, WeaponType.WeaponKnife, - ownerId, ownerCamp) + public WeaponKnifeData(int entityId, DRWeapon drWeapon, int ownerId, CampType ownerCamp) + : base(entityId, drWeapon, ownerId, ownerCamp) { ParamsData = ParseParams(); } diff --git a/Assets/GameMain/Scripts/Runtime/Entity/EntityData/Weapon/WeaponKnifeData.cs.meta b/Assets/GameMain/Scripts/Base/Entity/EntityData/Weapon/WeaponKnifeData.cs.meta similarity index 100% rename from Assets/GameMain/Scripts/Runtime/Entity/EntityData/Weapon/WeaponKnifeData.cs.meta rename to Assets/GameMain/Scripts/Base/Entity/EntityData/Weapon/WeaponKnifeData.cs.meta diff --git a/Assets/GameMain/Scripts/Runtime/Entity/EntityData/Weapon/WeaponLanceData.cs b/Assets/GameMain/Scripts/Base/Entity/EntityData/Weapon/WeaponLanceData.cs similarity index 91% rename from Assets/GameMain/Scripts/Runtime/Entity/EntityData/Weapon/WeaponLanceData.cs rename to Assets/GameMain/Scripts/Base/Entity/EntityData/Weapon/WeaponLanceData.cs index 937a5cf..5ede889 100644 --- a/Assets/GameMain/Scripts/Runtime/Entity/EntityData/Weapon/WeaponLanceData.cs +++ b/Assets/GameMain/Scripts/Base/Entity/EntityData/Weapon/WeaponLanceData.cs @@ -1,4 +1,5 @@ using System; +using SepCore.DataTable; using SepCore.Definition; namespace Entity.EntityData @@ -62,8 +63,8 @@ namespace Entity.EntityData { public WeaponLanceParamsData ParamsData { get; } - public WeaponLanceData(int entityId, int ownerId, CampType ownerCamp) - : base(entityId, WeaponType.WeaponLance, ownerId, ownerCamp) + public WeaponLanceData(int entityId, DRWeapon drWeapon, int ownerId, CampType ownerCamp) + : base(entityId, drWeapon, ownerId, ownerCamp) { ParamsData = ParseParams(); } diff --git a/Assets/GameMain/Scripts/Runtime/Entity/EntityData/Weapon/WeaponLanceData.cs.meta b/Assets/GameMain/Scripts/Base/Entity/EntityData/Weapon/WeaponLanceData.cs.meta similarity index 100% rename from Assets/GameMain/Scripts/Runtime/Entity/EntityData/Weapon/WeaponLanceData.cs.meta rename to Assets/GameMain/Scripts/Base/Entity/EntityData/Weapon/WeaponLanceData.cs.meta diff --git a/Assets/GameMain/Scripts/Runtime/Entity/EntityData/Weapon/WeaponLightningData.cs b/Assets/GameMain/Scripts/Base/Entity/EntityData/Weapon/WeaponLightningData.cs similarity index 71% rename from Assets/GameMain/Scripts/Runtime/Entity/EntityData/Weapon/WeaponLightningData.cs rename to Assets/GameMain/Scripts/Base/Entity/EntityData/Weapon/WeaponLightningData.cs index 4052f94..3cbc499 100644 --- a/Assets/GameMain/Scripts/Runtime/Entity/EntityData/Weapon/WeaponLightningData.cs +++ b/Assets/GameMain/Scripts/Base/Entity/EntityData/Weapon/WeaponLightningData.cs @@ -1,4 +1,5 @@ using System; +using SepCore.DataTable; using SepCore.Definition; namespace Entity.EntityData @@ -14,8 +15,8 @@ namespace Entity.EntityData { public WeaponLightningParamsData ParamsData { get; } - public WeaponLightningData(int entityId, int ownerId, CampType ownerCamp) - : base(entityId, WeaponType.WeaponLightning, ownerId, ownerCamp) + public WeaponLightningData(int entityId, DRWeapon drWeapon, int ownerId, CampType ownerCamp) + : base(entityId, drWeapon, ownerId, ownerCamp) { ParamsData = ParseParams(); } diff --git a/Assets/GameMain/Scripts/Runtime/Entity/EntityData/Weapon/WeaponLightningData.cs.meta b/Assets/GameMain/Scripts/Base/Entity/EntityData/Weapon/WeaponLightningData.cs.meta similarity index 100% rename from Assets/GameMain/Scripts/Runtime/Entity/EntityData/Weapon/WeaponLightningData.cs.meta rename to Assets/GameMain/Scripts/Base/Entity/EntityData/Weapon/WeaponLightningData.cs.meta diff --git a/Assets/GameMain/Scripts/Runtime/Entity/EntityData/Weapon/WeaponSlashData.cs b/Assets/GameMain/Scripts/Base/Entity/EntityData/Weapon/WeaponSlashData.cs similarity index 68% rename from Assets/GameMain/Scripts/Runtime/Entity/EntityData/Weapon/WeaponSlashData.cs rename to Assets/GameMain/Scripts/Base/Entity/EntityData/Weapon/WeaponSlashData.cs index 128e0fd..e699303 100644 --- a/Assets/GameMain/Scripts/Runtime/Entity/EntityData/Weapon/WeaponSlashData.cs +++ b/Assets/GameMain/Scripts/Base/Entity/EntityData/Weapon/WeaponSlashData.cs @@ -1,4 +1,5 @@ using System; +using SepCore.DataTable; using SepCore.Definition; namespace Entity.EntityData @@ -13,8 +14,8 @@ namespace Entity.EntityData { public WeaponSlashParamsData ParamsData { get; } - public WeaponSlashData(int entityId, int ownerId, CampType ownerCamp) - : base(entityId, WeaponType.WeaponSlash, ownerId, ownerCamp) + public WeaponSlashData(int entityId, DRWeapon drWeapon, int ownerId, CampType ownerCamp) + : base(entityId, drWeapon, ownerId, ownerCamp) { ParamsData = ParseParams(); } diff --git a/Assets/GameMain/Scripts/Runtime/Entity/EntityData/Weapon/WeaponSlashData.cs.meta b/Assets/GameMain/Scripts/Base/Entity/EntityData/Weapon/WeaponSlashData.cs.meta similarity index 100% rename from Assets/GameMain/Scripts/Runtime/Entity/EntityData/Weapon/WeaponSlashData.cs.meta rename to Assets/GameMain/Scripts/Base/Entity/EntityData/Weapon/WeaponSlashData.cs.meta diff --git a/Assets/GameMain/Scripts/Editor/GameFrameworkConfigs.cs b/Assets/GameMain/Scripts/Editor/GameFrameworkConfigs.cs index b6ec084..12f265a 100644 --- a/Assets/GameMain/Scripts/Editor/GameFrameworkConfigs.cs +++ b/Assets/GameMain/Scripts/Editor/GameFrameworkConfigs.cs @@ -1,5 +1,4 @@ -using GameFramework; -using System.IO; +using System.IO; using UnityEngine; using UnityGameFramework.Editor; using UnityGameFramework.Editor.ResourceTools; @@ -8,16 +7,20 @@ namespace SepCore.Editor { public static class GameFrameworkConfigs { - [BuildSettingsConfigPath] - public static string BuildSettingsConfig = Utility.Path.GetRegularPath(Path.Combine(Application.dataPath, "GameMain/Configs/BuildSettings.xml")); + [BuildSettingsConfigPath] public static string BuildSettingsConfig = + GameFramework.Utility.Path.GetRegularPath(Path.Combine(Application.dataPath, + "GameMain/Configs/BuildSettings.xml")); - [ResourceCollectionConfigPath] - public static string ResourceCollectionConfig = Utility.Path.GetRegularPath(Path.Combine(Application.dataPath, "GameMain/Configs/ResourceCollection.xml")); + [ResourceCollectionConfigPath] public static string ResourceCollectionConfig = + GameFramework.Utility.Path.GetRegularPath(Path.Combine(Application.dataPath, + "GameMain/Configs/ResourceCollection.xml")); - [ResourceEditorConfigPath] - public static string ResourceEditorConfig = Utility.Path.GetRegularPath(Path.Combine(Application.dataPath, "GameMain/Configs/ResourceEditor.xml")); + [ResourceEditorConfigPath] public static string ResourceEditorConfig = + GameFramework.Utility.Path.GetRegularPath(Path.Combine(Application.dataPath, + "GameMain/Configs/ResourceEditor.xml")); - [ResourceBuilderConfigPath] - public static string ResourceBuilderConfig = Utility.Path.GetRegularPath(Path.Combine(Application.dataPath, "GameMain/Configs/ResourceBuilder.xml")); + [ResourceBuilderConfigPath] public static string ResourceBuilderConfig = + GameFramework.Utility.Path.GetRegularPath(Path.Combine(Application.dataPath, + "GameMain/Configs/ResourceBuilder.xml")); } } diff --git a/Assets/GameMain/Scripts/Editor/VampireLikeBuildEventHandler.cs b/Assets/GameMain/Scripts/Editor/VampireLikeBuildEventHandler.cs index e92e7ef..0a771fe 100644 --- a/Assets/GameMain/Scripts/Editor/VampireLikeBuildEventHandler.cs +++ b/Assets/GameMain/Scripts/Editor/VampireLikeBuildEventHandler.cs @@ -10,17 +10,19 @@ namespace SepCore.Editor { public bool ContinueOnFailure { - get - { - return false; - } + get { return false; } } - public void OnPreprocessAllPlatforms(string productName, string companyName, string gameIdentifier, string gameFrameworkVersion, string unityVersion, string applicableGameVersion, int internalResourceVersion, - Platform platforms, AssetBundleCompressionType assetBundleCompression, string compressionHelperTypeName, bool additionalCompressionSelected, bool forceRebuildAssetBundleSelected, string buildEventHandlerTypeName, string outputDirectory, BuildAssetBundleOptions buildAssetBundleOptions, - string workingPath, bool outputPackageSelected, string outputPackagePath, bool outputFullSelected, string outputFullPath, bool outputPackedSelected, string outputPackedPath, string buildReportPath) + public void OnPreprocessAllPlatforms(string productName, string companyName, string gameIdentifier, + string gameFrameworkVersion, string unityVersion, string applicableGameVersion, int internalResourceVersion, + Platform platforms, AssetBundleCompressionType assetBundleCompression, string compressionHelperTypeName, + bool additionalCompressionSelected, bool forceRebuildAssetBundleSelected, string buildEventHandlerTypeName, + string outputDirectory, BuildAssetBundleOptions buildAssetBundleOptions, + string workingPath, bool outputPackageSelected, string outputPackagePath, bool outputFullSelected, + string outputFullPath, bool outputPackedSelected, string outputPackedPath, string buildReportPath) { - string streamingAssetsPath = Utility.Path.GetRegularPath(Path.Combine(Application.dataPath, "StreamingAssets")); + string streamingAssetsPath = + GameFramework.Utility.Path.GetRegularPath(Path.Combine(Application.dataPath, "StreamingAssets")); string[] fileNames = Directory.GetFiles(streamingAssetsPath, "*", SearchOption.AllDirectories); foreach (string fileName in fileNames) { @@ -32,28 +34,39 @@ namespace SepCore.Editor File.Delete(fileName); } - Utility.Path.RemoveEmptyDirectory(streamingAssetsPath); + GameFramework.Utility.Path.RemoveEmptyDirectory(streamingAssetsPath); } - public void OnPostprocessAllPlatforms(string productName, string companyName, string gameIdentifier, string gameFrameworkVersion, string unityVersion, string applicableGameVersion, int internalResourceVersion, - Platform platforms, AssetBundleCompressionType assetBundleCompression, string compressionHelperTypeName, bool additionalCompressionSelected, bool forceRebuildAssetBundleSelected, string buildEventHandlerTypeName, string outputDirectory, BuildAssetBundleOptions buildAssetBundleOptions, - string workingPath, bool outputPackageSelected, string outputPackagePath, bool outputFullSelected, string outputFullPath, bool outputPackedSelected, string outputPackedPath, string buildReportPath) + public void OnPostprocessAllPlatforms(string productName, string companyName, string gameIdentifier, + string gameFrameworkVersion, string unityVersion, string applicableGameVersion, int internalResourceVersion, + Platform platforms, AssetBundleCompressionType assetBundleCompression, string compressionHelperTypeName, + bool additionalCompressionSelected, bool forceRebuildAssetBundleSelected, string buildEventHandlerTypeName, + string outputDirectory, BuildAssetBundleOptions buildAssetBundleOptions, + string workingPath, bool outputPackageSelected, string outputPackagePath, bool outputFullSelected, + string outputFullPath, bool outputPackedSelected, string outputPackedPath, string buildReportPath) { } - public void OnPreprocessPlatform(Platform platform, string workingPath, bool outputPackageSelected, string outputPackagePath, bool outputFullSelected, string outputFullPath, bool outputPackedSelected, string outputPackedPath) + public void OnPreprocessPlatform(Platform platform, string workingPath, bool outputPackageSelected, + string outputPackagePath, bool outputFullSelected, string outputFullPath, bool outputPackedSelected, + string outputPackedPath) { } - public void OnBuildAssetBundlesComplete(Platform platform, string workingPath, bool outputPackageSelected, string outputPackagePath, bool outputFullSelected, string outputFullPath, bool outputPackedSelected, string outputPackedPath, AssetBundleManifest assetBundleManifest) + public void OnBuildAssetBundlesComplete(Platform platform, string workingPath, bool outputPackageSelected, + string outputPackagePath, bool outputFullSelected, string outputFullPath, bool outputPackedSelected, + string outputPackedPath, AssetBundleManifest assetBundleManifest) { } - public void OnOutputUpdatableVersionListData(Platform platform, string versionListPath, int versionListLength, int versionListHashCode, int versionListCompressedLength, int versionListCompressedHashCode) + public void OnOutputUpdatableVersionListData(Platform platform, string versionListPath, int versionListLength, + int versionListHashCode, int versionListCompressedLength, int versionListCompressedHashCode) { } - public void OnPostprocessPlatform(Platform platform, string workingPath, bool outputPackageSelected, string outputPackagePath, bool outputFullSelected, string outputFullPath, bool outputPackedSelected, string outputPackedPath, bool isSuccess) + public void OnPostprocessPlatform(Platform platform, string workingPath, bool outputPackageSelected, + string outputPackagePath, bool outputFullSelected, string outputFullPath, bool outputPackedSelected, + string outputPackedPath, bool isSuccess) { if (!outputPackageSelected) { @@ -65,11 +78,13 @@ namespace SepCore.Editor return; } - string streamingAssetsPath = Utility.Path.GetRegularPath(Path.Combine(Application.dataPath, "StreamingAssets")); + string streamingAssetsPath = + GameFramework.Utility.Path.GetRegularPath(Path.Combine(Application.dataPath, "StreamingAssets")); string[] fileNames = Directory.GetFiles(outputPackagePath, "*", SearchOption.AllDirectories); foreach (string fileName in fileNames) { - string destFileName = Utility.Path.GetRegularPath(Path.Combine(streamingAssetsPath, fileName.Substring(outputPackagePath.Length))); + string destFileName = GameFramework.Utility.Path.GetRegularPath(Path.Combine(streamingAssetsPath, + fileName.Substring(outputPackagePath.Length))); FileInfo destFileInfo = new FileInfo(destFileName); if (!destFileInfo.Directory.Exists) { diff --git a/Assets/GameMain/Scripts/Runtime/AsyncTaskHelper.cs b/Assets/GameMain/Scripts/Runtime/BuiltinComponent/AsyncTaskHelper.cs similarity index 100% rename from Assets/GameMain/Scripts/Runtime/AsyncTaskHelper.cs rename to Assets/GameMain/Scripts/Runtime/BuiltinComponent/AsyncTaskHelper.cs diff --git a/Assets/GameMain/Scripts/Runtime/AsyncTaskHelper.cs.meta b/Assets/GameMain/Scripts/Runtime/BuiltinComponent/AsyncTaskHelper.cs.meta similarity index 100% rename from Assets/GameMain/Scripts/Runtime/AsyncTaskHelper.cs.meta rename to Assets/GameMain/Scripts/Runtime/BuiltinComponent/AsyncTaskHelper.cs.meta diff --git a/Assets/GameMain/Scripts/Runtime/Components/BackpackComponent.cs b/Assets/GameMain/Scripts/Runtime/Components/BackpackComponent.cs index 2a5a27c..5c92798 100644 --- a/Assets/GameMain/Scripts/Runtime/Components/BackpackComponent.cs +++ b/Assets/GameMain/Scripts/Runtime/Components/BackpackComponent.cs @@ -81,14 +81,21 @@ namespace Components public bool AttachProp(PropItem prop) { _props.Add(prop); - prop.OnAttach(_statComponent); + foreach (var modifier in prop.Modifiers) + { + _statComponent.AddModifier(modifier); + } + return true; } public bool DetachProp(PropItem prop) { _props.Remove(prop); - prop.OnDetach(_statComponent); + foreach (var modifier in prop.Modifiers) + { + _statComponent.RemoveModifier(modifier); + } return true; } diff --git a/Assets/GameMain/Scripts/Runtime/CustomComponent/EnemyManager/EnemyManagerComponent.cs b/Assets/GameMain/Scripts/Runtime/CustomComponent/EnemyManager/EnemyManagerComponent.cs index 449b03a..0756987 100644 --- a/Assets/GameMain/Scripts/Runtime/CustomComponent/EnemyManager/EnemyManagerComponent.cs +++ b/Assets/GameMain/Scripts/Runtime/CustomComponent/EnemyManager/EnemyManagerComponent.cs @@ -4,6 +4,7 @@ using SepCore.Definition; using Entity; using Entity.EntityData; using GameFramework.Event; +using SepCore.Utility; using UnityEngine; using UnityGameFramework.Runtime; using Random = UnityEngine.Random; @@ -124,7 +125,7 @@ namespace CustomComponent _nextSpawnTimes = null; ClearEnemies(); - + _currentEnemyCount = 0; } @@ -136,10 +137,8 @@ namespace CustomComponent if (_currentEnemyCount >= _spawnEnemyMaxCount) return; int entityPoolId = _currentSpawnEnemyId % _spawnEnemyMaxCount; - var enemyData = new EnemyData(entityPoolId, enemyType, _currentLevel) - { - Position = GetRandomPosition() - }; + var enemyData = EntityDataFactory.Create(entityPoolId, enemyType, _currentLevel); + enemyData.Position = GetRandomPosition(); _entity.ShowEnemy(enemyData); _currentSpawnEnemyId++; } diff --git a/Assets/GameMain/Scripts/Runtime/Entity/EntityData/AccessoryObjectData.cs b/Assets/GameMain/Scripts/Runtime/Entity/EntityData/AccessoryObjectData.cs deleted file mode 100644 index 75143d3..0000000 --- a/Assets/GameMain/Scripts/Runtime/Entity/EntityData/AccessoryObjectData.cs +++ /dev/null @@ -1,53 +0,0 @@ -//------------------------------------------------------------ -// Game Framework -// Copyright © 2013-2021 Jiang Yin. All rights reserved. -// Homepage: https://gameframework.cn/ -// Feedback: mailto:ellan@gameframework.cn -//------------------------------------------------------------ - -using System; -using SepCore.Definition; -using StarForce; -using UnityEngine; - -namespace Entity.EntityData -{ - [Serializable] - public abstract class AccessoryObjectData : EntityDataBase - { - [SerializeField] - private int m_OwnerId = 0; - - [SerializeField] - private CampType m_OwnerCamp = CampType.Unknown; - - public AccessoryObjectData(int entityId, int typeId, int ownerId, CampType ownerCamp) - : base(entityId, typeId) - { - m_OwnerId = ownerId; - m_OwnerCamp = ownerCamp; - } - - /// - /// 拥有者编号。 - /// - public int OwnerId - { - get - { - return m_OwnerId; - } - } - - /// - /// 拥有者阵营。 - /// - public CampType OwnerCamp - { - get - { - return m_OwnerCamp; - } - } - } -} diff --git a/Assets/GameMain/Scripts/Runtime/Entity/EntityData/EffectData.cs b/Assets/GameMain/Scripts/Runtime/Entity/EntityData/EffectData.cs deleted file mode 100644 index 7c1a7b9..0000000 --- a/Assets/GameMain/Scripts/Runtime/Entity/EntityData/EffectData.cs +++ /dev/null @@ -1,33 +0,0 @@ -//------------------------------------------------------------ -// Game Framework -// Copyright © 2013-2021 Jiang Yin. All rights reserved. -// Homepage: https://gameframework.cn/ -// Feedback: mailto:ellan@gameframework.cn -//------------------------------------------------------------ - -using System; -using UnityEngine; - -namespace Entity.EntityData -{ - [Serializable] - public class EffectData : EntityDataBase - { - [SerializeField] - private float m_KeepTime = 0f; - - public EffectData(int entityId, int typeId) - : base(entityId, typeId) - { - m_KeepTime = 3f; - } - - public float KeepTime - { - get - { - return m_KeepTime; - } - } - } -} diff --git a/Assets/GameMain/Scripts/Runtime/Entity/EntityData/EntityDataBase.cs b/Assets/GameMain/Scripts/Runtime/Entity/EntityData/EntityDataBase.cs deleted file mode 100644 index 530e936..0000000 --- a/Assets/GameMain/Scripts/Runtime/Entity/EntityData/EntityDataBase.cs +++ /dev/null @@ -1,62 +0,0 @@ -//------------------------------------------------------------ -// Game Framework -// Copyright © 2013-2021 Jiang Yin. All rights reserved. -// Homepage: https://gameframework.cn/ -// Feedback: mailto:ellan@gameframework.cn -//------------------------------------------------------------ - -using System; -using UnityEngine; - -namespace Entity.EntityData -{ - [Serializable] - public abstract class EntityDataBase - { - [SerializeField] - private int m_Id = 0; - - [SerializeField] - private int m_TypeId = 0; - - [SerializeField] - private Vector3 m_Position = Vector3.zero; - - [SerializeField] - private Quaternion m_Rotation = Quaternion.identity; - - public EntityDataBase(int entityId, int typeId) - { - m_Id = entityId; - m_TypeId = typeId; - } - - /// - /// 实体编号。 - /// - public int Id => m_Id; - - /// - /// 实体类型编号。 - /// - public int TypeId => m_TypeId; - - /// - /// 实体位置。 - /// - public Vector3 Position - { - get => m_Position; - set => m_Position = value; - } - - /// - /// 实体朝向。 - /// - public Quaternion Rotation - { - get => m_Rotation; - set => m_Rotation = value; - } - } -} diff --git a/Assets/GameMain/Scripts/Runtime/Entity/EntityData/TargetableObjectData.cs b/Assets/GameMain/Scripts/Runtime/Entity/EntityData/TargetableObjectData.cs deleted file mode 100644 index 071d3fb..0000000 --- a/Assets/GameMain/Scripts/Runtime/Entity/EntityData/TargetableObjectData.cs +++ /dev/null @@ -1,40 +0,0 @@ -//------------------------------------------------------------ -// Game Framework -// Copyright © 2013-2021 Jiang Yin. All rights reserved. -// Homepage: https://gameframework.cn/ -// Feedback: mailto:ellan@gameframework.cn -//------------------------------------------------------------ - -using System; -using SepCore.Definition; -using StarForce; -using UnityEngine; - -namespace Entity.EntityData -{ - [Serializable] - public abstract class TargetableObjectData : EntityDataBase - { - [SerializeField] - private CampType _camp = CampType.Unknown; - - public TargetableObjectData(int entityId, int typeId, CampType camp) - : base(entityId, typeId) - { - _camp = camp; - } - - /// - /// 角色阵营。 - /// - public CampType Camp => _camp; - - /// - /// 最大生命。 - /// - public abstract int MaxHealthBase - { - get; - } - } -} diff --git a/Assets/GameMain/Scripts/Runtime/Entity/EntityLogic/Player.cs b/Assets/GameMain/Scripts/Runtime/Entity/EntityLogic/Player.cs index abd3132..d4071cf 100644 --- a/Assets/GameMain/Scripts/Runtime/Entity/EntityLogic/Player.cs +++ b/Assets/GameMain/Scripts/Runtime/Entity/EntityLogic/Player.cs @@ -7,6 +7,7 @@ using Entity.EntityData; using GameFramework.Event; using UnityGameFramework.Runtime; using Entity.Weapon; +using SepCore.Utility; namespace Entity { @@ -140,7 +141,8 @@ namespace Entity // BackpackComponent Coin = role.Coin; _backpackComponent.OnInit(this, role.WeaponCapacity); - GameEntry.Entity.ShowWeapon(new WeaponKnifeData(GameEntry.Entity.GenerateSerialId(), Id, _playerData.Camp)); + GameEntry.Entity.ShowWeapon(EntityDataFactory.Create(GameEntry.Entity.GenerateSerialId(), + WeaponType.WeaponKnife, Id, _playerData.Camp)); // StatComponent foreach (var modifier in role.InitialProperties) diff --git a/Assets/GameMain/Scripts/Runtime/UIBase/Main/Shop/ShopUseCase.cs b/Assets/GameMain/Scripts/Runtime/UIBase/Main/Shop/ShopUseCase.cs index 000f786..31dc16f 100644 --- a/Assets/GameMain/Scripts/Runtime/UIBase/Main/Shop/ShopUseCase.cs +++ b/Assets/GameMain/Scripts/Runtime/UIBase/Main/Shop/ShopUseCase.cs @@ -7,6 +7,7 @@ using Entity; using Entity.EntityData; using CustomUtility; using GameFramework.DataTable; +using SepCore.Utility; using UnityEngine; using UnityGameFramework.Runtime; using Random = UnityEngine.Random; @@ -352,14 +353,10 @@ namespace SepCore.UI return null; } - DRWeapon drWeapon = _weaponDataTable != null ? _weaponDataTable.GetDataRow(goods.GoodsTypeId) : null; - if (drWeapon == null) - { - Log.Warning($"ShopFormUseCase::ApplyGoodsPurchase: Missing DRWeapon, id = {goods.GoodsTypeId}"); - return null; - } + DRWeapon drWeapon = _weaponDataTable.GetDataRow(goods.GoodsTypeId); - var weaponData = CreateWeaponData(goods.GoodsTypeId); + var weaponData = EntityDataFactory.Create(GameEntry.Entity.GenerateSerialId(), drWeapon, Player.Id, + CampType.Player); if (weaponData == null) { Log.Warning( @@ -380,30 +377,6 @@ namespace SepCore.UI return null; } - private WeaponData CreateWeaponData(int weaponTypeId) - { - int entityId = GameEntry.Entity.GenerateSerialId(); - int ownerId = Player.Id; - CampType ownerCamp = CampType.Player; - - WeaponType weaponType = (WeaponType)weaponTypeId; - switch (weaponType) - { - case WeaponType.WeaponKnife: - return new WeaponKnifeData(entityId, ownerId, ownerCamp); - case WeaponType.WeaponHandgun: - return new WeaponHandgunData(entityId, ownerId, ownerCamp); - case WeaponType.WeaponSlash: - return new WeaponSlashData(entityId, ownerId, ownerCamp); - case WeaponType.WeaponLightning: - return new WeaponLightningData(entityId, ownerId, ownerCamp); - case WeaponType.WeaponLance: - return new WeaponLanceData(entityId, ownerId, ownerCamp); - default: - return null; - } - } - public bool TryRecycleWeapon(int argsIndex, int argsPrice) { Player player = Player; diff --git a/Assets/GameMain/Scripts/Runtime/Utility/EntityDataFactory.cs b/Assets/GameMain/Scripts/Runtime/Utility/EntityDataFactory.cs new file mode 100644 index 0000000..c9cc68b --- /dev/null +++ b/Assets/GameMain/Scripts/Runtime/Utility/EntityDataFactory.cs @@ -0,0 +1,44 @@ +using System; +using SepCore.DataTable; +using Entity.EntityData; +using SepCore.Definition; + +namespace SepCore.Utility +{ + public static class EntityDataFactory + { + public static EnemyData Create(int entityId, EnemyType enemyType, int level) + { + var dr = GameEntry.DataTable.GetDataTableRow((int)enemyType); + return new EnemyData(entityId, dr, level); + } + + public static WeaponData Create(int entityId, WeaponType weaponType, int ownerId, CampType ownerCamp) + { + var dr = GameEntry.DataTable.GetDataTableRow((int)weaponType); + return weaponType switch + { + WeaponType.WeaponHandgun => new WeaponHandgunData(entityId, dr, ownerId, ownerCamp), + WeaponType.WeaponKnife => new WeaponKnifeData(entityId, dr, ownerId, ownerCamp), + WeaponType.WeaponSlash => new WeaponSlashData(entityId, dr, ownerId, ownerCamp), + WeaponType.WeaponLightning => new WeaponLightningData(entityId, dr, ownerId, ownerCamp), + WeaponType.WeaponLance => new WeaponLanceData(entityId, dr, ownerId, ownerCamp), + _ => throw new NotImplementedException() + }; + } + + public static WeaponData Create(int entityId, DRWeapon dr, int ownerId, CampType ownerCamp) + { + WeaponType type = (WeaponType)dr.Id; + return type switch + { + WeaponType.WeaponHandgun => new WeaponHandgunData(entityId, dr, ownerId, ownerCamp), + WeaponType.WeaponKnife => new WeaponKnifeData(entityId, dr, ownerId, ownerCamp), + WeaponType.WeaponSlash => new WeaponSlashData(entityId, dr, ownerId, ownerCamp), + WeaponType.WeaponLightning => new WeaponLightningData(entityId, dr, ownerId, ownerCamp), + WeaponType.WeaponLance => new WeaponLanceData(entityId, dr, ownerId, ownerCamp), + _ => throw new NotImplementedException() + }; + } + } +} diff --git a/Assets/GameMain/Scripts/Runtime/Utility/EntityDataFactory.cs.meta b/Assets/GameMain/Scripts/Runtime/Utility/EntityDataFactory.cs.meta new file mode 100644 index 0000000..a4e4a78 --- /dev/null +++ b/Assets/GameMain/Scripts/Runtime/Utility/EntityDataFactory.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: d562d735e382c1e4388ff5f7d3b57bd8 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/数据表/Entity/Enemy.xlsx b/数据表/Entity/Enemy.xlsx index f50e4c5136252a629a1cbb123ec8f3eebd9aee22..5047bb3ba28e6b8681bf2732c6fd42941acc06bd 100644 GIT binary patch delta 4039 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 delta 4075 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 R|9YI~Xah&lDy4qi{swaZT)qGR diff --git a/数据表/Entity/Weapon.xlsx b/数据表/Entity/Weapon.xlsx index 28a267a4ce5be1a17df58dc176dab62edfe05980..d2c93ce8396b7745fad23f527a5f47e55674c258 100644 GIT binary patch delta 6996 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 o4gdhM|A1(~dwDr1|9O#w{J-Ola2&q>D{cta<{9 delta 6954 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