diff --git a/.gitignore b/.gitignore index 7c58b1ecc4fe0788bbe39a5c7d9d1a2841b5fb9e..e878a70af49f3f24b5e969102fe136b24c297ecd 100644 --- a/.gitignore +++ b/.gitignore @@ -203,4 +203,6 @@ build/gamesource/* !shaders/ docs/html/* !docs/html/material_editor/ -!docs/html/particles_editor/ \ No newline at end of file +!docs/html/particles_editor/ + +/source/game/ents_doc.h diff --git a/build/gamesource/entities/classes.ent b/build/gamesource/config/entities/classes.ent similarity index 100% rename from build/gamesource/entities/classes.ent rename to build/gamesource/config/entities/classes.ent diff --git a/build/gamesource/entities/defaults.ent b/build/gamesource/config/entities/defaults.ent similarity index 100% rename from build/gamesource/entities/defaults.ent rename to build/gamesource/config/entities/defaults.ent diff --git a/build/sysconfig.cfg b/build/sysconfig.cfg index 2e4ed61a7cd885a7533073455d7282d9381e317b..79acc33ec1cea36efb471c73ffb585d8de5eacc3 100644 --- a/build/sysconfig.cfg +++ b/build/sysconfig.cfg @@ -53,6 +53,8 @@ r_s_max_miplevel 0 main_rain_density 1 main_thunderbolt true +r_default_fov 90 + spawn //cl_grab_cursor 0 diff --git a/docs/settings_doxygen/Doxyfile b/docs/settings_doxygen/Doxyfile index 4f540082694cd17504d392c2a608ad7ec4c7c937..344dcda14c107e984ab6bd8eee372a1a43202360 100644 --- a/docs/settings_doxygen/Doxyfile +++ b/docs/settings_doxygen/Doxyfile @@ -811,7 +811,8 @@ INPUT = ../../source/gdefines.h \ ../../source/SkyXEngine.h \ ../../source/sxmaterialeditor/sxmaterialeditor.cpp \ ../../source/sxparticleseditor/sxparticleseditor.cpp \ - ../../source/sxleveleditor/sxleveleditor.cpp + ../../source/sxleveleditor/sxleveleditor.cpp \ + ../../source/game/ # 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/doxygen/doxygen.exe b/docs/settings_doxygen/doxygen/doxygen.exe new file mode 100644 index 0000000000000000000000000000000000000000..031fd552d9ae235ac51e847f169286d7000d59e3 Binary files /dev/null and b/docs/settings_doxygen/doxygen/doxygen.exe differ diff --git a/docs/settings_doxygen/doxygen/doxyindexer.exe b/docs/settings_doxygen/doxygen/doxyindexer.exe new file mode 100644 index 0000000000000000000000000000000000000000..64b3eb8f08c65f42534b5f57f0803df734fc1cd0 Binary files /dev/null and b/docs/settings_doxygen/doxygen/doxyindexer.exe differ diff --git a/docs/settings_doxygen/doxygen/doxysearch.cgi.exe b/docs/settings_doxygen/doxygen/doxysearch.cgi.exe new file mode 100644 index 0000000000000000000000000000000000000000..9363ee5c79ff032d4a656256dd69d5eb0049094f Binary files /dev/null and b/docs/settings_doxygen/doxygen/doxysearch.cgi.exe differ diff --git a/docs/settings_doxygen/doxygen/gen.bat b/docs/settings_doxygen/doxygen/gen.bat new file mode 100644 index 0000000000000000000000000000000000000000..02b90a44c0a9093ea6d3d2fa1ee6b49e932def5f --- /dev/null +++ b/docs/settings_doxygen/doxygen/gen.bat @@ -0,0 +1,4 @@ +cd .. +doxygen\skydoc_preprocessor.exe ..\..\source\game\ents_doc.h ..\..\source\game\ +doxygen\doxygen.exe Doxyfile +pause \ No newline at end of file diff --git a/docs/settings_doxygen/doxygen/libclang.dll b/docs/settings_doxygen/doxygen/libclang.dll new file mode 100644 index 0000000000000000000000000000000000000000..dbfe101a2a9de49737d89777bb3d1e83edd8d11c Binary files /dev/null and b/docs/settings_doxygen/doxygen/libclang.dll differ diff --git a/docs/settings_doxygen/doxygen/skydoc_preprocessor.exe b/docs/settings_doxygen/doxygen/skydoc_preprocessor.exe new file mode 100644 index 0000000000000000000000000000000000000000..939e37cadb84da3f1c7c4d0b2a01e19f142b15ab Binary files /dev/null and b/docs/settings_doxygen/doxygen/skydoc_preprocessor.exe differ diff --git a/proj/sxgame/vs2013/sxgame.vcxproj.filters b/proj/sxgame/vs2013/sxgame.vcxproj.filters index 15de8504191bbfd435d231e29e0d956a54d04de0..55022f88ce2ef8af728f3e0df1b75771cfcf09cd 100644 --- a/proj/sxgame/vs2013/sxgame.vcxproj.filters +++ b/proj/sxgame/vs2013/sxgame.vcxproj.filters @@ -129,9 +129,6 @@ <ClCompile Include="..\..\..\source\game\CrosshairManager.cpp"> <Filter>Source Files</Filter> </ClCompile> - <ClCompile Include="..\..\..\source\game\SXbaseSupply.cpp"> - <Filter>Source Files</Filter> - </ClCompile> <ClCompile Include="..\..\..\source\game\BaseWeaponAddon.cpp"> <Filter>Source Files\ents\items\tools\weapons\addons</Filter> </ClCompile> @@ -153,6 +150,9 @@ <ClCompile Include="..\..\..\source\game\BaseTrigger.cpp"> <Filter>Source Files\ents\triggers</Filter> </ClCompile> + <ClCompile Include="..\..\..\source\game\SXbaseSupply.cpp"> + <Filter>Source Files\ents\items</Filter> + </ClCompile> </ItemGroup> <ItemGroup> <ClInclude Include="..\..\..\source\game\sxgame.h"> @@ -239,9 +239,6 @@ <ClInclude Include="..\..\..\source\game\CrosshairManager.h"> <Filter>Header Files</Filter> </ClInclude> - <ClInclude Include="..\..\..\source\game\SXbaseSupply.h"> - <Filter>Header Files</Filter> - </ClInclude> <ClInclude Include="..\..\..\source\game\BaseWeaponAddon.h"> <Filter>Header Files\ents\items\tools\weapons\addons</Filter> </ClInclude> @@ -263,5 +260,8 @@ <ClInclude Include="..\..\..\source\game\BaseTrigger.h"> <Filter>Header Files\ents\triggers</Filter> </ClInclude> + <ClInclude Include="..\..\..\source\game\SXbaseSupply.h"> + <Filter>Header Files\ents\items</Filter> + </ClInclude> </ItemGroup> </Project> \ No newline at end of file diff --git a/source/game/BaseHandle.cpp b/source/game/BaseHandle.cpp index 90895a526f12763a74c116ea963f61b233af6c90..00623afd5ce8d7d59f4d17d814ac4b420c2cafa1 100644 --- a/source/game/BaseHandle.cpp +++ b/source/game/BaseHandle.cpp @@ -1,5 +1,9 @@ #include "BaseHandle.h" +/*! \skydocent base_handle +Базовый класс ручки +*/ + BEGIN_PROPTABLE(CBaseHandle) //empty END_PROPTABLE() diff --git a/source/game/BaseHandle.h b/source/game/BaseHandle.h index 9a755b8c8311006ef9fb0478891bcad5b3620695..c9a074a568c6f391130246a161ea4f2a38495ac6 100644 --- a/source/game/BaseHandle.h +++ b/source/game/BaseHandle.h @@ -1,8 +1,21 @@ +/****************************************************** +Copyright © Vitaliy Buturlin, Evgeny Danilovich, 2017 +See the license in LICENSE +******************************************************/ + +/*! +\file +Ручки +*/ + #ifndef _BaseHandle_H_ #define _BaseHandle_H_ #include "BaseWeaponAddon.h" +/*! Ручки +\ingroup cbaseitem +*/ class CBaseHandle: public CBaseWeaponAddon { DECLARE_CLASS(CBaseHandle, CBaseWeaponAddon); @@ -10,8 +23,8 @@ class CBaseHandle: public CBaseWeaponAddon public: DECLARE_CONSTRUCTOR(); - //���������� �������� - //���������� �������� + //уменьшение раскачки + //уменьшение разброса }; #endif diff --git a/source/game/BaseMag.cpp b/source/game/BaseMag.cpp index f2d716236940900a5fb93c5ce1643dbc6f851fa9..530ada6bdd0b57493a3877d12438512051d22010 100644 --- a/source/game/BaseMag.cpp +++ b/source/game/BaseMag.cpp @@ -1,7 +1,13 @@ #include "BaseMag.h" +/*! \skydocent base_mag +Базовый класс магазина +*/ + BEGIN_PROPTABLE(CBaseMag) + //! Вместимость DEFINE_FIELD_INT(m_iCapacity, PDFF_NOEDIT | PDFF_NOEXPORT, "capacity", "", EDITOR_NONE) + //! Текущая загрузка DEFINE_FIELD_INT(m_iCurrentLoad, PDFF_NOEDIT, "current_load", "", EDITOR_NONE) END_PROPTABLE() diff --git a/source/game/BaseMag.h b/source/game/BaseMag.h index 3f5b93f99e8391c0fb1d14341a402d8a6f6a6ae0..b252f743db9fe82c6f6528ee265451a3c66633f3 100644 --- a/source/game/BaseMag.h +++ b/source/game/BaseMag.h @@ -1,8 +1,21 @@ +/****************************************************** +Copyright © Vitaliy Buturlin, Evgeny Danilovich, 2017 +See the license in LICENSE +******************************************************/ + +/*! +\file +Магазины +*/ + #ifndef _BaseMag_H_ #define _BaseMag_H_ #include "BaseWeaponAddon.h" +/*! Магазины +\ingroup cbaseitem +*/ class CBaseMag: public CBaseWeaponAddon { DECLARE_CLASS(CBaseMag, CBaseWeaponAddon); diff --git a/source/game/BaseScope.cpp b/source/game/BaseScope.cpp index 95bec717acb76c3a8bac8faa8e9f8d27e08f6143..dc77ba76b18fb0455761834f36564e6fa5531d7e 100644 --- a/source/game/BaseScope.cpp +++ b/source/game/BaseScope.cpp @@ -1,5 +1,9 @@ #include "BaseScope.h" +/*! \skydocent base_scope +Базовый класс прицела +*/ + BEGIN_PROPTABLE(CBaseScope) //empty END_PROPTABLE() diff --git a/source/game/BaseScope.h b/source/game/BaseScope.h index 40e91035d870a1d713e7e8274a537149ccc35c7b..f581e5da953629a51f1bdd572d390a06aa0371a8 100644 --- a/source/game/BaseScope.h +++ b/source/game/BaseScope.h @@ -1,16 +1,29 @@ +/****************************************************** +Copyright © Vitaliy Buturlin, Evgeny Danilovich, 2017 +See the license in LICENSE +******************************************************/ + +/*! +\file +Прицелы +*/ + #ifndef _BaseScope_H_ #define _BaseScope_H_ #include "BaseWeaponAddon.h" +/*! Прицелы +\ingroup cbaseitem +*/ class CBaseScope: public CBaseWeaponAddon { DECLARE_CLASS(CBaseScope, CBaseWeaponAddon); DECLARE_PROPTABLE(); public: DECLARE_CONSTRUCTOR(); - // ���������� �������� - // ����� �������� + // уменьшение разброса + // время сведения }; #endif diff --git a/source/game/BaseSilencer.cpp b/source/game/BaseSilencer.cpp index 264ea81dc4acbe9e83aa48797661f36c32e9d00f..8854dc3661881b1454f0587748f8867aa128285d 100644 --- a/source/game/BaseSilencer.cpp +++ b/source/game/BaseSilencer.cpp @@ -1,5 +1,9 @@ #include "BaseSilencer.h" +/*! \skydocent base_silencer +Базовый класс глушителя +*/ + BEGIN_PROPTABLE(CBaseSilencer) //empty END_PROPTABLE() diff --git a/source/game/BaseSilencer.h b/source/game/BaseSilencer.h index 633a2848c761313af558dbf974984bb81c9524e2..3eeb73e447d13daf341ec53b125c6f15ff1d6387 100644 --- a/source/game/BaseSilencer.h +++ b/source/game/BaseSilencer.h @@ -1,19 +1,32 @@ +/****************************************************** +Copyright © Vitaliy Buturlin, Evgeny Danilovich, 2017 +See the license in LICENSE +******************************************************/ + +/*! +\file +Глушители +*/ + #ifndef _BaseSilencer_H_ #define _BaseSilencer_H_ #include "BaseWeaponAddon.h" +/*! Глушители +\ingroup cbaseitem +*/ class CBaseSilencer: public CBaseWeaponAddon { DECLARE_CLASS(CBaseSilencer, CBaseWeaponAddon); DECLARE_PROPTABLE(); public: DECLARE_CONSTRUCTOR(); - // ���������� �������� - // ������ ����� �������� - // ���������� ����� - // ���������� ������������� - // ������ ������� �������� + // уменьшение разброса + // замена звука выстрела + // уменьшение урона + // уменьшение бронебойности + // замена эффекта выстрела }; #endif diff --git a/source/game/BaseTrigger.cpp b/source/game/BaseTrigger.cpp index 13e32fdcbc633b8bdb80fb8812ce24de5497b3d9..31e083829f10c2838ed39f5355fe557f654b9137 100644 --- a/source/game/BaseTrigger.cpp +++ b/source/game/BaseTrigger.cpp @@ -2,14 +2,23 @@ #include "BaseTrigger.h" +/*! \skydocent trigger +Базовый класс триггера. Триггер - область, задаваемая моделью, при входе/выходе из которой игрока или объектов, вызывает заданные события +*/ BEGIN_PROPTABLE(CBaseTrigger) + //! Срабатывает при начале контакта DEFINE_OUTPUT(m_onTouchStart, "OnTouchStart", "On touch start") + //! Срабатывает при прекращении контакта DEFINE_OUTPUT(m_onTouchEnd, "OnTouchEnd", "On touch end") + //! Срабатывает, когда не осталось контактирующих объектов DEFINE_OUTPUT(m_onTouchEndAll, "OnTouchEndAll", "On touch end all") + //! Включает триггер DEFINE_INPUT(inEnable, "enable", "Enable", PDF_NONE) + //! Выключает триггер DEFINE_INPUT(inDisable, "disable", "Disable", PDF_NONE) + //! Переключает состояние триггера DEFINE_INPUT(inToggle, "toggle", "Toggle", PDF_NONE) END_PROPTABLE() @@ -26,6 +35,7 @@ CBaseTrigger::CBaseTrigger(EntityManager * pMgr): CBaseTrigger::~CBaseTrigger() { + RemovePhysBody(); CLEAR_INTERVAL(m_idUpdateInterval); } diff --git a/source/game/BaseTrigger.h b/source/game/BaseTrigger.h index 503e690fb5bbc8eb4dd0af91f9fceff8aa2e8923..672b1d9fb36df0b218c4555e771a2aea35284ecc 100644 --- a/source/game/BaseTrigger.h +++ b/source/game/BaseTrigger.h @@ -1,8 +1,25 @@ + +/****************************************************** +Copyright © Vitaliy Buturlin, Evgeny Danilovich, 2017 +See the license in LICENSE +******************************************************/ + +/*! +\file +Триггеры +*/ + +/*! \defgroup cbasetrigger Триггеры +\ingroup cbaseanimating +@{ +*/ + #ifndef _BaseTrigger_H_ #define _BaseTrigger_H_ #include "SXbaseAnimating.h" +//! Базовый класс триггера class CBaseTrigger: public SXbaseAnimating { DECLARE_CLASS(CBaseTrigger, SXbaseAnimating); @@ -48,3 +65,5 @@ protected: }; #endif + +/*! @} cbasetrigger */ diff --git a/source/game/BaseWeaponAddon.cpp b/source/game/BaseWeaponAddon.cpp index be3885adb5810c550f2d4e5c9db1aeb7c3b2fb64..d1dd2dc5e376c25bb39366bc044f6ad6d68c1750 100644 --- a/source/game/BaseWeaponAddon.cpp +++ b/source/game/BaseWeaponAddon.cpp @@ -1,5 +1,9 @@ #include "BaseWeaponAddon.h" +/*! \skydocent base_wpn_addon +Базовый класс навеса +*/ + BEGIN_PROPTABLE(CBaseWeaponAddon) //empty END_PROPTABLE() diff --git a/source/game/BaseWeaponAddon.h b/source/game/BaseWeaponAddon.h index c9c5a11a50b39bbb938e76bfa5b10b1d5ad8c5a2..3b466f61cacbbd975713a30447e703a4f39670fa 100644 --- a/source/game/BaseWeaponAddon.h +++ b/source/game/BaseWeaponAddon.h @@ -1,17 +1,33 @@ +/****************************************************** +Copyright © Vitaliy Buturlin, Evgeny Danilovich, 2017 +See the license in LICENSE +******************************************************/ + +/*! +\file +Навесы +*/ + #ifndef _BaseWeaponAddon_H_ #define _BaseWeaponAddon_H_ #include "SXbaseItem.h" +/*! Тип навеса +\ingroup cbaseitem +*/ enum WPN_ADDON { - WPN_ADDON_NONE, - WPN_ADDON_SCOPE, - WPN_ADDON_SILENCER, - WPN_ADDON_HANDLE, - WPN_ADDON_MAG + WPN_ADDON_NONE, //!< Нет + WPN_ADDON_SCOPE, //!< Прицел + WPN_ADDON_SILENCER, //!< Глушитель + WPN_ADDON_HANDLE, //!< Ручка + WPN_ADDON_MAG //!< Магазин }; +/*! Навесы на оружие +\ingroup cbaseitem +*/ class CBaseWeaponAddon: public SXbaseItem { DECLARE_CLASS(CBaseWeaponAddon, SXbaseItem); @@ -19,9 +35,11 @@ class CBaseWeaponAddon: public SXbaseItem public: DECLARE_CONSTRUCTOR(); + //! Получить тип навеса WPN_ADDON getType() const; protected: + //! Тип навеса WPN_ADDON m_addonType; }; diff --git a/source/game/EntityManager.cpp b/source/game/EntityManager.cpp index 13057fa6f722e5ae9d64743be018d04047604cc3..0ec7bc50803f166b36b0fca1697bf68f308f7ac4 100644 --- a/source/game/EntityManager.cpp +++ b/source/game/EntityManager.cpp @@ -453,7 +453,7 @@ SXbaseEntity * EntityManager::FindEntityByClass(const char * name, SXbaseEntity void EntityManager::LoadDefaults() { m_pDefaultsConf = Core_CrConfig(); - if(m_pDefaultsConf->open("entities/defaults.ent") < 0) + if(m_pDefaultsConf->open("config/entities/defaults.ent") < 0) { mem_release(m_pDefaultsConf); return; @@ -480,7 +480,7 @@ void EntityManager::LoadDefaults() void EntityManager::LoadDynClasses() { m_pDynClassConf = Core_CrConfig(); - if(m_pDynClassConf->open("entities/classes.ent") < 0) + if(m_pDynClassConf->open("config/entities/classes.ent") < 0) { mem_release(m_pDynClassConf); return; diff --git a/source/game/EntityManager.h b/source/game/EntityManager.h index 70d5be27c661f2fbc4b7494b2b93cd2cd447dd4c..f2c7eb17ab078525bda52318d8aeae49e4b2c091 100644 --- a/source/game/EntityManager.h +++ b/source/game/EntityManager.h @@ -1,6 +1,8 @@ #ifndef _ENTITY_MANAGER_H_ #define _ENTITY_MANAGER_H_ +/*! \file */ + #include <gdefines.h> #include <common/array.h> #include <chrono> @@ -12,8 +14,20 @@ typedef std::chrono::system_clock::time_point time_point; class SXbaseEntity; struct ISXConfig; +/*! Однократно запустить функцию fn через время time + \note Должно вызываться изнутри класса объекта +*/ #define SET_TIMEOUT(fn, time) m_pMgr->SetTimeout((void(SXbaseEntity::*)(float))&ThisClass::fn, this, time) + +/*! Запускать функцию fn через каждые time секунд +Возвращает идентификатор таймера +\note Должно вызываться изнутри класса объекта +*/ #define SET_INTERVAL(fn, time) m_pMgr->SetInterval((void(SXbaseEntity::*)(float))&ThisClass::fn, this, time) + +/*! Отменить интервал по идентификатору +\note Должно вызываться изнутри класса объекта +*/ #define CLEAR_INTERVAL(id) m_pMgr->ClearInterval(id) enum TIMEOUT_STATUS @@ -92,7 +106,7 @@ protected: int m_iThreadNum; - //! @warning ��� ����� ������� � ������� ������ �����, �.�. ������� �������� ��������� �������� �� ���� ������ + //! @warning это нужно хранить в течение работы проги, т.к. таблицы дефолтов ссылаются напрямую на этот объект ISXConfig * m_pDefaultsConf; ISXConfig * m_pDynClassConf; }; diff --git a/source/game/FuncTrain.cpp b/source/game/FuncTrain.cpp index e68386274dc24bd63fed5ac5666c113d4d53d8a9..819e9d77468464a6ce51af777b06b0816c04950a 100644 --- a/source/game/FuncTrain.cpp +++ b/source/game/FuncTrain.cpp @@ -1,9 +1,15 @@ #include "FuncTrain.h" #include "PathCorner.h" +/*! \skydocent func_train +Поезд, движется по траектории, построенной из path_corner +*/ BEGIN_PROPTABLE(FuncTrain) + //! Скорость движения DEFINE_FIELD_FLOAT(m_fSpeed, 0, "speed", "Move speed", EDITOR_TEXTFIELD) + + //! path_corner, с которого начнется движение DEFINE_FIELD_ENTITY(m_pStartStop, 0, "start", "Start point", EDITOR_TEXTFIELD) END_PROPTABLE() diff --git a/source/game/FuncTrain.h b/source/game/FuncTrain.h index 483dd23d695c99d4e5c45f5086fe3b8a4c884baf..ae7a8aca90ab87178145bee427840180be9eb00f 100644 --- a/source/game/FuncTrain.h +++ b/source/game/FuncTrain.h @@ -1,3 +1,12 @@ +/****************************************************** +Copyright © Vitaliy Buturlin, Evgeny Danilovich, 2017 +See the license in LICENSE +******************************************************/ + +/*! +\file +Поезда класс +*/ #ifndef _FuncTrain_H_ #define _FuncTrain_H_ @@ -5,6 +14,9 @@ class PathCorner; +/*! Поезда класс +\ingroup cpointentity +*/ class FuncTrain: public SXpointEntity { DECLARE_CLASS(FuncTrain, SXpointEntity); @@ -12,21 +24,29 @@ class FuncTrain: public SXpointEntity public: FuncTrain(EntityManager * pMgr); + //! Остановить void Stop(); + //! Запустить void Start(); protected: void OnPostLoad(); void MoveFunc(float dt); + //! Начальная точка движения PathCorner * m_pStartStop; + //! Текущая точка PathCorner * m_pCurStop; + //! Скорость float m_fSpeed; + //! Текущая дистанция от начала пути float m_fCurDist; + //! Запущен ли bool m_bRunning; + //! ID таймера ID m_iPostIval; }; diff --git a/source/game/LightDirectional.cpp b/source/game/LightDirectional.cpp index 11955eb73c2cfa15e65b0a52ddfd766d50946576..0fbdb850bcc553fa9ff202b5aef9df9c829e752b 100644 --- a/source/game/LightDirectional.cpp +++ b/source/game/LightDirectional.cpp @@ -3,18 +3,28 @@ #include <mtllight/sxmtllight.h> +/*! \skydocent light_directional +Направленный источник света +*/ + BEGIN_PROPTABLE(CLightDirectional) + //! Цвет DEFINE_FIELD_VECTOR(m_vColor, 0, "color", "Color", EDITOR_TEXTFIELD) + //! Дальность DEFINE_FIELD_FLOAT(m_fDist, 0, "dist", "Distance", EDITOR_TEXTFIELD) + //! Дальность дальняя DEFINE_FIELD_FLOAT(m_fShadowDist, 0, "shadow_dist", "Shadow distance", EDITOR_TEXTFIELD) + //! Тип тени DEFINE_FIELD_INT(m_iShadowType, 0, "shadow_type", "Shadow type", EDITOR_COMBOBOX) - COMBO_OPTION("None", "-1") - COMBO_OPTION("Static", "0") - COMBO_OPTION("Dynamic", "1") + COMBO_OPTION("None", "-1") //!< Нет + COMBO_OPTION("Static", "0") //!< Статическая тень + COMBO_OPTION("Dynamic", "1") //!< Динамическая тень EDITOR_COMBO_END() + //! Угол DEFINE_FIELD_FLOAT(m_fAngle, 0, "angle", "Angle", EDITOR_TEXTFIELD) + //! Верхний радиус DEFINE_FIELD_FLOAT(m_fRadiusTop, 0, "radius_top", "Radius top", EDITOR_TEXTFIELD) END_PROPTABLE() diff --git a/source/game/LightDirectional.h b/source/game/LightDirectional.h index e3f794715cb5ed7f8d731e3d5a74459ed1bc147e..362831664b652d0f17daa896011b9aa8129310bd 100644 --- a/source/game/LightDirectional.h +++ b/source/game/LightDirectional.h @@ -1,9 +1,22 @@ +/****************************************************** +Copyright © Vitaliy Buturlin, Evgeny Danilovich, 2017 +See the license in LICENSE +******************************************************/ + +/*! +\file +Направленный свет +*/ + #ifndef __LIGHTDIRECTIONAL_H #define __LIGHTDIRECTIONAL_H #include "SXpointEntity.h" +/*! Направленный свет +\ingroup clight +*/ class CLightDirectional: public SXpointEntity { DECLARE_CLASS(CLightDirectional, SXpointEntity); diff --git a/source/game/LightPoint.cpp b/source/game/LightPoint.cpp index f2899ff265727fb877ce112806f6f87672fda32d..a5ca368ed6a870c738989e26246d6d878f5c4aa8 100644 --- a/source/game/LightPoint.cpp +++ b/source/game/LightPoint.cpp @@ -3,23 +3,36 @@ #include <mtllight/sxmtllight.h> +/*! \skydocent light_point +Точечный источник света +*/ + BEGIN_PROPTABLE(CLightPoint) + //! Цвет DEFINE_FIELD_VECTOR(m_vColor, 0, "color", "Color", EDITOR_TEXTFIELD) + //! Дальность DEFINE_FIELD_FLOAT(m_fDist, 0, "dist", "Distance", EDITOR_TEXTFIELD) + //! Дальность дальняя DEFINE_FIELD_FLOAT(m_fShadowDist, 0, "light_far", "Light far", EDITOR_TEXTFIELD) + //! Тип тени DEFINE_FIELD_INT(m_iShadowType, 0, "type_shadow", "Type shadow", EDITOR_COMBOBOX) - COMBO_OPTION("None", "-1") - COMBO_OPTION("Static", "0") - COMBO_OPTION("Dynamic", "1") + COMBO_OPTION("None", "-1") //!< Нет + COMBO_OPTION("Static", "0") //!< Статическая тень + COMBO_OPTION("Dynamic", "1") //!< Динамическая тень EDITOR_COMBO_END() + //! Включить DEFINE_INPUT(turnOn, "turnOn", "Turn On", PDF_NONE) + //! Выключить DEFINE_INPUT(turnOff, "turnOff", "Turn Off", PDF_NONE) + //! При включении DEFINE_OUTPUT(m_onTurnOn, "OnTurnOn", "On Turn On") + //! При выключении DEFINE_OUTPUT(m_onTurnOff, "OnTurnOff", "On Turn Off") + //! Изначально выключена DEFINE_FLAG(LIGHT_INITIALLY_DARK, "Initially dark") END_PROPTABLE() diff --git a/source/game/LightPoint.h b/source/game/LightPoint.h index 726bf9114e756cf6d32bdab74ee76d92b785be09..ed0a04c962fb7f108f8828d033c21f867e443702 100644 --- a/source/game/LightPoint.h +++ b/source/game/LightPoint.h @@ -1,4 +1,14 @@ +/****************************************************** +Copyright © Vitaliy Buturlin, Evgeny Danilovich, 2017 +See the license in LICENSE +******************************************************/ + +/*! +\file +Точечный свет +*/ + #ifndef __LIGHTPOINT_H #define __LIGHTPOINT_H @@ -6,6 +16,9 @@ #define LIGHT_INITIALLY_DARK 0x00010000 +/*! Точечный источник света +\ingroup clight +*/ class CLightPoint : public SXpointEntity { DECLARE_CLASS(CLightPoint, SXpointEntity); diff --git a/source/game/NPCBase.cpp b/source/game/NPCBase.cpp index 0c57ccfbe26c1581622d2dbdadc984d333f6f5a7..518dffa7e0b30dccea16186139647993a5b430dd 100644 --- a/source/game/NPCBase.cpp +++ b/source/game/NPCBase.cpp @@ -1,6 +1,10 @@ #include "NPCBase.h" +/*! \skydocent npc_base +Базовый класс для NPC +*/ + BEGIN_PROPTABLE(CNPCBase) // empty @@ -150,58 +154,58 @@ void CNPCBase::OnSync() if (m_fHealth <= 0.f) return; - //���������� ������� id ����� �� ����� + //определяем текущий id квада аи сетки m_idCurrAiQuad = SAIG_QuadGet(&(float3)m_vPosition, true); - //���� ���� ����� �� ������� � ��������� ���� �� ����� �������/��������� ����� �� ������� + //если квад найти не удалось и состояние пути не равно немного/полностью вышел за пределы if (m_idCurrAiQuad < 0 && (m_statePath != NPC_STATE_PATH_BITBEYOND || m_statePath != NPC_STATE_PATH_BEYOND)) { - //���� �� �� �������� �� ���� + //если мы не движемся по пути if (m_idCurrQuaidInPath < 0 || m_idCurrQuaidInPath >= m_aPathQuads.size()) { gridCheckBeyond(); } - //����� �� �������� �� ����, ��������� ��� ������ ����� ���������� � ��������� ����� + //иначе мы движемся по пути, проверяем как далеко лежат предыдущий и следующий квады else { - //���� ��� �� ������ ���� �� ����, � ��������� ����� ������� ����������� ����� � �������� ��� ����� � �������� ����������� + //если это не первый квад на пути, и дистанция между центром предыдущего квада и позицией нпс лежит в пределах допустимого if (m_idCurrQuaidInPath > 0 && SMVector3Distance(m_vPosition, m_vPosQuadInPathLast) <= NPC_QUAD_DIST_NOTBEYOND) m_idCurrAiQuad = m_aPathQuads[m_idCurrQuaidInPath-1]; - //����� ���� ��������� ����� ������� ���������� ����� � �������� ��� ����� � �������� ����������� + //иначе если дистанция между центром следующего квада и позицией нпс лежит в пределах допустимого else if (SMVector3Distance(m_vPosition, m_vPosQuadInPathNext) <= NPC_QUAD_DIST_NOTBEYOND) m_idCurrAiQuad = m_aPathQuads[m_idCurrQuaidInPath]; - else //����� ���-�� �� ��� + else //иначе что-то не так { gridCheckBeyond(); } } } - //���� ��������� ���� ������� ����� �� ������� � ����������� ������ ����� ��� ������� �� ����� + //если состояние пути немного вышел за пределы и установлено нужное время для прихода на сетку if (m_statePath == NPC_STATE_PATH_BITBEYOND && m_ulTimeReturnInGrid > 0) { int iTimeDelta = Core_RIntGet(G_RI_INT_TIME_DELTA); m_ulTimeAllReturnInGrid += iTimeDelta; - //���� ����� ����� �������� � ����� ��������� ������ + //если общее время движения к сетке превысело предел if (m_ulTimeAllReturnInGrid >= m_ulTimeReturnInGrid) { - //������ ������ ����� ��� ��� �� ��������, ������������� ��������� ����� �� ������� + //значит скорее всего нпс уже не вернется, устанавливаем состояние вышел за пределы m_statePath = NPC_STATE_PATH_BEYOND; m_ulTimeReturnInGrid = m_ulTimeAllReturnInGrid = 0; m_pCharacter->setWalkDirection(F3_BTVEC(float3(0, 0, 0))); - //���� ��� ���������� ���� + //если был предыдущий путь if (m_aPathQuads.size() > 0) SAIG_GridSetColorArr(&(m_aPathQuads[0]), 0, m_aPathQuads.size()); } } - //���� ����������� �� ����� �� ��������� + //если возвращение на сетку не допустимо if (m_statePath == NPC_STATE_PATH_BEYOND) { if (m_fHealth > 0.f) { - //�������� �������� ���, ������ -1 ����� ������ ������ ��� ������ ��� ���� ��� + //минусуем здоровье нпс, делаем -1 чтобы предки поняли что только что умер нпс m_fHealth = -1.f; return; } @@ -212,30 +216,30 @@ void CNPCBase::OnSync() void CNPCBase::gridCheckBeyond() { - //������� ��������� ���� � ������� ������� ��� + //находим ближайший квад к текущей позиции нпс ID idq = SAIG_QuadGetNear(&(float3)m_vPosition); if (idq >= 0) { float3 tpos; SAIG_QuadGetPos(idq, &tpos); float dist = SMVector3Distance(m_vPosition, tpos); - //���� ��������� ����� ������� �������� ��� � �������� ���������� ����� ����� � ���������� �������� ����������� �� ����� + //если дистанция между текущей позицией нпс и позицией ближайшего квада лежит в допустимых пределах возвращения на сетку if (dist <= NPC_QUAD_DIST_BEYOND) { - //������ �������� ��� ����� �� ������� + //просто сообщаем что вышли за пределы m_statePath = NPC_STATE_PATH_BITBEYOND; - //���� ��� ���������� ���� + //если был предыдущий путь if (m_aPathQuads.size() > 0) SAIG_GridSetColorArr(&(m_aPathQuads[0]), 0, m_aPathQuads.size()); - //� ������������� ���� ����������� + //и устанавливаем путь возвращения m_aPathQuads.resize(1); m_aPathQuads[0] = idq; m_idCurrQuaidInPath = 0; SAIG_GridSetColorArr(&(m_aPathQuads[0]), m_ulColor, m_aPathQuads.size()); - //������������ ����� �������� �� ���� �� ����� + //просчитываем время хождения по пути до сетки m_ulTimeReturnInGrid = (dist * m_fSpeedWalk) * 1000.f * 20.f; m_ulTimeAllReturnInGrid = 0; } @@ -248,7 +252,7 @@ void CNPCBase::gridCheckBeyond() void CNPCBase::pathWalk() { - //���� ������� ���� ����� ���� �� �������� + //если текущий ключ квада пути не известен if (m_idCurrQuaidInPath >= m_aPathQuads.size() || m_idCurrQuaidInPath < 0) { m_idCurrQuaidInPath = -1; @@ -258,43 +262,43 @@ void CNPCBase::pathWalk() m_stateMove = NPC_STATE_MOVE_RUN; - //���� ������� ���� ������ ���� � ������� ���� ��� �� ������� ���������� ������ ���� ���� ��������� ������ ����, ������ ������ ����� ��� ������ � ���� + //если текущий квад больше нуля и текущий квад нпс не явлется предыдущим квадом пути либо следующим квадом пути, значит скорее всего нпс сбился с пути if (m_idCurrQuaidInPath > 0 && (m_idCurrAiQuad != m_aPathQuads[m_idCurrQuaidInPath] && m_idCurrAiQuad != m_aPathQuads[m_idCurrQuaidInPath - 1])) { - //���� ������� ���� ��� �� ������� ������� ����������� � ���������� ������ ����, ������ ��� ����� �� ���������� �������, � ������ ������ � ���� + //если текущий квад нпс не явлется соседом предыдущему и следующему квадам пути, значит нпс вышел за допустимые пределы, а значит сбился с пути if (!SAIG_QuadIs2Neighbors(m_idCurrAiQuad, m_aPathQuads[m_idCurrQuaidInPath], m_aPathQuads[m_idCurrQuaidInPath - 1])) { m_statePath = NPC_STATE_PATH_LOST; m_pCharacter->setWalkDirection(F3_BTVEC(float3(0,0,0))); return; } - else //����� ��� ����� ���������� �� ��������, ���������� + else //иначе нпс чуток отклонился от маршрута, поправляем orientAtPoint(&m_vPosQuadInPathNext, NPC_TIME_ORIENT_IN_PATH); } - //���� ��������� ���� �� ����� ���������� � ����� �� ������� ��� + //если следующий квад аи сетки несвободен и занят не текущим нпс if (SAIG_QuadGetState(m_aPathQuads[m_idCurrQuaidInPath]) != AIQUAD_STATE_FREE && SAIG_QuadGetStateWho(m_aPathQuads[m_idCurrQuaidInPath]) != GetId()) { - //������ �� ��������� ���� � ������� ��� ������ � ���� + //значит он преградил путь и текущий нпс сбился с пути m_statePath = NPC_STATE_PATH_LOST; m_pCharacter->setWalkDirection(F3_BTVEC(float3(0, 0, 0))); return; } - //�������� ��������� ���� �� ����� �� ������� ��� + //занимаем следующий квад аи сетки за текущим нпс SAIG_QuadSetState(m_aPathQuads[m_idCurrQuaidInPath], AIQUAD_STATE_TEMPBUSY); SAIG_QuadSetStateWho(m_aPathQuads[m_idCurrQuaidInPath], GetId()); SAIG_QuadGetPos(m_aPathQuads[m_idCurrQuaidInPath], &m_vPosQuadInPathNext); - //���� ������� ������� ��� ���� ��� ������� ����� � �������� �� ���������, � �� ������� ������ ���� ����� ���������� + //если текущая позиция нпс ниже чем позиция квада к которому он стремится, и их разница больше либо равна допустимой if (m_vPosQuadInPathNext.y > m_vPosition.y && abs(m_vPosQuadInPathNext.y - m_vPosition.y) >= m_fStepHeight - NPC_STEP_HEIGHT_EPSILON) { - //������� ��� ���� �������� + //говорим что надо прыгнуть m_canJump = true; } - //���� �������� ������ + //если разрешен прыжок if (m_canJump) { if (m_pCharacter->canJump()) @@ -317,10 +321,10 @@ void CNPCBase::pathWalk() ++m_idCurrQuaidInPath; - //���� ���� ��������� ���� ������� ����� �� ������� + //если было состояние пути немного вышел за пределы if (m_statePath == NPC_STATE_PATH_BITBEYOND) { - //������������� ��������� �� ��������� ���� + //устанавилваем состояние не найденный путь m_statePath = NPC_STATE_PATH_NOTFOUND; m_ulTimeReturnInGrid = m_ulTimeAllReturnInGrid = 0; } @@ -351,7 +355,7 @@ void CNPCBase::orientAtPoint(const float3 * pos, DWORD ttime) float angle = (acosf(SMVector3Dot(NPC_BASE_DIR, dircam)) * sign2(SMVector3Cross(NPC_BASE_DIR, dircam).y)); angle = (-angle); - //������������ ����������� �������� � �������� + //просчитываем направление движения и скорость float3 dir = SMVector3Normalize(SMQuaternion(angle, 'y') * NPC_BASE_DIR); float speed = 0; if (m_stateMove == NPC_STATE_MOVE_WALK) diff --git a/source/game/NPCBase.h b/source/game/NPCBase.h index b878f814814450607d28afed77187cc932b2f1bd..20196b0bb30d3cbe46f5e02539f4b5de5b79f298 100644 --- a/source/game/NPCBase.h +++ b/source/game/NPCBase.h @@ -1,3 +1,16 @@ +/****************************************************** +Copyright © Vitaliy Buturlin, Evgeny Danilovich, 2017 +See the license in LICENSE +******************************************************/ + +/*! +\file +Базовый класс npc +*/ + +/*! \ingroup cbaseanimating +@{ +*/ #ifndef __NPCBASE_H_ #define __NPCBASE_H_ @@ -5,10 +18,10 @@ #include "SXbaseAnimating.h" #include <aigrid/sxaigrid.h> -//! ������� ����������� ��� ��� +//! базовое направление для нпс #define NPC_BASE_DIR float3(0,0,-1) -//����� � ����� ��� ������� ���������� �� ���������� ���� +//время в млсек для плавной ориентации на проходящий путь #define NPC_TIME_ORIENT_IN_PATH 250 #define NPC_STEP_HEIGHT_EPSILON 0.05f @@ -16,34 +29,35 @@ #define NPC_QUAD_DIST_NOTBEYOND AIGRID_QUAD_SIZE #define NPC_QUAD_DIST_BEYOND AIGRID_QUAD_SIZE*2.f -//! �������� �������� +//! состяния движения enum NPC_STATE_MOVE { - NPC_STATE_MOVE_IDLE_START = 0, //!< ����������� - NPC_STATE_MOVE_IDLE = 1, //!< ����� - NPC_STATE_MOVE_WALK = 2, //!< ���� - NPC_STATE_MOVE_RUN = 4, //!< ����� + NPC_STATE_MOVE_IDLE_START = 0, //!< остановился + NPC_STATE_MOVE_IDLE = 1, //!< стоит + NPC_STATE_MOVE_WALK = 2, //!< идет + NPC_STATE_MOVE_RUN = 4, //!< бежит }; -//! ��������� ��������� +//! состояния опасности enum NPC_STATE_DANGER { - NPC_STATE_DANGER_CALM = 0, //!< ������� - NPC_STATE_DANGER_UNVISIBLE = 1, //!< ���������, �� �� ����� ��� ��������� - NPC_STATE_DANGER_VISIBLE = 2, //!< ��������� � ����� ��� ��������� + NPC_STATE_DANGER_CALM = 0, //!< спокоен + NPC_STATE_DANGER_UNVISIBLE = 1, //!< беспокоен, но не знает где опасность + NPC_STATE_DANGER_VISIBLE = 2, //!< беспокоен и знает где опасность }; -//! ��������� ���� +//! состояния пути enum NPC_STATE_PATH { - NPC_STATE_PATH_NOTFOUND = 0, //!< �� ������ ���� - NPC_STATE_PATH_BITBEYOND = 1, //!< �� ��������� (����������� ���������) - NPC_STATE_PATH_BEYOND = 2, //!< �� ��������� (����������� �� ���������) - NPC_STATE_PATH_LOST = 3, //!< ������ � ���� - NPC_STATE_PATH_FOUND = 4, //!< ������ + NPC_STATE_PATH_NOTFOUND = 0, //!< не найден путь + NPC_STATE_PATH_BITBEYOND = 1, //!< за пределами (возвращение допустимо) + NPC_STATE_PATH_BEYOND = 2, //!< за пределами (возвращение не допустимо) + NPC_STATE_PATH_LOST = 3, //!< сбился с пути + NPC_STATE_PATH_FOUND = 4, //!< найден }; -class CNPCBase : public SXbaseAnimating +//! Базовый класс npc +class CNPCBase: public SXbaseAnimating { DECLARE_CLASS(CNPCBase, SXbaseAnimating); DECLARE_PROPTABLE(); @@ -55,9 +69,9 @@ public: CNPCBase(EntityManager * pMgr); ~CNPCBase(); - ID getAIQuad(); //id ����� �� ����� �� ������� ����� ��� + ID getAIQuad(); //!< id квада аи сетки на котором стоит нпс - //��������� ������� �������������� ����������� �� �� ����� + //! установка позиции сопровождается ориентацией на аи сетке void SetPos(const float3 &pos); bool SetKV(const char *name, const char *value); void OnSync(); @@ -69,41 +83,43 @@ protected: btPairCachingGhostObject * m_pGhostObject; btKinematicCharacterController * m_pCharacter; - bool pathFind(ID endq); //!< ����� ���� �� �������� (�� ������� ����� ���) �� endq - void pathWalk(); //!< �������� �� ���� - void gridCheckBeyond(); //!< �������� �� ����� �� ������� �����, � ���� ��� �� ��������� ��������������� ��������� + bool pathFind(ID endq); //!< поиск пути от текущего (на котором стоит нпс) до endq + void pathWalk(); //!< хождение по пути + void gridCheckBeyond(); //!< проверка на выход за пределы сетки, и если так то установка соответсвующего состояния - //! ��������� ��� �� ����� pos, ttime ����� � ����� �� ������� ��� ����� �������� �/�� ����� + //! ориентаци нпс на точку pos, ttime время в млсек за которое нпс будет повернут в/на точку void orientAtPoint(const float3 *pos, DWORD ttime); - void updateOrientLerp();//!< ������� ������������ ��������� + void updateOrientLerp();//!< плавная интерполяция поворотов - float m_fHealth; //�������� [0,1] + float m_fHealth; //!< здоровье [0,1] - float m_fSpeedWalk; //�������� �������� ��� ������ - float m_fSpeedRun; //�������� �������� ��� ���� + float m_fSpeedWalk; //!< скорость движения при ходьбе + float m_fSpeedRun; //!< скорость движения при беге - ID m_idCurrAiQuad; //������� id ����� �� ������� ��������� ��� + ID m_idCurrAiQuad; //!< текущий id квада на котором находится нпс - Array<ID> m_aPathQuads; //������ � ���������������� ������ ���� �� �� ����� - ID m_idCurrQuaidInPath; //����� �������� ����� �� m_arr_path + Array<ID> m_aPathQuads; //!< массив с идентификаторами квадов пути на аи сетке + ID m_idCurrQuaidInPath; //!< номер текущего квада из m_arr_path - float3 m_vLastPathPos; //��������� ������� ��� �� ���� + float3 m_vLastPathPos; //!< последняя позиция нпс на пути - float3 m_vPosQuadInPathLast; //������� ���������� ����� �� ������� ��� ��� - float3 m_vPosQuadInPathNext; //��������� ������ ����� �� ������� ��������� ��� + float3 m_vPosQuadInPathLast; //!< позиция последнего квада на котором был нпс + float3 m_vPosQuadInPathNext; //!< следующая позици квада на которую стремится нпс - float m_fAngleYLast; //���������� ���� �������� - float m_fAngleYNext; //��������� ���� �������� - DWORD m_ulTimeAllRot; //����� ����� ������� ���������� - DWORD m_ulTimeRot; //����� �� ������� ������ ���� ������������ - - float m_fStepHeight; //������ ���� - bool m_canJump; //������� �� ������ - NPC_STATE_MOVE m_stateMove; //��������� �������� - NPC_STATE_PATH m_statePath; //��������� ���� - DWORD m_ulColor; //��������� (������ ����� ����������) ���� ��� ��� ����� ������ ����� - DWORD m_ulTimeReturnInGrid; //�� ������� ����� ��� ������ ��������� �� �� ����� - DWORD m_ulTimeAllReturnInGrid; //����� ����� ����������� ��� �� �� ����� + float m_fAngleYLast; //!< предыдущий угол поворота + float m_fAngleYNext; //!< следующий угол поворота + DWORD m_ulTimeAllRot; //!< общее время текущей ориентации + DWORD m_ulTimeRot; //!< время за которое должен быть ориентирован + + float m_fStepHeight; //!< высота шага + bool m_canJump; //!< прыгать ли сейчас + NPC_STATE_MOVE m_stateMove; //!< состояние движения + NPC_STATE_PATH m_statePath; //!< состояние пути + DWORD m_ulColor; //!< случайный (скорее всего уникальный) цвет нпс для метки квадов сетки + DWORD m_ulTimeReturnInGrid; //!< за сколько млсек нпс должен вернуться на аи сетку + DWORD m_ulTimeAllReturnInGrid; //!< общее время возвращения нпс на аи сетку }; -#endif \ No newline at end of file +#endif + +//! @} diff --git a/source/game/NPCZombie.cpp b/source/game/NPCZombie.cpp index fda64994cda0ade467f667475c586881ff8d4dfa..f87dfa18ec8bdb45012508c88e0e6b280ddfc935 100644 --- a/source/game/NPCZombie.cpp +++ b/source/game/NPCZombie.cpp @@ -2,6 +2,10 @@ #include "NPCZombie.h" #include "score/sxscore.h" +/*! \skydocent npc_zombie +NPC зомби +*/ + BEGIN_PROPTABLE(CNPCZombie) // empty @@ -33,27 +37,27 @@ void CNPCZombie::OnSync() SSCore_SndPosWSet(m_idSndIdle2, &GetPos()); SSCore_SndPosWSet(m_idSndDeath, &GetPos()); - //���� �������� ������ ���� + //если здоровье меньше нуля if (m_fHealth < 0.0f) { - //�� ������������� �������� ������ + //то воспроизводим анимацию смерти this->PlayAnimation("fake_death0"); SSCore_SndPlay(m_idSndDeath); - m_fHealth = 0.f; //�������� �������� ������ ��� ������ ����������� �������� �� ���� + m_fHealth = 0.f; //обнуляем здоровье говоря что больше проигрывать анимацию не надо return; } if (m_fHealth <= 0.f) return; - //���� ������ � ����, �������� ���� + //если сбился с пути, обнуляем путь if (m_statePath == NPC_STATE_PATH_LOST) { - //!!!���� ������ ������� ����� ���� + //!!!надо искать позицию конца пути m_stateMove = NPC_STATE_MOVE_IDLE_START; m_idCurrQuaidInPath = -1; } - //����� ���� ��������� ���� == ������� ����� �� ������� (����������) + //иначе если состояние пути == немного вышел за пределы (допустимые) else if (m_statePath == NPC_STATE_PATH_BITBEYOND) { m_stateMove = NPC_STATE_MOVE_RUN; diff --git a/source/game/NPCZombie.h b/source/game/NPCZombie.h index 0959e97eb5adf351372a2b5b608b8d82d71be632..3b29039b917fdd4a6cdb8eabbfa000d49ec44bb3 100644 --- a/source/game/NPCZombie.h +++ b/source/game/NPCZombie.h @@ -1,10 +1,23 @@ +/****************************************************** +Copyright © Vitaliy Buturlin, Evgeny Danilovich, 2017 +See the license in LICENSE +******************************************************/ + +/*! +\file +Базовый класс npc +*/ + +/*! \ingroup cbaseanimating +@{ +*/ #ifndef _NPCZombie_H_ #define _NPCZombie_H_ #include "NPCBase.h" - +//! Класс NPC зомби class CNPCZombie : public CNPCBase { DECLARE_CLASS(CNPCZombie, CNPCBase); @@ -26,4 +39,6 @@ protected: ID m_idSndDeath; }; -#endif \ No newline at end of file +#endif + +//! @} diff --git a/source/game/PathCorner.cpp b/source/game/PathCorner.cpp index 2f96300eb101a3e8d642a8f505b5c3cac4e303a7..f0a7a742616d1d542efb6e446bfeb98c594693cc 100644 --- a/source/game/PathCorner.cpp +++ b/source/game/PathCorner.cpp @@ -1,13 +1,20 @@ #include "PathCorner.h" +/*! \skydocent path_corner +Точка для формирования пути для #func_train +*/ BEGIN_PROPTABLE(PathCorner) + //! Тип сглаживания пути DEFINE_FIELD_INT(m_type, 0, "type", "Type", EDITOR_COMBOBOX) - COMBO_OPTION("Corner", "0") - COMBO_OPTION("Spline", "1") + COMBO_OPTION("Corner", "0") //!< Нет сглаживания + COMBO_OPTION("Spline", "1") //!< Сплайном EDITOR_COMBO_END() + //! Новая скорость для поезда DEFINE_FIELD_FLOAT(m_fNewSpeed, 0, "speed", "New speed", EDITOR_TEXTFIELD) + + //! Следующая точка пути DEFINE_FIELD_ENTITY(m_pNextStop, 0, "next", "Next stop", EDITOR_TEXTFIELD) END_PROPTABLE() diff --git a/source/game/PathCorner.h b/source/game/PathCorner.h index d43bf26b8f589dec04f4ffaa52be6195c14ead13..b32a5ef8ca9a63856b124f714efa615829386793 100644 --- a/source/game/PathCorner.h +++ b/source/game/PathCorner.h @@ -1,14 +1,31 @@ + +/****************************************************** +Copyright © Vitaliy Buturlin, Evgeny Danilovich, 2017 +See the license in LICENSE +******************************************************/ + +/*! +\file +Точка пути +*/ + +/*! \ingroup cpointentity +@{ +*/ + #ifndef _PathCorner_H_ #define _PathCorner_H_ #include "SXpointEntity.h" +//! тип сглаживания пути enum PATH_CORNER_TYPE { - PCT_CORNER = 0, - PCT_SPLINE = 1 + PCT_CORNER = 0, //!< без сглаживания + PCT_SPLINE = 1 //!< сплайном }; +//! Точка пути для #FuncTrain class PathCorner: public SXpointEntity { DECLARE_CLASS(PathCorner, SXpointEntity); @@ -16,23 +33,32 @@ class PathCorner: public SXpointEntity public: PathCorner(EntityManager * pMgr); - + //! получает координаты точки на пути на расстоянии dist от начала float3 GetPoint(float dist); + //! получает вращение точки на пути на расстоянии dist от начала SMQuaternion GetRot(float dist); + //! получает длину пути float GetLength(); + //! Получает следующую точку на пути PathCorner * GetNext(); + //! Получает предыдущую точку на пути PathCorner * GetPrev(); protected: + //! Пересчитывает путь void RecalcPath(float t); void OnPostLoad(); + //! Тип сглаживания int m_type; + //! Новая скорость поезда float m_fNewSpeed; + //! Длина сегмента пути float m_fLength; + //! Для расчета сплайна @{ float3_t m_fH; float3_t m_fCoeffsA; @@ -42,9 +68,14 @@ protected: float3_t m_fDelta; float3_t m_fLambda; + //! @} + //! Следующая точка PathCorner * m_pNextStop; + //! Предыдущая точка PathCorner * m_pPrevStop; }; #endif + +//! @} diff --git a/source/game/SXbaseAmmo.cpp b/source/game/SXbaseAmmo.cpp index f081c6676d554f0b70739d5c1dc98517916ecbe0..cc588a00071943f254dcad7100c169c8d3edd79c 100644 --- a/source/game/SXbaseAmmo.cpp +++ b/source/game/SXbaseAmmo.cpp @@ -1,9 +1,15 @@ #include "SXbaseAmmo.h" +/*! \skydocent base_ammo +Базовый класс для патронов +*/ BEGIN_PROPTABLE(SXbaseAmmo) + //! Начальная скорость пули DEFINE_FIELD_FLOAT(m_fStartSpeed, PDFF_NOEDIT | PDFF_NOEXPORT, "start_speed", "", EDITOR_NONE) + //! Масса пули, кг DEFINE_FIELD_FLOAT(m_fBulletMass, PDFF_NOEDIT | PDFF_NOEXPORT, "bullet_mass", "", EDITOR_NONE) + //! Бронебойность DEFINE_FIELD_FLOAT(m_fArmorPiercing, PDFF_NOEDIT | PDFF_NOEXPORT, "armor_piercing", "", EDITOR_NONE) END_PROPTABLE() diff --git a/source/game/SXbaseAmmo.h b/source/game/SXbaseAmmo.h index 232cfe805856d457706236c07161c8c3d0b33ce5..a289b1e683f2b6a71fe4a6996ddb3eee4e0c2b36 100644 --- a/source/game/SXbaseAmmo.h +++ b/source/game/SXbaseAmmo.h @@ -1,8 +1,21 @@ +/****************************************************** +Copyright © Vitaliy Buturlin, Evgeny Danilovich, 2017 +See the license in LICENSE +******************************************************/ + +/*! +\file +Патроны +*/ + #ifndef _SXbaseAmmo_H_ #define _SXbaseAmmo_H_ #include "SXbaseSupply.h" +/*! Базовый класс патронов +\ingroup cbaseitem +*/ class SXbaseAmmo: public SXbaseSupply { DECLARE_CLASS(SXbaseAmmo, SXbaseSupply); @@ -10,12 +23,16 @@ class SXbaseAmmo: public SXbaseSupply public: DECLARE_CONSTRUCTOR(); + //! Стреляет пулю void fire(const float3 &vStart, const float3 &vEnd); protected: + //! Начальная скорость float m_fStartSpeed; + //! Масса пули float m_fBulletMass; + //! Бронебойность float m_fArmorPiercing; }; diff --git a/source/game/SXbaseAmmoBox.cpp b/source/game/SXbaseAmmoBox.cpp index ae47aea582eb88daf1f24deb290083cf884bb06f..c2da6149e1dc25a4c7e7b9b643610f7c582e8ac2 100644 --- a/source/game/SXbaseAmmoBox.cpp +++ b/source/game/SXbaseAmmoBox.cpp @@ -1,10 +1,17 @@ #include "SXbaseAmmoBox.h" +/*! \skydocent base_ammobox +Базовый класс коробки с припасами. При использовании, выдает игроку items_per_use объектов item_class, если внутри содержится достаточно +*/ BEGIN_PROPTABLE(SXbaseAmmoBox) + //! Объем коробки в итемах DEFINE_FIELD_INT(m_iMaxItems, PDFF_NOEDIT | PDFF_NOEXPORT, "max_items", "", EDITOR_NONE) + //! Текущее количество итемов внутри DEFINE_FIELD_INT(m_iCurItems, PDFF_NOEDIT | PDFF_NOEXPORT, "cur_items", "", EDITOR_NONE) + //! Сколько выдать за одно использование DEFINE_FIELD_INT(m_iItemsPerUse, PDFF_NOEDIT | PDFF_NOEXPORT, "items_per_use", "", EDITOR_NONE) + //! Класс выдаваемого объекта DEFINE_FIELD_STRING(m_szAmmoType, PDFF_NOEDIT | PDFF_NOEXPORT, "item_class", "", EDITOR_NONE) END_PROPTABLE() diff --git a/source/game/SXbaseAmmoBox.h b/source/game/SXbaseAmmoBox.h index c8cd62e871083d530ed4446d4d0fa245b36b3ca7..f9cc7a682eca76e980437d79e5d4e745217ee903 100644 --- a/source/game/SXbaseAmmoBox.h +++ b/source/game/SXbaseAmmoBox.h @@ -1,8 +1,21 @@ +/****************************************************** +Copyright © Vitaliy Buturlin, Evgeny Danilovich, 2017 +See the license in LICENSE +******************************************************/ + +/*! +\file +Аммобокс +*/ + #ifndef _SXbaseAmmoBox_H_ #define _SXbaseAmmoBox_H_ #include "SXbaseItem.h" +/*! Аммобокс +\ingroup cbaseitem +*/ class SXbaseAmmoBox: public SXbaseItem { DECLARE_CLASS(SXbaseAmmoBox, SXbaseItem); @@ -10,11 +23,11 @@ class SXbaseAmmoBox: public SXbaseItem public: ThisClass(EntityManager * pMgr); - int m_iMaxItems; //!< ������������ ���������� ���������, ������� ���� ����� ������ - int m_iCurItems; //!< ������� �������� - int m_iItemsPerUse; //!< ������� �������� �� ��� + int m_iMaxItems; //!< Максимальное количество предметов, которые бокс может выдать + int m_iCurItems; //!< Сколько осталось + int m_iItemsPerUse; //!< Сколько выдавать за раз - const char * m_szAmmoType; //!< ��� ��������� ��� ������ + const char * m_szAmmoType; //!< Тип предметов для выдачи }; #endif diff --git a/source/game/SXbaseAnimating.cpp b/source/game/SXbaseAnimating.cpp index eb1c63d639d64af9612b73b6e33a2c778f04fefd..af7af8fb3ae7d42d722a78542ff853e467e9b0f1 100644 --- a/source/game/SXbaseAnimating.cpp +++ b/source/game/SXbaseAnimating.cpp @@ -1,12 +1,17 @@ #include "SXbaseAnimating.h" #include "gcore/sxgcore.h" +/*! \skydocent base_animating +Базовый класс для объектов, имеющих объем в игровом мире +*/ + BEGIN_PROPTABLE(SXbaseAnimating) -// empty + //! Файл модели. Поддерживаются статические и анимированные модели DEFINE_FIELD_STRING(m_szModelFile, 0, "model", "Model file", EDITOR_FILEFIELD) FILE_OPTION("Model file (*.dse)", "*.dse") EDITOR_FILE_END() + //! Масштаб модели DEFINE_FIELD_FLOAT(m_fBaseScale, 0, "scale", "Scale", EDITOR_TEXTFIELD) END_PROPTABLE() @@ -23,6 +28,7 @@ SXbaseAnimating::SXbaseAnimating(EntityManager * pMgr): SXbaseAnimating::~SXbaseAnimating() { + ReleasePhysics(); mem_release(m_pAnimPlayer); } diff --git a/source/game/SXbaseAnimating.h b/source/game/SXbaseAnimating.h index 36b600feedfab727cbd7670349db9ddb40310398..ed12d730c1090ae1c450dbd45b2c31c5c18c4574 100644 --- a/source/game/SXbaseAnimating.h +++ b/source/game/SXbaseAnimating.h @@ -1,9 +1,26 @@ + +/****************************************************** +Copyright © Vitaliy Buturlin, Evgeny Danilovich, 2017 +See the license in LICENSE +******************************************************/ + +/*! +\file +Анимированный игровой объект +*/ + +/*! \defgroup cbaseanimating Моделированные объекты +\ingroup cbaseentity +@{ +*/ + #ifndef _SXbaseAnimating_H_ #define _SXbaseAnimating_H_ #include "SXbaseEntity.h" #include <anim/sxanim.h> +//! Анимированный игровой объект class SXbaseAnimating: public SXbaseEntity { DECLARE_CLASS(SXbaseAnimating, SXbaseEntity); @@ -47,3 +64,5 @@ protected: }; #endif + +/*! @} cbaseanimating */ diff --git a/source/game/SXbaseEntity.cpp b/source/game/SXbaseEntity.cpp index a70265c186421be292a6dc2f918d3d745e3eb39d..4cff430e8faf6eab1f6faa11edd46e1690c0cb11 100644 --- a/source/game/SXbaseEntity.cpp +++ b/source/game/SXbaseEntity.cpp @@ -4,12 +4,22 @@ #include "EntityManager.h" +/*! \skydocent base_entity +Базовый объект. От него наследуются все остальные объекты +*/ + BEGIN_PROPTABLE_NOBASE(SXbaseEntity) + //! Имя объекта DEFINE_FIELD_STRING(m_szName, 0, "name", "Name", EDITOR_TEXTFIELD) + //! Позиция в мире 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_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/SXbaseEntity.h b/source/game/SXbaseEntity.h index c8b7c836776af8fc05b61ad6054a8e3651a7e06f..765de460e966f5f884df5016cd5137591659d444 100644 --- a/source/game/SXbaseEntity.h +++ b/source/game/SXbaseEntity.h @@ -1,3 +1,20 @@ + +/****************************************************** +Copyright © Vitaliy Buturlin, Evgeny Danilovich, 2017 +See the license in LICENSE +******************************************************/ + +/*! +\file +Базовый игровой объект +*/ + +/*! \defgroup cbaseentity Объекты. Базовый объект +\ingroup sxgame +Базовый объект, от которого наследуются все остальные классы объектов. +@{ +*/ + #ifndef _SXbaseEntity_H_ #define _SXbaseEntity_H_ @@ -15,6 +32,7 @@ #pragma warning(push) #pragma warning(disable:4251) +//! Базовый объект, от которого наследуются все остальные классы объектов. class SXGAME_EXPORT SXbaseEntity { DECLARE_CLASS_NOBASE(SXbaseEntity); @@ -23,37 +41,59 @@ class SXGAME_EXPORT SXbaseEntity friend class EntityManager; public: + //! Конструктор SXbaseEntity(EntityManager * pMgr); virtual ~SXbaseEntity(); + //! Возвращает имя движкового класса объекта const char * GetClassName(); + + //! Возвращает имя объекта const char * GetName(); + + //! Возвращает баунд объекта virtual void GetMinMax(float3 * min, float3 * max); + + //! Возвращает баунд сферу объекта virtual void GetSphere(float3 * center, float * radius); + //! Устанавливает мировую позицию объекта virtual void SetPos(const float3 & pos); + //! Получает мировую позицию объекта float3 GetPos(); + //! Получает ID объекта в системе ID GetId(); + //! Получает флаги объекта UINT GetFlags(); + //! Устанавливает флаги объекта void SetFlags(UINT f); + //! Получает мировую матрицу трансформации для объекта SMMATRIX GetWorldTM(); + //! Устанавливает вращение объекта virtual void SetOrient(const SMQuaternion & q); + //! Возвращает вращение объекта SMQuaternion GetOrient(); + //! Устанавливает свойство объекта virtual bool SetKV(const char * name, const char * value); + //! Получает свойство объекта virtual bool GetKV(const char * name, char * out, int bufsize); - + //! Устанавливает родительский объект для объекта void SetParent(SXbaseEntity * pEnt, int attachment = -1); + //! Возвращает родительский объект объекта SXbaseEntity * GetParent(); + //! Устанавливает владельца void SetOwner(SXbaseEntity * pEnt); + //! Возвращает владельца объекта SXbaseEntity * GetOwner(); + //! Получает объект менеджера EntityManager * getManager(); //void updateDiscreteLinearVelocity(int step, float dt); @@ -68,38 +108,64 @@ private: protected: EntityManager * m_pMgr; + //! Позиция объекта float3_t m_vPosition; + + /*! Скорость + \note вероятно, не используется + */ float3_t m_vSpeed; + + //! вращение SMQuaternion m_vOrientation; //float3_t m_vDiscreteLinearVelocity; //float3_t m_vOldPosition; - + //! Позиция смещения (для иерархической структуры) float3_t m_vOffsetPos; + //! Вращение смещения (для иерархической структуры) SMQuaternion m_vOffsetOrient; + //! Идентификатор в системе ID m_iId; + //! Флаги UINT m_iFlags; + //! Имя объекта const char * m_szName; + //! Родитель SXbaseEntity * m_pParent; + //! Индекс кости родителя int m_iParentAttachment; + //! Владелец SXbaseEntity * m_pOwner; + //! Вызывается на стадии синхронизации virtual void OnSync(); + //! Вызывается при создании после установки всех свойств virtual void OnPostLoad(); + //! Получает смещение для кости virtual float3 GetAttachmentPos(int id); + //! Получает вращение для кости virtual SMQuaternion GetAttachmentRot(int id); + /*! Устанавливает значение строкового свойства + \note только для внутреннего использования + */ void _SetStrVal(const char ** to, const char * value); + /*! Обновляет выходы + \note только для внутреннего использования + */ void updateOutputs(); }; #pragma warning(pop) #endif + +/*! @} cbaseentity*/ diff --git a/source/game/SXbaseItem.cpp b/source/game/SXbaseItem.cpp index 6472cb428575a169e50ffdd63ec6481999ee4665..2374bca2d7dd859eef66ba7fdb245bc10cb46969 100644 --- a/source/game/SXbaseItem.cpp +++ b/source/game/SXbaseItem.cpp @@ -1,12 +1,21 @@ #include "SXbaseItem.h" +/*! \skydocent base_item +Базовый объект элемента инвентаря игрока +*/ BEGIN_PROPTABLE(SXbaseItem) + //! Имя в инвентаре DEFINE_FIELD_STRING(m_szInvName, PDFF_NOEDIT | PDFF_NOEXPORT, "inv_name", "", EDITOR_NONE) + //! Может ли стакаться DEFINE_FIELD_BOOL(m_bInvStackable, PDFF_NOEDIT | PDFF_NOEXPORT, "inv_stackable", "", EDITOR_NONE) + //! Текущий размер стака DEFINE_FIELD_INT(m_iInvStackCurSize, PDFF_NOEDIT, "inv_stack_cur", "", EDITOR_NONE) + //! Максимальное число объектов в стаке DEFINE_FIELD_INT(m_iInvStackMaxSize, PDFF_NOEDIT | PDFF_NOEXPORT, "inv_stack_max", "", EDITOR_NONE) + //! Масса одного объекта, кг DEFINE_FIELD_FLOAT(m_iInvWeight, PDFF_NOEDIT | PDFF_NOEXPORT, "inv_weight", "", EDITOR_NONE) + //! Можно ли поднимать объект DEFINE_FIELD_BOOL(m_bPickable, PDFF_NOEDIT | PDFF_NOEXPORT, "inv_pickable", "", EDITOR_NONE) END_PROPTABLE() diff --git a/source/game/SXbaseItem.h b/source/game/SXbaseItem.h index 990800eb0815899d83f51376b2315b6ee4c129b4..c0ce2ecd9700ff308ced164761e939461de8b8ce 100644 --- a/source/game/SXbaseItem.h +++ b/source/game/SXbaseItem.h @@ -1,8 +1,24 @@ +/****************************************************** +Copyright © Vitaliy Buturlin, Evgeny Danilovich, 2017 +See the license in LICENSE +******************************************************/ + +/*! +\file +Предметы инвентаря +*/ + +/*! \defgroup cbaseitem Предметы инвентаря +\ingroup cbaseanimating +@{ +*/ + #ifndef _SXbaseItem_H_ #define _SXbaseItem_H_ #include "SXbaseAnimating.h" +//! Базовый класс предмета инвентаря class SXbaseItem: public SXbaseAnimating { DECLARE_CLASS(SXbaseItem, SXbaseAnimating); @@ -10,12 +26,14 @@ class SXbaseItem: public SXbaseAnimating public: DECLARE_CONSTRUCTOR(); - const char * m_szInvName; //!< ���, ������������ � ��������� - bool m_bInvStackable; //!< ����� �� ������� ��������� ������ � ����� ������ - int m_iInvStackCurSize; //!< ���������� ������ � ����� - int m_iInvStackMaxSize; //!< ������������ ���������� ������ � ����� - float m_iInvWeight; //!< ����� ������� - bool m_bPickable; //!< ����� �� ������� ������ + const char * m_szInvName; //!< Имя, отображаемое в инвентаре + bool m_bInvStackable; //!< Можно ли хранить несколько итемов в одной ячейке + int m_iInvStackCurSize; //!< Количество итемов в стеке + int m_iInvStackMaxSize; //!< Максимальное количество итемов в стеке + float m_iInvWeight; //!< Масса объекта + bool m_bPickable; //!< Можно ли поднять объект }; #endif + +//! @} diff --git a/source/game/SXbasePistol.h b/source/game/SXbasePistol.h index b5bf6b2e839954db0f02eeb8d5efa1534dbce3db..7f657933c7d5f50f0c57658e2106e634f7dc8af4 100644 --- a/source/game/SXbasePistol.h +++ b/source/game/SXbasePistol.h @@ -1,6 +1,19 @@ +/****************************************************** +Copyright © Vitaliy Buturlin, Evgeny Danilovich, 2017 +See the license in LICENSE +******************************************************/ + +/*! +\file +Пистолеты +*/ + #ifndef _SXbasePistol_H_ #define _SXbasePistol_H_ +/*! Пистолеты +\ingroup cbaseitem +*/ #include "SXbaseWeapon.h" class SXbasePistol: public SXbaseWeapon diff --git a/source/game/SXbaseRiffle.cpp b/source/game/SXbaseRiffle.cpp index 2b5e4a944d304c68fc8c925151ccbda83f7223d7..1b3c1fc2fc2c82abd066786b347938d7f8b31b03 100644 --- a/source/game/SXbaseRiffle.cpp +++ b/source/game/SXbaseRiffle.cpp @@ -1,5 +1,8 @@ #include "SXbaseRiffle.h" +/*! \skydocent base_riffle +Базовый класс винтовки +*/ BEGIN_PROPTABLE(SXbaseRiffle) // empty diff --git a/source/game/SXbaseRiffle.h b/source/game/SXbaseRiffle.h index ad8eb606a8e0b39a8fdbd3200b9e529aa9ac5c2d..5282cca659a7b5f3cd075f1b15edc0885c5255db 100644 --- a/source/game/SXbaseRiffle.h +++ b/source/game/SXbaseRiffle.h @@ -1,8 +1,21 @@ +/****************************************************** +Copyright © Vitaliy Buturlin, Evgeny Danilovich, 2017 +See the license in LICENSE +******************************************************/ + +/*! +\file +Винтовки +*/ + #ifndef _SXbaseRiffle_H_ #define _SXbaseRiffle_H_ #include "SXbaseWeapon.h" +/*! Винтовки +\ingroup cbaseitem +*/ class SXbaseRiffle: public SXbaseWeapon { DECLARE_CLASS(SXbaseRiffle, SXbaseWeapon); diff --git a/source/game/SXbaseSnipe.h b/source/game/SXbaseSnipe.h index 25c37e2a41d6c178a6ca8a871ef1939ee0d99d06..5345d453fc1a43674434db8f43926f825c232982 100644 --- a/source/game/SXbaseSnipe.h +++ b/source/game/SXbaseSnipe.h @@ -1,8 +1,21 @@ +/****************************************************** +Copyright © Vitaliy Buturlin, Evgeny Danilovich, 2017 +See the license in LICENSE +******************************************************/ + +/*! +\file +Снайперские +*/ + #ifndef _SXbaseSnipe_H_ #define _SXbaseSnipe_H_ #include "SXbaseWeapon.h" +/*! Снайперские +\ingroup cbaseitem +*/ class SXbaseSnipe: public SXbaseWeapon { DECLARE_CLASS(SXbaseSnipe, SXbaseWeapon); diff --git a/source/game/SXbaseSupply.cpp b/source/game/SXbaseSupply.cpp index a5be0064ad75cc6fcea7b8dc229e87b9f1cfd062..0a5429fec37ccd6bf3c100dbc519cd9264359e8d 100644 --- a/source/game/SXbaseSupply.cpp +++ b/source/game/SXbaseSupply.cpp @@ -1,5 +1,8 @@ #include "SXbaseSupply.h" +/*! \skydocent base_supply +Базовый класс припаса (патроны, батарейки, т.д) +*/ BEGIN_PROPTABLE(SXbaseSupply) //empty diff --git a/source/game/SXbaseSupply.h b/source/game/SXbaseSupply.h index 669bdba947bc083d0dcb97b2c98ecae49189751c..5a2f0e19d23b8271973f0ebe316c4064679a53a3 100644 --- a/source/game/SXbaseSupply.h +++ b/source/game/SXbaseSupply.h @@ -1,8 +1,21 @@ +/****************************************************** +Copyright © Vitaliy Buturlin, Evgeny Danilovich, 2017 +See the license in LICENSE +******************************************************/ + +/*! +\file +Базовый класс припаса +*/ + #ifndef _SXbaseSupply_H_ #define _SXbaseSupply_H_ #include "SXbaseItem.h" +/*! Базовый класс припаса (патроны, батарейки, прочие расходники) +\ingroup cbaseitem +*/ class SXbaseSupply: public SXbaseItem { DECLARE_CLASS(SXbaseSupply, SXbaseItem); diff --git a/source/game/SXbaseTool.cpp b/source/game/SXbaseTool.cpp index a3d8282909e7d182ba999a78c7cdd30217f04ad7..9b7ce26c3b5cb59a6fb5c68a97f1630d928c089b 100644 --- a/source/game/SXbaseTool.cpp +++ b/source/game/SXbaseTool.cpp @@ -4,23 +4,41 @@ #include <decals/sxdecals.h> #include "SXplayer.h" +/*! \skydocent base_tool +Базовый класс для инструмента (в т.ч оружие). То, что игрок может взять в руки и использовать +*/ + + BEGIN_PROPTABLE(SXbaseTool) + //! Время перезарядки, с DEFINE_FIELD_FLOAT(m_fReloadTime, PDFF_NOEDIT | PDFF_NOEXPORT, "reload_time", "", EDITOR_NONE) + //! Время прицеливания, с DEFINE_FIELD_FLOAT(m_fZoomTime, PDFF_NOEDIT | PDFF_NOEXPORT, "zoom_time", "", EDITOR_NONE) + //! Смещение визуальной модели DEFINE_FIELD_VECTOR(m_vSlotPos, PDFF_NOEDIT | PDFF_NOEXPORT, "slot_offset", "", EDITOR_NONE) + //! Вращение визуальной модели DEFINE_FIELD_ANGLES(m_qSlotRot, PDFF_NOEDIT | PDFF_NOEXPORT, "slot_rotation", "", EDITOR_NONE) + //! Смещение визуальной модели в прицеливании DEFINE_FIELD_VECTOR(m_vSlotPosAim, PDFF_NOEDIT | PDFF_NOEXPORT, "slot_offset_aim", "", EDITOR_NONE) + //! Вращение визуальной модели в прицеливании DEFINE_FIELD_ANGLES(m_qSlotRotAim, PDFF_NOEDIT | PDFF_NOEXPORT, "slot_rotation_aim", "", EDITOR_NONE) + //! Разрешить прицеливание DEFINE_FIELD_INT(m_iZoomable, PDFF_NOEDIT | PDFF_NOEXPORT, "zoomable", "", EDITOR_NONE) + //! Звук первичного действия DEFINE_FIELD_STRING(m_szPrimaryActionSound, PDFF_NOEDIT | PDFF_NOEXPORT, "action1_sound", "", EDITOR_NONE) + //! Звук вторичного действия DEFINE_FIELD_STRING(m_szSecondaryActionSound, PDFF_NOEDIT | PDFF_NOEXPORT, "action2_sound", "", EDITOR_NONE) + //! Эффект первичного действия DEFINE_FIELD_STRING(m_szPrimaryActionMuzzleflash, PDFF_NOEDIT | PDFF_NOEXPORT, "action1_muzzle", "", EDITOR_NONE) + //! Эффект вторичного действия DEFINE_FIELD_STRING(m_szSecondaryActionMuzzleflash, PDFF_NOEDIT | PDFF_NOEXPORT, "action2_muzzle", "", EDITOR_NONE) + //! Максимальная дальность DEFINE_FIELD_FLOAT(m_fMaxDistance, PDFF_NOEDIT | PDFF_NOEXPORT, "max_distance", "", EDITOR_NONE) + //! Подходящие типы припасов, классы, через запятую DEFINE_FIELD_STRING(m_szUsableAmmos, PDFF_NOEDIT | PDFF_NOEXPORT, "ammos", "", EDITOR_NONE) END_PROPTABLE() diff --git a/source/game/SXbaseTool.h b/source/game/SXbaseTool.h index b69fa9e368bd6d589ceb846d2185410f3fa3f2a5..4a34d6f65b651506cd1bbcdb60ea80433e7a1d10 100644 --- a/source/game/SXbaseTool.h +++ b/source/game/SXbaseTool.h @@ -1,3 +1,13 @@ +/****************************************************** +Copyright © Vitaliy Buturlin, Evgeny Danilovich, 2017 +See the license in LICENSE +******************************************************/ + +/*! +\file +Базовый класс инструмента +*/ + #ifndef _SXbaseTool_H_ #define _SXbaseTool_H_ @@ -16,6 +26,9 @@ enum DSM_PRINT }; +/*! Инструмент +\ingroup cbaseitem +*/ class SXbaseTool: public SXbaseItem { DECLARE_CLASS(SXbaseTool, SXbaseItem); diff --git a/source/game/SXbaseWeapon.cpp b/source/game/SXbaseWeapon.cpp index bfdbdd349519c9f3e9f51f28eec6af67db126193..f68fc039f0bca3aeb6e1c2240d5b9686c66cc79d 100644 --- a/source/game/SXbaseWeapon.cpp +++ b/source/game/SXbaseWeapon.cpp @@ -3,30 +3,53 @@ #include "SXbaseWeapon.h" #include "SXplayer.h" +/*! \skydocent base_weapon +Базовый класс для оружия +*/ + BEGIN_PROPTABLE(SXbaseWeapon) + //! Совместимые прицелы, классы через запятую DEFINE_FIELD_STRING(m_szAddonScopes, PDFF_NOEDIT | PDFF_NOEXPORT, "addon_scopes", "", EDITOR_NONE) + //! Совместимые глушители DEFINE_FIELD_STRING(m_szAddonSilencers, PDFF_NOEDIT | PDFF_NOEXPORT, "addon_silencers", "", EDITOR_NONE) + //! Совместимые магазины DEFINE_FIELD_STRING(m_szAddonMags, PDFF_NOEDIT | PDFF_NOEXPORT, "addon_mags", "", EDITOR_NONE) + //! Совместимые ручки DEFINE_FIELD_STRING(m_szAddonHandlers, PDFF_NOEDIT | PDFF_NOEXPORT, "addon_handlers", "", EDITOR_NONE) + //! Доступные режимы стрельбы DEFINE_FIELD_STRING(m_szFireModes, PDFF_NOEDIT | PDFF_NOEXPORT, "fire_modes", "", EDITOR_NONE) + //! Скорострельность одиночными DEFINE_FIELD_INT(m_iSingleSpeed, PDFF_NOEDIT | PDFF_NOEXPORT, "single_speed", "", EDITOR_NONE) + //! Скорострельность в автоматическом режиме DEFINE_FIELD_INT(m_iBurstSpeed, PDFF_NOEDIT | PDFF_NOEXPORT, "burst_speed", "", EDITOR_NONE) + //! Скорострельность отсечками DEFINE_FIELD_INT(m_iCutoffSpeed, PDFF_NOEDIT | PDFF_NOEXPORT, "cutoff_speed", "", EDITOR_NONE) + //! Патронов в отсечке DEFINE_FIELD_INT(m_iCutoffSize, PDFF_NOEDIT | PDFF_NOEXPORT, "cutoff_size", "", EDITOR_NONE) + //! Текущий режим стрельбы DEFINE_FIELD_INT(m_fireMode, PDFF_NOEDIT, "fire_mode", "", EDITOR_NONE) + //! Звук извлечения DEFINE_FIELD_STRING(m_szSndDraw, PDFF_NOEDIT | PDFF_NOEXPORT, "snd_draw", "", EDITOR_NONE) + //! Звук убирания DEFINE_FIELD_STRING(m_szSndHolster, PDFF_NOEDIT | PDFF_NOEXPORT, "snd_holster", "", EDITOR_NONE) + //! Звук выстрела DEFINE_FIELD_STRING(m_szSndShoot, PDFF_NOEDIT | PDFF_NOEXPORT, "snd_shoot", "", EDITOR_NONE) + //! Звук попытки выстрела без патрона DEFINE_FIELD_STRING(m_szSndEmpty, PDFF_NOEDIT | PDFF_NOEXPORT, "snd_empty", "", EDITOR_NONE) + //! Звук перезарядки DEFINE_FIELD_STRING(m_szSndReload, PDFF_NOEDIT | PDFF_NOEXPORT, "snd_reload", "", EDITOR_NONE) + //! Звук переключения DEFINE_FIELD_STRING(m_szSndSwitch, PDFF_NOEDIT | PDFF_NOEXPORT, "snd_switch", "", EDITOR_NONE) + //! Эффективная дистанция, км DEFINE_FIELD_FLOAT(m_fEffectiveDistance, PDFF_NOEDIT | PDFF_NOEXPORT, "effective_distance", "", EDITOR_NONE) + //! Вместимость патронов без магазина DEFINE_FIELD_INT(m_iCapacity, PDFF_NOEDIT | PDFF_NOEXPORT, "capacity", "", EDITOR_NONE) + //! Текущая загрузка без учета магазина DEFINE_FIELD_INT(m_iCurrentLoad, PDFF_NOEDIT, "current_load", "", EDITOR_NONE) END_PROPTABLE() diff --git a/source/game/SXbaseWeapon.h b/source/game/SXbaseWeapon.h index 4b997cdb38af0af7db135f2001922b7f0016d3dd..7f46533db667e5cc88240bc179587c995b09183d 100644 --- a/source/game/SXbaseWeapon.h +++ b/source/game/SXbaseWeapon.h @@ -1,3 +1,13 @@ +/****************************************************** +Copyright © Vitaliy Buturlin, Evgeny Danilovich, 2017 +See the license in LICENSE +******************************************************/ + +/*! +\file +Базовый класс оружия +*/ + #ifndef _SXbaseWeapon_H_ #define _SXbaseWeapon_H_ @@ -18,7 +28,9 @@ enum FIRE_MODE }; #define FIRE_MODE_COUNT 3 - +/*! Оружие +\ingroup cbaseitem +*/ class SXbaseWeapon: public SXbaseTool { DECLARE_CLASS(SXbaseWeapon, SXbaseTool); diff --git a/source/game/SXplayer.cpp b/source/game/SXplayer.cpp index 91360b0789c2954dd364880fa8098107df759a6a..40a8d7bc9c480829c41e6c45814b38223a342252 100644 --- a/source/game/SXplayer.cpp +++ b/source/game/SXplayer.cpp @@ -7,6 +7,10 @@ #include "GameData.h" +/*! \skydocent player +Объект игрока в мире +*/ + BEGIN_PROPTABLE(SXplayer) // empty END_PROPTABLE() @@ -380,21 +384,21 @@ void SXplayer::OnSync() m_vPosition = (float3)(float3(trans.getOrigin().x(), trans.getOrigin().y() + 0.75f + m_fViewbobY, trans.getOrigin().z()) + m_fViewbobStrafe); - //������� ������� ���� �� ����� �� ������� ��������� ����� + //находим текущий квад аи сетки на котором находится игрок ID idq = SAIG_QuadGet(&float3(m_vPosition.x, m_vPosition.y - (0.75f + m_fViewbobY), m_vPosition.z), true); - //���� ����� + //если нашли if (idq >= 0) { - //�������� ���� ���� + //занимаем этот квад SAIG_QuadSetState(idq, AIQUAD_STATE_TEMPBUSY); SAIG_QuadSetStateWho(idq, GetId()); } - //���� ���������� � ������� ����� �� ��������� + //если предыдущий и текущие квады не идентичны if (m_idQuadCurr != idq) { - //���� ��������� ��� ��������������, ������� ��������� + //если предыдщий был действительным, убираем занятость if (m_idQuadCurr >= 0) SAIG_QuadSetState(m_idQuadCurr, AIQUAD_STATE_FREE); diff --git a/source/game/SXplayer.h b/source/game/SXplayer.h index 701943c04d646db4ae603dfe08cce4b1e5cc4dc0..1abb17615b552b993a3380c520fbe3cb3aa8438f 100644 --- a/source/game/SXplayer.h +++ b/source/game/SXplayer.h @@ -1,3 +1,18 @@ + +/****************************************************** +Copyright © Vitaliy Buturlin, Evgeny Danilovich, 2017 +See the license in LICENSE +******************************************************/ + +/*! +\file +Класс игрока +*/ + +/*! \ingroup cbaseanimating +@{ +*/ + #ifndef _SXplayer_H_ #define _SXplayer_H_ @@ -6,24 +21,26 @@ #include "LightDirectional.h" #include "crosshair.h" -enum +//! Типы движения игрока +enum PLAYER_MOVE { PM_NONE = 0, - PM_FORWARD = 0x01, // ������ - PM_BACKWARD = 0x02, // ����� - PM_LEFT = 0x04, // ����� - PM_RIGHT = 0x08, // ������ - PM_CROUCH = 0x10, // �������� - PM_JUMP = 0x20, // �������� - PM_RUN = 0x40, // ������ - PM_CRAWL = 0x80, // ������ - PM_OBSERVER = 0x100, // ����������� - - PM_STOP = 0xFFFF, + PM_FORWARD = 0x01, //!< вперед + PM_BACKWARD = 0x02, //!< назад + PM_LEFT = 0x04, //!< влево + PM_RIGHT = 0x08, //!< вправо + PM_CROUCH = 0x10, //!< присесть + PM_JUMP = 0x20, //!< прыгнуть + PM_RUN = 0x40, //!< бежать + PM_CRAWL = 0x80, //!< лежать + PM_OBSERVER = 0x100, //!< наблюдатель + + PM_STOP = 0xFFFF }; class SXbaseTool; +//! Класс игрока \ingroup cbaseanimating class SXplayer: public SXbaseAnimating { DECLARE_CLASS(SXplayer, SXbaseAnimating); @@ -32,71 +49,105 @@ public: SXplayer(EntityManager * pMgr); ~SXplayer(); + //! Возвращает камеру игрока SXpointCamera * GetCamera(); + //! Переключает в режим наблюдателя void Observe() { m_uMoveDir |= PM_OBSERVER; m_pCrosshair->Enable(false); } + //! Помещает игрока в мир void Spawn(); + /*! Запускает/останавливает движение в заданном направлении + @param [in] dir направление движения из #PLAYER_MOVE + */ void Move(UINT dir, bool start); + //! Обновляет инпут от игрока virtual void UpdateInput(float dt); void OnSync(); + //! Устанавливает положение в мире void SetPos(const float3 & pos); + //! Запускает/останавливает первичную атаку void Attack(BOOL state); + //! Запускает/останавливает вторичную атаку void Attack2(BOOL state); + //! Запускает перезарядку активного оружия void Reload(); + //! Включает/выключает фонарь void ToggleFlashlight(); + //! Переключает режим стрельбы активного оружия void nextFireMode(); + /*! Возаращает мировую позицию для модели оружия + \note Устарело? + */ float3 GetWeaponOrigin(); + //! Получает смещения для задержки движения модели оружия при вращении игрока float3_t & GetWeaponDeltaAngles(); + //! Команды для подбора положения визуальной модели оружия на экране void _ccmd_slot_on(int argc, const char ** argv); void _ccmd_slot_off(); + //! Получает объект перекрестия Crosshair * GetCrosshair(); + //! Находится ли игрок на земле bool onGround(); + //! Воспроизводит звук шагов с учетом материала на котором стоит игрок void playFootstepsSound(); protected: - + //! Фонарик CLightDirectional* m_flashlight; + //! Камера SXpointCamera * m_pCamera; + //! Текущее движение UINT m_uMoveDir; + //! ID интервала обновления ID m_iUpdIval; + //! Углы вращения игрока float3_t m_vPitchYawRoll; + //! Для физики @{ btCollisionShape * m_pCollideShape; btRigidBody * m_pRigidBody; btPairCachingGhostObject * m_pGhostObject; btKinematicCharacterController * m_pCharacter; + //! @} + //! Текущий инструмент в руках SXbaseTool * m_pActiveTool; + //! Может ли прыгать bool m_canJump; + //! Для качания камеры @{ float m_fViewbobStep; float m_fViewbobY; float3_t m_fViewbobStrafe; float3_t m_vWpnShakeAngles; + //! @} int m_iDSM; + //! Перекрестие Crosshair * m_pCrosshair; - ID m_idQuadCurr; //������� ���� �� ����� �� ������� ����� ����� + ID m_idQuadCurr; //!< текущий квад аи сетки на котором стоит игрок }; #endif + +//! @} diff --git a/source/game/SXplayerSpawn.cpp b/source/game/SXplayerSpawn.cpp index 031a453307dc5eb2753c6667014dc574c527702a..19cf04d906a1789efd125d2981c711850f289a94 100644 --- a/source/game/SXplayerSpawn.cpp +++ b/source/game/SXplayerSpawn.cpp @@ -1,7 +1,13 @@ #include "SXplayerSpawn.h" +/*! \skydocent info_player_spawn +Камера +*/ BEGIN_PROPTABLE(SXplayerSpawn) + /*! Команда игроков, для которой работает спавн. + \note Только для многопользовательского режима + */ DEFINE_FIELD_INT(m_iTeam, 0, "team", "Team", EDITOR_COMBOBOX) COMBO_OPTION("Team 1", "1") COMBO_OPTION("Team 2", "2") diff --git a/source/game/SXplayerSpawn.h b/source/game/SXplayerSpawn.h index 6845820bb951990beb64e28e1ce1edfbc5cbefec..54754dc82944bcd84f94559e5e1956302e6f0d2c 100644 --- a/source/game/SXplayerSpawn.h +++ b/source/game/SXplayerSpawn.h @@ -1,8 +1,24 @@ + +/****************************************************** +Copyright © Vitaliy Buturlin, Evgeny Danilovich, 2017 +See the license in LICENSE +******************************************************/ + +/*! +\file +Точка респауна игрока +*/ + +/*! \ingroup cpointentity +@{ +*/ + #ifndef _SXplayerSpawn_H_ #define _SXplayerSpawn_H_ #include "SXpointEntity.h" +//! Точка респауна игрока class SXplayerSpawn: public SXpointEntity { DECLARE_CLASS(SXplayerSpawn, SXpointEntity); @@ -14,3 +30,5 @@ public: }; #endif + +//! @} diff --git a/source/game/SXpointCamera.cpp b/source/game/SXpointCamera.cpp index ae32dd8453082c2c45fe73f20447decea4a402c6..09456528ed3f0d9249fe636c22f217eb411e2e12 100644 --- a/source/game/SXpointCamera.cpp +++ b/source/game/SXpointCamera.cpp @@ -1,5 +1,8 @@ #include "SXpointCamera.h" +/*! \skydocent point_camera +Камера +*/ BEGIN_PROPTABLE(SXpointCamera) // empty diff --git a/source/game/SXpointCamera.h b/source/game/SXpointCamera.h index bfb0056882e56ba0183b6ce06edb76c42ad5aea9..e6419c7c48b1d3b8623db0044c815c8301f221d2 100644 --- a/source/game/SXpointCamera.h +++ b/source/game/SXpointCamera.h @@ -1,3 +1,18 @@ + +/****************************************************** +Copyright © Vitaliy Buturlin, Evgeny Danilovich, 2017 +See the license in LICENSE +******************************************************/ + +/*! +\file +Камера игровая +*/ + +/*! \ingroup cpointentity +@{ +*/ + #ifndef _SXpointCamera_H_ #define _SXpointCamera_H_ @@ -5,6 +20,7 @@ #include "SXpointEntity.h" +//! Класс камеры class SXpointCamera: public SXpointEntity { DECLARE_CLASS(SXpointCamera, SXpointEntity); @@ -13,6 +29,7 @@ public: SXpointCamera(EntityManager * pMgr); ~SXpointCamera(); + //! Возвращает объект камеры из графической либы ISXCamera * GetCamera(); protected: @@ -22,3 +39,5 @@ protected: }; #endif + +/*! @} */ diff --git a/source/game/SXpointEntity.cpp b/source/game/SXpointEntity.cpp index 13fb3cfc57538947ed7a9ac00cdaef8c21a6e42c..426563818654bf666bdef6aa4c82dce23348235d 100644 --- a/source/game/SXpointEntity.cpp +++ b/source/game/SXpointEntity.cpp @@ -1,5 +1,8 @@ #include "SXpointEntity.h" +/*! \skydocent base_point +Базовый точечный объект +*/ BEGIN_PROPTABLE(SXpointEntity) // empty diff --git a/source/game/SXpointEntity.h b/source/game/SXpointEntity.h index 30e557e981773f3b37d8089762b121574c91c2e2..cd8ddccbd9de524047e622cd8efa215a851276de 100644 --- a/source/game/SXpointEntity.h +++ b/source/game/SXpointEntity.h @@ -1,8 +1,27 @@ + +/****************************************************** +Copyright © Vitaliy Buturlin, Evgeny Danilovich, 2017 +See the license in LICENSE +******************************************************/ + +/*! +\file +Точечные объекты +*/ + +/*! \defgroup cpointentity Точечные объекты +\ingroup cbaseentity +@{ +*/ + +//! \defgroup clight Свет + #ifndef _SXpointEntity_H_ #define _SXpointEntity_H_ #include "SXbaseEntity.h" +//! Класс точечного объекта class SXpointEntity: public SXbaseEntity { DECLARE_CLASS(SXpointEntity, SXbaseEntity); @@ -12,3 +31,6 @@ public: }; #endif + +/*! @} cpointentity */ + diff --git a/source/game/sxgame.h b/source/game/sxgame.h index 41f37d56a92d3cf8aa0d4e5d48a38456e34c63a9..bda10081e47b16a5a79a416ad307a045efdc404e 100644 --- a/source/game/sxgame.h +++ b/source/game/sxgame.h @@ -1,18 +1,153 @@ /****************************************************** -Copyright � Vitaliy Buturlin, Evgeny Danilovich, 2017 +Copyright © Vitaliy Buturlin, Evgeny Danilovich, 2017 See the license in LICENSE ******************************************************/ /*! \file -������������ ���� sxgame - ���������� ������� �������� +Заголовочный файл sxgame - библиотека игровых объектов */ -/*! \defgroup sxgame sxgame - ���������� ������� �������� -@{ + +/*! + \page game_doc Игровая библиотека + В основе игровой библиотеки лежит понятие "объект". Каждый объект обладает набором свойств, которые можно настраивать. Для взаимодействия объектов между собой используются связи. + + \subpage game_connections + + \par Подкатегории + - \subpage ent_doc */ +/*! +\page game_connections Соединения +Соединения используются для осуществления связи между различными объектами. Каждое соединение состоит из двух частей: выхода и входа. Выход - некий сигнал, генерируемый объектом. Вход - функция другого объекта, которая меняет его состояние. Любой выход может быть связан с любым входом с помощью редактора соединений в редакторе уровня.\n +Для создания соединения нужно выбрать выход, имя целевого объекта, его вход, задержку и параметр.\n +Любой выход может быть связан с любым количеством входов любых обхектов.\n +Задержка - определяет, через какое время выбранный вход будет активирован.\n +*/ + +/*! \page ent_doc Игровые объекты + + \subpage base_entity + + \par Подкатегории + - \subpage entcat_point + - \subpage entcat_prop +*/ + +/*! \page entcat_point Точечные объекты + + \subpage base_point + + \par Объекты + - \subpage func_train + - \subpage info_player_spawn + - \subpage point_camera + - \subpage path_corner + + \par Подкатегории + - \subpage entcat_light +*/ + +/*! \page entcat_prop С моделью + + \subpage base_animating + + \par Объекты + - \subpage player + - \ref npc_base + - \ref base_item + + \par Подкатегории + - \subpage entcat_trigger + - \subpage entcat_npc + - \subpage entcat_items +*/ + +/*! \page entcat_items Для инвентаря + + \subpage base_item + + \par Объекты + - \subpage base_ammobox + - \ref base_supply + - \ref base_tool + - \ref base_wpn_addon + + \par Подкатегории + - \subpage entcat_supply + - \subpage entcat_tools + - \subpage entcat_wpn_addons +*/ + +/*! \page entcat_tools Инструменты + + \subpage base_tool + + \par Объекты + - \ref base_weapon + + \par Подкатегории + - \subpage entcat_weapon + +*/ + +/*! \page entcat_weapon Оружие + + \subpage base_weapon + + \par Объекты + - \subpage base_riffle +*/ + +/*! \page entcat_wpn_addons Навесы к оружию + + \subpage base_wpn_addon + + \par Объекты + - \subpage base_silencer + - \subpage base_scope + - \subpage base_mag + - \subpage base_handle + +*/ + +/*! \page entcat_supply Припасы + + \subpage base_supply + + \par Объекты + - \subpage base_ammo + +*/ + +/*! \page entcat_npc NPC + + \subpage npc_base + + \par Объекты + - \subpage npc_zombie + +*/ + +/*! \page entcat_light Свет + + \par Объекты + - \subpage light_directional + - \subpage light_point +*/ + +/*! \page entcat_trigger Триггеры + + \par Объекты + - \subpage trigger +*/ + +/*! \defgroup sxgame sxgame - библиотека игровых объектов +@{ +*/ #ifndef _SXGAME_H_ #define _SXGAME_H_ @@ -35,43 +170,43 @@ See the license in LICENSE #include "SXbaseEntity.h" -/*! �������������� ���������� +/*! Инициализирует библиотеку */ SX_LIB_API void SXGame_0Create(); -/*! ���������������� ���������� +/*! Деинициализирует библиотеку */ SX_LIB_API void SXGame_AKill(); -/*! ������������� ������� ��������� +/*! Устанавливает функцию сообщений */ SX_LIB_API void SXGame_Dbg_Set(report_func rf); -/*! ������������� ���������� ������� ���������� +/*! Устанавливает количество потоков обновления */ SX_LIB_API void SXGame_UpdateSetThreadNum(int num); -/*! ��������� ���������� -@param[in] thread ����� ������, ������������ ���������� +/*! Выполняет обновление +@param[in] thread Номер потока, выполняющего обновление */ SX_LIB_API void SXGame_Update(int thread = 0); -/*! ��������� �������������. ��� �������������� ���������� +/*! Выполняет синхронизацию. Для многопоточного обновления */ SX_LIB_API void SXGame_Sync(); -/*! ��������� ������ entity �� ����� +/*! Загружает список entity из файла */ SX_LIB_API void SXGame_LoadEnts(const char * file); -/*! �������� ������� ������� ������ */ +/*! Выгрузка игровых объеков уровня */ SX_LIB_API void SXGame_UnloadObjLevel(); -/*! ��������� ������� � ���� +/*! Сохраняет объекты в файл */ SX_LIB_API void SXGame_SaveEnts(const char * file); -/*! �������� ������ � ��� +/*! Помещает игрока в мир */ SX_LIB_API void SXGame_PlayerSpawn(); @@ -82,42 +217,45 @@ SX_LIB_API void SXGame_EditorRender(ID id, ID id_sel_tex); SX_LIB_API ISXCamera * SXGame_GetActiveCamera(); -/*! �������� ���������� ������������������ ������� entity +/*! Получает количество зарегистрированных классов entity */ SX_LIB_API int SXGame_EntGetClassListCount(); -/*! �������� ������ ������������������ ������� entity. - ������ ��� ������ const char * ������ ���� �������� ������� +/*! Получает список зарегистрированных классов entity. + Память под массив const char * должна быть выделена заранее */ SX_LIB_API void SXGame_EntGetClassList(const char ** pszClassList, int count); -/*! ������� entity ��������� ������ +/*! Создает entity заданного класса */ SX_LIB_API SXbaseEntity * SXGame_CreateEntity(const char * classname); -/*! ���������� entity +/*! Уничтожает entity */ SX_LIB_API void SXGame_RemoveEntity(SXbaseEntity * pEnt); -/*! �������� ������� ������� ��� ��������� ������ +/*! Получает таблицу свойств для заданного класса */ SX_LIB_API proptable_t * SXGame_EntGetProptable(const char * classname); -/*! �������� �������� �������� �� ��������� ��� ��������� ������ +/*! Получает значение свойства по умолчанию для заданного класса */ SX_LIB_API const char * SXGame_EntGetDefault(const char * classname, const char * key); -/*! ���������� ���� entity +/*! Количество всех entity */ SX_LIB_API int SXGame_EntGetCount(); -/*! ���������� entity �� ��� id +/*! Возвращает entity по его id */ SX_LIB_API SXbaseEntity *SXGame_EntGet(ID id); SX_LIB_API SXbaseEntity *SXGame_EntGetByName(const char *szName, ID idStart = 0); + + #endif /*! @} sxgame*/ + diff --git a/source/physics/PhyWorld.cpp b/source/physics/PhyWorld.cpp index 22d380828822d292b0015aa3a5ccb8a1cc0dd276..19b342a7366ab3b62e3175200190255214891f35 100644 --- a/source/physics/PhyWorld.cpp +++ b/source/physics/PhyWorld.cpp @@ -394,6 +394,7 @@ void PhyWorld::UnloadGeom() } mem_delete(cshape); } + m_iGreenShapes = 0; mem_delete_a(m_piGreenTotal); mem_delete_a(m_pppGreenStaticRigidBody); mem_delete_a(m_ppGreenStaticCollideShape); diff --git a/source/skyxengine.cpp b/source/skyxengine.cpp index 5f9f40ccb6b0a4ba17222704ef0258862a461861..d47e21fced25fe981c7547a62e666f26421f20e6 100644 --- a/source/skyxengine.cpp +++ b/source/skyxengine.cpp @@ -122,7 +122,7 @@ void SkyXEngine_Init(HWND hWnd3D, HWND hWndParent3D) else { hWnd3DCurr = hWnd3D; - + RECT rect; GetClientRect(hWnd3DCurr, &rect); @@ -377,7 +377,7 @@ void SkyXEngine_CreateLoadCVar() Core_0RegisterCVarBool("g_time_run", true, "Запущено ли игрвоое время?"); Core_0RegisterCVarFloat("g_time_speed", 1.f, "Скорость/соотношение течения игрового времени"); - + Core_0RegisterCVarFloat("env_default_rain_density", 1.f, "Коэфициент плотности дождя (0,1]"); Core_0RegisterCVarBool("env_default_thunderbolt", true, "Могут ли воспроизводится эффекты молнии?"); diff --git a/source/sxconsole/sxconsole.cpp b/source/sxconsole/sxconsole.cpp index c057409a78035e4fa8f55166c8a6e0881838fc7a..7f49561984126196da7636cf4f9ba333e30c130e 100644 --- a/source/sxconsole/sxconsole.cpp +++ b/source/sxconsole/sxconsole.cpp @@ -700,9 +700,9 @@ BOOL WINAPI HandlerRoutine( int main(int argc, char ** argv) { + SetConsoleOutputCP(CP_UTF8); g_pColor = new ColorPrint(); g_hStdOut = GetStdHandle(STD_OUTPUT_HANDLE); - SetConsoleOutputCP(CP_UTF8); CONSOLE_SCREEN_BUFFER_INFO csbi; GetConsoleScreenBufferInfo(g_hStdOut, &csbi); diff --git a/source/sxleveleditor/SXLevelEditor.rc b/source/sxleveleditor/SXLevelEditor.rc index e306a9ed31163b85ae3229b022e644b7cc5be060..2ed336701a8f94dc4f4a05639c3a8e19d0c58dfd 100644 Binary files a/source/sxleveleditor/SXLevelEditor.rc and b/source/sxleveleditor/SXLevelEditor.rc differ