vampire-like/Assets/GameMain/Scripts/Runtime/Utility/EntityDataFactory.cs

45 lines
2.0 KiB
C#

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<DREnemy>((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<DRWeapon>((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()
};
}
}
}