Eliminate .mreg section
- Member variables are now declared all in one place: InitThingdef(). They are not partially defined in thingdef_expression.cpp and further refined in actor.txt. - This left ParseNativeVariable() parsing only functions, so it has been renamed to ParseNativeFunction(). - Note that their declarations in InitThingdef() are expected to be temporary.
This commit is contained in:
parent
1e7cce5a2c
commit
8cb269388e
10 changed files with 69 additions and 241 deletions
|
|
@ -46,7 +46,6 @@
|
|||
|
||||
static TArray<FPropertyInfo*> properties;
|
||||
static TArray<AFuncDesc> AFTable;
|
||||
static TArray<FVariableInfo*> variables;
|
||||
|
||||
//==========================================================================
|
||||
//
|
||||
|
|
@ -533,42 +532,6 @@ AFuncDesc *FindFunction(const char * string)
|
|||
}
|
||||
|
||||
|
||||
//==========================================================================
|
||||
//
|
||||
// Find a variable by name using a binary search
|
||||
//
|
||||
//==========================================================================
|
||||
|
||||
FVariableInfo *FindVariable(const char * string, const PClass *cls)
|
||||
{
|
||||
int min = 0, max = variables.Size()-1;
|
||||
|
||||
while (min <= max)
|
||||
{
|
||||
int mid = (min + max) / 2;
|
||||
int lexval;
|
||||
|
||||
if (cls < *variables[mid]->owner) lexval = -1;
|
||||
else if (cls > *variables[mid]->owner) lexval = 1;
|
||||
else lexval = stricmp (string, variables[mid]->name);
|
||||
|
||||
if (lexval == 0)
|
||||
{
|
||||
return variables[mid];
|
||||
}
|
||||
else if (lexval > 0)
|
||||
{
|
||||
min = mid + 1;
|
||||
}
|
||||
else
|
||||
{
|
||||
max = mid - 1;
|
||||
}
|
||||
}
|
||||
return NULL;
|
||||
}
|
||||
|
||||
|
||||
//==========================================================================
|
||||
//
|
||||
// Find an action function in AActor's table
|
||||
|
|
@ -602,15 +565,6 @@ static int STACK_ARGS funccmp(const void * a, const void * b)
|
|||
return stricmp( ((AFuncDesc*)a)->Name, ((AFuncDesc*)b)->Name);
|
||||
}
|
||||
|
||||
static int STACK_ARGS varcmp(const void * a, const void * b)
|
||||
{
|
||||
FVariableInfo *A = *(FVariableInfo**)a;
|
||||
FVariableInfo *B = *(FVariableInfo**)b;
|
||||
if (A->owner < B->owner) return -1;
|
||||
if (A->owner > B->owner) return 1;
|
||||
return stricmp(A->name, B->name);
|
||||
}
|
||||
|
||||
//==========================================================================
|
||||
//
|
||||
// Initialization
|
||||
|
|
@ -654,17 +608,39 @@ void InitThingdef()
|
|||
qsort(&AFTable[0], AFTable.Size(), sizeof(AFTable[0]), funccmp);
|
||||
}
|
||||
|
||||
// Create a sorted list of native variables
|
||||
if (variables.Size() == 0)
|
||||
{
|
||||
FAutoSegIterator probe(MRegHead, MRegTail);
|
||||
|
||||
while (*++probe != NULL)
|
||||
{
|
||||
variables.Push((FVariableInfo *)*probe);
|
||||
}
|
||||
variables.ShrinkToFit();
|
||||
qsort(&variables[0], variables.Size(), sizeof(variables[0]), varcmp);
|
||||
}
|
||||
// Define some member variables we feel like exposing to the user
|
||||
PSymbolTable &symt = RUNTIME_CLASS(AActor)->Symbols;
|
||||
PType *array5 = NewArray(TypeSInt32, 5);
|
||||
symt.AddSymbol(new PField(NAME_Alpha, TypeFixed, VARF_Native, myoffsetof(AActor,alpha)));
|
||||
symt.AddSymbol(new PField(NAME_Angle, TypeAngle, VARF_Native, myoffsetof(AActor,angle)));
|
||||
symt.AddSymbol(new PField(NAME_Args, array5, VARF_Native, myoffsetof(AActor,args)));
|
||||
symt.AddSymbol(new PField(NAME_CeilingZ, TypeFixed, VARF_Native, myoffsetof(AActor,ceilingz)));
|
||||
symt.AddSymbol(new PField(NAME_FloorZ, TypeFixed, VARF_Native, myoffsetof(AActor,floorz)));
|
||||
symt.AddSymbol(new PField(NAME_Health, TypeSInt32, VARF_Native, myoffsetof(AActor,health)));
|
||||
symt.AddSymbol(new PField(NAME_Mass, TypeSInt32, VARF_Native, myoffsetof(AActor,Mass)));
|
||||
symt.AddSymbol(new PField(NAME_Pitch, TypeAngle, VARF_Native, myoffsetof(AActor,pitch)));
|
||||
symt.AddSymbol(new PField(NAME_Roll, TypeAngle, VARF_Native, myoffsetof(AActor,roll)));
|
||||
symt.AddSymbol(new PField(NAME_Special, TypeSInt32, VARF_Native, myoffsetof(AActor,special)));
|
||||
symt.AddSymbol(new PField(NAME_TID, TypeSInt32, VARF_Native, myoffsetof(AActor,tid)));
|
||||
symt.AddSymbol(new PField(NAME_TIDtoHate, TypeSInt32, VARF_Native, myoffsetof(AActor,TIDtoHate)));
|
||||
symt.AddSymbol(new PField(NAME_WaterLevel, TypeSInt32, VARF_Native, myoffsetof(AActor,waterlevel)));
|
||||
symt.AddSymbol(new PField(NAME_X, TypeFixed, VARF_Native, myoffsetof(AActor,x)));
|
||||
symt.AddSymbol(new PField(NAME_Y, TypeFixed, VARF_Native, myoffsetof(AActor,y)));
|
||||
symt.AddSymbol(new PField(NAME_Z, TypeFixed, VARF_Native, myoffsetof(AActor,z)));
|
||||
symt.AddSymbol(new PField(NAME_VelX, TypeFixed, VARF_Native, myoffsetof(AActor,velx)));
|
||||
symt.AddSymbol(new PField(NAME_VelY, TypeFixed, VARF_Native, myoffsetof(AActor,vely)));
|
||||
symt.AddSymbol(new PField(NAME_VelZ, TypeFixed, VARF_Native, myoffsetof(AActor,velz)));
|
||||
symt.AddSymbol(new PField(NAME_MomX, TypeFixed, VARF_Native, myoffsetof(AActor,velx)));
|
||||
symt.AddSymbol(new PField(NAME_MomY, TypeFixed, VARF_Native, myoffsetof(AActor,vely)));
|
||||
symt.AddSymbol(new PField(NAME_MomZ, TypeFixed, VARF_Native, myoffsetof(AActor,velz)));
|
||||
symt.AddSymbol(new PField(NAME_ScaleX, TypeFixed, VARF_Native, myoffsetof(AActor,scaleX)));
|
||||
symt.AddSymbol(new PField(NAME_ScaleY, TypeFixed, VARF_Native, myoffsetof(AActor,scaleY)));
|
||||
symt.AddSymbol(new PField(NAME_Score, TypeSInt32, VARF_Native, myoffsetof(AActor,Score)));
|
||||
symt.AddSymbol(new PField(NAME_Accuracy, TypeSInt32, VARF_Native, myoffsetof(AActor,accuracy)));
|
||||
symt.AddSymbol(new PField(NAME_Stamina, TypeSInt32, VARF_Native, myoffsetof(AActor,stamina)));
|
||||
symt.AddSymbol(new PField(NAME_Height, TypeFixed, VARF_Native, myoffsetof(AActor,height)));
|
||||
symt.AddSymbol(new PField(NAME_Radius, TypeFixed, VARF_Native, myoffsetof(AActor,radius)));
|
||||
symt.AddSymbol(new PField(NAME_ReactionTime,TypeSInt32, VARF_Native, myoffsetof(AActor,reactiontime)));
|
||||
symt.AddSymbol(new PField(NAME_MeleeRange, TypeFixed, VARF_Native, myoffsetof(AActor,meleerange)));
|
||||
symt.AddSymbol(new PField(NAME_Speed, TypeFixed, VARF_Native, myoffsetof(AActor,Speed)));
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue