在本教程的上半部分,我们学习了VPC的基本工作以及将消息打印到开发人员控制台。
在本教程的这一部分中,我们将分析实体系统,学习如何创建类,以及创建我们的第一个逻辑实体。
再次条款
概要或实体(entity)-在主要对象级别。
I / O系统是一个设计用于实体相互“通信”的系统。
输入是用于更改实体行为的命令。有时玩家会通过控制台或输出调用它。
输出(输出)-实体状态更改时调用的事件。
一般来说,它如何运作?
Source中的任何级别都是一组实体。
在每个级别上,至少有一个称为的实体worldspawn
。实际上,这个本质是整个“实体”世界,即:
- 原始物又名刷子-立方体,球,拱形等
- 所谓的位移(disps,
掌柜) — , ( CS:GO !) . , "" . - (
prop_static
).prop_dynamic
, .
( !) .
:
- — , .
- — , .
/Hammer: displacement , (vbsp)!
— , . !
, logic_auto
.
logic_5 —
, .
logic_5.cpp
.
, :src/game/server/logic_5.cpp
.
:
// cbase.h - . // . #include "cbase.h" // memdbgon.h - new delete // memdbgon must be the last include file in a .cpp file!!! #include "tier0/memdbgon.h"
CLogicFive
CLogicEntity
:
class CLogicFive : public CLogicEntity { DECLARE_CLASS( CLogicFive, CLogicEntity ); public: // ... private: // ... };
-! DECLARE_CLASS()? , . —
ThisClass
BaseClass
( ...).
public
:
public: DECLARE_DATADESC(); void Input_Tick( inputdata_t &id );
?
DECLARE_DATADESC()
, .void Input_Tick( inputdata_t &id )
,tick
.
private
:
private: int m_iTicks = 0;
" "
logic_5
.
( !) —LINK_ENTITY_TO_CLASS()
!
:
// ... int m_iTicks = 0; }; LINK_ENTITY_TO_CLASS( logic_5, CLogicFive );
, 4:
BEGIN_DATADESC( CLogicFive ) DEFINE_FIELD( m_iTicks, FIELD_INTEGER ), // DEFINE_INPUTFUNC( FIELD_VOID, "tick", Input_Tick ), // END_DATADESC();
BEGIN_DATADESC()
— , .DEFINE_FIELD()
— , . , !DEFINE_INPUTFUNC()
— , . (FIELD_VOID
),tick
Input_Tick
.END_DATADESC()
— , .
Input_Tick
:
// tick() void CLogicFive::Input_Tick( inputdata_t &id ) { m_iTicks++; if( m_iTicks % 5 == 0 ) // , ! ConColorMsg( Color( 255, 255, 0 ), "logic_five: Another fifth tick!\n" ); }
[] VPC :
// src/game/server/server_episodic.vpc // - $Folder "Source Files" $File "$SRCDIR/game/server/logic_5.cpp
, , .
logic_5 —
- (
sdk_vehicles
dm_lockdown
, ) - :
ent_create logic_5
-
tick
:
ent_fire logic_5 tick
- ( ) !
?
[ , ] :
- -
?
Valve Hammer Editor FGD .
, , .