diff --git a/docs/settings_doxygen/Doxyfile b/docs/settings_doxygen/Doxyfile index 8900f2882579620cd327e8885edc5832b7d4912a..4f540082694cd17504d392c2a608ad7ec4c7c937 100644 --- a/docs/settings_doxygen/Doxyfile +++ b/docs/settings_doxygen/Doxyfile @@ -51,7 +51,7 @@ PROJECT_BRIEF = "3D real-time render" # pixels and the maximum width should not exceed 200 pixels. Doxygen will copy # the logo to the output directory. -PROJECT_LOGO = +PROJECT_LOGO = ./logo.png # The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute) path # into which the generated documentation will be written. If a relative path is @@ -795,25 +795,23 @@ INPUT = ../../source/gdefines.h \ ../../source/GRegisterIndex.h \ ../../source/input/sxinput.h \ ../../source/gcore/sxgcore.h \ + ../../source/score/sxscore.h \ ../../source/geom/sxgeom.h \ ../../source/mtllight/sxmtllight.h \ ../../source/pp/sxpp.h \ - ../../source/SkyXEngine.h \ - ../../source/managed_render/gdata.h \ - ../../source/managed_render/camera_update.h \ - ../../source/managed_render/handler_out_log.cpp \ - ../../source/managed_render/render_func.h \ - ../../source/managed_render/level.h \ ../../source/anim/sxanim.h \ ../../source/anim/ModelFile.h \ ../../source/gcore/ModelFile.h \ ../../source/SXGUIWinApi/SXGUI.h \ ../../source/particles/sxparticles.h \ - ../../source/score/sxscore.h \ ../../source/decals/sxdecals.h \ ../../source/aigrid/sxaigrid.h \ + ../../source/render/sxrender.h \ + ../../source/level/sxlevel.h \ + ../../source/SkyXEngine.h \ ../../source/sxmaterialeditor/sxmaterialeditor.cpp \ - ../../source/sxparticleseditor/sxparticleseditor.cpp + ../../source/sxparticleseditor/sxparticleseditor.cpp \ + ../../source/sxleveleditor/sxleveleditor.cpp # This tag can be used to specify the character encoding of the source files # that doxygen parses. Internally doxygen uses the UTF-8 encoding. Doxygen uses diff --git a/docs/settings_doxygen/logo.png b/docs/settings_doxygen/logo.png new file mode 100644 index 0000000000000000000000000000000000000000..313d97c65a59f92cc33f31d360b9d84a27f08671 Binary files /dev/null and b/docs/settings_doxygen/logo.png differ diff --git a/source/SkyXEngine.h b/source/SkyXEngine.h index 99febaf86af04950111d4ea8eb7df3d980366760..2fac47598f3dc93c2def166e4c61495f3634b100 100644 --- a/source/SkyXEngine.h +++ b/source/SkyXEngine.h @@ -20,14 +20,14 @@ See the license in LICENSE /*! \page info_engine Информация о движке SkyXEngine \tableofcontents \section ie_common Общее -SkyXEngine - графический 3D движок с real-time рендером, использует технологии DirectX 9. \n +\b SkyXEngine - движок для создания 3D игр с real-time рендером, использует технологии DirectX 9. \n <small>Сразу уточнение, DirectX 9 мы используем в связи с личными предпочтениями, так как на наш взгляд эта технология является одной из лучших, хоть и считается устаревшей. Все новое это забытое старое)) И как нам кажется ... нет ничего такого, чего нельзя было бы сделать на DirectX 9, но что можно сделать на другом GAPI, для создания игр любого жанра с real-time рендером. Но это только точка зрения нашей команды и она может быть ошибочная. Однако в планах есть расширение поддерживаемых GAPI.</small> <b>Формирование уровня</b> осуществляется посредством: - загрузки статических моделей формата dse, с их автоматическим разбиением на "куски рендера" как quad или octo дерево, возможны сохранение/загрузка в бинарный файл всей геометрии уровня - - генерации растительности по маске, возможны 2 вида: трава (чем дальше тем меньше размер объекта) и деревья (с возможностью загрузки лодов), возможны возможны сохранение/загрузка в бинарный файл всей растительности уровня. + - генерации растительности по маске, возможны 2 вида: трава (чем дальше тем меньше размер объекта) и деревья (с возможностью загрузки лодов), возможны возможны сохранение/загрузка в бинарный файл всей растительности уровня. Ручная расстановка расстительности поддерживается. Редактирование поддерживается. <b>Освещение</b> представлено 3 видами источников света (опционально поддерживается генерация теней от каждого исчтоника света): - глобальный (солнце), тени - PSSM @@ -49,10 +49,12 @@ HDR эффект присутсвует. - детальность - детальность по маске (до 4 текстур) - комбинированный микрорельеф с детальностью по маске (до 4 текстур) - - альфа тест. + - альфа тест + - просвечиваемость (для освещения тонких поверхностей, к примеру листвы и травы). Вся система материалов является открытой и практически любой функционал системы доступен для собственной интерпретации, посредством шейдеров. Имеется встроенный набор данных.\n Поддерживаются различные пользовательские данные которые интерпретируются только создающим материалы. + Настрока физического материала доступна. <b>Постпроцесс</b> состоит из эффектов: - черно-белое изображение @@ -68,6 +70,26 @@ HDR эффект присутсвует. - nfaa - dlaa. +<b>Декали</b> . + +<b>Физика</b> . + +<b>Звуковой движок</b> поддерживает воспроизведение в пространстве и в фоне. Поддерживаемые форматы ogg, wav. Доступно создание инстансов без возможности управления. + +<b>Партиклы</b> с необходимым набором логики и с многочисленными и простыми настроками. + +<b>AI сетка</b> для навигации живых игровых объектов. + +<b>Игровой движок</b> . + +<b>Эффекты окружения</b> представлены фоновыми ambient звуками, погодой, определяемой для каждого уровня, с различными погодными эффектами. + +<b>Real-time конфигурация (cvars)</b> позволяет в режиме реального времени через консоль изменять разного рода установки движка + +<b>Редакторы:</b> + - \link level_editor SXLevelEditor - редактор уровней \endlink \n + - \link material_editor SXMaterialEditor - редактор материалов \endlink \n + - \link particles_editor SXParticlesEditor - редактор партиклов \endlink \n \section dogma_engine Идеология движка Основной технической идеей при разработке движка была идея о том что программист должен иметь контроль над объектами которыми он оперирует, НО этот контроль должен быть в меру. \n @@ -186,39 +208,81 @@ QT стиль документирования (!) и QT_AUTOBRIEF - корот /*! \page engine_cvar Движковые квары \tableofcontents -\section managed_render Managed render - \subsection pp Post process + +\section engine_cvar_naming Правила именования +Все имена кваров пишутся только в нижнем регистре, в качестве пробела используется _ (нижний пробел). +Если квар является дефолтным, относительно него буду происходит расчеты либо действия, то тогда prefix_default_cvar. + - r_ - все, что связано с рендером непосредственно + - cl_ - игрок управление + - phy_ - физика + - env_ - погода (от environment, не знаю, как сократить weather) + - pp_ - постпроцесс + - ai_ - ИИ + - mtl_ - настройки материалов + - ent_ - то, что связано с системой объектов + - lvl_ - то, что связано с уровнем + - nav_ - навигация + - snd_ - звуки + - ed_ - для редакторов + - pt_ - партиклы + + \section engine_cvar_camera Камера + - \b r_default_fov дефолтный fov + - \b r_near ближняя плоскость отсечения + - \b r_far дальняя плоскость отсечения + +\section engine_cvar_window Окно + - \b r_win_width размер окна по горизонтали (в пикселях) + - \b r_win_height размер окна по вертикали (в пикселях) + - \b r_win_windowed режим рендера true - оконный, false - полноэкранный + - \b r_final_image тип финального (выводимого в окно рендера) изображения из перечисления DS_RT + - \b r_resize тип изменения размеров окан рендера из перечисления RENDER_RESIZE + +\section engine_cvar_pp Post process - \b pp_ssao установка качества ssao (0 - не рисовать, 1 - среднее, 2 - хорошее, 3 - высокое) - \b pp_bloom рисовать ли эффект bloom (true/false) - \b pp_lensflare true рисовать ли эффект lens flare (true/false) - \b pp_lensflare_usebloom при рендере эффекта lens flare использовать ли данные от прохода эффекта bloom (true/false) - \b pp_dlaa рисовать ли эффект dlaa (true/false) - \b pp_nfaa рисовать ли эффект nfaa (true/false) + - \b pp_fog_density коэфициент плотности тумана, чем больше тем больше все в тумане, имеет смысл [0,1] - \b pp_motionblur рисовать ли эффект motion blur (true/false) - \b pp_motionblur_coef коэфициент размытия эффекта motion blur [0.0, 1.0] - \subsection light Light - - \b pssm_4or3 для рисования глобальных теней использовать 4 сплита (true) или 3 (false) - - \b pssm_q коэфициент увеличения карты глубины для глобальных теней относительно размеров окна рендера [0.5, 2] - - \b lsm_q коэфициент увеличения карты глубины для локальных теней относительно размеров окна рендера [0.5, 2] - - \b shadow_soft качество сглаживания теней (0 - без сглаживания, 1 - один проход, 2 - двойное сглаживание) - - \b hdr_adapted_coef коэфициент адаптации глаза к освещению (0,1] (медленно,быстро] +\section engine_cvar_light Свет, освещение, тени + - \b r_pssm_4or3 для рисования глобальных теней использовать 4 сплита (true) или 3 (false) + - \b r_pssm_shadowed отрасывает ли глобальный источник света тени (true/false) + - \b r_pssm_quality коэфициент увеличения карты глубины для глобальных теней относительно размеров окна рендера [0.5, 2] + - \b r_lsm_quality коэфициент увеличения карты глубины для локальных теней относительно размеров окна рендера [0.5, 2] + - \b r_shadow_soft качество сглаживания теней (0 - без сглаживания, 1 - один проход, 2 - двойное сглаживание) + - \b r_hdr_adapted_coef коэфициент адаптации глаза к освещению (0,1] (медленно,быстро] - \subsection green Растительность - - \b grass_frec плотность рендера травы (0, 100] - - \b green_lod0 дистанция от наблюдателя на которой заканчивается нулевой лод растительности (он же лод травы), то есть дальность отрисовки травы (0,100) - - \b green_lod1 дистанция от наблюдателя на которой заканчивается первый лод растительности (50,150) - - \b green_less дистанция от наблюдателя c которой начнет уменьшаться трава (0,green_lod0) - - \subsection other Прочие - - \b r_s_filter фильтрация текстур (0 - point, 1 - linear, 2 - anisotropy) - - \b r_s_max_anisotropy значение анизитропной фильтрации [0,16] - - \b r_s_max_miplevel максимально возможный mip уровень текстур [0, #SXGC_LOADTEX_COUNT_MIPMAP] - - \b p_far дальность видимости (отрисовки мира) + \section engine_cvar_green Растительность + - \b r_grass_freq плотность рендера травы (0, 100] + - \b r_green_lod0 дистанция от наблюдателя на которой заканчивается нулевой лод растительности (он же лод травы), то есть дальность отрисовки травы (0,100) + - \b r_green_lod1 дистанция от наблюдателя на которой заканчивается первый лод растительности (50,150) + - \b r_green_less дистанция от наблюдателя c которой начнет уменьшаться трава (0,green_lod0) + + \section engine_cvar_texfilter Фильтрация текстур + - \b r_texfilter_type тип фильтрации текстур, 0 - точечная, 1 - линейная, 2 - анизотропная + - \b r_texfilter_max_anisotropy максимальное значение анизотропной фильтрации (если включена) [1,16] + - \b r_texfilter_max_miplevel какой mip уровень текстур использовать? 0 - самый высокий, 1 - ниже на один уровень и т.д. + - \b r_stats показывать ли статистику? 0 - нет, 1 - fps и игровое время, 2 - показать полностью + +\section engine_cvar_env Окружение + - \b env_default_rain_density коэфициент плотности дождя (0,1] + - \b env_default_thunderbolt могут ли воспроизводится эффекты молнии? + - \b env_weather_snd_volume громкость звуков погоды [0,1] + - \b env_ambient_snd_volume громкость фоновых звуков на уровне [0,1] + +\section engine_cvar_game Игра + - \b g_time_run запущено ли игрвоое время?" + - \b g_time_speed скорость/соотношение течения игрового времени //########################################################################## \page editors Редакторы +\link level_editor SXLevelEditor - редактор уровней \endlink \n \link material_editor SXMaterialEditor - редактор материалов \endlink \n \link particles_editor SXParticlesEditor - редактор партиклов \endlink \n */ @@ -357,14 +421,6 @@ QT стиль документирования (!) и QT_AUTOBRIEF - корот //############################################################################# -//#include <managed_render/handler_log.h> -/*#include <managed_render/gdata.h> -#include <managed_render/camera_update.h> -#include <managed_render/render_func.h>*/ -//#include <managed_render/level.h> - -#include <render/sxrender.h> - #if defined(SX_GAME) #include <SkyXEngine_Build/resource.h> #endif @@ -383,22 +439,25 @@ QT стиль документирования (!) и QT_AUTOBRIEF - корот #include <sxparticleseditor/resource.h> #include <sxparticleseditor/particles_editor.h> #endif - -//#include <managed_render/redefined_func.h> -//#include <managed_render/render_func.h> - - -/*#ifndef IDI_ICON_LOGO -#define IDI_ICON_LOGO 0 -#endif*/ //############################################################################# +/*! \defgroup skyxengine Функции и данные движка +@{*/ + //! инициализация движка void SkyXEngine_Init(HWND hWnd3D = 0, HWND hWndParent3D = 0); + +//! инициализация путей в регистрах void SkyXEngine_InitPaths(); + +//! создание кваров и загрузка файлов настроек void SkyXEngine_CreateLoadCVar(); + +//! обработчик для окна рендера LRESULT CALLBACK SkyXEngine_WndProc(HWND hWnd, UINT uiMessage, WPARAM wParam, LPARAM lParam); + +//! создание окна рендера HWND SkyXEngine_CreateWindow(const char *szName, const char *szCaption, int iWidth, int iHeight); //************************************************************************** @@ -420,6 +479,7 @@ void SkyXEngine_PrintfLog(int level, const char *szFormat, ...); //! кадр void SkyXEngine_Frame(DWORD timeDelta); +//! обновление данных кваром (реакция на обновление) void SkyXEngind_UpdateDataCVar(); //! запуск основного цикла обработки @@ -428,6 +488,11 @@ int SkyXEngine_CycleMain(); //! уничтожение данных движка, освобождение памяти void SkyXEngine_Kill(); +//************************************************************************** + +/*! \name skyxengine_preview_wnd preview_wnd - Функции превью окна движка +@{*/ + //! обработчик для превьюокна LRESULT CALLBACK SkyXEngine_PreviewWndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam); @@ -437,10 +502,11 @@ void SkyXEngine_PreviewCreate(); //! уничтожение превью окна void SkyXEngine_PreviewKill(); +//!@} + //************************************************************************** -/*! \defgroup managed_render_redefined_func redefined_func - Функции обертки, для передачи графическому ядру для замены стандартных -\ingroup managed_render +/*! \name skyxengine_redefined_func redefined_func - Функции обертки, для передачи графическому ядру для замены стандартных @{*/ //! функция отрисовки, в данной версии не назначается @@ -458,6 +524,8 @@ bool SkyXEngine_RFuncAIQuadPhyNavigate(float3_t * pos); //! просчет столкновения частицы с миром bool SkyXEngine_RFuncParticlesPhyCollision(const float3 * lastpos, const float3* nextpos, float3* coll_pos, float3* coll_nrm); -//!@} managed_render_redefined_func +//!@} + +//!@} skyxengine #endif \ No newline at end of file diff --git a/source/game/SXbaseEntity.cpp b/source/game/SXbaseEntity.cpp index a5c7fc38f2e9c0d9a76fa788ed65cd22b3eb9c45..a70265c186421be292a6dc2f918d3d745e3eb39d 100644 --- a/source/game/SXbaseEntity.cpp +++ b/source/game/SXbaseEntity.cpp @@ -9,7 +9,7 @@ BEGIN_PROPTABLE_NOBASE(SXbaseEntity) DEFINE_FIELD_VECTOR(m_vPosition, 0, "origin", "Origin", EDITOR_TEXTFIELD) DEFINE_FIELD_ANGLES(m_vOrientation, 0, "rotation", "Rotation", EDITOR_TEXTFIELD) DEFINE_FIELD_PARENT(m_pParent, 0, "parent", "Parent entity", EDITOR_TEXTFIELD) - DEFINE_FIELD_FLAGS(m_iFlags, 0, "flags", "Flags", EDITOR_TEXTFIELD) + DEFINE_FIELD_FLAGS(m_iFlags, 0, "flags", "Flags", EDITOR_FLAGS) DEFINE_FIELD_ENTITY(m_pOwner, PDFF_NOEXPORT | PDFF_NOEDIT, "owner", "", EDITOR_NONE) //DEFINE_FIELD_STRING(m_szName, 0, "some opt", "Option", EDITOR_COMBOBOX) diff --git a/source/game/crosshair.cpp b/source/game/crosshair.cpp index d783efa63b4359decf9c8c30a29fdf1d10f22d2c..aa3abddf47051d9b96f8a0897bc2d038fa7dcc7f 100644 --- a/source/game/crosshair.cpp +++ b/source/game/crosshair.cpp @@ -63,12 +63,12 @@ void Crosshair::Update() } } - static const int *winr_width = GET_PCVAR_INT("winr_width"); - static const int *winr_height = GET_PCVAR_INT("winr_height"); + static const int *r_win_width = GET_PCVAR_INT("r_win_width"); + static const int *r_win_height = GET_PCVAR_INT("r_win_height"); //build new buffer - float fScreenWidth = *winr_width; - float fScreenHeight = *winr_height; + float fScreenWidth = *r_win_width; + float fScreenHeight = *r_win_height; float fTexWidth = m_f2TexSize.x; float fTexHeight = m_f2TexSize.y; float fXradius = fTexWidth / fScreenWidth * 0.5f; diff --git a/source/game/proptable.h b/source/game/proptable.h index 7dfe71ec5ace0a2a8229af338090e74212941ed9..19ab24e41e5977199b93bf25b9d6a813f15b2432 100644 --- a/source/game/proptable.h +++ b/source/game/proptable.h @@ -265,6 +265,7 @@ const char * GetEmptyString(); #define EDITOR_NONE {PDE_NONE, NULL}} #define EDITOR_TEXTFIELD {PDE_TEXTFIELD, NULL}} +#define EDITOR_FLAGS {PDE_FLAGS, NULL}} #define EDITOR_COMBOBOX _GetEditorCombobox(0 #define COMBO_OPTION(name, value) , name, value diff --git a/source/game/sxgame.h b/source/game/sxgame.h index a361a3e7cb3426e137aefef1f91686fc7bc3544a..41f37d56a92d3cf8aa0d4e5d48a38456e34c63a9 100644 --- a/source/game/sxgame.h +++ b/source/game/sxgame.h @@ -111,9 +111,11 @@ SX_LIB_API const char * SXGame_EntGetDefault(const char * classname, const char */ SX_LIB_API int SXGame_EntGetCount(); -/*! ���������� ���� entity +/*! ���������� entity �� ��� id */ -SX_LIB_API SXbaseEntity * SXGame_EntGet(ID id); +SX_LIB_API SXbaseEntity *SXGame_EntGet(ID id); + +SX_LIB_API SXbaseEntity *SXGame_EntGetByName(const char *szName, ID idStart = 0); #endif diff --git a/source/game/sxgame_dll.cpp b/source/game/sxgame_dll.cpp index c28a834fd80182d91f21961fa8e5ba476452bca3..e438e5a092ac7e16ae716de1b0bf86037375e459 100644 --- a/source/game/sxgame_dll.cpp +++ b/source/game/sxgame_dll.cpp @@ -355,8 +355,26 @@ SX_LIB_API int SXGame_EntGetCount() return(GameData::m_pMgr->GetCount()); } -SX_LIB_API SXbaseEntity * SXGame_EntGet(ID id) +SX_LIB_API SXbaseEntity *SXGame_EntGet(ID id) { SG_PRECOND(NULL); return(GameData::m_pMgr->GetById(id)); } + +SX_LIB_API SXbaseEntity *SXGame_EntGetByName(const char *szName, ID idStart) +{ + SG_PRECOND(NULL); + + SXbaseEntity *pEnt = 0; + + for (int i = 0, il = SXGame_EntGetCount(); i < il; ++i) + { + pEnt = SXGame_EntGet(i); + if (pEnt && strcmp(szName, pEnt->GetName()) == 0) + { + return pEnt; + } + } + + return 0; +} diff --git a/source/gdefines.h b/source/gdefines.h index c178c52c97e472a41fde8d5c6b40d452fa6fe80f..c95938ce80dc3d6652388fbb6718322c9253d1e5 100644 --- a/source/gdefines.h +++ b/source/gdefines.h @@ -44,7 +44,7 @@ struct IBaseObject Стандартная функция имеет ограничение на длину сообщения которое регулируется макроопределением REPORT_MSG_MAX_LEN объявленном в gdefines.h. При написании своего обработчика сообщений следует использовать данное ограничение.\n Уровни критичности сообщений объявлены в gdefines.h: \n - #REPORT_MSG_LEVEL_NOTICE - - #REPORT_MSG_LEVEL_WARRNING + - #REPORT_MSG_LEVEL_WARNING - #REPORT_MSG_LEVEL_ERROR В случае переназначения стандартной функции сообщений необходимо самостоятельно(в переназначаемой функции) обрабатывать уровни критичности, для примера можно использовать механизм стандартной функции.\n diff --git a/source/level/AmbientSounds.cpp b/source/level/AmbientSounds.cpp index 9217582bb2106411649b6a75da060d5274bc4b0f..23660b1bdae1ca2f6f625cbe60787cf495d61412 100644 --- a/source/level/AmbientSounds.cpp +++ b/source/level/AmbientSounds.cpp @@ -57,8 +57,8 @@ void CAmbientSounds::update() if (!m_isPlaying) return; - static const float * ambient_snd_volume = GET_PCVAR_FLOAT("ambient_snd_volume"); - static float ambient_snd_volume_old = 1.f; + static const float * env_ambient_snd_volume = GET_PCVAR_FLOAT("env_ambient_snd_volume"); + static float env_ambient_snd_volume_old = 1.f; if (SSCore_SndStateGet(m_aIDSnds[m_iPlayingLast]) != SOUND_OBJSTATE_PLAY) { @@ -67,15 +67,15 @@ void CAmbientSounds::update() else m_iPlayingLast = 0; - SSCore_SndVolumeSet(m_aIDSnds[m_iPlayingLast], ambient_snd_volume_old*100.f); + SSCore_SndVolumeSet(m_aIDSnds[m_iPlayingLast], env_ambient_snd_volume_old*100.f); SSCore_SndPlay(m_aIDSnds[m_iPlayingLast]); } - if (ambient_snd_volume && ambient_snd_volume_old != (*ambient_snd_volume)) + if (env_ambient_snd_volume && env_ambient_snd_volume_old != (*env_ambient_snd_volume)) { - ambient_snd_volume_old = *ambient_snd_volume; + env_ambient_snd_volume_old = *env_ambient_snd_volume; if (m_iPlayingLast >= 0) - SSCore_SndVolumeSet(m_aIDSnds[m_iPlayingLast], ambient_snd_volume_old*100.f); + SSCore_SndVolumeSet(m_aIDSnds[m_iPlayingLast], env_ambient_snd_volume_old*100.f); } } diff --git a/source/level/sxlevel.h b/source/level/sxlevel.h index 7eecf34faed3365c61bc77642409f034221a494d..e0f5baeb6d906f3d7a49d4912d5fb7c5ae7b4a8f 100644 --- a/source/level/sxlevel.h +++ b/source/level/sxlevel.h @@ -1,9 +1,14 @@ /****************************************************** -Copyright � Vitaliy Buturlin, Evgeny Danilovich, 2017 +Copyright © Vitaliy Buturlin, Evgeny Danilovich, 2017 See the license in LICENSE ******************************************************/ +/*! +\file +Заголовочный файл sxlevel, библиотека управления уровнем +*/ + #ifndef __SXLEVEL_H #define __SXLEVEL_H @@ -76,139 +81,144 @@ See the license in LICENSE //############################################################################# -//! ������ ���������� +/*! \defgroup sxlevel sxlevel - библиотека управления уровнем +@{*/ + +//! версия подсистемы SX_LIB_API long SLevel_0GetVersion(); -//! ��������� ������� ������ ��������� +//! установка функции вывода сообщений SX_LIB_API void SLevel_Dbg_Set(report_func rf); -//! ������������� ���������� +//! инициализация подсистемы SX_LIB_API void SLevel_0Create( - const char *szName, //!< ������������� ��� ���������� - bool isUnic = true //!< ������ �� ���������� ���� ���������� �� ������ ����� + const char *szName, //!< передваваемое имя подсистемы + bool isUnic = true //!< должна ли подсистема быть уникальной на основе имени ); -//! ����������� ���� +//! уничтожение либы SX_LIB_API void SLevel_AKill(); //############################################################################# -//! ������� ������ +//! очистка уровня SX_LIB_API void SLevel_Clear(); -//! �������� ������ +//! загрузка уровня SX_LIB_API void SLevel_Load(const char *szName, bool isGame); -//! ���������� ������ +//! сохранение уровня SX_LIB_API void SLevel_Save(const char *szName); -//! ���������� � ���������� ��� ������ +//! возвращает и записывает имя уровня SX_LIB_API const char* SLevel_GetName(char *szName=0); -//! �������� ����� � ����� � �������� +//! загрузка файла с инфой о частицах SX_LIB_API void SLevel_LoadParticles(); -//! ���������� ����� � ����� � �������� +//! сохранение файла с инфой о частицах SX_LIB_API void SLevel_SaveParticles(); //############################################################################# -/*! defgroup sxgame_ambient_snd ������� ����� ��������� -\ingroup sxgame -\note ����� ����������� ���������� -\note ���� �� ����� ������������ ���������� �� ������� +/*! \defgroup sxlevel_ambient_snd Фоновые звуки окружения +\ingroup sxlevel +\note Звуки проигрывают поочередно +\note Путь до звука относительно директории со звуками @{ */ -//! �������� ���� +//! добавить звук SX_LIB_API void SLevel_AmbientSndAdd(const char* path); -//! ���������� ����� ���������� ����������� ������ +//! возвращает общее количество загруженных звуков SX_LIB_API UINT SLevel_AmbientSndGetCount(); -//! � path ���������� ���� �� ����� �� ��� id +//! в path записывает путь до звука по его id SX_LIB_API void SLevel_AmbientSndGet(ID id, char* path); -//! ������� ������ ������ +//! очистка списка звуков SX_LIB_API void SLevel_AmbientSndClear(); -//! ������ ������������ ������ +//! начать проигрывание звуков SX_LIB_API void SLevel_AmbientSndPlay(); -//! ���������� ������������ +//! обновление проигрывания SX_LIB_API void SLevel_AmbientSndUpdate(); -//! ����� ������������ +//! пауза проигрывания SX_LIB_API void SLevel_AmbientSndPause(); -//! ���������� "������������� �� �����" +//! возвращает "проигрываются ли звуки" SX_LIB_API bool SLevel_AmbientSndGetPlaying(); -//!@} sxgame_ambient_snd +//!@} sxlevel_ambient_snd //############################################################################# -/*! defgroup sxgame_weather ������� ����� ��������� -\ingroup sxgame -\note ����� ������ ���������� �� ��������� �������� ������� -\note ��� ����� ������ ��� ��������� ���������� �������� ������������ ������ �� ������� ������ � ������� �� ��������� �������� �������, ������� #SXLevel_WeatherUpdate ���������� �������� � �������� ����� (� �������) ��� ������ ����� - -����-������ ������� ��: -- �������� ������ (sections) � ������� ������ ���������� ����� ������ �� �������, � ������� ��� ����� 01:11:12 ��� ������ ��� ���� �������� ��� ������ � ������� ��� 1 ���� ���� 11 ����� � 12 ������ -- ������ � ����������� ������ (��� ������� ���������� �������) -- ������ � ����������� ��������� ������, ���� ������� ������� \n - -������ ������ ������� ��: -- sky_texture - ��� �������� ��� ��������� -- sky_rotation - ���� �������� ��������� (� ��������) -- sky_color - ���� ���� float4 [0-1] ��� ������ ��� ���������� ��� ��� ����, � ��������� ���������� �� ������� ����� �������� ���� -- clouds_texture - �������� ������� -- clouds_color - ���� ������� float4 [0-1] ��� ������ ��� ���������� ��� ��� ����, � ��������� ���������� �� ������� ����� �������� ���� -- clouds_rotate - ������� ������� (� ��������) -- clouds_transparency - ������������ ������� [0-1] -- clouds_speed - �������� �������� ������� -- sun_texture - �������� ������, ���� ������� 0 �� ������ ����� ��������� -- sun_color - ���� ������ � ��������� �� ������ float3 [0-1] -- sun_pos - ������� ������ � �������� �� ��� X � Z -- far - ��������� ��������� -- rain_density ��������� ����� [0-1] -- rain_color - ���� ����� float4 [0-1] ��� ������ ��� ���������� ��� ��� ����, � ��������� ���������� �� ������� ����� �������� ���� -- thunderbolt - ����� �� ������ -- thunder_period - ������������ ������ ������ ������ -- fog_color - ���� ������ float3 [0-1] -- fog_density - ��������� ������ -- env_ambient - ��� ������ � ���������� ������� ��� ������ ������ \n - -��� ����� � ������ ������ �����������, �� ����������� env_ambient \n -��� ���������� �������� ����������� \n - -������ � ���������� ������� ������� ��: -- period - ���������� (� �����) ����� ���������������� UINT2 (�� � ��), ���������� �������� -- volume - ��������� (� ���������) ��������������� UINT2 (�� � ��), ���������� �������� -- sounds - ������ ������ ����� ������� +/*! \defgroup sxlevel_weather Погода +\ingroup sxlevel +\note Смена погоды происходит на основании игрового времени +\note При смене погоды для некоторых параметров возможна интерполяция данных от прошлой погоды к текущей на основании игрового времени, поэтому #SLevel_WeatherUpdate необходимо вызывать в основном цикле (в рендере) для планой смены + +Файл-конфиг состоит из: +- основной секции (sections) с набором ключей содержащих имена секций по времени, к примеру имя ключа 01:11:12 это значит что ключ содержит имя секции с погодой для 1 часа ночи 11 минут и 12 секунд +- секции с параметрами погоды (для каждого указанного времени) +- секции с параметрами рандомных звуков, если таковые имеются \n + +Секции погоды состоят из: +- sky_texture - имя текстуры для скайбокса +- sky_rotation - угол поворота скайбокса (в радианах) +- sky_color - цвет неба float4 [0-1] где первые три компоненты это сам цвет, а четвертая компонента на сколько будет применен цвет +- clouds_texture - текстура облаков +- clouds_color - цвет облаков float4 [0-1] где первые три компоненты это сам цвет, а четвертая компонента на сколько будет применен цвет +- clouds_rotate - поворот облаков (в радианах) +- clouds_transparency - прозрачность облаков [0-1] +- clouds_speed - скорость движения облаков +- sun_texture - текстура солнца, если указать 0 то солнце будет выключено +- sun_color - цвет солнца и освещения от солнца float3 [0-1] +- sun_pos - позиция сонлца в градусах по оси X и Z +- far - дальность видимости +- rain_density плотность дождя [0-1] +- rain_color - цвет дождя float4 [0-1] где первые три компоненты это сам цвет, а четвертая компонента на сколько будет применен цвет +- thunderbolt - будет ли молния +- thunder_period - перидичность звуков ударов молнии +- fog_color - цвет тумана float3 [0-1] +- fog_density - плотность тумана +- env_ambient - имя секции с рандомными звуками для данной погоды \n + +Все ключи в секции погоды обязательны, за исключением env_ambient \n +Все компоненты векторов обязательны \n + +Секция с рандомными звуками состоит из: +- period - промежуток (в млсек) между воспроизведением UINT2 (от и до), выбирается случайно +- volume - громкость (в процентах) воспроизведения UINT2 (от и до), выбирается случайно +- sounds - список звуков через запятую @{ */ -//! �������� ������� ������ +//! загрузка конфига погоды SX_LIB_API void SLevel_WeatherLoad(const char* path); -//! ���������� ������ +//! обновление погоды SX_LIB_API void SLevel_WeatherUpdate(); -//! ���������� ������� ��������� ����� +//! возвращает текущую плотность дождя SX_LIB_API float SLevel_WeatherGetCurrRainDensity(); -//! ������ ��������������� ������ ������ +//! начать воспроизведение звуков погоды SX_LIB_API void SLevel_WeatherSndPlay(); -//! ������������� ��������������� ������ ������ +//! приостановить воспроизведение звуков погоды SX_LIB_API void SLevel_WeatherSndPause(); -//! ���������� "��������������� �� ����� ������" +//! возвращает "воспроизводятся ли звуки погоды" SX_LIB_API bool SLevel_WeatherSndIsPlaying(); -//!@} sxgame_weather +//!@} sxlevel_weather + +//!@} sxlevel #endif \ No newline at end of file diff --git a/source/level/weather.cpp b/source/level/weather.cpp index 1e1d7a90a00fe08247beba3de14ad705350f13e5..e5c227ee0966d198e7bd7b96e0607a746bf015fb 100644 --- a/source/level/weather.cpp +++ b/source/level/weather.cpp @@ -87,7 +87,7 @@ void CWeatherRndSnd::update() if (!m_isPlaying) return; - static const float * weather_snd_volume = GET_PCVAR_FLOAT("weather_snd_volume"); + static const float * env_weather_snd_volume = GET_PCVAR_FLOAT("env_weather_snd_volume"); if (m_aCurrSndIDs.size() > 0 && (m_ulNextPlay == 0 || m_ulNextPlay < TimeGetMls(Core_RIntGet(G_RI_INT_TIMER_RENDER)))) { @@ -97,7 +97,7 @@ void CWeatherRndSnd::update() m_idCurrPlay = m_aCurrSndIDs[tmpkeysnd]; SSCore_SndPosCurrSet(m_idCurrPlay, 0); int tmprndvol = (rand() % (m_iVolumeE - m_iVolumeB)) + m_iVolumeB; - SSCore_SndVolumeSet(m_idCurrPlay, (long)(weather_snd_volume ? (float)tmprndvol * (*weather_snd_volume) : tmprndvol), SOUND_VOL_PCT); + SSCore_SndVolumeSet(m_idCurrPlay, (long)(env_weather_snd_volume ? (float)tmprndvol * (*env_weather_snd_volume) : tmprndvol), SOUND_VOL_PCT); SSCore_SndPlay(m_idCurrPlay); DWORD tmprnd = (rand() % (m_ulPeriodE - m_ulPeriodB)) + m_ulPeriodB; @@ -559,7 +559,7 @@ void CWeather::update() ID gid = SML_LigthsGetGlobal(); - static const float * weather_snd_volume = GET_PCVAR_FLOAT("weather_snd_volume"); + static const float * env_weather_snd_volume = GET_PCVAR_FLOAT("env_weather_snd_volume"); //если есть дождь то обновл¤ем его позицию и громкость if (m_iSectionCurr >= 0 && (int)m_aTimeSections.size() > m_iSectionCurr && m_aTimeSections[m_iSectionCurr].m_DataSection.m_fRainDensity > 0.f) @@ -570,14 +570,14 @@ void CWeather::update() updateRainSound(); } - static float * main_rain_density = (float*)GET_PCVAR_FLOAT("main_rain_density"); - static float main_rain_density_old = 1.f; + static float * env_default_rain_density = (float*)GET_PCVAR_FLOAT("env_default_rain_density"); + static float env_default_rain_density_old = 1.f; - if (main_rain_density && (*main_rain_density) != main_rain_density_old) + if (env_default_rain_density && (*env_default_rain_density) != env_default_rain_density_old) { - main_rain_density_old = *main_rain_density; + env_default_rain_density_old = *env_default_rain_density; if (m_aTimeSections[m_iSectionCurr].m_DataSection.m_fRainDensity > 0.f) - SPE_EmitterSet(m_idEffRain, 0, ReCreateCount, main_rain_density_old * m_aTimeSections[m_iSectionCurr].m_DataSection.m_fRainDensity * float(WEATHER_RAIN_RECREATE_COUNT)); + SPE_EmitterSet(m_idEffRain, 0, ReCreateCount, env_default_rain_density_old * m_aTimeSections[m_iSectionCurr].m_DataSection.m_fRainDensity * float(WEATHER_RAIN_RECREATE_COUNT)); } //получаем текущую игровую дату @@ -638,7 +638,7 @@ void CWeather::update() if (m_aTimeSections[m_iSectionCurr].m_DataSection.m_fRainDensity > 0.f) { SPE_EmitterSet(m_idEffRain, 0, Color, m_aTimeSections[m_iSectionCurr].m_DataSection.m_vRainColor); - SPE_EmitterSet(m_idEffRain, 0, ReCreateCount, main_rain_density_old * m_aTimeSections[m_iSectionCurr].m_DataSection.m_fRainDensity * float(WEATHER_RAIN_RECREATE_COUNT)); + SPE_EmitterSet(m_idEffRain, 0, ReCreateCount, env_default_rain_density_old * m_aTimeSections[m_iSectionCurr].m_DataSection.m_fRainDensity * float(WEATHER_RAIN_RECREATE_COUNT)); SPE_EffectEnableSet(m_idEffRain, true); SSCore_SndPosCurrSet(m_idSndRain, 0); @@ -727,7 +727,7 @@ void CWeather::update() //дальность видимости float tmpfar = lerpf(m_aTimeSections[m_iSectionOld].m_DataSection.m_fFar, m_aTimeSections[m_iSectionCurr].m_DataSection.m_fFar, lerp_factor); - Core_0SetCVarFloat("p_far", tmpfar); + Core_0SetCVarFloat("r_far", tmpfar); //плотность тумана static float * pp_fog_density = (float*)GET_PCVAR_FLOAT("pp_fog_density"); @@ -756,9 +756,9 @@ void CWeather::update() //иначе если предыдущее врем¤ грозы нулевое и врем¤ следующей грозы наступило else if (m_ulTimeBoltLast == 0 && TimeGetMls(Core_RIntGet(G_RI_INT_TIMER_RENDER)) >= m_ulTimeBoltNext) { - static const bool * main_thunderbolt = GET_PCVAR_BOOL("main_thunderbolt"); + static const bool * env_default_thunderbolt = GET_PCVAR_BOOL("env_default_thunderbolt"); //если предусмотерна молни¤ то показываем - if (m_aTimeSections[m_iSectionCurr].m_DataSection.m_hasThunderbolt && (!main_thunderbolt || (main_thunderbolt && *main_thunderbolt))) + if (m_aTimeSections[m_iSectionCurr].m_DataSection.m_hasThunderbolt && (!env_default_thunderbolt || (env_default_thunderbolt && *env_default_thunderbolt))) { static float3 campos; Core_RFloat3Set(G_RI_FLOAT3_OBSERVER_POSITION, &campos); @@ -776,7 +776,7 @@ void CWeather::update() else { SSCore_SndPosCurrSet(m_idSndThunder, 0); - SSCore_SndVolumeSet(m_idSndThunder, (weather_snd_volume ? (*weather_snd_volume) : 1.f) * 100.f, SOUND_VOL_PCT); + SSCore_SndVolumeSet(m_idSndThunder, (env_weather_snd_volume ? (*env_weather_snd_volume) : 1.f) * 100.f, SOUND_VOL_PCT); if (m_isPlaying) SSCore_SndPlay(m_idSndThunder); @@ -823,7 +823,7 @@ void CWeather::updateRainSound() if (m_idEffRain < 0 || !m_isPlaying) return; - static const float * weather_snd_volume = GET_PCVAR_FLOAT("weather_snd_volume"); + static const float * env_weather_snd_volume = GET_PCVAR_FLOAT("env_weather_snd_volume"); //если пришло врем¤ обновл¤ть громкость if (m_ulTimeRainVolSndLast == 0 || TimeGetMls(Core_RIntGet(G_RI_INT_TIMER_RENDER)) - m_ulTimeRainVolSndLast >= WEATHER_RAIN_VOL_SND_UPDATE) @@ -854,7 +854,7 @@ void CWeather::updateRainSound() } m_fRainVolume /= tmpcount / 4; - SSCore_SndVolumeSet(m_idSndRain, (weather_snd_volume ? (*weather_snd_volume) : 1.f) * m_fRainVolume * 100.f, SOUND_VOL_PCT); + SSCore_SndVolumeSet(m_idSndRain, (env_weather_snd_volume ? (*env_weather_snd_volume) : 1.f) * m_fRainVolume * 100.f, SOUND_VOL_PCT); } float CWeather::getCurrRainDensity() diff --git a/source/mtllight/light.cpp b/source/mtllight/light.cpp index 2ec8c0a778299777a27631531999c1c1d4316c60..2ce59c31ff6a80cc4e3b4feecf12f367442b85d2 100644 --- a/source/mtllight/light.cpp +++ b/source/mtllight/light.cpp @@ -5,11 +5,11 @@ Lights::Lights() { HowShadow = 0; - const int *winr_width = GET_PCVAR_INT("winr_width"); - const int *winr_height = GET_PCVAR_INT("winr_height"); + const int *r_win_width = GET_PCVAR_INT("r_win_width"); + const int *r_win_height = GET_PCVAR_INT("r_win_height"); - ShadowMap = SGCore_RTAdd(*winr_width, *winr_height, 1, D3DUSAGE_RENDERTARGET, D3DFMT_R16F, D3DPOOL_DEFAULT, "shadowmap", 1); - ShadowMap2 = SGCore_RTAdd(*winr_width, *winr_height, 1, D3DUSAGE_RENDERTARGET, D3DFMT_R16F, D3DPOOL_DEFAULT, "shadowmap2", 1); + ShadowMap = SGCore_RTAdd(*r_win_width, *r_win_height, 1, D3DUSAGE_RENDERTARGET, D3DFMT_R16F, D3DPOOL_DEFAULT, "shadowmap", 1); + ShadowMap2 = SGCore_RTAdd(*r_win_width, *r_win_height, 1, D3DUSAGE_RENDERTARGET, D3DFMT_R16F, D3DPOOL_DEFAULT, "shadowmap2", 1); GlobalLight = -1; m_isCastGlobalShadow = false; @@ -1257,11 +1257,11 @@ void Lights::ShadowSoft(bool randomsam, float size, bool isfirst) if (isfirst) HowShadow = 0; - static const int *winr_width = GET_PCVAR_INT("winr_width"); - static const int *winr_height = GET_PCVAR_INT("winr_height"); + static const int *r_win_width = GET_PCVAR_INT("r_win_width"); + static const int *r_win_height = GET_PCVAR_INT("r_win_height"); - static const float *p_near = GET_PCVAR_FLOAT("p_near"); - static const float *p_far = GET_PCVAR_FLOAT("p_far"); + static const float *r_near = GET_PCVAR_FLOAT("r_near"); + static const float *r_far = GET_PCVAR_FLOAT("r_far"); LPDIRECT3DSURFACE9 RenderSurf,BackBuf; @@ -1299,13 +1299,13 @@ void Lights::ShadowSoft(bool randomsam, float size, bool isfirst) if(randomsam) { - SGCore_ShaderSetVRF(SHADER_TYPE_PIXEL, MLSet::IDsShaders::PS::PPBlurDepthBasedNoise, "PixelSize", &float2_t(size / float(*winr_width), size / float(*winr_height))); - SGCore_ShaderSetVRF(SHADER_TYPE_PIXEL, MLSet::IDsShaders::PS::PPBlurDepthBasedNoise, "NearFar", &float2_t(*p_near, *p_far)); + SGCore_ShaderSetVRF(SHADER_TYPE_PIXEL, MLSet::IDsShaders::PS::PPBlurDepthBasedNoise, "PixelSize", &float2_t(size / float(*r_win_width), size / float(*r_win_height))); + SGCore_ShaderSetVRF(SHADER_TYPE_PIXEL, MLSet::IDsShaders::PS::PPBlurDepthBasedNoise, "NearFar", &float2_t(*r_near, *r_far)); } else { - SGCore_ShaderSetVRF(SHADER_TYPE_PIXEL, MLSet::IDsShaders::PS::PPBlurDepthBased, "PixelSize", &float2_t(size / float(*winr_width), size / float(*winr_height))); - SGCore_ShaderSetVRF(SHADER_TYPE_PIXEL, MLSet::IDsShaders::PS::PPBlurDepthBased, "NearFar", &float2_t(*p_near, *p_far)); + SGCore_ShaderSetVRF(SHADER_TYPE_PIXEL, MLSet::IDsShaders::PS::PPBlurDepthBased, "PixelSize", &float2_t(size / float(*r_win_width), size / float(*r_win_height))); + SGCore_ShaderSetVRF(SHADER_TYPE_PIXEL, MLSet::IDsShaders::PS::PPBlurDepthBased, "NearFar", &float2_t(*r_near, *r_far)); } @@ -1326,10 +1326,10 @@ void Lights::ShadowSoft(bool randomsam, float size, bool isfirst) void Lights::ToneMappingCom(DWORD timeDelta, float factor_adapted) { - static const int *winr_width = GET_PCVAR_INT("winr_width"); - static const int *winr_height = GET_PCVAR_INT("winr_height"); + static const int *r_win_width = GET_PCVAR_INT("r_win_width"); + static const int *r_win_height = GET_PCVAR_INT("r_win_height"); - MLSet::GetArrDownScale4x4(*winr_width, *winr_height, MLSet::HDRSampleOffsets); + MLSet::GetArrDownScale4x4(*r_win_width, *r_win_height, MLSet::HDRSampleOffsets); LPDIRECT3DSURFACE9 SurfSceneScale, BackBuf; diff --git a/source/mtllight/material.cpp b/source/mtllight/material.cpp index c9abad27f6880f81f9f1e12ac2e1aa886c9cad9a..03cb3ba29402ed55e980e593ea88f11b08a9974c 100644 --- a/source/mtllight/material.cpp +++ b/source/mtllight/material.cpp @@ -1892,11 +1892,11 @@ void Materials::Render(ID id, float4x4* world) { MTL_PRE_COND_ID(id); - static const int *winr_width = GET_PCVAR_INT("winr_width"); - static const int *winr_height = GET_PCVAR_INT("winr_height"); + static const int *r_win_width = GET_PCVAR_INT("r_win_width"); + static const int *r_win_height = GET_PCVAR_INT("r_win_height"); - static const float *p_near = GET_PCVAR_FLOAT("p_near"); - static const float *p_far = GET_PCVAR_FLOAT("p_far"); + static const float *r_near = GET_PCVAR_FLOAT("r_near"); + static const float *r_far = GET_PCVAR_FLOAT("r_far"); if (!world) world = &(SMMatrixIdentity()); @@ -2074,10 +2074,10 @@ void Materials::Render(ID id, float4x4* world) SGCore_ShaderSetVRF(SHADER_TYPE_PIXEL, tmpmaterial->PreShaderPS, "TimeDelta", &float2(CountTimeDelta, float(CurrTimeDelta) * 0.001f)); if (tmpmaterial->VS.IsTransWinSize) - SGCore_ShaderSetVRF(SHADER_TYPE_VERTEX, tmpmaterial->PreShaderVS, "WinSize", &float2_t(*winr_width, *winr_height)); + SGCore_ShaderSetVRF(SHADER_TYPE_VERTEX, tmpmaterial->PreShaderVS, "WinSize", &float2_t(*r_win_width, *r_win_height)); if (tmpmaterial->PS.IsTransWinSize) - SGCore_ShaderSetVRF(SHADER_TYPE_PIXEL, tmpmaterial->PreShaderPS, "WinSize", &float2_t(*winr_width, *winr_height)); + SGCore_ShaderSetVRF(SHADER_TYPE_PIXEL, tmpmaterial->PreShaderPS, "WinSize", &float2_t(*r_win_width, *r_win_height)); //если материалом назначен альфа тест и не включен принудительный if (tmpmaterial->IsAlphaTest && !IsForceblyAlphaTest) @@ -2125,7 +2125,7 @@ void Materials::Render(ID id, float4x4* world) if (tmpmaterial->LightParam.TypeRefraction == MTLTYPE_TRANSPARENCY_ALPHA_LIGHT) ++(CurrIdSurf); - SGCore_ShaderSetVRF(SHADER_TYPE_PIXEL, tmpmaterial->PreShaderPS, "NearFarIsUnlit", &float4_t(*p_near, *p_far, zz, float(CurrIdSurf) / 255.f)); + SGCore_ShaderSetVRF(SHADER_TYPE_PIXEL, tmpmaterial->PreShaderPS, "NearFarIsUnlit", &float4_t(*r_near, *r_far, zz, float(CurrIdSurf) / 255.f)); } } diff --git a/source/mtllight/ml_data.cpp b/source/mtllight/ml_data.cpp index 2cdbc1556d3e19a91d16f64a68d98912cc871ea5..4f786f7dd1fd64a6b8fda2de2602e3569a298e26 100644 --- a/source/mtllight/ml_data.cpp +++ b/source/mtllight/ml_data.cpp @@ -30,14 +30,14 @@ namespace MLSet void ReCalcSize() { - static const int *winr_width = GET_PCVAR_INT("winr_width"); - static const int *winr_height = GET_PCVAR_INT("winr_height"); + static const int *r_win_width = GET_PCVAR_INT("r_win_width"); + static const int *r_win_height = GET_PCVAR_INT("r_win_height"); - SizeTexDepthGlobal.x = float(*winr_width) * CoefSizeDepthMapForGlobal; - SizeTexDepthGlobal.y = float(*winr_height) * CoefSizeDepthMapForGlobal; + SizeTexDepthGlobal.x = float(*r_win_width) * CoefSizeDepthMapForGlobal; + SizeTexDepthGlobal.y = float(*r_win_height) * CoefSizeDepthMapForGlobal; - SizeTexDepthLocal.x = float(*winr_width) * CoefSizeDepthMapForLocal; - SizeTexDepthLocal.y = float(*winr_height) * CoefSizeDepthMapForLocal; + SizeTexDepthLocal.x = float(*r_win_width) * CoefSizeDepthMapForLocal; + SizeTexDepthLocal.y = float(*r_win_height) * CoefSizeDepthMapForLocal; } void GetArrDownScale4x4(DWORD width, DWORD height, float2 arr[]); @@ -171,8 +171,8 @@ void MLSet::MLInit() { MLSet::DXDevice = SGCore_GetDXDevice(); - const int *winr_width = GET_PCVAR_INT("winr_width"); - const int *winr_height = GET_PCVAR_INT("winr_height"); + const int *r_win_width = GET_PCVAR_INT("r_win_width"); + const int *r_win_height = GET_PCVAR_INT("r_win_height"); const float *r_default_fov = GET_PCVAR_FLOAT("r_default_fov"); @@ -322,7 +322,7 @@ void MLSet::MLInit() ////////// float tmpcoefsizert = 1; - float2_t tmp_sizert = float2_t(float(*winr_width) * tmpcoefsizert, (*winr_height) * tmpcoefsizert); + float2_t tmp_sizert = float2_t(float(*r_win_width) * tmpcoefsizert, (*r_win_height) * tmpcoefsizert); //цвет (текстуры) MLSet::IDsRenderTargets::ColorScene = SGCore_RTAdd(tmp_sizert.x, tmp_sizert.y, 1, D3DUSAGE_RENDERTARGET, D3DFMT_A8R8G8B8, D3DPOOL_DEFAULT, "ds_color", tmpcoefsizert); @@ -345,7 +345,7 @@ void MLSet::MLInit() while (true) { int tmpsize = 1 << (2 * tmpcount); - if (tmpsize >= float(*winr_width)*0.25 || tmpsize > (*winr_height)*0.25) + if (tmpsize >= float(*r_win_width)*0.25 || tmpsize > (*r_win_height)*0.25) break; MLSet::IDsRenderTargets::ToneMaps[tmpcount] = SGCore_RTAdd(tmpsize, tmpsize, 1, D3DUSAGE_RENDERTARGET, D3DFMT_R16F, D3DPOOL_DEFAULT, "qq", 0); MLSet::IDsRenderTargets::SurfToneMap[tmpcount] = 0; @@ -356,13 +356,13 @@ void MLSet::MLInit() MLSet::IDsRenderTargets::AdaptLumCurr = SGCore_RTAdd(1, 1, 1, D3DUSAGE_RENDERTARGET, D3DFMT_R16F, D3DPOOL_DEFAULT, "", 0); MLSet::IDsRenderTargets::AdaptLumLast = SGCore_RTAdd(1, 1, 1, D3DUSAGE_RENDERTARGET, D3DFMT_R16F, D3DPOOL_DEFAULT, "", 0); - MLSet::IDsRenderTargets::LigthCom = SGCore_RTAdd(*winr_width, *winr_height, 1, D3DUSAGE_RENDERTARGET, D3DFMT_A16B16G16R16F, D3DPOOL_DEFAULT, "ds_lightcom", 1); - MLSet::IDsRenderTargets::LigthCom2 = SGCore_RTAdd(*winr_width, *winr_height, 1, D3DUSAGE_RENDERTARGET, D3DFMT_A16B16G16R16F, D3DPOOL_DEFAULT, "ds_lightcom2", 1); - MLSet::IDsRenderTargets::LigthCom3 = SGCore_RTAdd(*winr_width, *winr_height, 1, D3DUSAGE_RENDERTARGET, D3DFMT_A8R8G8B8, D3DPOOL_DEFAULT, "ds_lightcom3", 1); + MLSet::IDsRenderTargets::LigthCom = SGCore_RTAdd(*r_win_width, *r_win_height, 1, D3DUSAGE_RENDERTARGET, D3DFMT_A16B16G16R16F, D3DPOOL_DEFAULT, "ds_lightcom", 1); + MLSet::IDsRenderTargets::LigthCom2 = SGCore_RTAdd(*r_win_width, *r_win_height, 1, D3DUSAGE_RENDERTARGET, D3DFMT_A16B16G16R16F, D3DPOOL_DEFAULT, "ds_lightcom2", 1); + MLSet::IDsRenderTargets::LigthCom3 = SGCore_RTAdd(*r_win_width, *r_win_height, 1, D3DUSAGE_RENDERTARGET, D3DFMT_A8R8G8B8, D3DPOOL_DEFAULT, "ds_lightcom3", 1); - MLSet::IDsRenderTargets::LigthComScaled = SGCore_RTAdd(float(*winr_width)*0.25f, float(*winr_height)*0.25f, 1, D3DUSAGE_RENDERTARGET, D3DFMT_A16B16G16R16F, D3DPOOL_DEFAULT, "ds_lightcomscaled", 0.25); + MLSet::IDsRenderTargets::LigthComScaled = SGCore_RTAdd(float(*r_win_width)*0.25f, float(*r_win_height)*0.25f, 1, D3DUSAGE_RENDERTARGET, D3DFMT_A16B16G16R16F, D3DPOOL_DEFAULT, "ds_lightcomscaled", 0.25); - MLSet::RefMProjPlane = SMMatrixPerspectiveFovLH(*r_default_fov, float(*winr_width) / float(*winr_height), MTl_REF_PROJ_NEAR, MTl_REF_PROJ_FAR); + MLSet::RefMProjPlane = SMMatrixPerspectiveFovLH(*r_default_fov, float(*r_win_width) / float(*r_win_height), MTl_REF_PROJ_NEAR, MTl_REF_PROJ_FAR); MLSet::RefMProjCube = SMMatrixPerspectiveFovLH(SM_PI * 0.5f, 1, MTl_REF_PROJ_NEAR, MTl_REF_PROJ_FAR); } diff --git a/source/mtllight/shadow.cpp b/source/mtllight/shadow.cpp index 76b0a9d199c324918b1e44501d43661e18d9a0cc..20c69f5ee6a3fb3248ea1eeab6b279d011208460 100644 --- a/source/mtllight/shadow.cpp +++ b/source/mtllight/shadow.cpp @@ -115,8 +115,8 @@ void PSSM::OnLostDevice() void PSSM::OnResetDevice() { - static const int *winr_width = GET_PCVAR_INT("winr_width"); - static const int *winr_height = GET_PCVAR_INT("winr_height"); + static const int *r_win_width = GET_PCVAR_INT("r_win_width"); + static const int *r_win_height = GET_PCVAR_INT("r_win_height"); static const float *r_default_fov = GET_PCVAR_FLOAT("r_default_fov"); @@ -135,7 +135,7 @@ void PSSM::OnResetDevice() MLSet::DXDevice->CreateDepthStencilSurface(MLSet::SizeTexDepthGlobal.x, MLSet::SizeTexDepthGlobal.y, D3DFMT_D24X8,D3DMULTISAMPLE_NONE, 0, TRUE, &DepthStencilSurface, NULL); FovRatio.x = *r_default_fov; - FovRatio.y = float(*winr_width) / float(*winr_height); + FovRatio.y = float(*r_win_width) / float(*r_win_height); float2 fOffset = float2(0.5, 0.5) - (float2(0.5f, 0.5f) / MLSet::SizeTexDepthGlobal); float range = 1.0f; @@ -148,16 +148,16 @@ void PSSM::OnResetDevice() void PSSM::Init() { - static const int *winr_width = GET_PCVAR_INT("winr_width"); - static const int *winr_height = GET_PCVAR_INT("winr_height"); + static const int *r_win_width = GET_PCVAR_INT("r_win_width"); + static const int *r_win_height = GET_PCVAR_INT("r_win_height"); static const float *r_default_fov = GET_PCVAR_FLOAT("r_default_fov"); - static const float *p_near = GET_PCVAR_FLOAT("p_near"); - static const float *p_far = GET_PCVAR_FLOAT("p_far"); + static const float *r_near = GET_PCVAR_FLOAT("r_near"); + static const float *r_far = GET_PCVAR_FLOAT("r_far"); FovRatio.x = *r_default_fov; - FovRatio.y = float(*winr_width) / float(*winr_height); + FovRatio.y = float(*r_win_width) / float(*r_win_height); for(int i=0;i<5;i++) { @@ -170,7 +170,7 @@ void PSSM::Init() Frustums[i] = SGCore_CrFrustum(); } - NearFar[0].x = *p_near; + NearFar[0].x = *r_near; NearFar[0].y = MLSet::DistForPSSM.x; NearFar[1].x = MLSet::DistForPSSM.x; @@ -183,8 +183,8 @@ void PSSM::Init() NearFar[3].y = MLSet::DistForPSSM.w; - NearFar[4].x = *p_near; - NearFar[4].y = *p_far; + NearFar[4].x = *r_near; + NearFar[4].y = *r_far; MLSet::DXDevice->CreateDepthStencilSurface(MLSet::SizeTexDepthGlobal.x, MLSet::SizeTexDepthGlobal.y, D3DFMT_D24X8,D3DMULTISAMPLE_NONE, 0, TRUE, &DepthStencilSurface, NULL); @@ -200,13 +200,13 @@ void PSSM::Init() void PSSM::UpdateFrustums(int split, const float3* poscam, const float3* dircam) { - static const int *winr_width = GET_PCVAR_INT("winr_width"); - static const int *winr_height = GET_PCVAR_INT("winr_height"); + static const int *r_win_width = GET_PCVAR_INT("r_win_width"); + static const int *r_win_height = GET_PCVAR_INT("r_win_height"); static const float *r_default_fov = GET_PCVAR_FLOAT("r_default_fov"); FovRatio.x = *r_default_fov; - FovRatio.y = float(*winr_width) / float(*winr_height); + FovRatio.y = float(*r_win_width) / float(*r_win_height); Frustums[split]->Update(&(Views[split]), &(Projs[split])); @@ -415,13 +415,13 @@ void PSSM::Flickering(float4x4 *matLVP,float size_x,float size_y) void PSSM::GenShadow2(IDirect3DTexture9* shadowmap) { - static const int *winr_width = GET_PCVAR_INT("winr_width"); - static const int *winr_height = GET_PCVAR_INT("winr_height"); + static const int *r_win_width = GET_PCVAR_INT("r_win_width"); + static const int *r_win_height = GET_PCVAR_INT("r_win_height"); static const float *r_default_fov = GET_PCVAR_FLOAT("r_default_fov"); - static const float *p_near = GET_PCVAR_FLOAT("p_near"); - static const float *p_far = GET_PCVAR_FLOAT("p_far"); + static const float *r_near = GET_PCVAR_FLOAT("r_near"); + static const float *r_far = GET_PCVAR_FLOAT("r_far"); LPDIRECT3DSURFACE9 RenderSurf, BackBuf; @@ -468,8 +468,8 @@ void PSSM::GenShadow2(IDirect3DTexture9* shadowmap) float3 observerpos; Core_RFloat3Get(G_RI_FLOAT3_OBSERVER_POSITION, &observerpos); - SGCore_ShaderSetVRF(SHADER_TYPE_VERTEX, MLSet::IDsShaders::VS::ResPosDepth, "ParamProj", &float3_t(*winr_width, *winr_height, *r_default_fov)); - SGCore_ShaderSetVRF(SHADER_TYPE_VERTEX, MLSet::IDsShaders::VS::ResPosDepth, "NearFar", &float2_t(*p_near, *p_far)); + SGCore_ShaderSetVRF(SHADER_TYPE_VERTEX, MLSet::IDsShaders::VS::ResPosDepth, "ParamProj", &float3_t(*r_win_width, *r_win_height, *r_default_fov)); + SGCore_ShaderSetVRF(SHADER_TYPE_VERTEX, MLSet::IDsShaders::VS::ResPosDepth, "NearFar", &float2_t(*r_near, *r_far)); SGCore_ShaderSetVRF(SHADER_TYPE_VERTEX, MLSet::IDsShaders::VS::ResPosDepth, "ViewInv", &ViewInv); @@ -477,14 +477,14 @@ void PSSM::GenShadow2(IDirect3DTexture9* shadowmap) { SGCore_ShaderSetVRF(SHADER_TYPE_PIXEL, MLSet::IDsShaders::PS::PSSM4, "PosCam", &observerpos); SGCore_ShaderSetVRF(SHADER_TYPE_PIXEL, MLSet::IDsShaders::PS::PSSM4, "PixelSize", &float2(BlurPixel / MLSet::SizeTexDepthGlobal.x, BlurPixel / MLSet::SizeTexDepthGlobal.y)); - SGCore_ShaderSetVRF(SHADER_TYPE_PIXEL, MLSet::IDsShaders::PS::PSSM4, "NearFar", &float2_t(*p_near, *p_far)); + SGCore_ShaderSetVRF(SHADER_TYPE_PIXEL, MLSet::IDsShaders::PS::PSSM4, "NearFar", &float2_t(*r_near, *r_far)); SGCore_ShaderSetVRF(SHADER_TYPE_PIXEL, MLSet::IDsShaders::PS::PSSM4, "DistSplit", &float4(NearFar[0].y, NearFar[1].y, NearFar[2].y, NearFar[3].y)); } else { SGCore_ShaderSetVRF(SHADER_TYPE_PIXEL, MLSet::IDsShaders::PS::PSSM3, "PosCam", &observerpos); SGCore_ShaderSetVRF(SHADER_TYPE_PIXEL, MLSet::IDsShaders::PS::PSSM3, "PixelSize", &float2(BlurPixel / MLSet::SizeTexDepthGlobal.x, BlurPixel / MLSet::SizeTexDepthGlobal.y)); - SGCore_ShaderSetVRF(SHADER_TYPE_PIXEL, MLSet::IDsShaders::PS::PSSM3, "NearFar", &float2_t(*p_near, *p_far)); + SGCore_ShaderSetVRF(SHADER_TYPE_PIXEL, MLSet::IDsShaders::PS::PSSM3, "NearFar", &float2_t(*r_near, *r_far)); SGCore_ShaderSetVRF(SHADER_TYPE_PIXEL, MLSet::IDsShaders::PS::PSSM3, "DistSplit", &float4(NearFar[0].y, NearFar[1].y, NearFar[2].y, NearFar[3].y)); } @@ -742,13 +742,13 @@ void ShadowMapTech::End() void ShadowMapTech::GenShadow2(IDirect3DTexture9* shadowmap) { - static const int *winr_width = GET_PCVAR_INT("winr_width"); - static const int *winr_height = GET_PCVAR_INT("winr_height"); + static const int *r_win_width = GET_PCVAR_INT("r_win_width"); + static const int *r_win_height = GET_PCVAR_INT("r_win_height"); static const float *r_default_fov = GET_PCVAR_FLOAT("r_default_fov"); - static const float *p_near = GET_PCVAR_FLOAT("p_near"); - static const float *p_far = GET_PCVAR_FLOAT("p_far"); + static const float *r_near = GET_PCVAR_FLOAT("r_near"); + static const float *r_far = GET_PCVAR_FLOAT("r_far"); LPDIRECT3DSURFACE9 RenderSurf, BackBuf; shadowmap->GetSurfaceLevel(0, &RenderSurf); @@ -786,8 +786,8 @@ void ShadowMapTech::GenShadow2(IDirect3DTexture9* shadowmap) else SGCore_ShaderBind(SHADER_TYPE_PIXEL, MLSet::IDsShaders::PS::GenShadowDirect9); - SGCore_ShaderSetVRF(SHADER_TYPE_VERTEX, MLSet::IDsShaders::VS::ResPosDepth, "ParamProj", &float3_t(*winr_width, *winr_height, *r_default_fov)); - SGCore_ShaderSetVRF(SHADER_TYPE_VERTEX, MLSet::IDsShaders::VS::ResPosDepth, "NearFar", &float2_t(*p_near, *p_far)); + SGCore_ShaderSetVRF(SHADER_TYPE_VERTEX, MLSet::IDsShaders::VS::ResPosDepth, "ParamProj", &float3_t(*r_win_width, *r_win_height, *r_default_fov)); + SGCore_ShaderSetVRF(SHADER_TYPE_VERTEX, MLSet::IDsShaders::VS::ResPosDepth, "NearFar", &float2_t(*r_near, *r_far)); float3 observerpos; Core_RFloat3Get(G_RI_FLOAT3_OBSERVER_POSITION, &observerpos); @@ -1082,13 +1082,13 @@ void ShadowMapCubeTech::End() void ShadowMapCubeTech::GenShadow2(IDirect3DTexture9* shadowmap) { - static const int *winr_width = GET_PCVAR_INT("winr_width"); - static const int *winr_height = GET_PCVAR_INT("winr_height"); + static const int *r_win_width = GET_PCVAR_INT("r_win_width"); + static const int *r_win_height = GET_PCVAR_INT("r_win_height"); static const float *r_default_fov = GET_PCVAR_FLOAT("r_default_fov"); - static const float *p_near = GET_PCVAR_FLOAT("p_near"); - static const float *p_far = GET_PCVAR_FLOAT("p_far"); + static const float *r_near = GET_PCVAR_FLOAT("r_near"); + static const float *r_far = GET_PCVAR_FLOAT("r_far"); LPDIRECT3DSURFACE9 RenderSurf, BackBuf; @@ -1116,8 +1116,8 @@ void ShadowMapCubeTech::GenShadow2(IDirect3DTexture9* shadowmap) else SGCore_ShaderBind(SHADER_TYPE_PIXEL, MLSet::IDsShaders::PS::GenShadowCube6); - SGCore_ShaderSetVRF(SHADER_TYPE_VERTEX, MLSet::IDsShaders::VS::ResPosDepth, "ParamProj", &float3_t(*winr_width, *winr_height, *r_default_fov)); - SGCore_ShaderSetVRF(SHADER_TYPE_VERTEX, MLSet::IDsShaders::VS::ResPosDepth, "NearFar", &float2_t(*p_near, *p_far)); + SGCore_ShaderSetVRF(SHADER_TYPE_VERTEX, MLSet::IDsShaders::VS::ResPosDepth, "ParamProj", &float3_t(*r_win_width, *r_win_height, *r_default_fov)); + SGCore_ShaderSetVRF(SHADER_TYPE_VERTEX, MLSet::IDsShaders::VS::ResPosDepth, "NearFar", &float2_t(*r_near, *r_far)); float pixel_size = BlurPixel / MLSet::SizeTexDepthLocal.x; float3 observerpos; diff --git a/source/mtllight/sxmtllight.cpp b/source/mtllight/sxmtllight.cpp index 859d23c7727b03061e3c153343efbf8d01225c46..219108b7021ee5a8237b3dcc098c0e03576fecd4 100644 --- a/source/mtllight/sxmtllight.cpp +++ b/source/mtllight/sxmtllight.cpp @@ -111,15 +111,15 @@ SX_LIB_API void SML_OnResetDevice() SX_LIB_API void SML_Update(DWORD timeDelta) { - static const int *winr_width = GET_PCVAR_INT("winr_width"); - static const int *winr_height = GET_PCVAR_INT("winr_height"); + static const int *r_win_width = GET_PCVAR_INT("r_win_width"); + static const int *r_win_height = GET_PCVAR_INT("r_win_height"); static const float *r_default_fov = GET_PCVAR_FLOAT("r_default_fov"); if (ArrMaterials) ArrMaterials->Update(timeDelta); - MLSet::RefMProjPlane = SMMatrixPerspectiveFovLH(*r_default_fov, float(*winr_width) / float(*winr_height), MTl_REF_PROJ_NEAR, MTl_REF_PROJ_FAR); + MLSet::RefMProjPlane = SMMatrixPerspectiveFovLH(*r_default_fov, float(*r_win_width) / float(*r_win_height), MTl_REF_PROJ_NEAR, MTl_REF_PROJ_FAR); MLSet::RefMProjCube = SMMatrixPerspectiveFovLH(SM_PI * 0.5f, 1, MTl_REF_PROJ_NEAR, MTl_REF_PROJ_FAR); } diff --git a/source/particles/emitter.cpp b/source/particles/emitter.cpp index 58dff55a7e7d7e4fc2c4acce7e072729c9c19e0d..8c50a071e630ab8d262f2ac6b120958630738216 100644 --- a/source/particles/emitter.cpp +++ b/source/particles/emitter.cpp @@ -1199,8 +1199,8 @@ void Emitter::Compute(const float4x4 * mat) void Emitter::Render(DWORD timeDelta, float4x4* matrot, float4x4* matpos) { - static const float *p_near = GET_PCVAR_FLOAT("p_near"); - static const float *p_far = GET_PCVAR_FLOAT("p_far"); + static const float *r_near = GET_PCVAR_FLOAT("r_near"); + static const float *r_far = GET_PCVAR_FLOAT("r_far"); if (!Enable) return; @@ -1249,8 +1249,8 @@ void Emitter::Render(DWORD timeDelta, float4x4* matrot, float4x4* matpos) static float2_t NearFar; static float3 ConstCamPos; Core_RFloat3Get(G_RI_FLOAT3_OBSERVER_POSITION, &ConstCamPos); - NearFar.x = *p_near; - NearFar.y = *p_far; + NearFar.x = *r_near; + NearFar.y = *r_far; Core_RMatrixGet(G_RI_MATRIX_OBSERVER_VIEW, &MCamView); Core_RMatrixGet(G_RI_MATRIX_OBSERVER_PROJ, &MCamProj); diff --git a/source/pp/sxpp.cpp b/source/pp/sxpp.cpp index a61f36382ece4b0497dc09b30de1271a0f0f4d2b..4bfeb1322340988df81555422a52223e4d3771f4 100644 --- a/source/pp/sxpp.cpp +++ b/source/pp/sxpp.cpp @@ -112,12 +112,12 @@ namespace PPSet void PPSet::Init() { - static const int *winr_width = GET_PCVAR_INT("winr_width"); - static const int *winr_height = GET_PCVAR_INT("winr_height"); + static const int *r_win_width = GET_PCVAR_INT("r_win_width"); + static const int *r_win_height = GET_PCVAR_INT("r_win_height"); PPSet::DXDevice = SGCore_GetDXDevice(); - PPSet::WinSize.x = *winr_width; - PPSet::WinSize.y = *winr_height; + PPSet::WinSize.x = *r_win_width; + PPSet::WinSize.y = *r_win_height; Core_SetOutPtr(); PPSet::IDsShaders::VS::ResPos = SGCore_ShaderLoad(SHADER_TYPE_VERTEX, "pp_res_pos.vs", "pp_quad_render_res_pos", SHADER_CHECKDOUBLE_PATH); @@ -316,11 +316,11 @@ SX_LIB_API void SPP_Update() { PP_PRECOND(_VOID); - static const int *winr_width = GET_PCVAR_INT("winr_width"); - static const int *winr_height = GET_PCVAR_INT("winr_height"); + static const int *r_win_width = GET_PCVAR_INT("r_win_width"); + static const int *r_win_height = GET_PCVAR_INT("r_win_height"); - static const float *p_near = GET_PCVAR_FLOAT("p_near"); - static const float *p_far = GET_PCVAR_FLOAT("p_far"); + static const float *r_near = GET_PCVAR_FLOAT("r_near"); + static const float *r_far = GET_PCVAR_FLOAT("r_far"); static const float *r_default_fov = GET_PCVAR_FLOAT("r_default_fov"); @@ -332,13 +332,13 @@ SX_LIB_API void SPP_Update() Core_RMatrixGet(G_RI_MATRIX_OBSERVER_VIEW, &PPSet::MCamView); Core_RMatrixGet(G_RI_MATRIX_OBSERVER_PROJ, &PPSet::MCamProj); - PPSet::WinSize.x = *winr_width; - PPSet::WinSize.y = *winr_height; + PPSet::WinSize.x = *r_win_width; + PPSet::WinSize.y = *r_win_height; PPSet::ProjRatio = PPSet::WinSize.x / PPSet::WinSize.y; - PPSet::NearFar.x = *p_near; - PPSet::NearFar.y = *p_far; + PPSet::NearFar.x = *r_near; + PPSet::NearFar.y = *r_far; PPSet::ProjFov = *r_default_fov; } diff --git a/source/render/gdata.cpp b/source/render/gdata.cpp index e1b2f2032c93c94e5bfac42227f06a0201fbfc53..4afa522465fdf01f674d5253cebbe01919517919 100644 --- a/source/render/gdata.cpp +++ b/source/render/gdata.cpp @@ -89,17 +89,17 @@ namespace GData void GData::InitAllMatrix() { - static const int *winr_width = GET_PCVAR_INT("winr_width"); - static const int *winr_height = GET_PCVAR_INT("winr_height"); + static const int *r_win_width = GET_PCVAR_INT("r_win_width"); + static const int *r_win_height = GET_PCVAR_INT("r_win_height"); static float2_t vWinSize; - vWinSize = float2(*winr_width, *winr_height); + vWinSize = float2(*r_win_width, *r_win_height); - static const float *p_near = GET_PCVAR_FLOAT("p_near"); - static const float *p_far = GET_PCVAR_FLOAT("p_far"); + static const float *r_near = GET_PCVAR_FLOAT("r_near"); + static const float *r_far = GET_PCVAR_FLOAT("r_far"); static const float *r_default_fov = GET_PCVAR_FLOAT("r_default_fov"); - GData::NearFar.x = *p_near; - GData::NearFar.y = *p_far; + GData::NearFar.x = *r_near; + GData::NearFar.y = *r_far; GData::ProjFov = *r_default_fov; GData::MCamProj = SMMatrixPerspectiveFovLH(GData::ProjFov, vWinSize.x / vWinSize.y, GData::NearFar.x, GData::NearFar.y); diff --git a/source/render/render_func.cpp b/source/render/render_func.cpp index a42ac435ad607d0526ba683cbf552ab63035124e..1a2c1edaf5f81a2dc16be7decf4a72d337fb1d3f 100644 --- a/source/render/render_func.cpp +++ b/source/render/render_func.cpp @@ -62,41 +62,41 @@ inline void SXRenderFunc::SetSamplerAddress(DWORD begin_id, DWORD end_id, DWORD void SXRenderFunc::SetRenderSceneFilter() { - static const int * r_s_filter = GET_PCVAR_INT("r_s_filter"); - static const int * r_s_max_anisotropy = GET_PCVAR_INT("r_s_max_anisotropy"); - static const int * r_s_max_miplevel = GET_PCVAR_INT("r_s_max_miplevel"); + static const int * r_texfilter_type = GET_PCVAR_INT("r_texfilter_type"); + static const int * r_texfilter_max_anisotropy = GET_PCVAR_INT("r_texfilter_max_anisotropy"); + static const int * r_texfilter_max_miplevel = GET_PCVAR_INT("r_texfilter_max_miplevel"); - static int r_s_filter2 = 1; - static int r_s_max_anisotropy2 = 0; - static int r_s_max_miplevel2 = 0; + static int r_texfilter_type2 = 1; + static int r_texfilter_max_anisotropy2 = 0; + static int r_texfilter_max_miplevel2 = 0; - if (r_s_filter) - r_s_filter2 = (*r_s_filter); + if (r_texfilter_type) + r_texfilter_type2 = (*r_texfilter_type); else - r_s_filter2 = 1; + r_texfilter_type2 = 1; - if (r_s_max_anisotropy) - r_s_max_anisotropy2 = (*r_s_max_anisotropy); + if (r_texfilter_max_anisotropy) + r_texfilter_max_anisotropy2 = (*r_texfilter_max_anisotropy); else - r_s_max_anisotropy2 = 1; + r_texfilter_max_anisotropy2 = 1; - if (r_s_max_miplevel) - r_s_max_miplevel2 = (*r_s_max_miplevel); + if (r_texfilter_max_miplevel) + r_texfilter_max_miplevel2 = (*r_texfilter_max_miplevel); else - r_s_max_miplevel2 = 1; + r_texfilter_max_miplevel2 = 1; - if (r_s_filter2 == 0) + if (r_texfilter_type2 == 0) SetSamplerFilter(0, 16, D3DTEXF_POINT); - else if (r_s_filter2 == 2) + else if (r_texfilter_type2 == 2) { for (int i = 0; i<16; ++i) - GData::DXDevice->SetSamplerState(i, D3DSAMP_MAXANISOTROPY, r_s_max_anisotropy2); + GData::DXDevice->SetSamplerState(i, D3DSAMP_MAXANISOTROPY, r_texfilter_max_anisotropy2); SetSamplerFilter(0, 16, D3DTEXF_ANISOTROPIC); } else SetSamplerFilter(0, 16, D3DTEXF_LINEAR); - GData::DXDevice->SetSamplerState(0, D3DSAMP_MAXMIPLEVEL, r_s_max_miplevel2); + GData::DXDevice->SetSamplerState(0, D3DSAMP_MAXMIPLEVEL, r_texfilter_max_miplevel2); SetSamplerAddress(0, 16, D3DTADDRESS_WRAP); } @@ -110,20 +110,20 @@ void SXRenderFunc::SetRenderSceneFilterUn() void SXRenderFunc::ComDeviceLost() { - static int *resize = (int*)GET_PCVAR_INT("resize"); + static int *r_resize = (int*)GET_PCVAR_INT("r_resize"); - static int *winr_width = (int*)GET_PCVAR_INT("winr_width"); - static int *winr_height = (int*)GET_PCVAR_INT("winr_height"); - static const bool *winr_windowed = GET_PCVAR_BOOL("winr_windowed"); + static int *r_win_width = (int*)GET_PCVAR_INT("r_win_width"); + static int *r_win_height = (int*)GET_PCVAR_INT("r_win_height"); + static const bool *r_win_windowed = GET_PCVAR_BOOL("r_win_windowed"); - if (*resize != RENDER_RESIZE_CHANGE) + if (*r_resize != RENDER_RESIZE_CHANGE) { //получаем текущий размер окна в которое рисовали RECT rect_scene; GetClientRect(GData::Handle3D, &rect_scene); - *winr_width = rect_scene.right; - *winr_height = rect_scene.bottom; + *r_win_width = rect_scene.right; + *r_win_height = rect_scene.bottom; } //сбрасываем все что необходимо для восстановления устройства @@ -133,8 +133,8 @@ void SXRenderFunc::ComDeviceLost() SPE_OnLostDevice(); SXRenderFunc::InitModeWindow(); - bool bf = SGCore_OnDeviceReset(*winr_width, *winr_height, *winr_windowed); - g_fnReportf(REPORT_MSG_LEVEL_WARNING, "winr_width %d, winr_height %d, winr_windowed %d \n", *winr_width, *winr_height, *winr_windowed); + bool bf = SGCore_OnDeviceReset(*r_win_width, *r_win_height, *r_win_windowed); + g_fnReportf(REPORT_MSG_LEVEL_WARNING, "r_win_width %d, r_win_height %d, r_win_windowed %d \n", *r_win_width, *r_win_height, *r_win_windowed); if (bf) { @@ -144,7 +144,7 @@ void SXRenderFunc::ComDeviceLost() else { GData::InitAllMatrix(); - *resize = RENDER_RESIZE_NONE; + *r_resize = RENDER_RESIZE_NONE; SGCore_OnResetDevice(); SML_OnResetDevice(); SGeom_OnResetDevice(); @@ -407,12 +407,12 @@ void SXRenderFunc::SaveWorkTex() void SXRenderFunc::InitModeWindow() { - static const bool *winr_windowed = GET_PCVAR_BOOL("winr_windowed"); + static const bool *r_win_windowed = GET_PCVAR_BOOL("r_win_windowed"); - if (winr_windowed == NULL) + if (r_win_windowed == NULL) return; - if (!(*winr_windowed)) + if (!(*r_win_windowed)) { SetWindowLong(GData::Handle3D, GWL_STYLE, GetWindowLong(GData::Handle3D, GWL_STYLE) | WS_POPUP); ShowWindow(GData::Handle3D, SW_MAXIMIZE); @@ -429,32 +429,32 @@ void SXRenderFunc::InitModeWindow() void SXRenderFunc::ChangeModeWindow() { - /*static int * winr_width = (int*)GET_PCVAR_INT("winr_width"); - *winr_width = 1280; + /*static int * r_win_width = (int*)GET_PCVAR_INT("r_win_width"); + *r_win_width = 1280; - static int * winr_height = (int*)GET_PCVAR_INT("winr_height"); - *winr_height = 768; + static int * r_win_height = (int*)GET_PCVAR_INT("r_win_height"); + *r_win_height = 768; return;*/ - static bool *winr_windowed = (bool*)GET_PCVAR_BOOL("winr_windowed"); + static bool *r_win_windowed = (bool*)GET_PCVAR_BOOL("r_win_windowed"); - if (winr_windowed == NULL) + if (r_win_windowed == NULL) return; - *winr_windowed = !(*winr_windowed); + *r_win_windowed = !(*r_win_windowed); SXRenderFunc::InitModeWindow(); - static int *resize = (int*)GET_PCVAR_INT("resize"); - *resize = RENDER_RESIZE_CHANGE; + static int *r_resize = (int*)GET_PCVAR_INT("r_resize"); + *r_resize = RENDER_RESIZE_CHANGE; } void SXRenderFunc::FullScreenChangeSizeAbs() { - static bool *winr_windowed = (bool*)GET_PCVAR_BOOL("winr_windowed"); + static bool *r_win_windowed = (bool*)GET_PCVAR_BOOL("r_win_windowed"); - if (winr_windowed == NULL || (*winr_windowed)) + if (r_win_windowed == NULL || (*r_win_windowed)) return; int iCountModes = 0; @@ -470,33 +470,33 @@ void SXRenderFunc::FullScreenChangeSizeAbs() pModes = 0; } - static int * winr_width = (int*)GET_PCVAR_INT("winr_width"); - static int * winr_height = (int*)GET_PCVAR_INT("winr_height"); + static int * r_win_width = (int*)GET_PCVAR_INT("r_win_width"); + static int * r_win_height = (int*)GET_PCVAR_INT("r_win_height"); - if (!winr_width || !winr_height) + if (!r_win_width || !r_win_height) return; - static int winr_width_old = *winr_width; - static int winr_height_old = *winr_height; + static int r_win_width_old = *r_win_width; + static int r_win_height_old = *r_win_height; - if (*winr_width == iFullScreenWidth && *winr_height == iFullScreenHeight) + if (*r_win_width == iFullScreenWidth && *r_win_height == iFullScreenHeight) { - *winr_width = winr_width_old; - *winr_height = winr_height_old; + *r_win_width = r_win_width_old; + *r_win_height = r_win_height_old; } else { - winr_width_old = *winr_width; - winr_height_old = *winr_height; + r_win_width_old = *r_win_width; + r_win_height_old = *r_win_height; - *winr_width = iFullScreenWidth; - *winr_height = iFullScreenHeight; + *r_win_width = iFullScreenWidth; + *r_win_height = iFullScreenHeight; //g_fnReportf(REPORT_MSG_LEVEL_WARNING, "iFullScreenWidth %d, iFullScreenHeight %d \n", iFullScreenWidth, iFullScreenHeight); } - static int *resize = (int*)GET_PCVAR_INT("resize"); - *resize = RENDER_RESIZE_CHANGE; + static int *r_resize = (int*)GET_PCVAR_INT("r_resize"); + *r_resize = RENDER_RESIZE_CHANGE; } //########################################################################## @@ -555,15 +555,15 @@ int SXRenderFunc::OutputDebugInfo(DWORD timeDelta, bool needGameTime, const char ++FrameCount; TimeElapsed += ((float)timeDelta) * 0.001f; - static const int * rs_stats = GET_PCVAR_INT("rs_stats"); + static const int * r_stats = GET_PCVAR_INT("r_stats"); static bool isNulled = false; - if (TimeElapsed >= 1.0f && rs_stats) + if (TimeElapsed >= 1.0f && r_stats) { FpsValue = (float)FrameCount / TimeElapsed; - if ((*rs_stats) > 0) + if ((*r_stats) > 0) sprintf(debugstr, "FPS %.1f\n", FpsValue); if (needGameTime) @@ -575,7 +575,7 @@ int SXRenderFunc::OutputDebugInfo(DWORD timeDelta, bool needGameTime, const char sprintf(debugstr + strlen(debugstr), "\nGame time : %d %d %d %d %d %d\n", 1900 + g_tm.tm_year, g_tm.tm_mon, g_tm.tm_mday, g_tm.tm_hour, g_tm.tm_min, g_tm.tm_sec); } - if ((*rs_stats) == 2) + if ((*r_stats) == 2) { sprintf(debugstr + strlen(debugstr), szStr); } @@ -591,7 +591,7 @@ int SXRenderFunc::OutputDebugInfo(DWORD timeDelta, bool needGameTime, const char else isNulled = false; - if (rs_stats && (*rs_stats) > 0) + if (r_stats && (*r_stats) > 0) SGCore_DbgMsg(debugstr); return (isNulled ? FrameCount2 : 0); @@ -601,10 +601,10 @@ int SXRenderFunc::OutputDebugInfo(DWORD timeDelta, bool needGameTime, const char void SXRenderFunc::BuildMRT(DWORD timeDelta, bool isRenderSimulation) { - static const int *winr_width = GET_PCVAR_INT("winr_width"); - static const int *winr_height = GET_PCVAR_INT("winr_height"); + static const int *r_win_width = GET_PCVAR_INT("r_win_width"); + static const int *r_win_height = GET_PCVAR_INT("r_win_height"); static float2_t vWinSize; - vWinSize = float2(*winr_width, *winr_height); + vWinSize = float2(*r_win_width, *r_win_height); SGCore_ShaderUnBind(); @@ -1008,8 +1008,8 @@ void SXRenderFunc::RenderSky(DWORD timeDelta) void SXRenderFunc::ComLighting(DWORD timeDelta) { - static int *winr_width = (int*)GET_PCVAR_INT("winr_width"); - static int *winr_height = (int*)GET_PCVAR_INT("winr_height"); + static int *r_win_width = (int*)GET_PCVAR_INT("r_win_width"); + static int *r_win_height = (int*)GET_PCVAR_INT("r_win_height"); SGCore_ShaderUnBind(); @@ -1131,13 +1131,13 @@ void SXRenderFunc::ComLighting(DWORD timeDelta) SML_LigthsShadowNull(); //очищаем рт генерации теней SML_LigthsShadowGen(i); //генерируем тень для света - static const int * shadow_soft = GET_PCVAR_INT("shadow_soft"); + static const int * r_shadow_soft = GET_PCVAR_INT("r_shadow_soft"); - if (shadow_soft) + if (r_shadow_soft) { - if ((*shadow_soft) == 1) + if ((*r_shadow_soft) == 1) SML_LigthsShadowSoft(false, 2); - else if ((*shadow_soft) == 2) + else if ((*r_shadow_soft) == 2) { SML_LigthsShadowSoft(false, 2); SML_LigthsShadowSoft(false, 2); @@ -1172,7 +1172,7 @@ void SXRenderFunc::ComLighting(DWORD timeDelta) SGCore_ShaderSetVRF(SHADER_TYPE_VERTEX, GData::IDsShaders::VS::ResPos, "ViewInv", &ViewInv); SGCore_ShaderSetVRF(SHADER_TYPE_VERTEX, GData::IDsShaders::VS::ResPos, "NearFar", &GData::NearFar); - SGCore_ShaderSetVRF(SHADER_TYPE_VERTEX, GData::IDsShaders::VS::ResPos, "ParamProj", &float3_t(*winr_width, *winr_height, GData::ProjFov)); + SGCore_ShaderSetVRF(SHADER_TYPE_VERTEX, GData::IDsShaders::VS::ResPos, "ParamProj", &float3_t(*r_win_width, *r_win_height, GData::ProjFov)); float3 tmpPosition; float2 tmpPowerDist; @@ -1279,8 +1279,8 @@ void SXRenderFunc::ComLighting(DWORD timeDelta) void SXRenderFunc::UnionLayers() { - static const int *winr_width = GET_PCVAR_INT("winr_width"); - static const int *winr_height = GET_PCVAR_INT("winr_height"); + static const int *r_win_width = GET_PCVAR_INT("r_win_width"); + static const int *r_win_height = GET_PCVAR_INT("r_win_height"); LPDIRECT3DSURFACE9 BackBuf, ComLightSurf; GData::DXDevice->GetRenderTarget(0, &BackBuf); @@ -1311,7 +1311,7 @@ void SXRenderFunc::UnionLayers() SGCore_ShaderBind(SHADER_TYPE_VERTEX, GData::IDsShaders::VS::ScreenOut); SGCore_ShaderBind(SHADER_TYPE_PIXEL, GData::IDsShaders::PS::UnionAlpha); - SGCore_ShaderSetVRF(SHADER_TYPE_PIXEL, GData::IDsShaders::PS::UnionAlpha, "WinSize", &float4_t(*winr_width, *winr_height, 1.f / float(*winr_width), 1.f / float(*winr_height))); + SGCore_ShaderSetVRF(SHADER_TYPE_PIXEL, GData::IDsShaders::PS::UnionAlpha, "WinSize", &float4_t(*r_win_width, *r_win_height, 1.f / float(*r_win_width), 1.f / float(*r_win_height))); SGCore_ScreenQuadDraw(); @@ -1410,8 +1410,8 @@ void SXRenderFunc::ApplyToneMapping() void SXRenderFunc::ComToneMapping(DWORD timeDelta) { //обработка tone mapping - static const float * hdr_adapted_coef = GET_PCVAR_FLOAT("hdr_adapted_coef"); - SML_LigthsToneMappingCom(timeDelta, (hdr_adapted_coef ? (*hdr_adapted_coef) : 0.03f)); + static const float * r_hdr_adapted_coef = GET_PCVAR_FLOAT("r_hdr_adapted_coef"); + SML_LigthsToneMappingCom(timeDelta, (r_hdr_adapted_coef ? (*r_hdr_adapted_coef) : 0.03f)); } @@ -1439,10 +1439,10 @@ void SXRenderFunc::RenderParticles(DWORD timeDelta) void SXRenderFunc::RenderPostProcess(DWORD timeDelta) { - static const int *winr_width = GET_PCVAR_INT("winr_width"); - static const int *winr_height = GET_PCVAR_INT("winr_height"); + static const int *r_win_width = GET_PCVAR_INT("r_win_width"); + static const int *r_win_height = GET_PCVAR_INT("r_win_height"); static float2_t vWinSize; - vWinSize = float2(*winr_width, *winr_height); + vWinSize = float2(*r_win_width, *r_win_height); SPP_RTNull(); diff --git a/source/skyxengine.cpp b/source/skyxengine.cpp index 878616bcafff7b7f76d9a7f58ecdfaa5caf0b948..5f9f40ccb6b0a4ba17222704ef0258862a461861 100644 --- a/source/skyxengine.cpp +++ b/source/skyxengine.cpp @@ -111,14 +111,14 @@ void SkyXEngine_Init(HWND hWnd3D, HWND hWndParent3D) SkyXEngine_CreateLoadCVar(); - static int *winr_width = (int*)GET_PCVAR_INT("winr_width"); - static int *winr_height = (int*)GET_PCVAR_INT("winr_height"); - static const bool *winr_windowed = GET_PCVAR_BOOL("winr_windowed"); + static int *r_win_width = (int*)GET_PCVAR_INT("r_win_width"); + static int *r_win_height = (int*)GET_PCVAR_INT("r_win_height"); + static const bool *r_win_windowed = GET_PCVAR_BOOL("r_win_windowed"); HWND hWnd3DCurr = 0; if (hWnd3D == 0) - hWnd3DCurr = SkyXEngine_CreateWindow("SkyXEngine", "SkyXEngine", *winr_width, *winr_height); + hWnd3DCurr = SkyXEngine_CreateWindow("SkyXEngine", "SkyXEngine", *r_win_width, *r_win_height); else { hWnd3DCurr = hWnd3D; @@ -126,8 +126,8 @@ void SkyXEngine_Init(HWND hWnd3D, HWND hWndParent3D) RECT rect; GetClientRect(hWnd3DCurr, &rect); - *winr_width = rect.right; - *winr_height = rect.bottom; + *r_win_width = rect.right; + *r_win_height = rect.bottom; } SSInput_0Create("sxinput", hWnd3DCurr, false); @@ -155,7 +155,7 @@ void SkyXEngine_Init(HWND hWnd3D, HWND hWndParent3D) - SGCore_0Create("sxgcore", hWnd3DCurr, *winr_width, *winr_height, *winr_windowed, 0, false); + SGCore_0Create("sxgcore", hWnd3DCurr, *r_win_width, *r_win_height, *r_win_windowed, 0, false); SGCore_Dbg_Set(SkyXEngine_PrintfLog); SGCore_SetFunc_MtlSet(SkyXEngine_RFuncMtlSet); @@ -259,7 +259,7 @@ void SkyXEngine_Init(HWND hWnd3D, HWND hWndParent3D) #endif #if defined(SX_GAME) - if (*winr_windowed) + if (*r_win_windowed) ShowWindow(hWnd3DCurr, SW_SHOW); else ShowWindow(hWnd3DCurr, SW_MAXIMIZE); @@ -329,16 +329,35 @@ void SkyXEngine_InitPaths() void SkyXEngine_CreateLoadCVar() { - Core_0RegisterCVarInt("winr_width", 800, 0); - Core_0RegisterCVarInt("winr_height", 600, 0); - Core_0RegisterCVarBool("winr_windowed", true, 0); - Core_0RegisterCVarFloat("r_default_fov", 45.0f, "Default FOV value"); - Core_0RegisterCVarFloat("p_near", 0.025f, 0); - Core_0RegisterCVarFloat("p_far", 400, 0); + Core_0RegisterCVarInt("r_win_width", 800, "Размер окна по горизонтали (в пикселях)"); + Core_0RegisterCVarInt("r_win_height", 600, "Размер окна по вертикали (в пикселях)"); + Core_0RegisterCVarBool("r_win_windowed", true, "Режим рендера true - оконный, false - полноэкранный"); + Core_0RegisterCVarFloat("r_default_fov", SM_PI * 0.25f, "Дефолтный fov в радианах"); + Core_0RegisterCVarFloat("r_near", 0.025f, "Ближняя плоскость отсчечения"); + Core_0RegisterCVarFloat("r_far", 400, "Дальняя плоскость отсечения (дальность видимости)"); - Core_0RegisterCVarInt("final_image", DS_RT_SCENELIGHT, "Тип финального (выводимого в окно рендера) изображения из перечисления DS_RT"); + Core_0RegisterCVarInt("r_final_image", DS_RT_SCENELIGHT, "Тип финального (выводимого в окно рендера) изображения из перечисления DS_RT"); + + Core_0RegisterCVarInt("r_resize", RENDER_RESIZE_NONE, "Тип изменения размеров окан рендера из перечисления RENDER_RESIZE"); + + + Core_0RegisterCVarBool("r_pssm_4or3", true, "Для глобальных теней использовать 4 (true) или 3 (false) сплита?"); + Core_0RegisterCVarBool("r_pssm_shadowed", true, "Глобальный источник отбрасывает тени?"); + Core_0RegisterCVarFloat("r_pssm_quality", 1, "Коэфициент размера карты глубины глобального источника света относительно размеров окна рендера [0.5,4] (низкое, высокое)"); + Core_0RegisterCVarFloat("r_lsm_quality", 1, "Коэфициент размера карты глубины для локальных источников света относительно размеров окна рендера [0.5,4] (низкое, высокое)"); + Core_0RegisterCVarInt("r_shadow_soft", 1, "Дополнительнео размытие теней, 0 - нет, 1 - 1 проход, 2 - 2 прохода"); + Core_0RegisterCVarFloat("r_hdr_adapted_coef", 0.03f, "Коэфициент привыкания к освещению (0,1] (медлено, быстро)"); + + Core_0RegisterCVarInt("r_grass_freq", 100, "Плотность отрисовки травы [1,100]"); + Core_0RegisterCVarFloat("r_green_lod0", 50, "Дистанция отрисовки для первого лода (он же лод травы) растительности, начиная с нуля от камеры"); + Core_0RegisterCVarFloat("r_green_lod1", 100, "Дистанция отрисовки второго лода растительности (кусты/деревья), старт с дистанции первого лода"); + Core_0RegisterCVarFloat("r_green_less", 20, "Дистанция? после которой трава будет уменьшаться (0,r_green_lod0)"); + + Core_0RegisterCVarInt("r_texfilter_type", 2, "Тип фильтрации текстур, 0 - точечная, 1 - линейная, 2 - анизотропная"); + Core_0RegisterCVarInt("r_texfilter_max_anisotropy", 16, "Максимальное значение анизотропной фильтрации (если включена) [1,16]"); + Core_0RegisterCVarInt("r_texfilter_max_miplevel", 0, "Какой mip уровень текстур использовать? 0 - самый высокий, 1 - ниже на один уровень и т.д."); + Core_0RegisterCVarInt("r_stats", 1, "Показывать ли статистику? 0 - нет, 1 - fps и игровое время, 2 - показать полностью"); - Core_0RegisterCVarInt("resize", RENDER_RESIZE_NONE, "Тип изменения размеров окан рендера из перечисления RENDER_RESIZE"); Core_0RegisterCVarFloat("cl_mousesense", 0.001f, "Mouse sense value"); @@ -349,40 +368,21 @@ void SkyXEngine_CreateLoadCVar() Core_0RegisterCVarBool("pp_dlaa", true, "Рисовать ли эффект dlaa?"); Core_0RegisterCVarBool("pp_nfaa", false, "Рисовать ли эффект nfaa?"); + static float3_t fog_color(0.5, 0.5, 0.5); + Core_0RegisterCVarPointer("pp_fog_color", ((UINT_PTR)&fog_color)); Core_0RegisterCVarFloat("pp_fog_density", 0.5, "Плотность тумана"); Core_0RegisterCVarBool("pp_motionblur", true, "Рисовать ли эффект motion blur?"); Core_0RegisterCVarFloat("pp_motionblur_coef", 0.1, "Коэфициент для эффекта motion blur [0,1]"); - Core_0RegisterCVarBool("pssm_4or3", true, "Для глобальных теней использовать 4 (true) или 3 (false) сплита?"); - - Core_0RegisterCVarBool("pssm_shadowed", true, "Глобальный источник отбрасывает тени?"); - Core_0RegisterCVarFloat("pssm_q", 1, "Коэфициент размера карты глубины глобального источника света относительно размеров окна рендера [0.5,4] (низкое, высокое)"); - Core_0RegisterCVarFloat("lsm_q", 1, "Коэфициент размера карты глубины для локальных источников света относительно размеров окна рендера [0.5,4] (низкое, высокое)"); - Core_0RegisterCVarInt("shadow_soft", 1, "Дополнительнео размытие теней, 0 - нет, 1 - 1 проход, 2 - 2 прохода"); - - Core_0RegisterCVarInt("grass_frec", 100, "Плотность отрисовки травы [1,100]"); - Core_0RegisterCVarFloat("green_lod0", 50, "Дистанция отрисовки для первого лода (он же лод травы) растительности, начиная с нуля от камеры"); - Core_0RegisterCVarFloat("green_lod1", 100, "Дистанция отрисовки второго лода растительности (кусты/деревья), старт с дистанции первого лода"); - Core_0RegisterCVarFloat("green_less", 20, "Дистанция? после которой трава будет уменьшаться (0,green_lod0)"); - Core_0RegisterCVarFloat("hdr_adapted_coef", 0.03f, "Коэфициент привыкания к освещению (0,1] (медлено, быстро)"); - - Core_0RegisterCVarInt("r_s_filter", 2, "Тип фильтрации текстур, 0 - точечная, 1 - линейная, 2 - анизотропная"); - Core_0RegisterCVarInt("r_s_max_anisotropy", 16, "Максимальное значение анизотропной фильтрации (если включена) [1,16]"); - Core_0RegisterCVarInt("r_s_max_miplevel", 0, "Какой mip уровень текстур использовать? 0 - самый высокий, 1 - ниже на один уровень и т.д."); - Core_0RegisterCVarInt("rs_stats", 1, "Показывать ли статистику? 0 - нет, 1 - fps и игровое время, 2 - показать полностью"); - Core_0RegisterCVarBool("g_time_run", true, "Запущено ли игрвоое время?"); Core_0RegisterCVarFloat("g_time_speed", 1.f, "Скорость/соотношение течения игрового времени"); - Core_0RegisterCVarFloat("main_rain_density", 1.f, "Коэфициент плотности дождя (0,1]"); - Core_0RegisterCVarBool("main_thunderbolt", true, "Могут ли воспроизводится эффекты молнии?"); + Core_0RegisterCVarFloat("env_default_rain_density", 1.f, "Коэфициент плотности дождя (0,1]"); + Core_0RegisterCVarBool("env_default_thunderbolt", true, "Могут ли воспроизводится эффекты молнии?"); - Core_0RegisterCVarFloat("weather_snd_volume", 1.f, "Громкость звуков погоды [0,1]"); - Core_0RegisterCVarFloat("ambient_snd_volume", 1.f, "Громкость фоновых звуков на уровне [0,1]"); - - static float3_t fog_color(0.5, 0.5, 0.5); - Core_0RegisterCVarPointer("pp_fog_color", ((UINT_PTR)&fog_color)); + Core_0RegisterCVarFloat("env_weather_snd_volume", 1.f, "Громкость звуков погоды [0,1]"); + Core_0RegisterCVarFloat("env_ambient_snd_volume", 1.f, "Громкость фоновых звуков на уровне [0,1]"); Core_0RegisterConcmd("screenshot", SRender_SaveScreenShot); Core_0RegisterConcmd("save_worktex", SRender_SaveWorkTex); @@ -474,8 +474,8 @@ void SkyXEngine_Frame(DWORD timeDelta) static float3 vCamPos, vCamDir; static float4x4 mView, mProjLight; - static const int *final_image = GET_PCVAR_INT("final_image"); - static const int *resize = GET_PCVAR_INT("resize"); + static const int *r_final_image = GET_PCVAR_INT("r_final_image"); + static const int *r_resize = GET_PCVAR_INT("r_resize"); static bool isSimulationRender = false; static uint64_t DelayGeomSortGroup = 0; @@ -512,7 +512,7 @@ void SkyXEngine_Frame(DWORD timeDelta) int64_t ttime; //потеряно ли устройство или произошло изменение размеров? - if (pDXDevice->TestCooperativeLevel() == D3DERR_DEVICENOTRESET || *resize) + if (pDXDevice->TestCooperativeLevel() == D3DERR_DEVICENOTRESET || *r_resize) { //если не свернуто окно if (!IsIconic(SRender_GetHandleWin3D()) && ((SRender_GetParentHandleWin3D() != 0 && !IsIconic(SRender_GetParentHandleWin3D())) || SRender_GetParentHandleWin3D() == 0)) @@ -592,7 +592,7 @@ void SkyXEngine_Frame(DWORD timeDelta) SRender_UpdateReflection(timeDelta, isSimulationRender); DelayComReflection += TimeGetMcsU(Core_RIntGet(G_RI_INT_TIMER_RENDER)) - ttime; - if (*final_image == DS_RT_AMBIENTDIFF || *final_image == DS_RT_SPECULAR || *final_image == DS_RT_SCENELIGHT) + if (*r_final_image == DS_RT_AMBIENTDIFF || *r_final_image == DS_RT_SPECULAR || *r_final_image == DS_RT_SCENELIGHT) { //рендерим глубину от света ttime = TimeGetMcsU(Core_RIntGet(G_RI_INT_TIMER_RENDER)); @@ -605,7 +605,7 @@ void SkyXEngine_Frame(DWORD timeDelta) SRender_BuildMRT(timeDelta, isSimulationRender); DelayRenderMRT += TimeGetMcsU(Core_RIntGet(G_RI_INT_TIMER_RENDER)) - ttime; - if (*final_image == DS_RT_AMBIENTDIFF || *final_image == DS_RT_SPECULAR || *final_image == DS_RT_SCENELIGHT) + if (*r_final_image == DS_RT_AMBIENTDIFF || *r_final_image == DS_RT_SPECULAR || *r_final_image == DS_RT_SCENELIGHT) { //освещаем сцену ttime = TimeGetMcsU(Core_RIntGet(G_RI_INT_TIMER_RENDER)); @@ -634,7 +634,7 @@ void SkyXEngine_Frame(DWORD timeDelta) pDXDevice->SetRenderState(D3DRS_CULLMODE, D3DCULL_CCW); #if !defined(SX_GAME) - pDXDevice->SetTexture(0, SML_DSGetRT((DS_RT)*final_image)); + pDXDevice->SetTexture(0, SML_DSGetRT((DS_RT)*r_final_image)); #else pDXDevice->SetTexture(0, SGCore_RTGetTexture(SPP_RTGetCurrSend())); #endif @@ -651,10 +651,10 @@ void SkyXEngine_Frame(DWORD timeDelta) SRender_RenderEditorMain(); -#if /*defined(_DEBUG) &&*/ defined(SX_LEVEL_EDITOR) - static const float * p_far = GET_PCVAR_FLOAT("p_far"); - SAIG_RenderQuads(SRender_GetCamera()->ObjFrustum, &vCamPos, *p_far); -#endif +/*#if defined(_DEBUG) + static const float * r_far = GET_PCVAR_FLOAT("r_far"); + SAIG_RenderQuads(SRender_GetCamera()->ObjFrustum, &vCamPos, *r_far); +#endif*/ #if defined(SX_GAME) SXGame_RenderHUD(); @@ -770,160 +770,160 @@ void SkyXEngine_Frame(DWORD timeDelta) void SkyXEngind_UpdateDataCVar() { ID GlobalLight = SML_LigthsGetGlobal(); - static const bool * pssm_4or3 = GET_PCVAR_BOOL("pssm_4or3"); - static bool pssm_4or3_old = true; + static const bool * r_pssm_4or3 = GET_PCVAR_BOOL("r_pssm_4or3"); + static bool r_pssm_4or3_old = true; //проверяем не изменилось ли значение квара, если изменилось то меняем и количество сплитов - if (pssm_4or3 && pssm_4or3_old != (*pssm_4or3) && GlobalLight >= 0) + if (r_pssm_4or3 && r_pssm_4or3_old != (*r_pssm_4or3) && GlobalLight >= 0) { - pssm_4or3_old = (*pssm_4or3); - SML_LigthsSet4Or3SplitsG(GlobalLight, pssm_4or3_old); + r_pssm_4or3_old = (*r_pssm_4or3); + SML_LigthsSet4Or3SplitsG(GlobalLight, r_pssm_4or3_old); } - static const bool * pssm_shadowed = GET_PCVAR_BOOL("pssm_shadowed"); - static bool pssm_shadowed_old = true; + static const bool * r_pssm_shadowed = GET_PCVAR_BOOL("r_pssm_shadowed"); + static bool r_pssm_shadowed_old = true; - if (pssm_shadowed && pssm_shadowed_old != (*pssm_shadowed) && GlobalLight >= 0) + if (r_pssm_shadowed && r_pssm_shadowed_old != (*r_pssm_shadowed) && GlobalLight >= 0) { - pssm_shadowed_old = (*pssm_shadowed); - SML_LigthsSetTypeShadowed(GlobalLight, (pssm_shadowed_old ? LTYPE_SHADOW_DYNAMIC : LTYPE_SHADOW_NONE)); + r_pssm_shadowed_old = (*r_pssm_shadowed); + SML_LigthsSetTypeShadowed(GlobalLight, (r_pssm_shadowed_old ? LTYPE_SHADOW_DYNAMIC : LTYPE_SHADOW_NONE)); } - static const float * pssm_q = GET_PCVAR_FLOAT("pssm_q"); - static float pssm_q_old = 1; + static const float * r_pssm_quality = GET_PCVAR_FLOAT("r_pssm_quality"); + static float r_pssm_quality_old = 1; - if (pssm_q && pssm_q_old != (*pssm_q)) + if (r_pssm_quality && r_pssm_quality_old != (*r_pssm_quality)) { - pssm_q_old = (*pssm_q); - if (pssm_q_old < 0.5f) + r_pssm_quality_old = (*r_pssm_quality); + if (r_pssm_quality_old < 0.5f) { - pssm_q_old = 0.5f; - Core_0SetCVarFloat("pssm_q", pssm_q_old); + r_pssm_quality_old = 0.5f; + Core_0SetCVarFloat("r_pssm_quality", r_pssm_quality_old); } - else if (pssm_q_old > 4.f) + else if (r_pssm_quality_old > 4.f) { - pssm_q_old = 4.f; - Core_0SetCVarFloat("pssm_q", pssm_q_old); + r_pssm_quality_old = 4.f; + Core_0SetCVarFloat("r_pssm_quality", r_pssm_quality_old); } - SML_LigthsSettGCoefSizeDepth(pssm_q_old); + SML_LigthsSettGCoefSizeDepth(r_pssm_quality_old); } - static const float * lsm_q = GET_PCVAR_FLOAT("lsm_q"); - static float lsm_q_old = 1; + static const float * r_lsm_quality = GET_PCVAR_FLOAT("r_lsm_quality"); + static float r_lsm_quality_old = 1; - if (lsm_q && lsm_q_old != (*lsm_q)) + if (r_lsm_quality && r_lsm_quality_old != (*r_lsm_quality)) { - lsm_q_old = (*lsm_q); - if (lsm_q_old < 0.5f) + r_lsm_quality_old = (*r_lsm_quality); + if (r_lsm_quality_old < 0.5f) { - lsm_q_old = 0.5f; - Core_0SetCVarFloat("lsm_q", lsm_q_old); + r_lsm_quality_old = 0.5f; + Core_0SetCVarFloat("r_lsm_quality", r_lsm_quality_old); } - else if (lsm_q_old > 4.f) + else if (r_lsm_quality_old > 4.f) { - lsm_q_old = 4.f; - Core_0SetCVarFloat("lsm_q", lsm_q_old); + r_lsm_quality_old = 4.f; + Core_0SetCVarFloat("r_lsm_quality", r_lsm_quality_old); } - SML_LigthsSettLCoefSizeDepth(lsm_q_old); + SML_LigthsSettLCoefSizeDepth(r_lsm_quality_old); } - static const int * grass_frec = GET_PCVAR_INT("grass_frec"); - static int grass_frec_old = 1; + static const int * r_grass_freq = GET_PCVAR_INT("r_grass_freq"); + static int r_grass_freq_old = 1; - if (grass_frec && grass_frec_old != (*grass_frec)) + if (r_grass_freq && r_grass_freq_old != (*r_grass_freq)) { - grass_frec_old = (*grass_frec); - if (grass_frec_old <= 0) + r_grass_freq_old = (*r_grass_freq); + if (r_grass_freq_old <= 0) { - grass_frec_old = 1; - Core_0SetCVarInt("grass_frec", grass_frec_old); + r_grass_freq_old = 1; + Core_0SetCVarInt("r_grass_freq", r_grass_freq_old); } - else if (grass_frec_old > 100) + else if (r_grass_freq_old > 100) { - grass_frec_old = 100; - Core_0SetCVarInt("grass_frec", grass_frec_old); + r_grass_freq_old = 100; + Core_0SetCVarInt("r_grass_freq", r_grass_freq_old); } - SGeom_0SettGreenSetFreqGrass(grass_frec_old); + SGeom_0SettGreenSetFreqGrass(r_grass_freq_old); } - static const float * green_lod0 = GET_PCVAR_FLOAT("green_lod0"); - static float green_lod0_old = 50; + static const float * r_green_lod0 = GET_PCVAR_FLOAT("r_green_lod0"); + static float r_green_lod0_old = 50; - if (green_lod0 && green_lod0_old != (*green_lod0)) + if (r_green_lod0 && r_green_lod0_old != (*r_green_lod0)) { - green_lod0_old = (*green_lod0); - if (green_lod0_old <= 20) + r_green_lod0_old = (*r_green_lod0); + if (r_green_lod0_old <= 20) { - green_lod0_old = 20; - Core_0SetCVarFloat("green_lod0", green_lod0_old); + r_green_lod0_old = 20; + Core_0SetCVarFloat("r_green_lod0", r_green_lod0_old); } - else if (green_lod0_old > 100) + else if (r_green_lod0_old > 100) { - green_lod0_old = 100; - Core_0SetCVarFloat("green_lod0", green_lod0_old); + r_green_lod0_old = 100; + Core_0SetCVarFloat("r_green_lod0", r_green_lod0_old); } - SGeom_0SettGreenSetDistLods1(green_lod0_old); + SGeom_0SettGreenSetDistLods1(r_green_lod0_old); } - static const float * green_lod1 = GET_PCVAR_FLOAT("green_lod1"); - static float green_lod1_old = 50; + static const float * r_green_lod1 = GET_PCVAR_FLOAT("r_green_lod1"); + static float r_green_lod1_old = 50; - if (green_lod1 && green_lod1_old != (*green_lod1)) + if (r_green_lod1 && r_green_lod1_old != (*r_green_lod1)) { - green_lod1_old = (*green_lod1); - if (green_lod1_old <= 50) + r_green_lod1_old = (*r_green_lod1); + if (r_green_lod1_old <= 50) { - green_lod1_old = 50; - Core_0SetCVarFloat("green_lod1", green_lod1_old); + r_green_lod1_old = 50; + Core_0SetCVarFloat("r_green_lod1", r_green_lod1_old); } - else if (green_lod1_old > 150) + else if (r_green_lod1_old > 150) { - green_lod1_old = 150; - Core_0SetCVarFloat("green_lod1", green_lod1_old); + r_green_lod1_old = 150; + Core_0SetCVarFloat("r_green_lod1", r_green_lod1_old); } - SGeom_0SettGreenSetDistLods2(green_lod1_old); + SGeom_0SettGreenSetDistLods2(r_green_lod1_old); } - static const float * green_less = GET_PCVAR_FLOAT("green_less"); - static float green_less_old = 10; + static const float * r_green_less = GET_PCVAR_FLOAT("r_green_less"); + static float r_green_less_old = 10; - if (green_less && green_less_old != (*green_less)) + if (r_green_less && r_green_less_old != (*r_green_less)) { - green_less_old = (*green_less); - if (green_less_old <= 10) + r_green_less_old = (*r_green_less); + if (r_green_less_old <= 10) { - green_less_old = 10; - Core_0SetCVarFloat("green_less", green_less_old); + r_green_less_old = 10; + Core_0SetCVarFloat("r_green_less", r_green_less_old); } - else if (green_less_old > 90) + else if (r_green_less_old > 90) { - green_less_old = 90; - Core_0SetCVarFloat("green_less", green_less_old); + r_green_less_old = 90; + Core_0SetCVarFloat("r_green_less", r_green_less_old); } - SGeom_0SettGreenSetBeginEndLessening(green_less_old); + SGeom_0SettGreenSetBeginEndLessening(r_green_less_old); } - static int * winr_width = (int*)GET_PCVAR_INT("winr_width"); - static int * winr_height = (int*)GET_PCVAR_INT("winr_height"); + static int * r_win_width = (int*)GET_PCVAR_INT("r_win_width"); + static int * r_win_height = (int*)GET_PCVAR_INT("r_win_height"); - if (winr_width && winr_height) + if (r_win_width && r_win_height) { #ifdef SX_GAME - static int winr_width_old = *winr_width; - static int winr_height_old = *winr_height; + static int r_win_width_old = *r_win_width; + static int r_win_height_old = *r_win_height; static int iCountModes = 0; static const DEVMODE *aModes = SGCore_GetModes(&iCountModes); - if (winr_width && winr_width_old != (*winr_width) && winr_height && winr_height_old != (*winr_height)) + if (r_win_width && r_win_width_old != (*r_win_width) && r_win_height && r_win_height_old != (*r_win_height)) { bool isValid = false; for (int i = 0; i < iCountModes; ++i) { - if (aModes[i].dmPelsWidth == (*winr_width) && aModes[i].dmPelsHeight == (*winr_height)) + if (aModes[i].dmPelsWidth == (*r_win_width) && aModes[i].dmPelsHeight == (*r_win_height)) { isValid = true; break; @@ -932,11 +932,11 @@ void SkyXEngind_UpdateDataCVar() if (isValid) { - winr_width_old = (*winr_width); - winr_height_old = (*winr_height); + r_win_width_old = (*r_win_width); + r_win_height_old = (*r_win_height); - RECT rc = { 0, 0, winr_width_old, winr_height_old }; + RECT rc = { 0, 0, r_win_width_old, r_win_height_old }; AdjustWindowRect(&rc, WS_CAPTION | WS_SYSMENU | WS_MINIMIZEBOX, false); int iWidth = rc.right - rc.left; @@ -946,37 +946,33 @@ void SkyXEngind_UpdateDataCVar() MoveWindow(SRender_GetHandleWin3D(), rc.left, rc.top, iWidth, iHeight, TRUE); - static int *resize = (int*)GET_PCVAR_INT("resize"); - *resize = RENDER_RESIZE_RESIZE; + static int *r_resize = (int*)GET_PCVAR_INT("r_resize"); + *r_resize = RENDER_RESIZE_RESIZE; } else { - *winr_width = winr_width_old; - *winr_height = winr_height_old; + *r_win_width = r_win_width_old; + *r_win_height = r_win_height_old; } } - static const bool *winr_windowed = GET_PCVAR_BOOL("winr_windowed"); + static const bool *r_win_windowed = GET_PCVAR_BOOL("r_win_windowed"); - if (winr_windowed) + if (r_win_windowed) { - static bool winr_windowed_old = *winr_windowed; + static bool r_win_windowed_old = *r_win_windowed; - if (winr_windowed_old != (*winr_windowed)) + if (r_win_windowed_old != (*r_win_windowed)) { - winr_windowed_old = (*winr_windowed); - static int *resize = (int*)GET_PCVAR_INT("resize"); - *resize = RENDER_RESIZE_CHANGE; + r_win_windowed_old = (*r_win_windowed); + static int *r_resize = (int*)GET_PCVAR_INT("r_resize"); + *r_resize = RENDER_RESIZE_CHANGE; } } #else - static bool *winr_windowed = (bool*)GET_PCVAR_BOOL("winr_windowed"); - *winr_windowed = true; + static bool *r_win_windowed = (bool*)GET_PCVAR_BOOL("r_win_windowed"); + *r_win_windowed = true; #endif - - - /*Core_RFloatSet(G_RI_FLOAT_WINSIZE_WIDTH, *winr_width); - Core_RFloatSet(G_RI_FLOAT_WINSIZE_HEIGHT, *winr_height);*/ } } diff --git a/source/sxleveleditor/common_callback.cpp b/source/sxleveleditor/common_callback.cpp index 6bad1e5d439fc38c494610804f5a89c9310297a5..31aa78dcab0a4302d01002cf1c7cfa1e087137d9 100644 --- a/source/sxleveleditor/common_callback.cpp +++ b/source/sxleveleditor/common_callback.cpp @@ -147,42 +147,42 @@ LRESULT ComMenuId(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam) // else if (id == ID_FINALIMAGE_COLOR) { - Core_0SetCVarInt("final_image", DS_RT_COLOR); + Core_0SetCVarInt("r_final_image", DS_RT_COLOR); SXLevelEditor::FinalImageUncheckedMenu(); SXLevelEditor::MainMenu->CheckItem(id, !SXLevelEditor::MainMenu->GetCheckedItem(id)); } // else if (id == ID_FINALIMAGE_NORMALS) { - Core_0SetCVarInt("final_image", DS_RT_NORMAL); + Core_0SetCVarInt("r_final_image", DS_RT_NORMAL); SXLevelEditor::FinalImageUncheckedMenu(); SXLevelEditor::MainMenu->CheckItem(id, !SXLevelEditor::MainMenu->GetCheckedItem(id)); } // else if (id == ID_FINALIMAGE_PARAMETERS) { - Core_0SetCVarInt("final_image", DS_RT_PARAM); + Core_0SetCVarInt("r_final_image", DS_RT_PARAM); SXLevelEditor::FinalImageUncheckedMenu(); SXLevelEditor::MainMenu->CheckItem(id, !SXLevelEditor::MainMenu->GetCheckedItem(id)); } // else if (id == ID_FINALIMAGE_AMBIENTDIFFUSE) { - Core_0SetCVarInt("final_image", DS_RT_AMBIENTDIFF); + Core_0SetCVarInt("r_final_image", DS_RT_AMBIENTDIFF); SXLevelEditor::FinalImageUncheckedMenu(); SXLevelEditor::MainMenu->CheckItem(id, !SXLevelEditor::MainMenu->GetCheckedItem(id)); } // else if (id == ID_FINALIMAGE_SPECULAR) { - Core_0SetCVarInt("final_image", DS_RT_SPECULAR); + Core_0SetCVarInt("r_final_image", DS_RT_SPECULAR); SXLevelEditor::FinalImageUncheckedMenu(); SXLevelEditor::MainMenu->CheckItem(id, !SXLevelEditor::MainMenu->GetCheckedItem(id)); } // else if (id == ID_FINALIMAGE_LIGHTINGSCENE) { - Core_0SetCVarInt("final_image", DS_RT_SCENELIGHT); + Core_0SetCVarInt("r_final_image", DS_RT_SCENELIGHT); SXLevelEditor::FinalImageUncheckedMenu(); SXLevelEditor::MainMenu->CheckItem(id, !SXLevelEditor::MainMenu->GetCheckedItem(id)); } @@ -247,15 +247,15 @@ LRESULT ComMenuId(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam) LRESULT MsgEditSize(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam) { - static int *resize = (int*)GET_PCVAR_INT("resize"); + static int *r_resize = (int*)GET_PCVAR_INT("r_resize"); - if (!resize) - resize = (int*)GET_PCVAR_INT("resize"); + if (!r_resize) + r_resize = (int*)GET_PCVAR_INT("r_resize"); - if (!resize) + if (!r_resize) return 0; - *resize = RENDER_RESIZE_RESIZE; + *r_resize = RENDER_RESIZE_RESIZE; return 0; } @@ -311,12 +311,15 @@ LRESULT SXLevelEditor_RenderWindow_MouseMove(HWND hwnd, UINT msg, WPARAM wParam, } else if (SXLevelEditor::ActiveGroupType == EDITORS_LEVEL_GROUPTYPE_GREEN && SXLevelEditor::ActiveElement >= 0 && SXLevelEditor::ActiveGreenSplit >= 0 && SXLevelEditor::ActiveGreenObject >= 0) { - float3_t pos; - SGeom_GreenGetPosObject(SXLevelEditor::ActiveElement, SXLevelEditor::ActiveGreenSplit, SXLevelEditor::ActiveGreenObject, &pos); - float3 helperpos = SXLevelEditor::ObjAxesHelper->GetPosition(); - if (pos.x != helperpos.x || pos.y != helperpos.y || pos.z != helperpos.z) + if (SXLevelEditor::ComboBoxGreenSel->GetSel() == 0) { - SGeom_GreenSetPosObject(SXLevelEditor::ActiveElement, &SXLevelEditor::ActiveGreenSplit, &SXLevelEditor::ActiveGreenObject, &(float3_t)helperpos); + float3_t pos; + SGeom_GreenGetPosObject(SXLevelEditor::ActiveElement, SXLevelEditor::ActiveGreenSplit, SXLevelEditor::ActiveGreenObject, &pos); + float3 helperpos = SXLevelEditor::ObjAxesHelper->GetPosition(); + if (pos.x != helperpos.x || pos.y != helperpos.y || pos.z != helperpos.z) + { + SGeom_GreenSetPosObject(SXLevelEditor::ActiveElement, &SXLevelEditor::ActiveGreenSplit, &SXLevelEditor::ActiveGreenObject, &(float3_t)helperpos); + } } } else if (SXLevelEditor::ActiveGroupType == EDITORS_LEVEL_GROUPTYPE_GAME && SXLevelEditor::ActiveElement >= 0) @@ -374,12 +377,12 @@ LRESULT SXLevelEditor_RenderWindow_LClick(HWND hwnd, UINT msg, WPARAM wParam, LP GetCursorPos(&pt); ScreenToClient(SRender_GetHandleWin3D(), &pt); - static const int *winr_width = GET_PCVAR_INT("winr_width"); - static const int *winr_height = GET_PCVAR_INT("winr_height"); + static const int *r_win_width = GET_PCVAR_INT("r_win_width"); + static const int *r_win_height = GET_PCVAR_INT("r_win_height"); float3 pos = float3( - (2.0f * (float)pt.x / float(*winr_width) - 1.0f) / mCamProj._11, - -(2.0f * (float)pt.y / float(*winr_height) - 1.0f) / mCamProj._22, + (2.0f * (float)pt.x / float(*r_win_width) - 1.0f) / mCamProj._11, + -(2.0f * (float)pt.y / float(*r_win_height) - 1.0f) / mCamProj._22, 1.0f ) * mat; camDir = pos - vCamPos; @@ -406,7 +409,7 @@ LRESULT SXLevelEditor_RenderWindow_LClick(HWND hwnd, UINT msg, WPARAM wParam, LP if (SXLevelEditor::ComboBoxGreenSel->GetSel() == 0) { - if (pt.x <= *winr_width && pt.y <= *winr_height && SGeom_GreenTraceBeam(&vCamPos, &camDir, &_res, &idgreen, &idsplit, &idobj, &idmtl)) + if (pt.x <= *r_win_width && pt.y <= *r_win_height && SGeom_GreenTraceBeam(&vCamPos, &camDir, &_res, &idgreen, &idsplit, &idobj, &idmtl)) { SXLevelEditor::ActiveGreenSplit = idsplit; SXLevelEditor::ActiveGreenObject = idobj; @@ -429,9 +432,9 @@ LRESULT SXLevelEditor_RenderWindow_LClick(HWND hwnd, UINT msg, WPARAM wParam, LP } else if (SXLevelEditor::ComboBoxGreenSel->GetSel() == 1) { - if (pt.x <= *winr_width && pt.y <= *winr_height && SGeom_ModelsTraceBeam(&vCamPos, &camDir, &_res, &idmodel, &idmtl)) + if (pt.x <= *r_win_width && pt.y <= *r_win_height && SGeom_ModelsTraceBeam(&vCamPos, &camDir, &_res, &idmodel, &idmtl)) { - idobj = SGeom_GreenAddObject(0, &_res, &idsplit); + idobj = SGeom_GreenAddObject(SXLevelEditor::ActiveElement, &_res, &idsplit); SXLevelEditor::ActiveGreenSplit = idsplit; SXLevelEditor::ActiveGreenObject = idobj; @@ -453,7 +456,7 @@ LRESULT SXLevelEditor_RenderWindow_LClick(HWND hwnd, UINT msg, WPARAM wParam, LP else if (SXLevelEditor::ComboBoxGreenSel->GetSel() == 2) { - if (pt.x <= *winr_width && pt.y <= *winr_height && SGeom_ModelsTraceBeam(&vCamPos, &camDir, &_res, &idmodel, &idmtl)) + if (pt.x <= *r_win_width && pt.y <= *r_win_height && SGeom_ModelsTraceBeam(&vCamPos, &camDir, &_res, &idmodel, &idmtl)) { SXLevelEditor::GreenBoxPos = _res; int density = SXLevelEditor::TrackBarGreenDensity->GetPos(); @@ -479,9 +482,9 @@ LRESULT SXLevelEditor_RenderWindow_LClick(HWND hwnd, UINT msg, WPARAM wParam, LP else if (SXLevelEditor::ComboBoxGreenSel->GetSel() == 3) { - static const int *winr_width = GET_PCVAR_INT("winr_width"); - static const int *winr_height = GET_PCVAR_INT("winr_height"); - if (pt.x <= *winr_width && pt.y <= *winr_height && SGeom_GreenTraceBeam(&vCamPos, &camDir, &_res, &idgreen, &idsplit, &idobj, &idmtl)) + static const int *r_win_width = GET_PCVAR_INT("r_win_width"); + static const int *r_win_height = GET_PCVAR_INT("r_win_height"); + if (pt.x <= *r_win_width && pt.y <= *r_win_height && SGeom_GreenTraceBeam(&vCamPos, &camDir, &_res, &idgreen, &idsplit, &idobj, &idmtl)) { SXLevelEditor::ActiveGreenSplit = -1; SXLevelEditor::ActiveGreenObject = -1; @@ -564,12 +567,12 @@ LRESULT SXLevelEditor_RenderWindow_RClick(HWND hwnd, UINT msg, WPARAM wParam, LP GetCursorPos(&pt); ScreenToClient(SRender_GetHandleWin3D(), &pt); - static const int *winr_width = GET_PCVAR_INT("winr_width"); - static const int *winr_height = GET_PCVAR_INT("winr_height"); + static const int *r_win_width = GET_PCVAR_INT("r_win_width"); + static const int *r_win_height = GET_PCVAR_INT("r_win_height"); float3 pos = float3( - (2.0f * (float)pt.x / float(*winr_width) - 1.0f) / mCamProj._11, - -(2.0f * (float)pt.y / float(*winr_height) - 1.0f) / mCamProj._22, + (2.0f * (float)pt.x / float(*r_win_width) - 1.0f) / mCamProj._11, + -(2.0f * (float)pt.y / float(*r_win_height) - 1.0f) / mCamProj._22, 1.0f ) * mat; camDir = pos - vCamPos; @@ -587,7 +590,7 @@ LRESULT SXLevelEditor_RenderWindow_RClick(HWND hwnd, UINT msg, WPARAM wParam, LP if (SXLevelEditor::ComboBoxGreenSel->GetSel() == 2) { - if (pt.x <= *winr_width && pt.y <= *winr_height && SGeom_ModelsTraceBeam(&vCamPos, &camDir, &_res, &idmodel, &idmtl)) + if (pt.x <= *r_win_width && pt.y <= *r_win_height && SGeom_ModelsTraceBeam(&vCamPos, &camDir, &_res, &idmodel, &idmtl)) SXLevelEditor::GreenBoxPos = _res; } } @@ -858,6 +861,10 @@ LRESULT SXLevelEditor_GroupBox_Notify(HWND hwnd, UINT msg, WPARAM wParam, LPARAM { SXLevelEditor_ListViewGameClass_Click(); } + else if (((NMHDR*)lParam)->hwndFrom == SXLevelEditor::ListViewGameConnections->GetHWND() && ((NMHDR*)lParam)->code == NM_CLICK) + { + SXLevelEditor_ListViewGameConnections_Click(); + } return 0; } @@ -951,42 +958,42 @@ LRESULT SXLevelEditor_ToolBar1_CallWmCommand(HWND hwnd, UINT msg, WPARAM wParam, SXLevelEditor::FinalImageUncheckedMenu(); SXLevelEditor::MainMenu->CheckItem(ID_FINALIMAGE_COLOR, true); SXLevelEditor::CheckBoxTBRColor->SetCheck(true); - Core_0SetCVarInt("final_image", DS_RT_COLOR); + Core_0SetCVarInt("r_final_image", DS_RT_COLOR); } else if (SXLevelEditor::CheckBoxTBRNormal->GetHWND() == handle_elem) { SXLevelEditor::FinalImageUncheckedMenu(); SXLevelEditor::MainMenu->CheckItem(ID_FINALIMAGE_NORMALS, true); SXLevelEditor::CheckBoxTBRNormal->SetCheck(true); - Core_0SetCVarInt("final_image", DS_RT_NORMAL); + Core_0SetCVarInt("r_final_image", DS_RT_NORMAL); } else if (SXLevelEditor::CheckBoxTBRParam->GetHWND() == handle_elem) { SXLevelEditor::FinalImageUncheckedMenu(); SXLevelEditor::MainMenu->CheckItem(ID_FINALIMAGE_PARAMETERS, true); SXLevelEditor::CheckBoxTBRParam->SetCheck(true); - Core_0SetCVarInt("final_image", DS_RT_PARAM); + Core_0SetCVarInt("r_final_image", DS_RT_PARAM); } else if (SXLevelEditor::CheckBoxTBRAmDiff->GetHWND() == handle_elem) { SXLevelEditor::FinalImageUncheckedMenu(); SXLevelEditor::MainMenu->CheckItem(ID_FINALIMAGE_AMBIENTDIFFUSE, true); SXLevelEditor::CheckBoxTBRAmDiff->SetCheck(true); - Core_0SetCVarInt("final_image", DS_RT_AMBIENTDIFF); + Core_0SetCVarInt("r_final_image", DS_RT_AMBIENTDIFF); } else if (SXLevelEditor::CheckBoxTBRSpecular->GetHWND() == handle_elem) { SXLevelEditor::FinalImageUncheckedMenu(); SXLevelEditor::MainMenu->CheckItem(ID_FINALIMAGE_SPECULAR, true); SXLevelEditor::CheckBoxTBRSpecular->SetCheck(true); - Core_0SetCVarInt("final_image", DS_RT_SPECULAR); + Core_0SetCVarInt("r_final_image", DS_RT_SPECULAR); } else if (SXLevelEditor::CheckBoxTBRLighting->GetHWND() == handle_elem) { SXLevelEditor::FinalImageUncheckedMenu(); SXLevelEditor::MainMenu->CheckItem(ID_FINALIMAGE_LIGHTINGSCENE, true); SXLevelEditor::CheckBoxTBRLighting->SetCheck(true); - Core_0SetCVarInt("final_image", DS_RT_SCENELIGHT); + Core_0SetCVarInt("r_final_image", DS_RT_SCENELIGHT); } else if (SXLevelEditor::CheckBoxTBSelS->GetHWND() == handle_elem) @@ -1058,9 +1065,8 @@ LRESULT SXLevelEditor_ToolBar1_CallWmCommand(HWND hwnd, UINT msg, WPARAM wParam, SML_LigthsSetEnable(gid, SXLevelEditor::CheckBoxTBGLightEnable->GetCheck()); else SXLevelEditor::CheckBoxTBGLightEnable->SetCheck(false); - - //Core_0SetCVarBool("pssm_shadowed", true); } + } return 0; @@ -1076,6 +1082,34 @@ LRESULT SXLevelEditor_GroupBox_CallWmCommand(HWND hwnd, UINT msg, WPARAM wParam, { if (handle_elem == SXLevelEditor::CheckBoxAIGridMarkedSplits->GetHWND()) SAIG_GridSetMarkSplits(SXLevelEditor::CheckBoxAIGridMarkedSplits->GetCheck()); + else + { + ID seldata = SXLevelEditor::ListBoxList->GetItemData(SXLevelEditor::ListBoxList->GetSel()); + SXbaseEntity* bEnt = SXGame_EntGet(seldata); + int str = SXLevelEditor::ListViewGameClass->GetSelString(); + + if (seldata < 0 || str < 0) + return 0; + char txtval[256]; + SXLevelEditor::ListViewGameClass->GetTextItem(txtval, 1, str, 256); + UINT uiFlags; + sscanf(txtval, "%d", &uiFlags); + + for (int i = 0; i < 16; ++i) + { + if (SXLevelEditor::CheckBoxGameFlags[i]->GetHWND() == handle_elem) + { + if (SXLevelEditor::CheckBoxGameFlags[i]->GetCheck()) + uiFlags |= (1 << (i + 16)); + else + uiFlags ^= (1 << (i + 16)); + } + } + + sprintf(txtval, "%d", uiFlags); + SXLevelEditor::ListViewGameClass->SetTextItem(txtval, 1, str); + bEnt->SetKV("flags", txtval); + } } else if (Notification == CBN_SELCHANGE) { @@ -1222,6 +1256,35 @@ LRESULT SXLevelEditor_GroupBox_CallWmCommand(HWND hwnd, UINT msg, WPARAM wParam, } + + else if (SXLevelEditor::ComboBoxGameConnectionsEvent->GetHWND() == handle_elem) + { + ID idSelListBoxList = SXLevelEditor::ListBoxList->GetSel(); + ID idSelStrTable = SXLevelEditor::ListViewGameConnections->GetSelString(); + + if (idSelListBoxList < 0 || idSelStrTable < 0) + return 0; + + char szBuffer256[256]; + szBuffer256[0] = 0; + SXLevelEditor::ComboBoxGameConnectionsEvent->GetItemText(256, szBuffer256); + SXLevelEditor::ListViewGameConnections->SetTextItem(szBuffer256, 0, idSelStrTable); + return SXLevelEditor_EditGameConnections_Enter(hwnd, msg, wParam, lParam); + } + else if (SXLevelEditor::ComboBoxGameConnectionsAction->GetHWND() == handle_elem) + { + ID idSelListBoxList = SXLevelEditor::ListBoxList->GetSel(); + ID idSelStrTable = SXLevelEditor::ListViewGameConnections->GetSelString(); + + if (idSelListBoxList < 0 || idSelStrTable < 0) + return 0; + + char szBuffer256[256]; + szBuffer256[0] = 0; + SXLevelEditor::ComboBoxGameConnectionsAction->GetItemText(SXLevelEditor::ComboBoxGameConnectionsAction->GetSel(), szBuffer256); + SXLevelEditor::ListViewGameConnections->SetTextItem(szBuffer256, 2, idSelStrTable); + return SXLevelEditor_EditGameConnections_Enter(hwnd, msg, wParam, lParam); + } } /*else if (Notification == EN_CHANGE) { diff --git a/source/sxleveleditor/game_callback.cpp b/source/sxleveleditor/game_callback.cpp index 89eb05edc4e691a78658bc0905b0865bb7a01ad5..1e4bbdafe0b09bb1c0ec03fac36ef5aa4934b73e 100644 --- a/source/sxleveleditor/game_callback.cpp +++ b/source/sxleveleditor/game_callback.cpp @@ -22,12 +22,22 @@ void SXLevelEditor::GameActivateAll(bool bf) SXLevelEditor::MemoGameHelp->Visible(bf); SXLevelEditor::ButtonGameCreate->Visible(bf); + for (int i = 0; i < 16; ++i) + { + SXLevelEditor::CheckBoxGameFlags[i]->Visible(false); + } + if (!bf) SXLevelEditor::GameVisibleConnections(false); } void SXLevelEditor::GameSel(int sel) { + for (int i = 0; i < 16; ++i) + { + SXLevelEditor::CheckBoxGameFlags[i]->Visible(false); + } + SXLevelEditor::ComboBoxGameValue->Visible(false); SXLevelEditor::ComboBoxGameValue->Clear(); SXLevelEditor::EditGameValue->Visible(false); @@ -63,6 +73,9 @@ void SXLevelEditor::GameSel(int sel) ptparent = ptparent->pBaseProptable; } + + memset(SXLevelEditor::aGameObjectFlags, 0, sizeof(const char*)* 16); + for (int k = 0; k < tmparr.size(); ++k) { ptparent = tmparr[(tmparr.size() - 1) - k]; @@ -78,6 +91,12 @@ void SXLevelEditor::GameSel(int sel) //propdata_t* pd2 = (propdata_t*)SXLevelEditor::ListViewGameClass->GetDataItem(str); SXLevelEditor::ListViewGameClass->SetTextItem(txtval, 1, str); } + + if (pd->szEdName && pd->type == PDF_FLAG) + { + int index = log2(pd->flags) - 16; + SXLevelEditor::aGameObjectFlags[index] = pd->szEdName; + } } } @@ -95,8 +114,79 @@ void SXLevelEditor::GameSel(int sel) //propdata_t* pd2 = (propdata_t*)SXLevelEditor::ListViewGameClass->GetDataItem(str); SXLevelEditor::ListViewGameClass->SetTextItem(txtval, 1, str); } + + if (pd->szEdName && pd->type == PDF_FLAG) + { + int index = log2(pd->flags) - 16; + SXLevelEditor::aGameObjectFlags[index] = pd->szEdName; + } } + //���������� ������� � ComboBoxGameConnectionsEvent + SXLevelEditor::ComboBoxGameConnectionsEvent->Clear(); + SXLevelEditor::ComboBoxGameConnectionsAction->Clear(); + SXLevelEditor::ListViewGameConnections->ClearStrings(); + SXLevelEditor::EditGameConnectionsName->SetText(""); + SXLevelEditor::EditGameConnectionsDelay->SetText(""); + SXLevelEditor::EditGameConnectionsParameter->SetText(""); + + char szBuffer4096[4096]; + + //���������� �� ���� ������� ������� ������ ������� + for (int i = 0; i < pt->numFields; ++i) + { + pd = &pt->pData[i]; + + //���� ���� ������ �� ��� ��� ���� + if (pd->flags & PDFF_OUTPUT) + { + //�������� ������ � ������������� ������� + bEnt->GetKV(pd->szKey, szBuffer4096, 4096); + + //������ ������ + int iConns = parse_str(szBuffer4096, NULL, 0, ','); + char ** parts = (char**)alloca(sizeof(char*)*iConns); + iConns = parse_str(szBuffer4096, parts, iConns, ','); + + for (int k = 0; k < iConns; ++k) + { + int iConns2 = parse_str(parts[k], NULL, 0, ':'); + char ** parts2 = (char**)alloca(sizeof(char*)*iConns2); + iConns2 = parse_str(parts[k], parts2, iConns2, ':'); + + if (iConns2 > 0) + { + int iNumStr = SXLevelEditor::ListViewGameConnections->AddString((long)pd); + sprintf(txtkey, "%s", pd->szEdName); + SXLevelEditor::ListViewGameConnections->SetTextItem(txtkey, 0, iNumStr); + + for (int j = 0; j < iConns2; ++j) + SXLevelEditor::ListViewGameConnections->SetTextItem(parts2[j], j + 1, iNumStr); + + SXbaseEntity *pEnt2 = SXGame_EntGetByName(parts2[0], 0); + if (pEnt2) + { + proptable_t *pPropTable2 = SXGame_EntGetProptable(pEnt2->GetClassName()); + propdata_t *pPropData2 = 0; + for (int j = 0; j < pPropTable2->numFields; ++j) + { + pPropData2 = &pPropTable2->pData[j]; + if (pPropData2->flags & PDFF_INPUT && strcmp(pPropData2->szKey, parts2[1])==0) + { + sprintf(txtkey, "%s", pPropData2->szEdName); + SXLevelEditor::ListViewGameConnections->SetTextItem(txtkey, 2, iNumStr); + } + } + } + } + } + + SXLevelEditor::ComboBoxGameConnectionsEvent->AddItem(pd->szEdName); + SXLevelEditor::ComboBoxGameConnectionsEvent->SetItemData(SXLevelEditor::ComboBoxGameConnectionsEvent->GetCount()-1, (LPARAM)(pd->szKey)); + } + } + //------- + SXLevelEditor::ObjAxesHelper->SetPosition(bEnt->GetPos()); SXLevelEditor::ObjAxesHelper->SetRotation(bEnt->GetOrient()); SXLevelEditor::ObjAxesHelper->SetScale(float3(1, 1, 1)); @@ -144,11 +234,19 @@ LRESULT SXLevelEditor_ListViewGameClass_Click() char txtval[256]; + for (int i = 0; i < 16; ++i) + { + SXLevelEditor::CheckBoxGameFlags[i]->Visible(false); + } + if (pd->editor.type == PDE_TEXTFIELD) { SXLevelEditor::EditGameValue->Visible(true); SXLevelEditor::ListViewGameClass->GetTextItem(txtval, 1, str, 256); SXLevelEditor::EditGameValue->SetText(txtval); + + SXLevelEditor::StaticGameHelp->Visible(true); + SXLevelEditor::MemoGameHelp->Visible(true); } else if (pd->editor.type == PDE_FILEFIELD) { @@ -156,9 +254,15 @@ LRESULT SXLevelEditor_ListViewGameClass_Click() SXLevelEditor::ButtonGameValue->Visible(true); SXLevelEditor::ListViewGameClass->GetTextItem(txtval, 1, str, 256); SXLevelEditor::EditGameValue->SetText(txtval); + + SXLevelEditor::StaticGameHelp->Visible(true); + SXLevelEditor::MemoGameHelp->Visible(true); } else if (pd->editor.type == PDE_COMBOBOX) { + SXLevelEditor::StaticGameHelp->Visible(true); + SXLevelEditor::MemoGameHelp->Visible(true); + SXLevelEditor::ComboBoxGameValue->Clear(); SXLevelEditor::ComboBoxGameValue->Visible(true); editor_kv* ekv = (editor_kv*)pd->editor.pData; @@ -217,6 +321,27 @@ LRESULT SXLevelEditor_ListViewGameClass_Click() SXLevelEditor::ComboBoxGameValue->SetSel(SXLevelEditor::ComboBoxGameValue->GetCount()-1); } } + else if (pd->editor.type == PDE_FLAGS) + { + SXLevelEditor::StaticGameHelp->Visible(false); + SXLevelEditor::MemoGameHelp->Visible(false); + char txtval[256]; + SXLevelEditor::ListViewGameClass->GetTextItem(txtval, 1, str, 256); + UINT uiFlags; + sscanf(txtval, "%d", &uiFlags); + for (int i = 0; i < 16; ++i) + { + if (SXLevelEditor::aGameObjectFlags[i]) + { + SXLevelEditor::CheckBoxGameFlags[i]->SetText(SXLevelEditor::aGameObjectFlags[i]); + SXLevelEditor::CheckBoxGameFlags[i]->Visible(true); + if (uiFlags & ((1 << i + 16))) + SXLevelEditor::CheckBoxGameFlags[i]->SetCheck(true); + else + SXLevelEditor::CheckBoxGameFlags[i]->SetCheck(false); + } + } + } return 0; } @@ -380,8 +505,6 @@ LRESULT SXLevelEditor_EditGameConnectionsName_IN(HWND hwnd, UINT msg, WPARAM wPa PostMessage(SXLevelEditor::EditGameConnectionsName->GetHWND(), EM_SETSEL, strlen(edit_text), strlen(lower_name)); return 0; } - //int qwerty = 0; - //return 0; } } } @@ -400,6 +523,11 @@ void SXLevelEditor::GameVisibleProperties(bool bf) SXLevelEditor::StaticGameHelp->Visible(bf); SXLevelEditor::MemoGameHelp->Visible(bf); SXLevelEditor::ButtonGameCreate->Visible(bf); + + for (int i = 0; i < 16; ++i) + { + SXLevelEditor::CheckBoxGameFlags[i]->Visible(false); + } } void SXLevelEditor::GameVisibleConnections(bool bf) @@ -415,6 +543,8 @@ void SXLevelEditor::GameVisibleConnections(bool bf) SXLevelEditor::EditGameConnectionsDelay->Visible(bf); SXLevelEditor::StaticGameConnectionsParameter->Visible(bf); SXLevelEditor::EditGameConnectionsParameter->Visible(bf); + SXLevelEditor::ButtonGameConnectionsCreate->Visible(bf); + SXLevelEditor::ButtonGameConnectionsDelete->Visible(false); } LRESULT SXLevelEditor_ButtonGameTab_Click(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam) @@ -437,3 +567,378 @@ LRESULT SXLevelEditor_ButtonGameTab_Click(HWND hwnd, UINT msg, WPARAM wParam, LP return 0; } +//########################################################################## + +LRESULT SXLevelEditor_ListViewGameConnections_Click() +{ + int iNumStr = SXLevelEditor::ListViewGameConnections->GetSelString(); + + //������� ���������� + //SXLevelEditor::ComboBoxGameConnectionsEvent->Clear(); + SXLevelEditor::ComboBoxGameConnectionsAction->Clear(); + + //���� ��� ����������� ����� �������� + if (iNumStr < 0) + { + SXLevelEditor::ComboBoxGameConnectionsEvent->SetSel(0); + SXLevelEditor::EditGameConnectionsName->SetText(""); + SXLevelEditor::ComboBoxGameConnectionsAction->SetSel(0); + SXLevelEditor::EditGameConnectionsDelay->SetText(""); + SXLevelEditor::EditGameConnectionsParameter->SetText(""); + return 0; + } + + char szStr[256]; + char szStr2[256]; + + //�������� ������������ event � ComboBoxGameConnectionsEvent + SXLevelEditor::ListViewGameConnections->GetTextItem(szStr, 0, iNumStr, 256); + + for (int i = 0; i < SXLevelEditor::ComboBoxGameConnectionsEvent->GetCount(); ++i) + { + SXLevelEditor::ComboBoxGameConnectionsEvent->GetItemText(i, szStr2); + if (strcmp(szStr, szStr2) == 0) + { + SXLevelEditor::ComboBoxGameConnectionsEvent->SetSel(i); + break; + } + } + //------- + + //������������� ��� ������������� �������� ������� � EditGameConnectionsName + SXLevelEditor::ListViewGameConnections->GetTextItem(szStr, 1, iNumStr, 256); + SXLevelEditor::EditGameConnectionsName->SetText(szStr); + //------- + + //������������� ������ � ComboBoxGameConnectionsAction � �������� ������������ + SXbaseEntity *pEnt2 = 0; + + //�������� �� ���� ������� �������� + for (int i = 0; i < SXGame_EntGetCount(); ++i) + { + pEnt2 = SXGame_EntGet(i); + + //���� ��� �������� ������� ��������� ������������� + if (pEnt2 && strcmp(pEnt2->GetName(), szStr) == 0) + { + proptable_t *pPropTable = SXGame_EntGetProptable(pEnt2->GetClassName()); + propdata_t *pPropData = 0; + + //���������� �� ���� ����� ������ + for (int k = 0; k < pPropTable->numFields; ++k) + { + pPropData = &pPropTable->pData[k]; + if (pPropData->flags & PDFF_INPUT) + { + SXLevelEditor::ComboBoxGameConnectionsAction->AddItem(pPropData->szEdName); + SXLevelEditor::ComboBoxGameConnectionsAction->SetItemData(SXLevelEditor::ComboBoxGameConnectionsAction->GetCount() - 1, (LPARAM)(pPropData->szKey)); + } + } + } + } + + SXLevelEditor::ListViewGameConnections->GetTextItem(szStr, 2, iNumStr, 256); + for (int i = 0; i < SXLevelEditor::ComboBoxGameConnectionsAction->GetCount(); ++i) + { + SXLevelEditor::ComboBoxGameConnectionsAction->GetItemText(i, szStr2); + if (strcmp(szStr, szStr2) == 0) + { + SXLevelEditor::ComboBoxGameConnectionsAction->SetSel(i); + break; + } + } + //------- + + //������������� �������� � �������� � EditGameConnectionsDelay + SXLevelEditor::ListViewGameConnections->GetTextItem(szStr, 3, iNumStr, 256); + SXLevelEditor::EditGameConnectionsDelay->SetText(szStr); + //------- + + //������������� �������� � EditGameConnectionsParameter + SXLevelEditor::ListViewGameConnections->GetTextItem(szStr, 4, iNumStr, 256); + SXLevelEditor::EditGameConnectionsParameter->SetText(szStr); + //------- + + SXLevelEditor::ButtonGameConnectionsDelete->Visible(true); + SXLevelEditor::ButtonGameConnectionsCreate->SetText("Create"); + SXLevelEditor::isAddGameConections = false; + + return 0; +} + +LRESULT SXLevelEditor_EditGameConnectionsName_Enter(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam) +{ + ID idSelListBoxList = SXLevelEditor::ListBoxList->GetSel(); + ID idSelStrTable = SXLevelEditor::ListViewGameConnections->GetSelString(); + + if (idSelListBoxList < 0) + return 0; + + SXbaseEntity *pEnt = SXGame_EntGet(idSelListBoxList); + + char szBuffer256[256]; + szBuffer256[0] = 0; + + SXLevelEditor::EditGameConnectionsName->GetText(szBuffer256, 256); + + SXbaseEntity *pEnt2 = SXGame_EntGetByName(szBuffer256, 0); + + //���������� � szBuffer256 ������� ��� action + szBuffer256[0] = 0; + SXLevelEditor::ComboBoxGameConnectionsAction->GetItemText(SXLevelEditor::ComboBoxGameConnectionsAction->GetSel(), szBuffer256); + + // ���� ������ � ��������� ������ ���������� + if (pEnt2) + { + proptable_t *pPropTable2 = SXGame_EntGetProptable(pEnt2->GetClassName()); + propdata_t *pPropData2 = 0; + SXLevelEditor::ComboBoxGameConnectionsAction->Clear(); + + //���������� �� ���� ������ ������� ������� + for (int j = 0; j < pPropTable2->numFields; ++j) + { + pPropData2 = &pPropTable2->pData[j]; + + //���� �������� input + if (pPropData2->flags & PDFF_INPUT) + { + //��������� � ��������� action + SXLevelEditor::ComboBoxGameConnectionsAction->AddItem(pPropData2->szEdName); + SXLevelEditor::ComboBoxGameConnectionsAction->SetItemData(SXLevelEditor::ComboBoxGameConnectionsEvent->GetCount() - 1, (LPARAM)(pPropData2->szKey)); + + //���� ���������� ��� action ����� ���������� ������������ + if (strcmp(pPropData2->szEdName, szBuffer256) == 0) + { + //���������� ��� ������ � ���������� + SXLevelEditor::ComboBoxGameConnectionsAction->SetSel(SXLevelEditor::ComboBoxGameConnectionsAction->GetCount() - 1); + } + } + } + } + // ���� ������ ������ �� ���������� + else + { + //���������� �� ��� ������ � ������� + + if (idSelStrTable < 0) + return 0; + + szBuffer256[0] = 0; + SXLevelEditor::ListViewGameConnections->GetTextItem(szBuffer256, 1, idSelStrTable, 256); + SXLevelEditor::EditGameConnectionsName->SetText(szBuffer256); + } + + return SXLevelEditor_EditGameConnections_Enter(hwnd, msg, wParam, lParam); +} + +LRESULT SXLevelEditor_EditGameConnections_Enter(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam) +{ + if (SXLevelEditor::isAddGameConections) + return 0; + + ID idSelListBoxList = SXLevelEditor::ListBoxList->GetSel(); + ID idSelStrTable = SXLevelEditor::ListViewGameConnections->GetSelString(); + + if (idSelListBoxList < 0 || idSelStrTable < 0) + return 0; + + ID idSelEnt = SXLevelEditor::ListBoxList->GetItemData(idSelListBoxList); + SXbaseEntity *pEnt = SXGame_EntGet(idSelEnt); + proptable_t *pPropTable = SXGame_EntGetProptable(pEnt->GetClassName()); + propdata_t *pPropData = (propdata_t*)(SXLevelEditor::ListViewGameConnections->GetDataItem(idSelStrTable)); + + //�������� �������� � ������ ������ ������ + char szBuffer4096[4096]; + szBuffer4096[0] = 0; + SXLevelEditor_VeldStringGameConnections(pPropTable, pPropData, -1, szBuffer4096, 4096); + + + //������������� � ���������� � ������� ������ ������ �� ���������� + char szBuffer256[256]; + szBuffer256[0] = 0; + + SXLevelEditor::ComboBoxGameConnectionsEvent->GetItemText(SXLevelEditor::ComboBoxGameConnectionsEvent->GetSel(), szBuffer256); + SXLevelEditor::ListViewGameConnections->SetTextItem(szBuffer256, 0, idSelStrTable); + + szBuffer256[0] = 0; + SXLevelEditor::EditGameConnectionsName->GetText(szBuffer256, 256); + SXLevelEditor::ListViewGameConnections->SetTextItem(szBuffer256, 1, idSelStrTable); + + szBuffer256[0] = 0; + SXLevelEditor::ComboBoxGameConnectionsAction->GetItemText(SXLevelEditor::ComboBoxGameConnectionsAction->GetSel(), szBuffer256); + SXLevelEditor::ListViewGameConnections->SetTextItem(szBuffer256, 2, idSelStrTable); + + szBuffer256[0] = 0; + SXLevelEditor::EditGameConnectionsDelay->GetText(szBuffer256, 256); + SXLevelEditor::ListViewGameConnections->SetTextItem(szBuffer256, 3, idSelStrTable); + + szBuffer256[0] = 0; + SXLevelEditor::EditGameConnectionsParameter->GetText(szBuffer256, 256); + SXLevelEditor::ListViewGameConnections->SetTextItem(szBuffer256, 4, idSelStrTable); + + pEnt->SetKV(pPropData->szKey, szBuffer4096); + + return 0; +} + +void SXLevelEditor_VeldStringGameConnections(proptable_t *pPropTable, propdata_t *pPropData, int iNumExclude, char* szStrOut, int iSize) +{ + char szBuffer256[256]; + szBuffer256[0] = 0; + + //���������� �� ���� ������� ������� + for (int i = 0, il = SXLevelEditor::ListViewGameConnections->GetCountString(); i < il; ++i) + { + //���� ������ � ���� ������� ���� ��������� + if (iNumExclude == i) + continue; + + propdata_t *pPropData2 = (propdata_t*)SXLevelEditor::ListViewGameConnections->GetDataItem(i); + + //���� �������� �� ��� ��� ���� + if (pPropData == pPropData2) + { + if (strlen(szStrOut) > 0) + sprintf(szStrOut + strlen(szStrOut), ","); + + szBuffer256[0] = 0; + SXLevelEditor::ListViewGameConnections->GetTextItem(szBuffer256, 1, i, 256); + sprintf(szStrOut + strlen(szStrOut), "%s:", szBuffer256); + + //���� ������ � ������� ����� ���������� + SXbaseEntity *pEnt2 = SXGame_EntGetByName(szBuffer256); + proptable_t *pPropTable2 = 0; + + if (pEnt2) + pPropTable2 = SXGame_EntGetProptable(pEnt2->GetClassName()); + + szBuffer256[0] = 0; + SXLevelEditor::ListViewGameConnections->GetTextItem(szBuffer256, 2, i, 256); + + //���� ������ ��� ���������� ���������� + if (pEnt2) + { + //���������� �� ���� ����� ������� ������ + for (int k = 0; k < pPropTable2->numFields; ++k) + { + propdata_t *pPropData3 = &pPropTable2->pData[k]; + + //���� ���� ������ �� ��� ��� ���� + if (pPropData3->flags & PDFF_INPUT && strcmp(pPropData3->szEdName, szBuffer256) == 0) + { + sprintf(szStrOut + strlen(szStrOut), "%s:", pPropData3->szKey); + break; + } + } + } + //���� ������ ��� ���������� ��� + else + { + sprintf(szStrOut + strlen(szStrOut), ":"); + } + + szBuffer256[0] = 0; + SXLevelEditor::ListViewGameConnections->GetTextItem(szBuffer256, 3, i, 256); + sprintf(szStrOut + strlen(szStrOut), "%s:", szBuffer256); + + szBuffer256[0] = 0; + SXLevelEditor::ListViewGameConnections->GetTextItem(szBuffer256, 4, i, 256); + sprintf(szStrOut + strlen(szStrOut), "%s", szBuffer256); + } + } +} + +LRESULT SXLevelEditor_ButtonGameConnectionsCreate_Click(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam) +{ + ID idSelListBoxList = SXLevelEditor::ListBoxList->GetSel(); + ID idSelStrTable = SXLevelEditor::ListViewGameConnections->GetSelString(); + + if (idSelListBoxList < 0) + return 0; + + ID idSelEnt = SXLevelEditor::ListBoxList->GetItemData(idSelListBoxList); + SXbaseEntity *pEnt = SXGame_EntGet(idSelEnt); + proptable_t *pPropTable = SXGame_EntGetProptable(pEnt->GetClassName()); + + if (!pEnt) + return 0; + + //���� ���������� ������ ���������� + if (SXLevelEditor::isAddGameConections) + { + if (idSelStrTable < 0) + return 0; + + propdata_t *pPropData = (propdata_t*)(SXLevelEditor::ListViewGameConnections->GetDataItem(idSelStrTable)); + + SXLevelEditor::ButtonGameConnectionsDelete->Visible(true); + SXLevelEditor::ButtonGameConnectionsCreate->SetText("Create"); + SXLevelEditor::isAddGameConections = false; + + char szBuffer4096[4096]; + szBuffer4096[0] = 0; + + SXLevelEditor_VeldStringGameConnections(pPropTable, pPropData, -1, szBuffer4096, 4096); + + if (strlen(szBuffer4096) > 0) + sprintf(szBuffer4096 + strlen(szBuffer4096), ","); + + char szBuffer256[256]; + szBuffer256[0] = 0; + + SXLevelEditor::EditGameConnectionsName->GetText(szBuffer256, 256); + sprintf(szBuffer4096 + strlen(szBuffer4096), "%s:", szBuffer256); + + szBuffer256[0] = 0; + long lItemData = SXLevelEditor::ComboBoxGameConnectionsAction->GetItemData(SXLevelEditor::ComboBoxGameConnectionsAction->GetSel()); + sprintf(szBuffer4096 + strlen(szBuffer4096), "%s:", (char*)lItemData); + + szBuffer256[0] = 0; + SXLevelEditor::EditGameConnectionsDelay->GetText(szBuffer256, 256); + sprintf(szBuffer4096 + strlen(szBuffer4096), "%s:", szBuffer256); + + szBuffer256[0] = 0; + SXLevelEditor::EditGameConnectionsParameter->GetText(szBuffer256, 256); + sprintf(szBuffer4096 + strlen(szBuffer4096), "%s", szBuffer256); + + pEnt->SetKV(pPropData->szKey, szBuffer4096); + + SXLevelEditor::GameSel(idSelListBoxList); + } + //����� �������� ������ ���������� + else + { + SXLevelEditor::ButtonGameConnectionsDelete->Visible(false); + SXLevelEditor::ButtonGameConnectionsCreate->SetText("Add"); + SXLevelEditor::isAddGameConections = true; + } + return 0; +} + +LRESULT SXLevelEditor_ButtonGameConnectionsDelete_Click(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam) +{ + ID idSelListBoxList = SXLevelEditor::ListBoxList->GetSel(); + ID idSelStrTable = SXLevelEditor::ListViewGameConnections->GetSelString(); + + if (idSelListBoxList < 0 || idSelStrTable < 0) + return 0; + + ID idSelEnt = SXLevelEditor::ListBoxList->GetItemData(idSelListBoxList); + SXbaseEntity *pEnt = SXGame_EntGet(idSelEnt); + proptable_t *pPropTable = SXGame_EntGetProptable(pEnt->GetClassName()); + propdata_t *pPropData = (propdata_t*)(SXLevelEditor::ListViewGameConnections->GetDataItem(idSelStrTable)); + + if (!pEnt) + return 0; + + char szBuffer4096[4096]; + szBuffer4096[0] = 0; + + SXLevelEditor_VeldStringGameConnections(pPropTable, pPropData, idSelStrTable, szBuffer4096, 4096); + + pEnt->SetKV(pPropData->szKey, szBuffer4096); + SXLevelEditor::GameSel(idSelListBoxList); + + return 0; +} + diff --git a/source/sxleveleditor/game_callback.h b/source/sxleveleditor/game_callback.h index 6388da21ebd9d7b3426abb95705f7597e778a678..11cf729973046c8c83bffe7e0ebee7f26e83d25b 100644 --- a/source/sxleveleditor/game_callback.h +++ b/source/sxleveleditor/game_callback.h @@ -4,17 +4,52 @@ #include "level_editor.h" +//! ������������� ����� ���������� � ������������ �������� ������� +LRESULT SXLevelEditor_ButtonGameTab_Click(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam); + +//************************************************************************** + +//! ���� �� ListViewGameClass LRESULT SXLevelEditor_ListViewGameClass_Click(); +//! ���������� ���������� �������� ��� ��������� �������� ������� LRESULT SXLevelEditor_EditGameValue_Enter(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam); +//! ����� ������� ������ ��� ����� ��������� �������� ������� LRESULT SXLevelEditor_ButtonGameValue_Click(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam); +//! ������� ������� ������ LRESULT SXLevelEditor_ButtonGameCreate_Click(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam); +//************************************************************************** + +//! ������� �������� �� ������� �������� +void SXLevelEditor_VeldStringGameConnections( + proptable_t *pPropTable, //!< ������� ������ ������� �������� pPropData (�������� ���� ������) + propdata_t *pPropData, //!< ����� ����� �� ������� ������ ���� � �������� �������� ��� + int iNumExclude, //!< ��������� ������ ������� � ���� ������� + char *szStrOut, //!< ������ � ������� ������������� ��� �������� ������ + int iSize //!< ������ szStrOut (�������� ���� ������) + ); + +//! ���� �� ������� ���������� +LRESULT SXLevelEditor_ListViewGameConnections_Click(); + +//! ��������� ��������� ����� � EditGameConnectionsName ����� ���� ��������������� LRESULT SXLevelEditor_EditGameConnectionsName_IN(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam); +//! ���������� �������� ���������� � EditGameConnectionsName +LRESULT SXLevelEditor_EditGameConnectionsName_Enter(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam); + +//! ���������� ���� ���������� � ���������� � ����������� ���������� +LRESULT SXLevelEditor_EditGameConnections_Enter(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam); + +//! �������� ������ ���������� +LRESULT SXLevelEditor_ButtonGameConnectionsCreate_Click(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam); + +//! �������� ����������� ���������� +LRESULT SXLevelEditor_ButtonGameConnectionsDelete_Click(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam); + -LRESULT SXLevelEditor_ButtonGameTab_Click(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam); #endif \ No newline at end of file diff --git a/source/sxleveleditor/level_editor.cpp b/source/sxleveleditor/level_editor.cpp index 675fa20a7ec9e5cd2fdb7446e4487101e7e0d914..29b45fd39e834e0621b885b1fadad926ae18e38e 100644 --- a/source/sxleveleditor/level_editor.cpp +++ b/source/sxleveleditor/level_editor.cpp @@ -147,6 +147,9 @@ namespace SXLevelEditor ISXGUIMemo* MemoGameHelp; ISXGUIButton* ButtonGameCreate; + ISXGUICheckBox* CheckBoxGameFlags[16] = {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}; + const char* aGameObjectFlags[16] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }; + ISXGUIListView* ListViewGameConnections; ISXGUIStatic* StaticGameConnectionsEvent; ISXGUIComboBox* ComboBoxGameConnectionsEvent; @@ -158,6 +161,8 @@ namespace SXLevelEditor ISXGUIEdit* EditGameConnectionsDelay; ISXGUIStatic* StaticGameConnectionsParameter; ISXGUIEdit* EditGameConnectionsParameter; + ISXGUIButton* ButtonGameConnectionsCreate; + ISXGUIButton* ButtonGameConnectionsDelete; //} //aigrid @@ -263,6 +268,8 @@ namespace SXLevelEditor float3 HelperRot; float3 HelperScale; + bool isAddGameConections = false; + ID IdMtl = -1; ID MenuWeatherCurrID = -1; int MenuWeatherCount = 0; @@ -1283,13 +1290,39 @@ void SXLevelEditor::InitAllElements() SXLevelEditor::MemoGameHelp->GAlign.top = true; SXLevelEditor::MemoGameHelp->Visible(false); - SXLevelEditor::ButtonGameCreate = SXGUICrButton("Create", 695, 160, 100, 20, 0, SXLevelEditor::GroupBoxData->GetHWND(), 0, 0); + SXLevelEditor::ButtonGameCreate = SXGUICrButton("Create", 695, 165, 100, 20, 0, SXLevelEditor::GroupBoxData->GetHWND(), 0, 0); SXLevelEditor::ButtonGameCreate->SetFont("MS Shell Dlg", -11, 0, 400, 0, 0, 0); SXLevelEditor::ButtonGameCreate->GAlign.left = true; SXLevelEditor::ButtonGameCreate->GAlign.top = true; SXLevelEditor::ButtonGameCreate->Visible(false); SXLevelEditor::ButtonGameCreate->AddHandler(SXLevelEditor_ButtonGameCreate_Click, WM_LBUTTONUP); + for (int i = 0; i < 8; ++i) + { + SXLevelEditor::CheckBoxGameFlags[i] = SXGUICrCheckBox("", 415, 45 + (15*i), 180, 15, SXLevelEditor::GroupBoxData->GetHWND(), 0, 0, false); + SXLevelEditor::CheckBoxGameFlags[i]->SetFont("MS Shell Dlg", -11, 0, 400, 0, 0, 0); + SXLevelEditor::CheckBoxGameFlags[i]->SetColorText(0, 0, 0); + SXLevelEditor::CheckBoxGameFlags[i]->SetColorTextBk(255, 255, 255); + SXLevelEditor::CheckBoxGameFlags[i]->SetTransparentTextBk(true); + SXLevelEditor::CheckBoxGameFlags[i]->SetColorBrush(220, 220, 220); + SXLevelEditor::CheckBoxGameFlags[i]->GAlign.left = true; + SXLevelEditor::CheckBoxGameFlags[i]->GAlign.top = true; + SXLevelEditor::CheckBoxGameFlags[i]->Visible(false); + } + + for (int i = 0; i < 8; ++i) + { + SXLevelEditor::CheckBoxGameFlags[i + 8] = SXGUICrCheckBox("", 600, 45 + (15 * i), 180, 15, SXLevelEditor::GroupBoxData->GetHWND(), 0, 0, false); + SXLevelEditor::CheckBoxGameFlags[i + 8]->SetFont("MS Shell Dlg", -11, 0, 400, 0, 0, 0); + SXLevelEditor::CheckBoxGameFlags[i + 8]->SetColorText(0, 0, 0); + SXLevelEditor::CheckBoxGameFlags[i + 8]->SetColorTextBk(255, 255, 255); + SXLevelEditor::CheckBoxGameFlags[i + 8]->SetTransparentTextBk(true); + SXLevelEditor::CheckBoxGameFlags[i + 8]->SetColorBrush(220, 220, 220); + SXLevelEditor::CheckBoxGameFlags[i + 8]->GAlign.left = true; + SXLevelEditor::CheckBoxGameFlags[i + 8]->GAlign.top = true; + SXLevelEditor::CheckBoxGameFlags[i + 8]->Visible(false); + } + SXLevelEditor::ListViewGameConnections = SXGUICrListView("", 5, 5, 550, 180, SXLevelEditor::GroupBoxData->GetHWND(), WndProcAllDefault, 0); SXLevelEditor::ListViewGameConnections->SetFont("MS Shell Dlg", -11, 0, 400, 0, 0, 0); @@ -1346,8 +1379,8 @@ void SXLevelEditor::InitAllElements() SXLevelEditor::EditGameConnectionsName->GAlign.top = true; SXLevelEditor::EditGameConnectionsName->Visible(false); SXLevelEditor::EditGameConnectionsName->AddHandler(SXLevelEditor_EditGameConnectionsName_IN, WM_KEYUP); - //SXLevelEditor::EditGameValue->AddHandler(SXLevelEditor_EditGameValue_Enter, WM_KEYDOWN, VK_RETURN, 1, 0, 0, 0); - //SXLevelEditor::EditGameValue->AddHandler(SXLevelEditor_EditGameValue_Enter, WM_KILLFOCUS); + SXLevelEditor::EditGameConnectionsName->AddHandler(SXLevelEditor_EditGameConnectionsName_Enter, WM_KEYDOWN, VK_RETURN, 1, 0, 0, 0); + SXLevelEditor::EditGameConnectionsName->AddHandler(SXLevelEditor_EditGameConnectionsName_Enter, WM_KILLFOCUS); SXLevelEditor::StaticGameConnectionsAction = SXGUICrStatic("Action:", 560, 95, 50, 15, SXLevelEditor::GroupBoxData->GetHWND(), 0, 0); SXLevelEditor::StaticGameConnectionsAction->SetFont("MS Shell Dlg", -11, 0, 400, 0, 0, 0); @@ -1388,6 +1421,8 @@ void SXLevelEditor::InitAllElements() SXLevelEditor::EditGameConnectionsDelay->GAlign.left = true; SXLevelEditor::EditGameConnectionsDelay->GAlign.top = true; SXLevelEditor::EditGameConnectionsDelay->Visible(false); + SXLevelEditor::EditGameConnectionsDelay->AddHandler(SXLevelEditor_EditGameConnections_Enter, WM_KEYDOWN, VK_RETURN, 1, 0, 0, 0); + SXLevelEditor::EditGameConnectionsDelay->AddHandler(SXLevelEditor_EditGameConnections_Enter, WM_KILLFOCUS); SXLevelEditor::StaticGameConnectionsParameter = SXGUICrStatic("Parameter:", 560, 140, 50, 15, SXLevelEditor::GroupBoxData->GetHWND(), 0, 0); SXLevelEditor::StaticGameConnectionsParameter->SetFont("MS Shell Dlg", -11, 0, 400, 0, 0, 0); @@ -1408,7 +1443,25 @@ void SXLevelEditor::InitAllElements() SXLevelEditor::EditGameConnectionsParameter->GAlign.left = true; SXLevelEditor::EditGameConnectionsParameter->GAlign.top = true; SXLevelEditor::EditGameConnectionsParameter->Visible(false); + SXLevelEditor::EditGameConnectionsParameter->AddHandler(SXLevelEditor_EditGameConnections_Enter, WM_KEYDOWN, VK_RETURN, 1, 0, 0, 0); + SXLevelEditor::EditGameConnectionsParameter->AddHandler(SXLevelEditor_EditGameConnections_Enter, WM_KILLFOCUS); + + SXLevelEditor::ButtonGameConnectionsCreate = SXGUICrButton("Create", 565, 160, 100, 20, 0, SXLevelEditor::GroupBoxData->GetHWND(), 0, 0); + SXLevelEditor::ButtonGameConnectionsCreate->SetFont("MS Shell Dlg", -11, 0, 400, 0, 0, 0); + SXLevelEditor::ButtonGameConnectionsCreate->GAlign.left = true; + SXLevelEditor::ButtonGameConnectionsCreate->GAlign.top = true; + SXLevelEditor::ButtonGameConnectionsCreate->Visible(false); + SXLevelEditor::ButtonGameConnectionsCreate->AddHandler(SXLevelEditor_ButtonGameConnectionsCreate_Click, WM_LBUTTONUP); + SXLevelEditor::isAddGameConections = false; + + SXLevelEditor::ButtonGameConnectionsDelete = SXGUICrButton("Delete", 690, 160, 100, 20, 0, SXLevelEditor::GroupBoxData->GetHWND(), 0, 0); + SXLevelEditor::ButtonGameConnectionsDelete->SetFont("MS Shell Dlg", -11, 0, 400, 0, 0, 0); + SXLevelEditor::ButtonGameConnectionsDelete->GAlign.left = true; + SXLevelEditor::ButtonGameConnectionsDelete->GAlign.top = true; + SXLevelEditor::ButtonGameConnectionsDelete->Visible(false); + SXLevelEditor::ButtonGameConnectionsDelete->AddHandler(SXLevelEditor_ButtonGameConnectionsDelete_Click, WM_LBUTTONUP); + //} //aigrid @@ -1937,7 +1990,7 @@ void SXLevelEditor::LevelEditorUpdate(DWORD timeDelta) static float3 vCamPos; Core_RFloat3Get(G_RI_FLOAT3_OBSERVER_POSITION, &vCamPos); - static const float * p_far = GET_PCVAR_FLOAT("p_far"); + static const float * r_far = GET_PCVAR_FLOAT("r_far"); long count_poly_green = 0; for (int i = 0; i < SGeom_GreenGetCount(); ++i) @@ -2059,10 +2112,10 @@ void SXLevelEditor::LevelEditorUpdate(DWORD timeDelta) SGCore_GetDXDevice()->SetRenderState(D3DRS_CULLMODE, D3DCULL_CCW); if (SXLevelEditor::AIGQuad) - SAIG_RenderQuads(SRender_GetCamera()->ObjFrustum, &vCamPos, *p_far); + SAIG_RenderQuads(SRender_GetCamera()->ObjFrustum, &vCamPos, *r_far); if (SXLevelEditor::AIGGraphPoint) - SAIG_RenderGraphPoints(&vCamPos, *p_far); + SAIG_RenderGraphPoints(&vCamPos, *r_far); if (SXLevelEditor::AIGBound) { diff --git a/source/sxleveleditor/level_editor.h b/source/sxleveleditor/level_editor.h index c78cd4ea904c818360b5d78522ff9909f1c6bdf1..43d27775075ad1485149ace9ff782164cc54914c 100644 --- a/source/sxleveleditor/level_editor.h +++ b/source/sxleveleditor/level_editor.h @@ -165,6 +165,7 @@ namespace SXLevelEditor extern ISXGUIComboBox* ComboBoxGameClass; extern ISXGUIButton* ButtonGameTab; + //! ������� �������� ������ ������� ��������, 0 - ���������, 1 - ���������� extern int GameTabVal; extern ISXGUIListView* ListViewGameClass; @@ -175,6 +176,9 @@ namespace SXLevelEditor extern ISXGUIMemo* MemoGameHelp; extern ISXGUIButton* ButtonGameCreate; + extern ISXGUICheckBox* CheckBoxGameFlags[16]; + extern const char* aGameObjectFlags[16]; + extern ISXGUIListView* ListViewGameConnections; extern ISXGUIStatic* StaticGameConnectionsEvent; extern ISXGUIComboBox* ComboBoxGameConnectionsEvent; @@ -186,6 +190,8 @@ namespace SXLevelEditor extern ISXGUIEdit* EditGameConnectionsDelay; extern ISXGUIStatic* StaticGameConnectionsParameter; extern ISXGUIEdit* EditGameConnectionsParameter; + extern ISXGUIButton* ButtonGameConnectionsCreate; + extern ISXGUIButton* ButtonGameConnectionsDelete; //} //aigrid @@ -229,6 +235,8 @@ namespace SXLevelEditor extern ISXGUIStatusBar* StatusBar1; + //********************************************************************** + void InitAllElements(); void DeleteAllElements(); @@ -255,9 +263,14 @@ namespace SXLevelEditor void GameActivateAll(bool bf); void GameSel(int sel); void GameUpdatePosRot(); + + //! ��������� ��������� ������� ������� void GameVisibleProperties(bool bf); + + //! ��������� ��������� ������� ���������� void GameVisibleConnections(bool bf); + void AIGridActivateAll(bool bf); void AIGridEnableBB(bool bf); @@ -296,6 +309,11 @@ namespace SXLevelEditor extern float3 HelperRot; extern float3 HelperScale; + /*! ���������� (true) ���� �������� ������ (false) ���������� ��� �������� ������� + \note ��� ���������� ��� ������ � ���������� ������������ � ����� ���������, ��� �������� ��������� ������������ �� ������� � �� ����� �������� �������� + */ + extern bool isAddGameConections; + extern ID IdMtl; extern ID MenuWeatherCurrID; extern int MenuWeatherCount; diff --git a/source/sxleveleditor/sxleveleditor.cpp b/source/sxleveleditor/sxleveleditor.cpp index e75a6f09e1b83674b74a70e18420ab2dfab6ea3d..a9d6d0f372a054b07a4da09770c32887fa258757 100644 --- a/source/sxleveleditor/sxleveleditor.cpp +++ b/source/sxleveleditor/sxleveleditor.cpp @@ -1,9 +1,200 @@ /****************************************************** -Copyright � Vitaliy Buturlin, Evgeny Danilovich, 2017 +Copyright © Vitaliy Buturlin, Evgeny Danilovich, 2017 See the license in LICENSE ******************************************************/ +/*! +\file +Главный файл редактора уровней SXLevelEditor +*/ + +/*! +\page level_editor Редактор уровней SXLevelEditor +\tableofcontents +\section level_editor_main Общее +\b SXLevelEditor – редактор уровней движка SkyXEngine.\n +Редактор работает с файлом в текстовом формате .lvl который содержит всю информацию об уровне. +Данный файл должен находится по относительному пути (относительно программы) /gamesource/level/name_level/name_level.lvl +при этом имя директории и имя файла .lvl должны быть идентичными\n + +\image html level_editor/level_editor.png "Скриншот программы SXLevelEditor" + +\section level_editor_window Структура окна +<b>Окно состоит из структурных элементов (сверху вниз):</b> + - Заголовок окна, содержащий имя редактора и имя уровня. + - Меню программы: + - File: + - New – очистить сцену и создать новый уроень + - Open – открыть файл уровня + - Save – сохранить уровень + - Save as ... – сохранить уровень как + - Exit – выход из программы + - View (редакторные настройки вида): + - Grid – сетка разметки (оси xz) + - Axes – линии по направлению осей + - Final image (выводимое изображение в окно рендера): + - Color – цвет + - Normals – нормали + - Parameters – параметры освещения + - Ambient - фоновое и диффузное освещение + - Specular – отраженный свет + - Lighting scene – освещенная сцена + - Selection settings (настройки выделения) + - Selection - надо ли выделять объект + - Z Test - использовать ли z test при рендере выделения + - Mesh - показывать сетку или модель целиком при выделении + - Cull backfaces - показывать задние грани выделения + - Weather (погода) + - none - без погоды + - ниже следует список доступных конфигов погоды + - Панель инструментов, где расположены основные управляющие кнопки: + - \image html level_editor/toolbar/new.bmp – очистить сцену и создать новый уроень + - \image html level_editor/toolbar/open.bmp – открыть файл уровня + - \image html level_editor/toolbar/save.bmp – сохранить уровень + - \image html level_editor/toolbar/save_as.bmp – сохранить уровень как + - \image html level_editor/toolbar/arrow.bmp - выделение/отметка объектов + - \image html level_editor/toolbar/pos.bmp - перемещение объекты + - \image html level_editor/toolbar/rot.bmp - вращение объектов + - \image html level_editor/toolbar/scale.bmp - масштабирование объектов + - \image html level_editor/toolbar/grid.bmp - показывать сетку + - \image html level_editor/toolbar/axes.bmp - показывать статичные оси в центре системы координат + - \image html level_editor/toolbar/r_c.bmp - цвет (выводимое изображение в окно рендера) + - \image html level_editor/toolbar/r_n.bmp - нормали (выводимое изображение в окно рендера) + - \image html level_editor/toolbar/r_p.bmp - параметры освещения (выводимое изображение в окно рендера) + - \image html level_editor/toolbar/r_ad.bmp - фоновое и диффузное освещение (выводимое изображение в окно рендера) + - \image html level_editor/toolbar/r_s.bmp - отраженный свет (выводимое изображение в окно рендера) + - \image html level_editor/toolbar/r_l.bmp - освещенная сцена (выводимое изображение в окно рендера) + - \image html level_editor/toolbar/sel_s.bmp - надо ли выделять объект + - \image html level_editor/toolbar/sel_z.bmp - использовать ли z test при рендере выделения + - \image html level_editor/toolbar/sel_m.bmp - показывать сетку или модель целиком при выделении + - \image html level_editor/toolbar/sel_cb.bmp - показывать задние грани выделения + - \image html level_editor/toolbar/aigrid_bound.bmp - показывать ли ограничивающий объем ai сетки + - \image html level_editor/toolbar/aigrid_quad.bmp - показывать ли квадраты ai сетки + - \image html level_editor/toolbar/aigrid_graphpoint.bmp - показывать ил графпоинты ai сетки + - \image html level_editor/toolbar/lvl_out.bmp - открытый (out) или закрытый (in) уровень + - \image html level_editor/toolbar/sun.bmp - включить глобальный источник света + + - Содержимое окна – рабочая область по настройке уровня + - Раздел объектов уровня + - \image html level_editor/toolbar/list_level_objects.png - список объектов уровня в зависимости от типа выбора + - \image html level_editor/toolbar/buttons_type_object.png - кнопки выбора типа объектов уровня + - Строка состояния: + - \image html level_editor/status_level_poly.png – общее количество полигонов на уровне + - \image html level_editor/statusbar_geom_poly.png – количество полигонов геометрии + - \image html level_editor/statusbar_green_poly.png – количество полигонов растительности + - \image html level_editor/statusbar_count_game_object.png – количество игровых объектов + + +\section level_editor_camera Управление камерой +CTRL + w – движение вперед \n +CTRL + s – движение назад \n +CTRL + a – движение влево \n +CTRL + d – движение вправо \n +SHIFT - ускорение \n +CTRL + ПКМ – движение вверх/вниз \n +CTRL + ЛКМ – вращение \n + + +\subsection level_editor_gui_geom Static geometry – статическая геометрия +\image html level_editor/staticgeom_pre.png интерфейс статической геометрии до добавления модели +\n +\image html level_editor/staticgeom_post.png интерфейс статической геометрии после добавления модели +\n + + - \b Name - имя объекта + - \b Model - путь до статической модели (относительно директории со статическими моделями) + - \b Lod1 - путь до лода статической модели (относительно директории со статическими моделями) + - \b Position - позиция объекта, при отметке одного из переключателей + RShift + ЛКМ будет трансформация по выбранной оси + - \b Rotation - вращение объекта, при отметке одного из переключателей + RShift + ЛКМ будет трансформация по выбранной оси + - \b Scale (не рекомендуется) - масштабирование объекта, при отметке одного из переключателей + RShift + ЛКМ будет трансформация по выбранной оси + + +\subsection level_editor_gui_green Green - растительность +\image html level_editor/green_pre.png интерфейс растительности до добавления растительности +\n +\image html level_editor/green_post.png интерфейс растительности после добавления растительности +\n + +\note Если указать модель только для Model объект будет травой, иначе (должны быть заполнены все лоды) объект будет кустаник/дерево +\todo Про плотность надо расписать более подробно + + - \b Name - имя объекта + - \b Model - путь до статической модели (относительно директории со статическими моделями) + - \b Lod1 - путь до первого лода статической модели (относительно директории со статическими моделями) + - \b Lod2 - путь до первого лода статической модели (относительно директории со статическими моделями) + - \b Mask texture - имя текстуры маски, по которой будет сгенерирована растительность (маска покрывает весь уровень), необязательно в случае ручной расстановки + - \b NavMesh - если растительность должна иметь физические параметры (к примеру для деревьев) то путь до статической модели (относительно директории со статическими моделями) + - \b Density - плотность растительности + +После добавления и выделения объекта растительности станвятся доступны новые элементы: +\image html level_editor/green_post_add.png интерфейс растительности после добавления растительности + - новый элемент ComboBox содержит: + - \b single select - выделение единицы объекта растительности по ЛКМ + - \b single create - создание единицы объекта растительности по ЛКМ + - \b multiple create - множественное создание единиц объекта растительности, ПКМ постановка бокса, ЛКМ постановка бокса и генерация в нем единицы объекта растительности + - \b single delete - удаление единицы объекта растительности по ЛКМ + - \b PosX/PoxY/PosZ - установка значения позиции выделенной единицы объекта растительности, если multiple create то установка размеров бокса в котором будет сгенерирована растительность, при вкюченном переключатели на однйо из осей + нажатии LShift + ЛКМ (вверх/вниз) перемещение по выбранной оси (если multiple create то изменение размеров бокса по выбранной оси) + + +\subsection level_editor_gui_aigrid AI grid - ai сетка +\image html level_editor/aigrid_pre.png интерфейс ai сетки определения границ +\n +\image html level_editor/aigrid_post.png интерфейс ai сетки после определения границ +\n + +Для создания ai сетки, необходимо определить ее границы: + - \b Bound box dimensions - + - \b Bound box position - + - \b Create bound box - + +\note Для генерации AI сетки необходимо чтобы хотя бы один квадрат был создан, квадрат должен быть незамкнут уровнем. +\todo Уточнить про валидность сетки + +После создания границ доступны следующие возможности: + - \b AI quad add - добавить квадрат по ЛКМ + - \b AI quad multi select - мультивыделение квадратов по ЛКМ, и единичное выделение по ПКМ + - \b AI quads select->delete - удаление при выделении ЛКМ + - \b AI quads delete selected - удалить выделенные + - \b AI grid generation - сгенерировать сетку + - \b AI grid clear - очистка сетки (удаление всех квадратов) + - \b Graph point add - добавить графпоинт по ЛКМ + - \b Graph point delete - удалить графпоинт по ЛКМ + - \b Graph points generate - сгенерировать графпоинты + - \b Graph points clear - очистить список графпоинтов + - \b AI grid validation - проверить сетку на валидность + - \b Marked splits - отмитить куски сетки разными цветами + - \b Count quads - количество квадратов сетки + - \b Count graph points - количество графпоинтов + - \b Count splits - количество кусков сетки + - \b Clear all - очистить все + +Если есть хотя бы один выделенный квадрат, LCTRL + ЛКМ (вверх/вниз) будет перемещать квадрат/квадраты + + +\subsection level_editor_gui_gameobject Game object - игровой объект +\image html level_editor/gameobject_properties.png интерфейс свойств игрового объекта +\n + +Таблица слева содержит все доступные свойства игрвоого объекта. + - \b Class - класс объекта + - \b Help - подсказка + - \b Create - создание нового объекта + - \b Connections - переход к соединениям объекта + +\image html level_editor/gameobject_connections.png интерфейс соединений игрового объекта +\n +Таблица слева содержит все соединения игрового объекта + - \b Event - событие (выход) + - \b Name - имя игрового объекта с которым происходит связь + - \b Action - действие (вход) + - \b Delay - задержка в секундах (float) + - \b Parameter - дополнительный параметр + - \b Create - создание нового соединения + - \b Properties - переход к свойствам объекта + +*/ + #define _CRT_SECURE_NO_WARNINGS //#include <vld.h> @@ -36,7 +227,7 @@ int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPTSTR lpCmdLin SXLevelEditor::CheckBoxTBRColor->SetCheck(true); SXLevelEditor::MainMenu->CheckItem(ID_FINALIMAGE_COLOR, true); - Core_0SetCVarInt("final_image", DS_RT_COLOR); + Core_0SetCVarInt("r_final_image", DS_RT_COLOR); SXLevelEditor::CheckBoxTBSelS->SetCheck(true); SXLevelEditor::SelSelection = true; diff --git a/source/sxmaterialeditor/common_callback.cpp b/source/sxmaterialeditor/common_callback.cpp index a232db4182e11c9ec6d1ca1464263d54b1dda9bc..f40d5bfd5586e4d22d8bf6953a169fc90f5ffd08 100644 --- a/source/sxmaterialeditor/common_callback.cpp +++ b/source/sxmaterialeditor/common_callback.cpp @@ -58,42 +58,42 @@ LRESULT ComMenuId(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam) // else if (id == ID_FINALIMAGE_COLOR) { - Core_0SetCVarInt("final_image", DS_RT_COLOR); + Core_0SetCVarInt("r_final_image", DS_RT_COLOR); SXMaterialEditor::FinalImageUncheckedMenu(); SXMaterialEditor::MainMenu->CheckItem(id, !SXMaterialEditor::MainMenu->GetCheckedItem(id)); } // else if (id == ID_FINALIMAGE_NORMALS) { - Core_0SetCVarInt("final_image", DS_RT_NORMAL); + Core_0SetCVarInt("r_final_image", DS_RT_NORMAL); SXMaterialEditor::FinalImageUncheckedMenu(); SXMaterialEditor::MainMenu->CheckItem(id, !SXMaterialEditor::MainMenu->GetCheckedItem(id)); } // else if (id == ID_FINALIMAGE_PARAMETERS) { - Core_0SetCVarInt("final_image", DS_RT_PARAM); + Core_0SetCVarInt("r_final_image", DS_RT_PARAM); SXMaterialEditor::FinalImageUncheckedMenu(); SXMaterialEditor::MainMenu->CheckItem(id, !SXMaterialEditor::MainMenu->GetCheckedItem(id)); } // else if (id == ID_FINALIMAGE_AMBIENTDIFFUSE) { - Core_0SetCVarInt("final_image", DS_RT_AMBIENTDIFF); + Core_0SetCVarInt("r_final_image", DS_RT_AMBIENTDIFF); SXMaterialEditor::FinalImageUncheckedMenu(); SXMaterialEditor::MainMenu->CheckItem(id, !SXMaterialEditor::MainMenu->GetCheckedItem(id)); } // else if (id == ID_FINALIMAGE_SPECULAR) { - Core_0SetCVarInt("final_image", DS_RT_SPECULAR); + Core_0SetCVarInt("r_final_image", DS_RT_SPECULAR); SXMaterialEditor::FinalImageUncheckedMenu(); SXMaterialEditor::MainMenu->CheckItem(id, !SXMaterialEditor::MainMenu->GetCheckedItem(id)); } // else if (id == ID_FINALIMAGE_LIGHTINGSCENE) { - Core_0SetCVarInt("final_image", DS_RT_SCENELIGHT); + Core_0SetCVarInt("r_final_image", DS_RT_SCENELIGHT); SXMaterialEditor::FinalImageUncheckedMenu(); SXMaterialEditor::MainMenu->CheckItem(id, !SXMaterialEditor::MainMenu->GetCheckedItem(id)); } @@ -132,42 +132,42 @@ LRESULT SXMaterialEditor_ToolBar_CallWmCommand(HWND hwnd, UINT msg, WPARAM wPara SXMaterialEditor::FinalImageUncheckedMenu(); SXMaterialEditor::MainMenu->CheckItem(ID_FINALIMAGE_COLOR, true); SXMaterialEditor::CheckBoxTBRColor->SetCheck(true); - Core_0SetCVarInt("final_image", DS_RT_COLOR); + Core_0SetCVarInt("r_final_image", DS_RT_COLOR); } else if (SXMaterialEditor::CheckBoxTBRNormal->GetHWND() == handle_elem) { SXMaterialEditor::FinalImageUncheckedMenu(); SXMaterialEditor::MainMenu->CheckItem(ID_FINALIMAGE_NORMALS, true); SXMaterialEditor::CheckBoxTBRNormal->SetCheck(true); - Core_0SetCVarInt("final_image", DS_RT_NORMAL); + Core_0SetCVarInt("r_final_image", DS_RT_NORMAL); } else if (SXMaterialEditor::CheckBoxTBRParam->GetHWND() == handle_elem) { SXMaterialEditor::FinalImageUncheckedMenu(); SXMaterialEditor::MainMenu->CheckItem(ID_FINALIMAGE_PARAMETERS, true); SXMaterialEditor::CheckBoxTBRParam->SetCheck(true); - Core_0SetCVarInt("final_image", DS_RT_PARAM); + Core_0SetCVarInt("r_final_image", DS_RT_PARAM); } else if (SXMaterialEditor::CheckBoxTBRAmDiff->GetHWND() == handle_elem) { SXMaterialEditor::FinalImageUncheckedMenu(); SXMaterialEditor::MainMenu->CheckItem(ID_FINALIMAGE_AMBIENTDIFFUSE, true); SXMaterialEditor::CheckBoxTBRAmDiff->SetCheck(true); - Core_0SetCVarInt("final_image", DS_RT_AMBIENTDIFF); + Core_0SetCVarInt("r_final_image", DS_RT_AMBIENTDIFF); } else if (SXMaterialEditor::CheckBoxTBRSpecular->GetHWND() == handle_elem) { SXMaterialEditor::FinalImageUncheckedMenu(); SXMaterialEditor::MainMenu->CheckItem(ID_FINALIMAGE_SPECULAR, true); SXMaterialEditor::CheckBoxTBRSpecular->SetCheck(true); - Core_0SetCVarInt("final_image", DS_RT_SPECULAR); + Core_0SetCVarInt("r_final_image", DS_RT_SPECULAR); } else if (SXMaterialEditor::CheckBoxTBRLighting->GetHWND() == handle_elem) { SXMaterialEditor::FinalImageUncheckedMenu(); SXMaterialEditor::MainMenu->CheckItem(ID_FINALIMAGE_LIGHTINGSCENE, true); SXMaterialEditor::CheckBoxTBRLighting->SetCheck(true); - Core_0SetCVarInt("final_image", DS_RT_SCENELIGHT); + Core_0SetCVarInt("r_final_image", DS_RT_SCENELIGHT); } } @@ -176,8 +176,8 @@ LRESULT SXMaterialEditor_ToolBar_CallWmCommand(HWND hwnd, UINT msg, WPARAM wPara LRESULT MsgEditSize(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam) { - static int *resize = (int*)GET_PCVAR_INT("resize"); - *resize = RENDER_RESIZE_RESIZE; + static int *r_resize = (int*)GET_PCVAR_INT("r_resize"); + *r_resize = RENDER_RESIZE_RESIZE; return 0; } diff --git a/source/sxmaterialeditor/sxmaterialeditor.cpp b/source/sxmaterialeditor/sxmaterialeditor.cpp index 8dc5b935669ec87dc122d2e9a2fd4891d8dbad97..8dd53bd838b2eabe8f352975255dd47ece6a51e3 100644 --- a/source/sxmaterialeditor/sxmaterialeditor.cpp +++ b/source/sxmaterialeditor/sxmaterialeditor.cpp @@ -430,7 +430,7 @@ int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPTSTR lpCmdLin SkyXEngine_Init(SXMaterialEditor::WindowRender->GetHWND(), SXMaterialEditor::JobWindow->GetHWND()); - Core_0SetCVarInt("final_image", DS_RT_SCENELIGHT); + Core_0SetCVarInt("r_final_image", DS_RT_SCENELIGHT); SXMaterialEditor::MainMenu->CheckItem(ID_FINALIMAGE_LIGHTINGSCENE, true); SXMaterialEditor::CheckBoxTBRLighting->SetCheck(true); diff --git a/source/sxparticleseditor/callback_common.cpp b/source/sxparticleseditor/callback_common.cpp index 6452995cfedccd291ea89e45f8683560b29f0455..38c29fbd68dd80973af24165aa8e9252e44e2e90 100644 --- a/source/sxparticleseditor/callback_common.cpp +++ b/source/sxparticleseditor/callback_common.cpp @@ -153,15 +153,15 @@ LRESULT SXParticlesEditor_ButtonTBSave_Click(HWND hwnd, UINT msg, WPARAM wParam, LRESULT MsgEditSize(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam) { - static int *resize = (int*)GET_PCVAR_INT("resize"); + static int *r_resize = (int*)GET_PCVAR_INT("r_resize"); - if (!resize) - resize = (int*)GET_PCVAR_INT("resize"); + if (!r_resize) + r_resize = (int*)GET_PCVAR_INT("r_resize"); - if (!resize) + if (!r_resize) return 0; - *resize = RENDER_RESIZE_RESIZE; + *r_resize = RENDER_RESIZE_RESIZE; return 0; } diff --git a/source/sxparticleseditor/sxparticleseditor.cpp b/source/sxparticleseditor/sxparticleseditor.cpp index d6d3b284191aa70ad2ad89a89a05807dfa81f54d..8c71d40c09d7f0d3adb6c4aab43ff8190c93c7d0 100644 --- a/source/sxparticleseditor/sxparticleseditor.cpp +++ b/source/sxparticleseditor/sxparticleseditor.cpp @@ -21,7 +21,7 @@ See the license in LICENSE \section particles_editor_window Структура окна <b>Окно состоит из структурных элементов (сверху вниз):</b> - - Заголовок окна, содержащий имя редактор. + - Заголовок окна, содержащий имя редактора. - Меню программы: - File: - ReOpen – переоткрыть файл эффектов eff.eff @@ -254,7 +254,7 @@ int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPTSTR lpCmdLin GData::WinSize.y = winrndrect.bottom;*/ SkyXEngine_Init(SXParticlesEditor::WindowRender->GetHWND(), SXParticlesEditor::JobWindow->GetHWND()); - Core_0SetCVarInt("final_image",DS_RT_COLOR); + Core_0SetCVarInt("r_final_image",DS_RT_COLOR); SRender_GetCamera()->SetPosition(&float3(0, 0.5, -2)); SXParticlesEditor::MainMenu->CheckItem(ID_VIEW_GRID, true); SXParticlesEditor::MainMenu->CheckItem(ID_VIEW_AXES, true);