Serialization

Сегодня, наконец-то, закончил делать сериализацию для всяких игровых объектов – в том виде, как я ее вижу. Идеи были вытащены из буста, но так, как в тех шаблонах сам черт ногу сломит, то пришлось делать “по пониманию”.

Делалось это потому что реально существует проблема того, что когда геймдизайнер просит вынести ему новые параметры для настройки в конфиг, то это вызывает некоторые проблемы. Надо добавить аж три-четыре строчки 🙂
На самом деле реально проблема в том, что неясно бывает куда в иерархии игровых объектов впихнуть новый параметр и куда в хмл.

Фактически был реализован класс Archive, который содержит в себе несколько перегруженных операторов для записи POD-типов и перегруженный шаблонный оператор для сохранения всего остального.

template
Archive& operator>>(T& t)
{
t.DeSerialize(*this);
}

Вот такая незамысловатая реализация.

Реализация сериализации не-POD типов оставлена на “пользователя” и выглядит так же как и в бусте
void Square::DeSerialize(Archive& ar)
{
ar >> m_Rectangle;
ar >> m_Color;
//…..
}

Стоит добавить, что на самом деле реализация немножко не такая, из-за того, что в хмл надо хранить пары имя-значение, поэтому еще есть структурка, которая хранит имя переменной и ее значение, т.е.
ar >> MAKE_NVP(m_Rectangle); // NVP – Name-Value-Pair

Плюсом сериализации, имхо, является то, что мы автоматом получаем вычитывание целой иерархии объектов при том, что код становится проще и лучше структурированным.
Еще большим позитивом оказалось то, что глядя в сериализованный хмл начинаешь видеть огрехи в реализации архитектуры.

Similar Posts

  • уфф

    Я наконец-то начал высыпаться и возвращаться к нормальной жизни, вчера даже удалось часик поиграть в X3 🙂 Ненавижу говнопрограммера, который оставил мне в наследство софт управления сервером. Ну какому нормальному человеку пришло бы в голову кинуть конфиг и библиотеку часто-используемых функций в каталог с установленным перлом??? Это как кинуть myshit.h в какой-нить c:\msvc8\vc8\include Благодаря этому…

  • Движение камеры

    Сегодня наконец занялся доводкой движения камеры вокруг персонажа – после того, как она начала крутиться, я почти родился заново 🙂 Усердие удвоилось, так что скоро наверно буду делать очередной релиз, но в котором уже можно будет хоть как-то интересно бегать по прото-уровню. Недавно удалось удвоить ФПС – что не может не радовать 🙂 На данный…

  • Отчёт: Румыния 26.04.2008 – 1.05.2008 (день первый)

    Пролог На майские праздники составом из трёх человек (среди которых две дамы), мицу-клубников мы совершили тур на машине (mitsubishi lancer 9) по Румынии и Украине, 5 дней там и 4 здесь. Суммарно накатали 4300 километров, из которых 2500 пришлись на Румынию, средний расход бензина составил 6.2/100 по загранице и 7.3/100 по родине. Ночевали в гостинницах,…

  • адвенчура

    за прошедшие праздники проехал 4300 км. Из них 2500 по Румынии. Details will follow 🙂 Share this post: Share on X (Twitter) Share on Facebook Share on LinkedIn Share on Email Share on Reddit

  • ДР ДМ

    Сегодня праздновали день рождения Димы и Макса в “бочке” на петровке, все было как обычно – пьянка, рассказы, разговоры и все такое, но потом там начали праздновать “хеллоуин” и стало все намного интереснее. Начала ходить девушка-чертенок и предлагать посетителям раскраситься, ну а так как я не мог пропустить такое, то получилось вот что: А вот…

  • party at max home

    Были мы на выходных с малой на пьянке у Макса дома. Весьма увлекательное занятие – блуждать по позднякам в 12 часов ночи, чтобы найти дом Макса. Еще интересней было то, что когда мы пришли, то на столе было уже относительно пусто и пришлось идти еще раз в магазин. А так вообще было интересно – посидели,…