mirror of
https://github.com/jmarshall23/DoomRTX.git
synced 2026-08-19 04:04:54 +02:00
Fixed x64 script/class connections and added material flags that are needed.
This commit is contained in:
@@ -12,7 +12,6 @@ instancing of objects.
|
||||
|
||||
#include "../Game_local.h"
|
||||
|
||||
|
||||
/***********************************************************************
|
||||
|
||||
idTypeInfo
|
||||
@@ -882,7 +881,7 @@ idClass::ProcessEventArgs
|
||||
bool idClass::ProcessEventArgs( const idEventDef *ev, int numargs, ... ) {
|
||||
idTypeInfo *c;
|
||||
int num;
|
||||
int data[ D_EVENT_MAXARGS ];
|
||||
intptr_t data[ D_EVENT_MAXARGS ];
|
||||
va_list args;
|
||||
|
||||
assert( ev );
|
||||
@@ -990,106 +989,89 @@ bool idClass::ProcessEvent( const idEventDef *ev, idEventArg arg1, idEventArg ar
|
||||
idClass::ProcessEventArgPtr
|
||||
================
|
||||
*/
|
||||
bool idClass::ProcessEventArgPtr( const idEventDef *ev, int *data ) {
|
||||
idTypeInfo *c;
|
||||
bool idClass::ProcessEventArgPtr( const idEventDef *ev, intptr_t*data ) {
|
||||
idTypeInfo* c;
|
||||
int num;
|
||||
eventCallback_t callback;
|
||||
|
||||
assert( ev );
|
||||
assert( idEvent::initialized );
|
||||
|
||||
if ( g_debugTriggers.GetBool() && ( ev == &EV_Activate ) && IsType( idEntity::Type ) ) {
|
||||
const idEntity *ent = *reinterpret_cast<idEntity **>( data );
|
||||
gameLocal.Printf( "%d: '%s' activated by '%s'\n", gameLocal.framenum, static_cast<idEntity *>( this )->GetName(), ent ? ent->GetName() : "NULL" );
|
||||
assert(ev);
|
||||
assert(idEvent::initialized);
|
||||
if (g_debugTriggers.GetBool() && (ev == &EV_Activate) && IsType(idEntity::Type)) {
|
||||
const idEntity* ent = *reinterpret_cast<idEntity**>(data);
|
||||
gameLocal.Printf("%d: '%s' activated by '%s'\n", gameLocal.framenum, static_cast<idEntity*>(this)->GetName(), ent ? ent->GetName() : "NULL");
|
||||
}
|
||||
|
||||
c = GetType();
|
||||
num = ev->GetEventNum();
|
||||
if ( !c->eventMap[ num ] ) {
|
||||
if (!c->eventMap[num]) {
|
||||
// we don't respond to this event, so ignore it
|
||||
return false;
|
||||
}
|
||||
|
||||
callback = c->eventMap[ num ];
|
||||
|
||||
#if !CPU_EASYARGS
|
||||
|
||||
/*
|
||||
on ppc architecture, floats are passed in a seperate set of registers
|
||||
the function prototypes must have matching float declaration
|
||||
|
||||
http://developer.apple.com/documentation/DeveloperTools/Conceptual/MachORuntime/2rt_powerpc_abi/chapter_9_section_5.html
|
||||
*/
|
||||
|
||||
switch( ev->GetFormatspecIndex() ) {
|
||||
case 1 << D_EVENT_MAXARGS :
|
||||
( this->*callback )();
|
||||
callback = c->eventMap[num];
|
||||
// RB: I tried first to get CPU_EASYARGS switch running with x86_64
|
||||
// but it caused many crashes with the Doom scripts.
|
||||
// The new Callbacks.cpp was generated with intptr_t and it works fine.
|
||||
#if CPU_EASYARGS
|
||||
/*
|
||||
on ppc architecture, floats are passed in a separate set of registers
|
||||
the function prototypes must have matching float declaration
|
||||
http://developer.apple.com/documentation/DeveloperTools/Conceptual/MachORuntime/2rt_powerpc_abi/chapter_9_section_5.html
|
||||
*/
|
||||
switch (ev->GetFormatspecIndex())
|
||||
{
|
||||
case 1 << D_EVENT_MAXARGS:
|
||||
(this->*callback)();
|
||||
break;
|
||||
|
||||
// generated file - see CREATE_EVENT_CODE
|
||||
// generated file - see CREATE_EVENT_CODE
|
||||
#include "Callbacks.cpp"
|
||||
|
||||
default:
|
||||
gameLocal.Warning( "Invalid formatspec on event '%s'", ev->GetName() );
|
||||
gameLocal.Warning("Invalid formatspec on event '%s'", ev->GetName());
|
||||
break;
|
||||
}
|
||||
|
||||
#else
|
||||
|
||||
assert( D_EVENT_MAXARGS == 8 );
|
||||
|
||||
switch( ev->GetNumArgs() ) {
|
||||
case 0 :
|
||||
( this->*callback )();
|
||||
assert(D_EVENT_MAXARGS == 8);
|
||||
// RB: 64 bit fixes, changed int to intptr_t
|
||||
switch (ev->GetNumArgs())
|
||||
{
|
||||
case 0:
|
||||
(this->*callback)();
|
||||
break;
|
||||
|
||||
case 1 :
|
||||
typedef void ( idClass::*eventCallback_1_t )( const int );
|
||||
( this->*( eventCallback_1_t )callback )( data[ 0 ] );
|
||||
case 1:
|
||||
typedef void (idClass::* eventCallback_1_t)(const intptr_t);
|
||||
(this->*(eventCallback_1_t)callback)(data[0]);
|
||||
break;
|
||||
|
||||
case 2 :
|
||||
typedef void ( idClass::*eventCallback_2_t )( const int, const int );
|
||||
( this->*( eventCallback_2_t )callback )( data[ 0 ], data[ 1 ] );
|
||||
case 2:
|
||||
typedef void (idClass::* eventCallback_2_t)(const intptr_t, const intptr_t);
|
||||
(this->*(eventCallback_2_t)callback)(data[0], data[1]);
|
||||
break;
|
||||
|
||||
case 3 :
|
||||
typedef void ( idClass::*eventCallback_3_t )( const int, const int, const int );
|
||||
( this->*( eventCallback_3_t )callback )( data[ 0 ], data[ 1 ], data[ 2 ] );
|
||||
case 3:
|
||||
typedef void (idClass::* eventCallback_3_t)(const intptr_t, const intptr_t, const intptr_t);
|
||||
(this->*(eventCallback_3_t)callback)(data[0], data[1], data[2]);
|
||||
break;
|
||||
|
||||
case 4 :
|
||||
typedef void ( idClass::*eventCallback_4_t )( const int, const int, const int, const int );
|
||||
( this->*( eventCallback_4_t )callback )( data[ 0 ], data[ 1 ], data[ 2 ], data[ 3 ] );
|
||||
case 4:
|
||||
typedef void (idClass::* eventCallback_4_t)(const intptr_t, const intptr_t, const intptr_t, const intptr_t);
|
||||
(this->*(eventCallback_4_t)callback)(data[0], data[1], data[2], data[3]);
|
||||
break;
|
||||
|
||||
case 5 :
|
||||
typedef void ( idClass::*eventCallback_5_t )( const int, const int, const int, const int, const int );
|
||||
( this->*( eventCallback_5_t )callback )( data[ 0 ], data[ 1 ], data[ 2 ], data[ 3 ], data[ 4 ] );
|
||||
case 5:
|
||||
typedef void (idClass::* eventCallback_5_t)(const intptr_t, const intptr_t, const intptr_t, const intptr_t, const intptr_t);
|
||||
(this->*(eventCallback_5_t)callback)(data[0], data[1], data[2], data[3], data[4]);
|
||||
break;
|
||||
|
||||
case 6 :
|
||||
typedef void ( idClass::*eventCallback_6_t )( const int, const int, const int, const int, const int, const int );
|
||||
( this->*( eventCallback_6_t )callback )( data[ 0 ], data[ 1 ], data[ 2 ], data[ 3 ], data[ 4 ], data[ 5 ] );
|
||||
case 6:
|
||||
typedef void (idClass::* eventCallback_6_t)(const intptr_t, const intptr_t, const intptr_t, const intptr_t, const intptr_t, const intptr_t);
|
||||
(this->*(eventCallback_6_t)callback)(data[0], data[1], data[2], data[3], data[4], data[5]);
|
||||
break;
|
||||
|
||||
case 7 :
|
||||
typedef void ( idClass::*eventCallback_7_t )( const int, const int, const int, const int, const int, const int, const int );
|
||||
( this->*( eventCallback_7_t )callback )( data[ 0 ], data[ 1 ], data[ 2 ], data[ 3 ], data[ 4 ], data[ 5 ], data[ 6 ] );
|
||||
case 7:
|
||||
typedef void (idClass::* eventCallback_7_t)(const intptr_t, const intptr_t, const intptr_t, const intptr_t, const intptr_t, const intptr_t, const intptr_t);
|
||||
(this->*(eventCallback_7_t)callback)(data[0], data[1], data[2], data[3], data[4], data[5], data[6]);
|
||||
break;
|
||||
|
||||
case 8 :
|
||||
typedef void ( idClass::*eventCallback_8_t )( const int, const int, const int, const int, const int, const int, const int, const int );
|
||||
( this->*( eventCallback_8_t )callback )( data[ 0 ], data[ 1 ], data[ 2 ], data[ 3 ], data[ 4 ], data[ 5 ], data[ 6 ], data[ 7 ] );
|
||||
case 8:
|
||||
typedef void (idClass::* eventCallback_8_t)(const intptr_t, const intptr_t, const intptr_t, const intptr_t, const intptr_t, const intptr_t, const intptr_t, const intptr_t);
|
||||
(this->*(eventCallback_8_t)callback)(data[0], data[1], data[2], data[3], data[4], data[5], data[6], data[7]);
|
||||
break;
|
||||
|
||||
default:
|
||||
gameLocal.Warning( "Invalid formatspec on event '%s'", ev->GetName() );
|
||||
gameLocal.Warning("Invalid formatspec on event '%s'", ev->GetName());
|
||||
break;
|
||||
}
|
||||
|
||||
// RB end
|
||||
#endif
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user