Клиент игры портирован с С++ на С#
Как то возникла такая мысль: А реально ли портировать текущий игровой клиент на С# !?В последнее время я много работал с Unity3d и в частности пришлось писать много кода на C#, так что подготовка кое какая у меня в этом плане уже была.
Но чистый C# далеко не графический 3д движок и тем более под OpenGL. Так что предстояло решить несколько непонятных для меня, но интересных задачь:
1. Подключить чистый OpenGL в С# приложение. Чистый - это значит без дополнительных библиотек, а именно тот который идет вместе с Windows.
2. Подгрузить ресурсы игры созданные для совершенно другой платформы.
3. Переписать весь код игры усеянный указателями и прямым копированием блоков памяти и похожий больше на процедурный стиль чем объектный на С#. Ведь старый клиент игры начат в 2002 году и мои познания в С++ были очень скромны. К тому же за 14 лет код постоянно модифицировался и сейчас содержит достаточно много разностильных блоков.
Но нет непреодолимых препятствий, если есть желание и стимул. Шаг за шагом все задачи решались, первый и второй пункты как и ожидалось решились очень быстро, а вот третий...
Но оно и понятно, всегда легче написать заново - чем переделывать старое, (я провобол этот метод несколько раз :-) но в итоге рабочего клиента все равно не получил). Так что на этот раз все таки решил переписать, без доработок, с минимальными изменениями.
И вот наконец все получилось более 25 000 строк кода на С++ были переведены на С# и в итоге теперь есть клиент который может полностью заменить старую реализацию.
Но получив новый клиент на С# я все таки не удержался от соблазна, что нибудь в нем модернизировать, от части для того чтобы проверить - а сложно ли будет в дальнейшем проводить улучшения и изменения !? Собственно ради этой возможности и была задумано все это портирование.
В итоге я произвел вот такие доработки:
- расширил зону видимости территории.
- сделал удобное управление камерой.
- добавил расчет простых теней и вывод их на территорию.
Для начала думаю достаточно.
Сейчас я провожу тестирование основных игровых функций, и как совсем скоро клиент будет доступен всем нашим игрокам, для которых наша игра скорее частичка жизни, чем просто развлечение.