Используй систему статов. Например у тебя есть класс
enum StatType {
speed;
power;
mobility;
}
class StatManager {
// Выставляет начальное значение стата
void setStateBase(StatType type, float value);
// Добавляет новый модификатор для стата
void addStatModf(StatType type, StatModf modf);
// Удаляет модификатор стата
void removeStatModf(StatType type, StatModf modf);
// Возвращает значение стата со всеми повешенными на него StatModf
Float getStateValue(StatType type);
}
enum StatModfType {
set;
add;
mult;
}
class StatModf {
var StatModfType type; // как именно модификатор влияет
var Float value; // значение с которым он влияет
}
При выполнении getStateValue перебирай все модификаторы для этого стата на базовое значение.
Рекомендую применять модификаторы в порядке их типа (StatModfType) вначале set потом mult, потом add а не в порядке добавления. Тут самый простой вариант предложен, подумай и переработай под свои нужны.