diff --git a/src/game/server/mapbase/logic_eventlistener.cpp b/src/game/server/mapbase/point_event.cpp similarity index 70% rename from src/game/server/mapbase/logic_eventlistener.cpp rename to src/game/server/mapbase/point_event.cpp index c7c65d86..77da929d 100644 --- a/src/game/server/mapbase/logic_eventlistener.cpp +++ b/src/game/server/mapbase/point_event.cpp @@ -1,14 +1,7 @@ //========= Mapbase - https://github.com/mapbase-source/source-sdk-2013 ==== // -// Purpose: Source SDK-based replication of logic_eventlistener from later versions -// of Source. -// -// This is based entirely on Source 2013 code and Portal 2's FGD entry. -// It does not actually use code from Portal 2 or later. -// -// UPDATE FEBRUARY 2025: The real logic_eventlistener is now available. -// Thie file only remains to support point_event. -// TODO: Merge all CLogicEvenListener functions into CPointEvent +// Purpose: An expanded version of logic_eventlistener that allows event data +// to be passed directly to I/O. // //============================================================================= @@ -18,143 +11,20 @@ // memdbgon must be the last include file in a .cpp file!!! #include "tier0/memdbgon.h" -class CLogicEventListener2 : public CPointEntity, - public CGameEventListener -{ -public: - DECLARE_CLASS( CLogicEventListener2, CPointEntity ); - - CLogicEventListener2(); - - void Activate(); - virtual void ListenForEvents(); - - bool KeyValue(const char *szKeyName, const char *szValue); - - virtual void FireGameEvent( IGameEvent *event ); - - // Input handlers - void InputEnable( inputdata_t &inputdata ); - void InputDisable( inputdata_t &inputdata ); - void InputToggle( inputdata_t &inputdata ); - - DECLARE_DATADESC(); - - string_t m_iszEventName; - - // Outputs - COutputEvent m_OnEventFired; - -protected: - - bool m_bDisabled; -}; - -// This has been deprecated by the real logic_eventlistener -//LINK_ENTITY_TO_CLASS(logic_eventlistener, CLogicEventListener); - - -BEGIN_DATADESC( CLogicEventListener2 ) - - DEFINE_KEYFIELD(m_iszEventName, FIELD_STRING, "EventName"), - DEFINE_KEYFIELD(m_bDisabled, FIELD_BOOLEAN, "StartDisabled"), - - // Inputs - DEFINE_INPUTFUNC(FIELD_VOID, "Enable", InputEnable), - DEFINE_INPUTFUNC(FIELD_VOID, "Disable", InputDisable), - DEFINE_INPUTFUNC(FIELD_VOID, "Toggle", InputToggle), - - // Outputs - DEFINE_OUTPUT(m_OnEventFired, "OnEventFired"), - -END_DATADESC() - - - -//----------------------------------------------------------------------------- -// Purpose: Constructor. -//----------------------------------------------------------------------------- -CLogicEventListener2::CLogicEventListener2(void) -{ -} - -//----------------------------------------------------------------------------- -// Purpose: -//----------------------------------------------------------------------------- -void CLogicEventListener2::Activate() -{ - BaseClass::Activate(); - ListenForEvents(); -} - -//----------------------------------------------------------------------------- -// Purpose: -//----------------------------------------------------------------------------- -void CLogicEventListener2::ListenForEvents() -{ - ListenForGameEvent(STRING(m_iszEventName)); -} - -//----------------------------------------------------------------------------- -// Purpose: -//----------------------------------------------------------------------------- -bool CLogicEventListener2::KeyValue(const char *szKeyName, const char *szValue) -{ - if (FStrEq(szKeyName, "IsEnabled")) - { - m_bDisabled = !FStrEq(szValue, "0"); - } - else - return BaseClass::KeyValue(szKeyName, szValue); - - return true; -} - -//----------------------------------------------------------------------------- -// Purpose: called when a game event is fired -//----------------------------------------------------------------------------- -void CLogicEventListener2::FireGameEvent( IGameEvent *event ) -{ - if (m_bDisabled) - return; - - m_OnEventFired.FireOutput(this, this); -} - -//------------------------------------------------------------------------------ -// Purpose: Turns on the entity, allowing it to fire outputs. -//------------------------------------------------------------------------------ -void CLogicEventListener2::InputEnable( inputdata_t &inputdata ) -{ - m_bDisabled = false; -} - -//------------------------------------------------------------------------------ -// Purpose: Turns off the entity, preventing it from firing outputs. -//------------------------------------------------------------------------------ -void CLogicEventListener2::InputDisable( inputdata_t &inputdata ) -{ - m_bDisabled = true; -} - -//------------------------------------------------------------------------------ -// Purpose: Toggles the enabled/disabled state of the entity. -//------------------------------------------------------------------------------ -void CLogicEventListener2::InputToggle( inputdata_t &inputdata ) -{ - m_bDisabled = !m_bDisabled; -} - - #define POINT_EVENT_NUM_VALUES 8 -class CPointEvent : public CLogicEventListener2 +class CPointEvent : public CPointEntity, + public CGameEventListener { public: - DECLARE_CLASS( CPointEvent, CLogicEventListener2 ); + DECLARE_CLASS( CPointEvent, CPointEntity ); CPointEvent(); + void Activate(); + + bool KeyValue( const char *szKeyName, const char *szValue ); + string_t m_KeyNames[POINT_EVENT_NUM_VALUES]; void ListenForEvents(); @@ -162,15 +32,25 @@ public: void FireGameEvent( IGameEvent *event ); // Input handlers + void InputEnable( inputdata_t &inputdata ); + void InputDisable( inputdata_t &inputdata ); + void InputToggle( inputdata_t &inputdata ); void InputSetAllEvents( inputdata_t &inputdata ); void InputAddEvent( inputdata_t &inputdata ); //void InputRemoveEvent( inputdata_t &inputdata ); DECLARE_DATADESC(); + string_t m_iszEventName; + // Outputs + COutputEvent m_OnEventFired; COutputString m_OutEventName; COutputString m_OutValue[POINT_EVENT_NUM_VALUES]; + +protected: + + bool m_bDisabled; }; LINK_ENTITY_TO_CLASS(point_event, CPointEvent); @@ -188,11 +68,15 @@ BEGIN_DATADESC( CPointEvent ) DEFINE_KEYFIELD(m_KeyNames[7], FIELD_STRING, "KeyName08"), // Inputs + DEFINE_INPUTFUNC(FIELD_VOID, "Enable", InputEnable), + DEFINE_INPUTFUNC(FIELD_VOID, "Disable", InputDisable), + DEFINE_INPUTFUNC(FIELD_VOID, "Toggle", InputToggle), DEFINE_INPUTFUNC(FIELD_STRING, "SetAllEvents", InputSetAllEvents), DEFINE_INPUTFUNC(FIELD_STRING, "AddEvent", InputAddEvent), //DEFINE_INPUTFUNC(FIELD_STRING, "RemoveEvent", InputRemoveEvent), // Outputs + DEFINE_OUTPUT(m_OnEventFired, "OnEventFired"), DEFINE_OUTPUT(m_OutEventName, "OutEventName"), DEFINE_OUTPUT(m_OutValue[0], "OutValue01"), DEFINE_OUTPUT(m_OutValue[1], "OutValue02"), @@ -212,6 +96,30 @@ CPointEvent::CPointEvent(void) { } +//----------------------------------------------------------------------------- +// Purpose: +//----------------------------------------------------------------------------- +void CPointEvent::Activate() +{ + BaseClass::Activate(); + ListenForEvents(); +} + +//----------------------------------------------------------------------------- +// Purpose: +//----------------------------------------------------------------------------- +bool CPointEvent::KeyValue(const char *szKeyName, const char *szValue) +{ + if (FStrEq(szKeyName, "IsEnabled")) + { + m_bDisabled = !FStrEq(szValue, "0"); + } + else + return BaseClass::KeyValue(szKeyName, szValue); + + return true; +} + //----------------------------------------------------------------------------- // Purpose: //----------------------------------------------------------------------------- @@ -234,8 +142,8 @@ void CPointEvent::FireGameEvent( IGameEvent *event ) { if (m_bDisabled) return; - - BaseClass::FireGameEvent(event); + + m_OnEventFired.FireOutput(this, this); m_OutEventName.Set(AllocPooledString(event->GetName()), this, this); for (int i = 0; i < POINT_EVENT_NUM_VALUES; i++) @@ -248,6 +156,30 @@ void CPointEvent::FireGameEvent( IGameEvent *event ) } } +//------------------------------------------------------------------------------ +// Purpose: Turns on the entity, allowing it to fire outputs. +//------------------------------------------------------------------------------ +void CPointEvent::InputEnable( inputdata_t &inputdata ) +{ + m_bDisabled = false; +} + +//------------------------------------------------------------------------------ +// Purpose: Turns off the entity, preventing it from firing outputs. +//------------------------------------------------------------------------------ +void CPointEvent::InputDisable( inputdata_t &inputdata ) +{ + m_bDisabled = true; +} + +//------------------------------------------------------------------------------ +// Purpose: Toggles the enabled/disabled state of the entity. +//------------------------------------------------------------------------------ +void CPointEvent::InputToggle( inputdata_t &inputdata ) +{ + m_bDisabled = !m_bDisabled; +} + //------------------------------------------------------------------------------ // Purpose: //------------------------------------------------------------------------------ diff --git a/src/game/server/server_mapbase.vpc b/src/game/server/server_mapbase.vpc index b39bd401..d631a82c 100644 --- a/src/game/server/server_mapbase.vpc +++ b/src/game/server/server_mapbase.vpc @@ -88,7 +88,7 @@ $Project $File "mapbase\variant_tools.h" $File "mapbase\vgui_text_display.cpp" - $File "mapbase\logic_eventlistener.cpp" + $File "mapbase\point_event.cpp" $File "mapbase\logic_register_activator.cpp" } }