using System; using SepCore.Entity; using SepCore.Definition; using UnityGameFramework.Runtime; namespace SepCore.CustomUtility { public static class EntityDataFactory { private static readonly string[] s_EnemyTypeNames = { null, "近战敌人", "远程敌人", "蝙蝠", "骷髅兵", "骷髅巨人", "幽灵", "火焰法师" }; public static EnemyConfig GetEnemyConfig(EnemyType enemyType) { int index = (int)enemyType; if (index > 0 && index < s_EnemyTypeNames.Length) { string name = s_EnemyTypeNames[index]; return GameEntry.Luban.Get(name); } Log.Error("Invalid enemy type '{0}'.", enemyType); return null; } public static EnemyType GetEnemyType(string enemyName) { if (string.IsNullOrEmpty(enemyName)) { Log.Error("Enemy name is invalid."); return EnemyType.None; } for (int i = 1; i < s_EnemyTypeNames.Length; i++) { if (s_EnemyTypeNames[i] == enemyName) { return (EnemyType)i; } } if (Enum.TryParse(enemyName, true, out var enemyType)) { return enemyType; } Log.Error("Can not find EnemyType for enemy name '{0}'.", enemyName); return EnemyType.None; } public static EnemyData Create(int entityId, EnemyType enemyType, int level) { EnemyConfig config = GetEnemyConfig(enemyType); if (config == null) { Log.Error("Can not find EnemyConfig for enemy type '{0}'.", enemyType); return null; } return new EnemyData(entityId, config, enemyType, level); } public static EnemyData Create(int entityId, EnemyConfig config, EnemyType enemyType, int level) { return new EnemyData(entityId, config, enemyType, level); } public static WeaponData Create(int entityId, WeaponType weaponType, int ownerId, CampType ownerCamp) { var config = GameEntry.Luban.Get((int)weaponType); return weaponType switch { WeaponType.WeaponHandgun => new WeaponHandgunData(entityId, config, ownerId, ownerCamp), WeaponType.WeaponKnife => new WeaponKnifeData(entityId, config, ownerId, ownerCamp), WeaponType.WeaponSlash => new WeaponSlashData(entityId, config, ownerId, ownerCamp), WeaponType.WeaponLightning => new WeaponLightningData(entityId, config, ownerId, ownerCamp), WeaponType.WeaponLance => new WeaponLanceData(entityId, config, ownerId, ownerCamp), _ => throw new NotImplementedException() }; } public static WeaponData Create(int entityId, WeaponConfig config, int ownerId, CampType ownerCamp) { WeaponType type = (WeaponType)config.Id; return type switch { WeaponType.WeaponHandgun => new WeaponHandgunData(entityId, config, ownerId, ownerCamp), WeaponType.WeaponKnife => new WeaponKnifeData(entityId, config, ownerId, ownerCamp), WeaponType.WeaponSlash => new WeaponSlashData(entityId, config, ownerId, ownerCamp), WeaponType.WeaponLightning => new WeaponLightningData(entityId, config, ownerId, ownerCamp), WeaponType.WeaponLance => new WeaponLanceData(entityId, config, ownerId, ownerCamp), _ => throw new NotImplementedException() }; } } }