mirror of
https://github.com/openmoh/openmohaa.git
synced 2025-04-28 13:47:58 +03:00
Optimized calls to Event() (avoid allocating a new Event when it can be reused)
This commit is contained in:
parent
47a3c0bf55
commit
c5a46be23e
16 changed files with 195 additions and 146 deletions
|
@ -120,7 +120,7 @@ bool UConnection::SendEvent
|
|||
ptr = m_listeners.ObjectAt( i );
|
||||
if( ptr )
|
||||
{
|
||||
Event *e = new Event( m_events.ObjectAt( i ) );
|
||||
Event *e = new Event( *m_events.ObjectAt( i ) );
|
||||
|
||||
for( j = 1; j < numargs; j++ )
|
||||
{
|
||||
|
|
|
@ -72,9 +72,7 @@ void VehicleCollisionEntity::EventDamage
|
|||
Event *ev
|
||||
)
|
||||
{
|
||||
Event *event = new Event( ev );
|
||||
|
||||
m_pOwner->ProcessEvent( event );
|
||||
m_pOwner->ProcessEvent(*ev);
|
||||
}
|
||||
|
||||
void VehicleCollisionEntity::Solid
|
||||
|
|
|
@ -765,19 +765,19 @@ void FuncBeam::Activate
|
|||
}
|
||||
|
||||
void FuncBeam::UpdateEndpoint
|
||||
(
|
||||
Event *ev
|
||||
)
|
||||
(
|
||||
Event* ev
|
||||
)
|
||||
|
||||
{
|
||||
if ( end )
|
||||
{
|
||||
Event *ev1 = new Event( ev );
|
||||
{
|
||||
if (end)
|
||||
{
|
||||
Event* ev1 = new Event(std::move(*ev));
|
||||
|
||||
VectorCopy( end->origin, edict->s.origin2 );
|
||||
PostEvent( ev1, level.frametime );
|
||||
}
|
||||
}
|
||||
VectorCopy(end->origin, edict->s.origin2);
|
||||
PostEvent(ev1, level.frametime);
|
||||
}
|
||||
}
|
||||
|
||||
void FuncBeam::UpdateOrigin
|
||||
(
|
||||
|
@ -786,8 +786,8 @@ void FuncBeam::UpdateOrigin
|
|||
|
||||
{
|
||||
if ( origin_target )
|
||||
{
|
||||
Event *ev1 = new Event( ev );
|
||||
{
|
||||
Event* ev1 = new Event(std::move(*ev));
|
||||
|
||||
setOrigin( origin_target->centroid );
|
||||
PostEvent( ev1, level.frametime );
|
||||
|
|
|
@ -630,7 +630,7 @@ void Door::DoorBlocked(Event *ev)
|
|||
|
||||
assert(master);
|
||||
if ((master) && (master != this)) {
|
||||
master->ProcessEvent(new Event(ev));
|
||||
master->ProcessEvent(*ev);
|
||||
return;
|
||||
}
|
||||
|
||||
|
|
|
@ -3076,7 +3076,7 @@ void Entity::Sink(Event *ev)
|
|||
}
|
||||
|
||||
if (target < myalpha) {
|
||||
Event *event = new Event(ev);
|
||||
Event *event = new Event(std::move(*ev));
|
||||
PostEvent(event, FRAMETIME);
|
||||
}
|
||||
|
||||
|
|
|
@ -190,8 +190,7 @@ void LODMaster::PassEvent
|
|||
ScriptError( "No LOD Model" );
|
||||
}
|
||||
|
||||
Event *event = new Event( ev );
|
||||
m_current->ProcessEvent( event );
|
||||
m_current->ProcessEvent(*ev);
|
||||
}
|
||||
|
||||
CLASS_DECLARATION( Animate, LODSlave, "lodslave" )
|
||||
|
|
|
@ -2964,7 +2964,7 @@ void Player::Killed(Event *ev)
|
|||
// Custom killed event will do the job
|
||||
//
|
||||
if (m_pKilledEvent) {
|
||||
event = new Event(m_pKilledEvent);
|
||||
event = new Event(*m_pKilledEvent);
|
||||
for (int i = 1; i <= ev->NumArgs(); i++) {
|
||||
event->AddValue(ev->GetValue(i));
|
||||
}
|
||||
|
|
|
@ -538,7 +538,7 @@ void Player::LogStats(Event *ev)
|
|||
// FIXME: FS
|
||||
gi.FS_Flush(logfile);
|
||||
|
||||
Event *ev1 = new Event(ev);
|
||||
Event *ev1 = new Event(std::move(*ev));
|
||||
PostEvent(ev1, 1);
|
||||
}
|
||||
|
||||
|
|
|
@ -175,12 +175,10 @@ void ScriptTimer::Disable()
|
|||
|
||||
void ScriptTimer::Enable()
|
||||
{
|
||||
bEnabled = true;
|
||||
bEnabled = true;
|
||||
|
||||
CancelEventsOfType( &EV_ScriptTimer_Think );
|
||||
|
||||
Event *ev = new Event( &EV_ScriptTimer_Think );
|
||||
ProcessEvent( ev );
|
||||
CancelEventsOfType(EV_ScriptTimer_Think);
|
||||
ProcessEvent(EV_ScriptTimer_Think);
|
||||
}
|
||||
|
||||
qboolean ScriptTimer::Done()
|
||||
|
|
|
@ -1016,7 +1016,7 @@ void TouchField::SendEvent(Event *ev)
|
|||
|
||||
// Check if our owner is still around
|
||||
if (owner) {
|
||||
event = new Event(ontouch);
|
||||
event = new Event(*ontouch);
|
||||
event->AddEntity(ev->GetEntity(1));
|
||||
owner->PostEvent(event, delay);
|
||||
} else {
|
||||
|
|
|
@ -421,20 +421,18 @@ void VehicleTurretGun::EventKilled(Event *ev)
|
|||
|
||||
void VehicleTurretGun::EventDamage(Event *ev)
|
||||
{
|
||||
Event *event = new Event(ev);
|
||||
|
||||
if (owner) {
|
||||
owner->ProcessEvent(event);
|
||||
owner->ProcessEvent(*ev);
|
||||
return;
|
||||
}
|
||||
|
||||
if (m_pVehicleOwner) {
|
||||
m_pVehicleOwner->ProcessEvent(event);
|
||||
m_pVehicleOwner->ProcessEvent(*ev);
|
||||
return;
|
||||
}
|
||||
|
||||
if (!m_bUseRemoteControl) {
|
||||
DamageEvent(event);
|
||||
DamageEvent(ev);
|
||||
return;
|
||||
}
|
||||
|
||||
|
@ -442,7 +440,7 @@ void VehicleTurretGun::EventDamage(Event *ev)
|
|||
Player *player = (Player *)m_pRemoteOwner.Pointer();
|
||||
|
||||
if (player->m_pVehicle) {
|
||||
player->m_pVehicle->ProcessEvent(event);
|
||||
player->m_pVehicle->ProcessEvent(*ev);
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -537,8 +537,7 @@ void ViewMaster::PassEvent
|
|||
viewthing = ( Viewthing * )( ( Entity * )current_viewthing );
|
||||
if ( viewthing )
|
||||
{
|
||||
event = new Event( ev );
|
||||
viewthing->ProcessEvent( event );
|
||||
viewthing->ProcessEvent( *ev );
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -3572,8 +3572,7 @@ void Weapon::WeaponSound(Event *ev)
|
|||
}
|
||||
|
||||
if (owner) {
|
||||
e = new Event(ev);
|
||||
owner->ProcessEvent(e);
|
||||
owner->ProcessEvent(*ev);
|
||||
} else {
|
||||
Item::BroadcastAIEvent(AI_EVENT_WEAPON_FIRE);
|
||||
}
|
||||
|
|
|
@ -1787,6 +1787,20 @@ void Event::LoadEvents()
|
|||
}
|
||||
}
|
||||
|
||||
/*
|
||||
=======================
|
||||
Event
|
||||
=======================
|
||||
*/
|
||||
Event::Event()
|
||||
{
|
||||
fromScript = false;
|
||||
eventnum = 0;
|
||||
data = NULL;
|
||||
dataSize = 0;
|
||||
maxDataSize = 0;
|
||||
}
|
||||
|
||||
/*
|
||||
=======================
|
||||
Event
|
||||
|
@ -1823,79 +1837,6 @@ Event::Event
|
|||
eventnum = 0;
|
||||
}
|
||||
|
||||
/*
|
||||
=======================
|
||||
~Event
|
||||
=======================
|
||||
*/
|
||||
Event::~Event()
|
||||
{
|
||||
Clear();
|
||||
}
|
||||
|
||||
/*
|
||||
=======================
|
||||
Event
|
||||
=======================
|
||||
*/
|
||||
Event::Event()
|
||||
{
|
||||
fromScript = false;
|
||||
eventnum = 0;
|
||||
data = NULL;
|
||||
dataSize = 0;
|
||||
maxDataSize = 0;
|
||||
}
|
||||
|
||||
/*
|
||||
=======================
|
||||
ErrorInternal
|
||||
=======================
|
||||
*/
|
||||
void Event::ErrorInternal( Listener *l, str text ) const
|
||||
{
|
||||
str classname;
|
||||
str eventname;
|
||||
|
||||
EVENT_DPrintf( "^~^~^ Game" );
|
||||
|
||||
classname = l->getClassname();
|
||||
eventname = getName();
|
||||
|
||||
EVENT_DPrintf( " (Event: '%s', Object: '%s') : %s\n", eventname.c_str(), classname.c_str(), text.c_str() );
|
||||
}
|
||||
|
||||
/*
|
||||
=======================
|
||||
Event
|
||||
=======================
|
||||
*/
|
||||
Event::Event( const Event *ev )
|
||||
{
|
||||
fromScript = ev->fromScript;
|
||||
eventnum = ev->eventnum;
|
||||
dataSize = ev->dataSize;
|
||||
maxDataSize = ev->maxDataSize;
|
||||
|
||||
if( dataSize )
|
||||
{
|
||||
data = new ScriptVariable[ dataSize ];
|
||||
|
||||
for( int i = 0; i < dataSize; i++ )
|
||||
{
|
||||
data[ i ] = ev->data[ i ];
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
data = NULL;
|
||||
}
|
||||
|
||||
#ifdef _DEBUG
|
||||
name = ev->name;
|
||||
#endif
|
||||
}
|
||||
|
||||
/*
|
||||
=======================
|
||||
Event
|
||||
|
@ -1903,30 +1844,44 @@ Event
|
|||
*/
|
||||
Event::Event( const Event &ev )
|
||||
{
|
||||
fromScript = ev.fromScript;
|
||||
eventnum = ev.eventnum;
|
||||
fromScript = ev.fromScript;
|
||||
eventnum = ev.eventnum;
|
||||
dataSize = ev.dataSize;
|
||||
maxDataSize = ev.maxDataSize;
|
||||
|
||||
if( dataSize )
|
||||
{
|
||||
data = new ScriptVariable[ dataSize ];
|
||||
if (dataSize)
|
||||
{
|
||||
data = new ScriptVariable[dataSize];
|
||||
|
||||
for( int i = 0; i < dataSize; i++ )
|
||||
{
|
||||
data[ i ] = ev.data[ i ];
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
data = NULL;
|
||||
}
|
||||
for (int i = 0; i < dataSize; i++)
|
||||
{
|
||||
data[i] = ev.data[i];
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
data = NULL;
|
||||
}
|
||||
|
||||
#ifdef _DEBUG
|
||||
name = ev.name;
|
||||
name = ev.name;
|
||||
#endif
|
||||
}
|
||||
|
||||
Event::Event(Event&& ev)
|
||||
{
|
||||
fromScript = ev.fromScript;
|
||||
eventnum = ev.eventnum;
|
||||
dataSize = ev.dataSize;
|
||||
maxDataSize = ev.maxDataSize;
|
||||
data = ev.data;
|
||||
|
||||
ev.data = NULL;
|
||||
ev.dataSize = 0;
|
||||
ev.maxDataSize = 0;
|
||||
ev.eventnum = 0;
|
||||
}
|
||||
|
||||
/*
|
||||
=======================
|
||||
Event
|
||||
|
@ -1971,6 +1926,31 @@ Event::Event(int index, int numArgs)
|
|||
=======================
|
||||
Event
|
||||
|
||||
Initializes the event with the specified command
|
||||
=======================
|
||||
*/
|
||||
Event::Event(const char* command)
|
||||
{
|
||||
eventnum = FindEventNum(command);
|
||||
if (!eventnum)
|
||||
{
|
||||
EVENT_DPrintf("^~^~^ Event '%s' does not exist.\n", command);
|
||||
}
|
||||
|
||||
fromScript = qfalse;
|
||||
maxDataSize = 0;
|
||||
dataSize = 0;
|
||||
data = NULL;
|
||||
|
||||
#ifdef _DEBUG
|
||||
name = command;
|
||||
#endif
|
||||
}
|
||||
|
||||
/*
|
||||
=======================
|
||||
Event
|
||||
|
||||
Initializes the event with the specified command
|
||||
=======================
|
||||
*/
|
||||
|
@ -1998,6 +1978,80 @@ Event::Event(const char* command, int numArgs)
|
|||
#endif
|
||||
}
|
||||
|
||||
/*
|
||||
=======================
|
||||
~Event
|
||||
=======================
|
||||
*/
|
||||
Event::~Event()
|
||||
{
|
||||
Clear();
|
||||
}
|
||||
|
||||
Event& Event::operator=(const Event& ev)
|
||||
{
|
||||
Clear();
|
||||
fromScript = ev.fromScript;
|
||||
eventnum = ev.eventnum;
|
||||
dataSize = ev.dataSize;
|
||||
maxDataSize = ev.maxDataSize;
|
||||
|
||||
if (dataSize)
|
||||
{
|
||||
data = new ScriptVariable[dataSize];
|
||||
|
||||
for (int i = 0; i < dataSize; i++)
|
||||
{
|
||||
data[i] = ev.data[i];
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
data = NULL;
|
||||
}
|
||||
|
||||
#ifdef _DEBUG
|
||||
name = ev.name;
|
||||
#endif
|
||||
|
||||
return *this;
|
||||
}
|
||||
|
||||
Event& Event::operator=(Event&& ev)
|
||||
{
|
||||
Clear();
|
||||
fromScript = ev.fromScript;
|
||||
eventnum = ev.eventnum;
|
||||
dataSize = ev.dataSize;
|
||||
maxDataSize = ev.maxDataSize;
|
||||
data = ev.data;
|
||||
|
||||
ev.data = NULL;
|
||||
ev.dataSize = 0;
|
||||
ev.maxDataSize = 0;
|
||||
ev.eventnum = 0;
|
||||
|
||||
return *this;
|
||||
}
|
||||
|
||||
/*
|
||||
=======================
|
||||
ErrorInternal
|
||||
=======================
|
||||
*/
|
||||
void Event::ErrorInternal(Listener* l, str text) const
|
||||
{
|
||||
str classname;
|
||||
str eventname;
|
||||
|
||||
EVENT_DPrintf("^~^~^ Game");
|
||||
|
||||
classname = l->getClassname();
|
||||
eventname = getName();
|
||||
|
||||
EVENT_DPrintf(" (Event: '%s', Object: '%s') : %s\n", eventname.c_str(), classname.c_str(), text.c_str());
|
||||
}
|
||||
|
||||
/*
|
||||
=======================
|
||||
AddContainer
|
||||
|
|
|
@ -330,22 +330,26 @@ public:
|
|||
void operator delete( void *ptr );
|
||||
#endif
|
||||
|
||||
Event();
|
||||
Event( const Event *ev );
|
||||
Event( const Event &ev );
|
||||
Event( int index );
|
||||
Event( int index, int numArgs );
|
||||
Event( const char* command, int numArgs = 0 );
|
||||
Event
|
||||
(
|
||||
const char *command,
|
||||
int flags,
|
||||
const char *formatspec, // Arguments are : 'e' (Entity) 'v' (Vector) 'i' (Integer) 'f' (Float) 's' (String) 'b' (Boolean).
|
||||
// Uppercase arguments means optional.
|
||||
const char *argument_names,
|
||||
const char *documentation,
|
||||
uchar type = EV_NORMAL
|
||||
);
|
||||
Event();
|
||||
Event(const Event& ev);
|
||||
Event(Event&& ev);
|
||||
Event(int index);
|
||||
Event(int index, int numArgs);
|
||||
Event(const char* command);
|
||||
Event(const char* command, int numArgs);
|
||||
Event
|
||||
(
|
||||
const char* command,
|
||||
int flags,
|
||||
const char* formatspec, // Arguments are : 'e' (Entity) 'v' (Vector) 'i' (Integer) 'f' (Float) 's' (String) 'b' (Boolean).
|
||||
// Uppercase arguments means optional.
|
||||
const char* argument_names,
|
||||
const char* documentation,
|
||||
byte type = EV_NORMAL
|
||||
);
|
||||
|
||||
Event& operator=(const Event& ev);
|
||||
Event& operator=(Event&& ev);
|
||||
|
||||
~Event();
|
||||
|
||||
|
|
|
@ -57,7 +57,7 @@ class ScriptCommandEvent : public Event
|
|||
{
|
||||
public:
|
||||
ScriptCommandEvent(unsigned int eventNum);
|
||||
ScriptCommandEvent(unsigned int eventNum, size_t numArgs);
|
||||
ScriptCommandEvent(unsigned int eventNum, int numArgs);
|
||||
};
|
||||
|
||||
ScriptCommandEvent::ScriptCommandEvent(unsigned int eventNum)
|
||||
|
@ -66,8 +66,8 @@ ScriptCommandEvent::ScriptCommandEvent(unsigned int eventNum)
|
|||
fromScript = true;
|
||||
}
|
||||
|
||||
ScriptCommandEvent::ScriptCommandEvent(unsigned int eventNum, size_t numArgs)
|
||||
: Event(eventNum)
|
||||
ScriptCommandEvent::ScriptCommandEvent(unsigned int eventNum, int numArgs)
|
||||
: Event(eventNum, numArgs)
|
||||
{
|
||||
fromScript = true;
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue