Обновить
145
4
Евгений@JordanCpp

Разработчик

Отправить сообщение

У кого есть мак,протестируйте плиз собираемость проекта на маке. Буду очень благодарен. Если есть ошибки, можете прямо сюда в комменты прислать. Я постараюсь поправить.

Основная идея, пихать пользователю рекламу чего-либо, во все места. Это не реклама, это брендирование.

class textEditor

Тема не раскрыта. К примеру пусть у нас есть структура документа textData

Для оперирования над данной структурой. Создаем классы textFinder, textReplacer ит.д

И в аргументы методов передаем textData. textData не знает о других классах, а вот как раз внешние классы о ней знают и могут ее модифицировать.

Итог: когда показывают примеры на слонах и пингвинах, выглядит хорошо. При усложнении кода связей, требуется дополнительная аналитика.

Пример кода, накидан в блокноте. Суть ясна.

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 мб, все влезет.

Хотя если изначально закладывать возможность расширения игры дополнительными модулями - возможно ваш вариант будет предпочтительнее.

Я думаю, добавить не только поддержку модулей игры, но еще и плагины. То есть можно одновременно подключать несколько модулей, главное подключить в нужном порядке.

К примеру есть мод котрый изменяет только баланс оружия и предметов в игре. Теоритически его можно подключить к любому моду.

В любом случае нужно думать и анализировать.

Постоянно это делаю.

Что значит инициализировать int в C++?

Ничто и весь мир.

Вообще работать должно. Но у меня нет 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 и т.д

И да прибудут с вами, новые стандарты С++.

Информация

В рейтинге
1 184-й
Откуда
Россия
Дата рождения
Зарегистрирован
Активность

Специализация

Бэкенд разработчик, Разработчик баз данных
Ведущий
SQL
Linux