Наследование от базовой сущности звучит как хороший подход.Все, что совместно используется всеми вашими объектами, должно быть в базовой сущности, а все, что является специфическим для каждого типа NPC, должно быть в их собственном классе.Вещи, которые имеют одну и ту же цель, но разную реализацию (например, AI или CreateNewEntity), должны быть помечены как виртуальные, чтобы методы можно было вызывать из списка базовых сущностей, но будет работать правильная реализация.CreateNewEntity, вероятно, должен быть конструктором.
пример:
public class Entity
{
public int Id { get; protected set; }
public Vector2 Position { get; protected set; }
public int Strength { get; protected set; }
public Entity(int id, Vector2 position)
{
Id = id;
Position = position;
Strength = 1;
}
public virtual RunAI()
{
Position.X = Position.X + 1;
}
}
public class SuperHero
{
public SuperHero(int id, Vector2 position) : base (id, position)
{
Strength = 20;
}
public override void RunAI()
{
Position.X = Position.X + 500;
}
}