У кого есть мак,протестируйте плиз собираемость проекта на маке. Буду очень благодарен. Если есть ошибки, можете прямо сюда в комменты прислать. Я постараюсь поправить.
class SaleInfo
{
public:
int Condition;
int Percent;
};
class SaleService
{
public:
bool Calc(const std::vector<SaleInfo>& list)
{
// sort list от большего к меньшему
for (auto& i : list) // access by reference to avoid copying
{
if (i.Condition >= Cost)
{
Cost += i.Percent;
//Скидка применилась
return true;
}
}
//Скидка не прошла
return false;
}
};
- Если покупки на сумму более 10 000 единиц, покупателю предоставляется скидка в 3%.
- Доставка товара на сумму более 15 000 единиц осуществляется бесплатно. В ином случае цена доставки составляет 5% от суммы.
Код для этого сделан плохо. Причем Discount дублирует Delivery, см метод calculate.
Я бы сделал по другому. Класс который применяет фильтры Discount и Delivery, то есть метод calculate внутри себя вызывает указатели на vector указателей на Discount и Delivery.
И тогда если добавится новая скидка, мне ненужно реализовывать метод calculate, я просто напишу еще один фильтр и добавлю его как push_back к двум предыдущим. В этом же смысл SPR, не?
Попробуйте переписать код и он станет и меньше и проще.
Дело в том, что графики в игре где-то на 600 мб. Таскать такой патч для установки, как то чрезмерно. Распаковать файл из архива + распарсить формат графики art, занимает 1000 строк. Проще это реализовать, чем заниматься таким шаманством.
Особенно если приходится подгружать одновременно большое количество текстур. А распаковывать и держать в памяти - достаточно объёмно получается.
Нет не много. Даже для старых GPU с объемом меньше 32 мб, все влезет.
Хотя если изначально закладывать возможность расширения игры дополнительными модулями - возможно ваш вариант будет предпочтительнее.
Я думаю, добавить не только поддержку модулей игры, но еще и плагины. То есть можно одновременно подключать несколько модулей, главное подключить в нужном порядке.
К примеру есть мод котрый изменяет только баланс оружия и предметов в игре. Теоритически его можно подключить к любому моду.
Код для второго урока готов, возможен не большой рефакторинг. Сейчас идёт работа над статьей, описание форматов файлов, как игра с ним раббтает и как это все закодировано и работает в новом движке.
Новые движки для старых игр, используют текущие технологии, современный opengl или vulkan. Современный графический движок, который не заточен под железо 20-ти летней давности. Тратить время, что бы добавить поддержку, долго, дорого и бессмысленно.
Я видел последнее виде по вашей демке. В котором огр на мосту бегал. Очень здорово. Я понимаю, что до завершения переноса, ещё далеко. Но вы сделали большую работу.
При разработке я постоянно собираю код, gcc 3, gcc 11, msvc 2022 и Visual C++ 6.0. совместимость на уровне кода отличная. Сейчас собирается без единого предупреждения. Компилятора специфичного кода не использую, все в рамках стандарта С++ 98.
Да планирую. Насколько я понимаю, нужно будет чуть подправить cmake файл. Но у меня нет мака что бы затестить,, что все собирается. Только если кто то со стороны это сделает и пришлет код.
Вообще планирую собирать под всё, на что портирован SDL1 и SDL2, это на будущее.
Будет использовано минимум зависимостей, SDL, SDL_ttf, SDL_Mixer, zlib и stb_image. Все остальное пишу сам.
Это фан и возможность пощупать и писать код с поддержкой настолько древнего железа и ос. Старое железо мне интересно в разрезе производительности. Имея слабое и и по современным меркам производительность на уровне погрешности, если сравнивать с современным. Ответственно подойти к проекту и достичь тех же результатов на железе 20-ти летней давности. Имея малое, получить большее.
Такое у меня ретро хобби. Преимущество в том, что я не пишу только под старые системы. Новые системы тоже поддерживаются.
Спасибо за информацию и ссылки. Я бэкендер и для меня написание движков, рисование 2D или 3D графики в новинку. И мне интересно не только разобраться в теории, но и разработать движок на практике. Это довольно увлекательное занятие.
Да я понимаю, что есть другие движки, но именно мне интересно разработать с нуля, используя минимум зависимостей.
Да вы правы, движок ради движка. Но конечно я планирую перенести карты и скрипты, конвертировав их. Но без описания их формата, это сделать невозможно. Может я в конце разработки и попробую сам их разобрать, но это довольно ресурсо затратно по степени.
Да за референс, я взял открытый движок freeheroes2. Мне он очень понравился простотой кодовой базы. Арзитектурно прост. Многие архитектурные решения черпаю из него.
У кого есть мак,протестируйте плиз собираемость проекта на маке. Буду очень благодарен. Если есть ошибки, можете прямо сюда в комменты прислать. Я постараюсь поправить.
Основная идея, пихать пользователю рекламу чего-либо, во все места. Это не реклама, это брендирование.
Тема не раскрыта. К примеру пусть у нас есть структура документа textData
Для оперирования над данной структурой. Создаем классы textFinder, textReplacer ит.д
И в аргументы методов передаем textData. textData не знает о других классах, а вот как раз внешние классы о ней знают и могут ее модифицировать.
Итог: когда показывают примеры на слонах и пингвинах, выглядит хорошо. При усложнении кода связей, требуется дополнительная аналитика.
Пример кода, накидан в блокноте. Суть ясна.
Код для этого сделан плохо. Причем
Discount дублирует Delivery, см метод calculate.Я бы сделал по другому.
Класс который применяет фильтры Discount и Delivery, то есть метод calculate внутри себя вызывает указатели на vector указателей на Discount и Delivery.И тогда если добавится новая скидка, мне ненужно реализовывать метод
calculate, я просто напишу еще один фильтр и добавлю его как push_back к двум предыдущим. В этом же смысл SPR, не?Попробуйте переписать код и он станет и меньше и проще.
Дело в том, что графики в игре где-то на 600 мб. Таскать такой патч для установки, как то чрезмерно. Распаковать файл из архива + распарсить формат графики art, занимает 1000 строк. Проще это реализовать, чем заниматься таким шаманством.
Нет не много. Даже для старых GPU с объемом меньше 32 мб, все влезет.
Я думаю, добавить не только поддержку модулей игры, но еще и плагины. То есть можно одновременно подключать несколько модулей, главное подключить в нужном порядке.
К примеру есть мод котрый изменяет только баланс оружия и предметов в игре. Теоритически его можно подключить к любому моду.
Постоянно это делаю.
Ничто и весь мир.
Вообще работать должно. Но у меня нет mac os и поэтому проверить не могу.
Код для второго урока готов, возможен не большой рефакторинг. Сейчас идёт работа над статьей, описание форматов файлов, как игра с ним раббтает и как это все закодировано и работает в новом движке.
Новые движки для старых игр, используют текущие технологии, современный opengl или vulkan. Современный графический движок, который не заточен под железо 20-ти летней давности. Тратить время, что бы добавить поддержку, долго, дорого и бессмысленно.
Поэтому такая картина.
Я уже работаю над вторым уроком. Скоро оформлю в статью.
Я видел последнее виде по вашей демке. В котором огр на мосту бегал. Очень здорово. Я понимаю, что до завершения переноса, ещё далеко. Но вы сделали большую работу.
При разработке я постоянно собираю код, gcc 3, gcc 11, msvc 2022 и Visual C++ 6.0. совместимость на уровне кода отличная. Сейчас собирается без единого предупреждения. Компилятора специфичного кода не использую, все в рамках стандарта С++ 98.
Да планирую. Насколько я понимаю, нужно будет чуть подправить cmake файл. Но у меня нет мака что бы затестить,, что все собирается. Только если кто то со стороны это сделает и пришлет код.
Вообще планирую собирать под всё, на что портирован SDL1 и SDL2, это на будущее.
Будет использовано минимум зависимостей, SDL, SDL_ttf, SDL_Mixer, zlib и stb_image. Все остальное пишу сам.
Ну наконец-то. Дождались:)
Да конечно. В следующем уроке я опишу формат dat и art. О форматах карт я информацию не нашел.
У нас же тут не соц. соревнование. Если хотите можете сравнивать по мере прогресса, у кого лучше, выше, сильнее:)
Это фан и возможность пощупать и писать код с поддержкой настолько древнего железа и ос. Старое железо мне интересно в разрезе производительности. Имея слабое и и по современным меркам производительность на уровне погрешности, если сравнивать с современным. Ответственно подойти к проекту и достичь тех же результатов на железе 20-ти летней давности. Имея малое, получить большее.
Такое у меня ретро хобби. Преимущество в том, что я не пишу только под старые системы. Новые системы тоже поддерживаются.
Спасибо за информацию и ссылки. Я бэкендер и для меня написание движков, рисование 2D или 3D графики в новинку. И мне интересно не только разобраться в теории, но и разработать движок на практике. Это довольно увлекательное занятие.
Да я понимаю, что есть другие движки, но именно мне интересно разработать с нуля, используя минимум зависимостей.
Да вы правы, движок ради движка. Но конечно я планирую перенести карты и скрипты, конвертировав их. Но без описания их формата, это сделать невозможно. Может я в конце разработки и попробую сам их разобрать, но это довольно ресурсо затратно по степени.
Да за референс, я взял открытый движок freeheroes2. Мне он очень понравился простотой кодовой базы. Арзитектурно прост. Многие архитектурные решения черпаю из него.
Юзайте std::string и не юзайте си наследие в виде printf, strcpy и т.д
И да прибудут с вами, новые стандарты С++.