Создание логической сущности/Код

From Valve Developer Community
Jump to: navigation, search
Underlinked - Logo.png
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
//===== 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;
	}
}

См. Также