Создание логической сущности/Код
This article needs more links to other articles to help integrate it into the encyclopedia. Please help improve this article by adding links that are relevant to the context within the existing text.
January 2024
January 2024
//===== Copyright © 1996-2005, Valve Corporation, All rights reserved. ========
//
// Назначение: Простая логическая сущность со счетчиком
// посылающая команды на output при достижении порога.
//
//=============================================================================
#include "cbase.h"
class CMyLogicalEntity : public CLogicalEntity
{
public:
DECLARE_CLASS( CMyLogicalEntity, CLogicalEntity );
DECLARE_DATADESC();
// Конструктор
CMyLogicalEntity ()
{
m_nCounter = 0;
}
// Input функция
void InputTick( inputdata_t &inputData );
private:
int m_nThreshold; // Пороговое значение, по достижению которого активируется output
int m_nCounter; // Внутренний счётчик
COutputEvent m_OnThreshold; // Output событие, когда счётчик достигает порогового значения
};
LINK_ENTITY_TO_CLASS( my_logical_entity, CMyLogicalEntity );
// Начало описания наших данных для класса
BEGIN_DATADESC( CMyLogicalEntity )
// Для сохранения/загрузки
DEFINE_FIELD( m_nCounter, FIELD_INTEGER ),
// Связывает наши переменные с ключевыми значениями из Hammer
DEFINE_KEYFIELD( m_nThreshold, FIELD_INTEGER, "threshold" ),
// Связывает наше input название из Hammer с нашей input функцией
DEFINE_INPUTFUNC( FIELD_VOID, "Tick", InputTick ),
// Связывает наш ouput с output названием, используемым Hammer
DEFINE_OUTPUT( m_OnThreshold, "OnThreshold" ),
END_DATADESC()
//-----------------------------------------------------------------------------
// Назначение: Обработка входящих значений (tick input) от других сущностей
//-----------------------------------------------------------------------------
void CMyLogicalEntity::InputTick( inputdata_t &inputData )
{
// Увеличение нашего счетчика
m_nCounter++;
// Проверяем достиг ли счетчик порогового значения
if ( m_nCounter >= m_nThreshold )
{
// Запуск output события
m_OnThreshold.FireOutput( inputData.pActivator, this );
// Сбрасывание нашего счетчика
m_nCounter = 0;
}
}