public abstract class Unit
{
public abstract List<Move> allowedMoves{get;}
}
public class Javelineer : Unit
{
public List<Move> allowedMoves =>
new List<Move> {Move.Impale, Move.JavelinThrow, Move.ShieldBlock};
}
public class Dragon : Unit
{
public List<Move> allowedMoves =>
new List<Move> {Move.BreatheFire, Move.Swipe, Move.Bite, Move.Devour, Move.TailBash};
}
X:
Учитывая приведенный выше код, если и как я могу получить разрешенные ходы данного подразделения без необходимости создания нового объекта?
Я знаю, что могуполучить свойство с помощью этого кода:
typeof(Javelineer).GetProperty("allowedMoves")
Но если и как я могу получить определение этого свойства?
Y:
Клиент (веб-браузер)Необходимо отправить на игровой сервер юнит игрока.Это включает в себя тип устройства и перемещения, которые может выполнить это устройство (4 из всех доступных; аналогично Pokemon).
Хотя проверка (конечно) выполняется на сервере, браузер все еще должен получитьсписок доступных типов юнитов и разрешенных ходов.
Чтобы не дублировать код, я бы хотел избежать жесткого кодирования этих данных в Javascript.
Прочитав превосходный SOвопросы и ответы Я думаю, что могу извлечь все доступные модули с кодом, подобным следующему:
Assembly.GetExecutingAssembly().GetTypes().Where(
type => type.BaseType == typeof(Unit)
).Select(type => type.Name).ToList()
Я бы вызвал этот код при запуске сервера, кэшировал результат и отправлял кэшированный результат каждому подключающемусяклиент, потому что я чувствую, что этот код, вероятно, дорогой для вызова.
Но как я могу получить список разрешенных ходов?