Commit bce693d2 authored by D-AIRY's avatar D-AIRY

docs; bugfixes

parent 2439b8d4
......@@ -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
......@@ -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
......@@ -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
......
cd ..
doxygen\skydoc_preprocessor.exe ..\..\source\game\ents_doc.h ..\..\source\game\
doxygen\doxygen.exe Doxyfile
pause
\ No newline at end of file
......@@ -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
#include "BaseHandle.h"
/*! \skydocent base_handle
Базовый класс ручки
*/
BEGIN_PROPTABLE(CBaseHandle)
//empty
END_PROPTABLE()
......
/******************************************************
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
#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()
......
/******************************************************
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);
......
#include "BaseScope.h"
/*! \skydocent base_scope
Базовый класс прицела
*/
BEGIN_PROPTABLE(CBaseScope)
//empty
END_PROPTABLE()
......
/******************************************************
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
#include "BaseSilencer.h"
/*! \skydocent base_silencer
Базовый класс глушителя
*/
BEGIN_PROPTABLE(CBaseSilencer)
//empty
END_PROPTABLE()
......
/******************************************************
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
......@@ -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);
}
......
/******************************************************
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 */
#include "BaseWeaponAddon.h"
/*! \skydocent base_wpn_addon
Базовый класс навеса
*/
BEGIN_PROPTABLE(CBaseWeaponAddon)
//empty
END_PROPTABLE()
......
/******************************************************
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;
};
......
......@@ -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;
......
#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;
};
......
#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()
......
/******************************************************
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;
};
......
......@@ -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()
......
/******************************************************
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);
......
......@@ -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()
......
/******************************************************
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);
......
#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());
//
//просчитываем время хождения по пути до сетки