Kamay Xutax
14717d8092
Prediction is fixed by me by adding two more functions in prediction class, there had before some issues because starttouch/endtouch weren't predicted. The result is that with lag, it restores touched entities, including the triggers touched entity list.
87 lines
No EOL
2.5 KiB
C++
87 lines
No EOL
2.5 KiB
C++
#include "cbase.h"
|
|
#include "c_entityinput.h"
|
|
|
|
//-----------------------------------------------------------------------------
|
|
// C_MultiInputVar implementation
|
|
//
|
|
// Purpose: holds a list of inputs and their ID tags
|
|
// used for entities that hold inputs from a set of other entities
|
|
//-----------------------------------------------------------------------------
|
|
|
|
|
|
//-----------------------------------------------------------------------------
|
|
// Purpose: destructor, frees the data list
|
|
//-----------------------------------------------------------------------------
|
|
C_MultiInputVar::~C_MultiInputVar()
|
|
{
|
|
if ( m_InputList )
|
|
{
|
|
while ( m_InputList->next != NULL )
|
|
{
|
|
inputitem_t *input = m_InputList->next;
|
|
m_InputList->next = input->next;
|
|
delete input;
|
|
}
|
|
delete m_InputList;
|
|
}
|
|
}
|
|
|
|
//-----------------------------------------------------------------------------
|
|
// Purpose: Updates the data set with a new value
|
|
// Input : newVal - the new value to add to or update in the list
|
|
// outputID - the source of the value
|
|
//-----------------------------------------------------------------------------
|
|
void C_MultiInputVar::AddValue( variant_t newVal, int outputID )
|
|
{
|
|
// see if it's already in the list
|
|
inputitem_t *inp;
|
|
for ( inp = m_InputList; inp != NULL; inp = inp->next )
|
|
{
|
|
// already in list, so just update this link
|
|
if ( inp->outputID == outputID )
|
|
{
|
|
inp->value = newVal;
|
|
return;
|
|
}
|
|
}
|
|
|
|
// add to start of list
|
|
inp = new inputitem_t;
|
|
inp->value = newVal;
|
|
inp->outputID = outputID;
|
|
if ( !m_InputList )
|
|
{
|
|
m_InputList = inp;
|
|
inp->next = NULL;
|
|
}
|
|
else
|
|
{
|
|
inp->next = m_InputList;
|
|
m_InputList = inp;
|
|
}
|
|
}
|
|
|
|
#include "tier0/memdbgoff.h"
|
|
|
|
//-----------------------------------------------------------------------------
|
|
// Purpose: allocates memory from the entitylist pool
|
|
//-----------------------------------------------------------------------------
|
|
void *C_MultiInputVar::inputitem_t::operator new( size_t stAllocateBlock )
|
|
{
|
|
return g_EntityListPool.Alloc( stAllocateBlock );
|
|
}
|
|
|
|
void *C_MultiInputVar::inputitem_t::operator new( size_t stAllocateBlock, int nBlockUse, const char *pFileName, int nLine )
|
|
{
|
|
return g_EntityListPool.Alloc( stAllocateBlock );
|
|
}
|
|
|
|
//-----------------------------------------------------------------------------
|
|
// Purpose: frees memory from the entitylist pool
|
|
//-----------------------------------------------------------------------------
|
|
void C_MultiInputVar::inputitem_t::operator delete( void *pMem )
|
|
{
|
|
g_EntityListPool.Free( pMem );
|
|
}
|
|
|
|
#include "tier0/memdbgon.h" |