Обычно сущности и компоненты или другие части игрового кода в управляемом данными дизайне имеют имена, которые проверяются, если вы хотите точно определить, с каким объектом вы имеете дело.
void Player::Interact(Entity *myEntity)
{
if(myEntity->isNearEnough(this) && myEntity->GetFamilyName() == "guard")
{
static_cast<Guard*>(myEntity)->Say("No mention of arrows and knees here");
}
}
Если вы игнорируете возможность того, что это может быть преждевременной оптимизацией, совершенно очевидно, что поиск сущностей был бы намного быстрее, если бы их «имя» представляло собой простое 32-битное значение вместо реальной строки.
Вычисление хэшейиз имен строк является одним из возможных вариантов.Я на самом деле не пробовал, но с диапазоном 32 бита и хорошей функцией хеширования риск столкновения должен быть минимальным.
Вопрос заключается в следующем: очевидно, нам нужен какой-то способ преобразования имен строк в коде (или в каком-то внешнем файле) в эти целые числа, так как человек, работающий с этими именованными объектами, все равно захочет обратитьсяк объекту как «guard» вместо «0x2315f21a».
Предполагая, что мы используем C ++ и хотим заменить все строки, которые появляются в коде, это может быть даже достигнуто с помощью встроенных в язык функций или сделатьмы должны создать внешний инструмент, который вручную просматривает все файлы и обменивается значениями?