801 lines
20 KiB
C
801 lines
20 KiB
C
/* ÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ
|
|
File: OBJS.C
|
|
|
|
Notes: Genric Object Server
|
|
|
|
Author: G Robert Liddon @ The Park
|
|
|
|
Created: Wednesday 5th April, 1995
|
|
|
|
Copyright (C) 1995 G Robert Liddon
|
|
All rights reserved.
|
|
ÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ */
|
|
|
|
/* ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
|
|
Includes
|
|
ÄÄÄÄÄÄÄÄ */
|
|
|
|
/* Glib
|
|
ÄÄÄÄ */
|
|
#include "objs.h"
|
|
#include "gal.h"
|
|
#include "gdebug.h"
|
|
|
|
|
|
/* ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
|
|
Function Prototypes
|
|
ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ */
|
|
void OBJS_DetachOLFromList(OBJ_LIST **Head,OBJ_LIST *ThisObj);
|
|
|
|
static void OBJS_AddOLToList(OBJ_LIST **Head,OBJ_LIST *ThisObj);
|
|
static void OBJS_DetachFromList(OBJ_STRUCT **Head,OBJ_STRUCT *ThisObj);
|
|
static void OBJS_AddToList(OBJ_STRUCT **Head,OBJ_STRUCT *ThisObj);
|
|
static void SortList(OBJ_LIST *OL);
|
|
|
|
/* ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
|
|
Vars
|
|
ÄÄÄÄ */
|
|
int ObjsAlloced; /* Number of currently active objs */
|
|
OBJ_LIST * ListOfObjLists; /* Head of the list of print Qs */
|
|
BOOL AddVels; /* Should vels be auto added or not */
|
|
U32 MemId;
|
|
void (*ProcessEpilog)(void); /* Called after processobj */
|
|
void (*ProcessProlog)(void); /* Called after processobj */
|
|
/* ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
|
|
Function: void OBJS_OpenModule(U32 MemType)
|
|
Purpose: Initialise the object module for use.
|
|
Params: MyMaxObjs = Max objs to alloc for
|
|
MemType = GAL memtype to alloc in
|
|
Returns: TRUE if opened succesfuly
|
|
ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ */
|
|
BOOL OBJS_OpenModule(U32 MemType)
|
|
{
|
|
MemId=MemType;
|
|
ObjsAlloced=0;
|
|
ListOfObjLists=NULL;
|
|
AddVels=TRUE;
|
|
|
|
ProcessEpilog=NULL;
|
|
ProcessProlog=NULL;
|
|
|
|
return TRUE;
|
|
}
|
|
|
|
/* ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
|
|
Function: BOOL OBJS_CloseModule(void)
|
|
Purpose: Closes the active obj module
|
|
Returns: TRUE if closed succesfuly
|
|
ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ */
|
|
BOOL OBJS_CloseModule(void)
|
|
{
|
|
OBJS_DestroyAllObjs();
|
|
return TRUE;
|
|
}
|
|
|
|
|
|
|
|
/* ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
|
|
Function: void OBJS_AddDisplayList(OBJ_LIST *OL)
|
|
Purpose: Add a display list
|
|
Params: OL -> Object List to add
|
|
|
|
Returns: -> Created object if succesfull
|
|
NULL if not
|
|
ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ */
|
|
void OBJS_AddDisplayList(OBJ_LIST *OL)
|
|
{
|
|
OBJS_AddOLToList(&ListOfObjLists,OL);
|
|
OL->Head=NULL;
|
|
OL->Visible=TRUE;
|
|
OL->SortCompare=NULL;
|
|
}
|
|
|
|
|
|
/* ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
|
|
Function: OBJ_STRUCT *OBJS_MakeObj(const OBJ_TYPE_INFO *OTI,OBJ_LIST *OL,void *Ptr)
|
|
Purpose: Make an object
|
|
Params: OTI -> Obj type info
|
|
OL -> Object List to add to
|
|
Ptr -> Instance specefic info
|
|
|
|
Returns: -> Created object if succesfull
|
|
NULL if not
|
|
ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ */
|
|
OBJ_STRUCT *OBJS_CreateObjMulti(const OBJ_TYPE_INFO *OTI,OBJ_LIST *OL,GAL_STRUCT * G,void *Ptr)
|
|
{
|
|
UINT TotalMem;
|
|
|
|
TotalMem=GAL_ProcessMultiStruct(G,MemId);
|
|
|
|
return(OBJS_CreateObj(OTI,OL,(int)TotalMem,Ptr));
|
|
}
|
|
|
|
/* ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
|
|
Function: OBJ_STRUCT *OBJS_MakeObj(const OBJ_TYPE_INFO *OTI,OBJ_LIST *OL,void *Ptr)
|
|
Purpose: Make an object
|
|
Params: OTI -> Obj type info
|
|
OL -> Object List to add to
|
|
Ptr -> Instance specefic info
|
|
|
|
Returns: -> Created object if succesfull
|
|
NULL if not
|
|
ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ */
|
|
OBJ_STRUCT *OBJS_CreateObj(const OBJ_TYPE_INFO *OTI,OBJ_LIST *OL,int DataSize,void *Ptr)
|
|
{
|
|
MHANDLE ObjHandle;
|
|
|
|
int SizeOfObjstruct;
|
|
int SizeOfData;
|
|
|
|
OBJ_STRUCT * ThisObj;
|
|
|
|
|
|
SizeOfObjstruct=GAL_AlignSizeToType(sizeof(OBJ_STRUCT),MemId);
|
|
if (SizeOfObjstruct==-1)
|
|
return(NULL);
|
|
|
|
SizeOfData=GAL_AlignSizeToType((U32)DataSize,MemId);
|
|
if (SizeOfData==-1)
|
|
return(NULL);
|
|
|
|
ObjHandle=GAL_Alloc((U32)(SizeOfObjstruct+SizeOfData),MemId,"OBJ");
|
|
if (ObjHandle==NULL_HANDLE)
|
|
return(NULL);
|
|
|
|
|
|
ThisObj=GAL_Lock(ObjHandle);
|
|
|
|
if (ThisObj)
|
|
{
|
|
OBJS_AddToList(&OL->Head,ThisObj);
|
|
|
|
ThisObj->MemHandle=ObjHandle;
|
|
ThisObj->Data=(void *)((U32)ThisObj + SizeOfObjstruct);
|
|
|
|
ThisObj->OTI=OTI;
|
|
ThisObj->OL=OL;
|
|
|
|
ThisObj->ID=0;
|
|
ThisObj->XVel=0;
|
|
ThisObj->YVel=0;
|
|
ThisObj->ZVel=0;
|
|
|
|
if (ThisObj->OTI->Constructor)
|
|
ThisObj->OTI->Constructor(ThisObj,Ptr);
|
|
|
|
ObjsAlloced++;
|
|
}
|
|
|
|
return ThisObj;
|
|
}
|
|
|
|
|
|
|
|
/* ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
|
|
Function: void OBJS_ProcessObjsEpilogue(void (*Func)(void))
|
|
|
|
Purpose: Add a call back that's executed after OBJS_ProcessObjs
|
|
|
|
Params: Func -> Function
|
|
ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ */
|
|
void OBJS_ProcessObjsEpilogue(void (*Func)(void))
|
|
{
|
|
ProcessEpilog=Func;
|
|
}
|
|
|
|
/* ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
|
|
Function: void OBJS_ProcessObjsPrologue(void (*Func)(void))
|
|
|
|
Purpose: Add a call back that's executed before OBJS_ProcessObjs
|
|
|
|
Params: Func -> Function
|
|
ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ */
|
|
void OBJS_ProcessObjsPrologue(void (*Func)(void))
|
|
{
|
|
ProcessProlog=Func;
|
|
}
|
|
|
|
/* ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
|
|
Function: void OBJS_DetachFromList(OBJ_STRUCT **Head,OBJ_STRUCT *ThisObj)
|
|
Purpose: Take an object from an obj list
|
|
Params: Head -> Head ptr of list
|
|
ThisObj -> Obj to add
|
|
ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ */
|
|
static void OBJS_DetachFromList(OBJ_STRUCT **Head,OBJ_STRUCT *ThisObj)
|
|
{
|
|
if (ThisObj->Prev)
|
|
ThisObj->Prev->Next=ThisObj->Next;
|
|
else
|
|
*Head=ThisObj->Next;
|
|
|
|
if (ThisObj->Next)
|
|
ThisObj->Next->Prev=ThisObj->Prev;
|
|
}
|
|
|
|
|
|
/* ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
|
|
Function: void OBJS_AddToList(OBJ_STRUCT **Head,OBJ_STRUCT *ThisObj)
|
|
Purpose: Add an object to a obj list
|
|
Params: Head -> Head ptr of list
|
|
ThisObj -> Obj to add
|
|
ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ */
|
|
static void OBJS_AddToList(OBJ_STRUCT **Head,OBJ_STRUCT *ThisObj)
|
|
{
|
|
ThisObj->Prev=NULL;
|
|
|
|
if ((ThisObj->Next=*Head))
|
|
ThisObj->Next->Prev=ThisObj;
|
|
|
|
*Head=ThisObj;
|
|
}
|
|
|
|
|
|
|
|
/* ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
|
|
Function: void OBJS_DetachFromList(OBJ_STRUCT **Head,OBJ_STRUCT *ThisObj)
|
|
Purpose: Take an object from an obj list
|
|
Params: Head -> Head ptr of list
|
|
ThisObj -> Obj to add
|
|
ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ */
|
|
void OBJS_DetachOLFromList(OBJ_LIST **Head,OBJ_LIST *ThisObj)
|
|
{
|
|
if (ThisObj->Prev)
|
|
ThisObj->Prev->Next=ThisObj->Next;
|
|
else
|
|
*Head=ThisObj->Next;
|
|
|
|
if (ThisObj->Next)
|
|
ThisObj->Next->Prev=ThisObj->Prev;
|
|
}
|
|
|
|
|
|
/* ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
|
|
Function: void OBJS_AddToList(OBJ_STRUCT **Head,OBJ_STRUCT *ThisObj)
|
|
Purpose: Add an object to a obj list
|
|
Params: Head -> Head ptr of list
|
|
ThisObj -> Obj to add
|
|
ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ */
|
|
static void OBJS_AddOLToList(OBJ_LIST **Head,OBJ_LIST *ThisObj)
|
|
{
|
|
ThisObj->Prev=NULL;
|
|
|
|
if ((ThisObj->Next=*Head))
|
|
ThisObj->Next->Prev=ThisObj;
|
|
|
|
*Head=ThisObj;
|
|
}
|
|
|
|
|
|
|
|
/* ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
|
|
Change this Object's Print List
|
|
ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ */
|
|
void OBJS_ChangeDisplayList(OBJ_STRUCT *O,OBJ_LIST *NewList)
|
|
{
|
|
if (NewList != O->OL)
|
|
{
|
|
OBJS_DetachFromList(&O->OL->Head,O);
|
|
OBJS_AddToList(&NewList->Head,O);
|
|
O->OL=NewList;
|
|
}
|
|
}
|
|
|
|
/* ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
|
|
Function: void OBJS_ProcessObjs(void)
|
|
Purpose: Print the display lists
|
|
ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ */
|
|
void OBJS_ProcessObjs(void)
|
|
{
|
|
OBJ_LIST *ThisList;
|
|
|
|
if (ProcessProlog)
|
|
ProcessProlog();
|
|
|
|
ThisList=ListOfObjLists;
|
|
|
|
while (ThisList)
|
|
{
|
|
|
|
if (ThisList->Visible)
|
|
{
|
|
{
|
|
OBJ_STRUCT *ObjList;
|
|
|
|
SortList(ThisList);
|
|
|
|
ObjList=ThisList->Head;
|
|
|
|
while (ObjList)
|
|
{
|
|
if (AddVels)
|
|
{
|
|
ObjList->XPos+=ObjList->XVel;
|
|
ObjList->YPos+=ObjList->YVel;
|
|
ObjList->ZPos+=ObjList->ZVel;
|
|
}
|
|
|
|
if (ObjList->OTI->Printer)
|
|
ObjList->OTI->Printer(ObjList,ThisList);
|
|
|
|
ObjList=ObjList->Next;
|
|
}
|
|
}
|
|
}
|
|
|
|
ThisList=ThisList->Next;
|
|
}
|
|
|
|
if (ProcessEpilog)
|
|
ProcessEpilog();
|
|
}
|
|
|
|
|
|
/* ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
|
|
Function: void OBJS_ProcessObjs(void)
|
|
Purpose: Print the display lists
|
|
ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ */
|
|
void OBJS_ObjsVelAddOnly(void)
|
|
{
|
|
OBJ_LIST *ThisList;
|
|
|
|
ThisList=ListOfObjLists;
|
|
|
|
while (ThisList)
|
|
{
|
|
|
|
if (ThisList->Visible)
|
|
{
|
|
{
|
|
OBJ_STRUCT *ObjList;
|
|
|
|
SortList(ThisList);
|
|
|
|
ObjList=ThisList->Head;
|
|
|
|
while (ObjList)
|
|
{
|
|
if (AddVels)
|
|
{
|
|
ObjList->XPos+=ObjList->XVel;
|
|
ObjList->YPos+=ObjList->YVel;
|
|
ObjList->ZPos+=ObjList->ZVel;
|
|
}
|
|
|
|
ObjList=ObjList->Next;
|
|
}
|
|
}
|
|
}
|
|
|
|
ThisList=ThisList->Next;
|
|
}
|
|
}
|
|
|
|
|
|
/* ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
|
|
Function: void OBJS_DestroyAllObjs(void)
|
|
Purpose: Delete all objects in all lists
|
|
ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ */
|
|
void OBJS_DestroyAllObjs(void)
|
|
{
|
|
OBJ_LIST *ThisList;
|
|
ThisList=ListOfObjLists;
|
|
|
|
while (ThisList)
|
|
{
|
|
OBJS_DestroyListObjs(ThisList);
|
|
ThisList=ThisList->Next;
|
|
}
|
|
}
|
|
|
|
|
|
/* ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
|
|
Function: void OBJS_DestroyListObjs(OBJ_LIST *OL)
|
|
Purpose: Destroy all the objs in a list if list is killable
|
|
Params: OL -> List
|
|
ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ */
|
|
void OBJS_DestroyListObjs(OBJ_LIST *OL)
|
|
{
|
|
|
|
if (OL->Killable)
|
|
{
|
|
OBJ_STRUCT *O;
|
|
O=OL->Head;
|
|
|
|
while (O)
|
|
O=OBJS_DestroyObj(O);
|
|
}
|
|
}
|
|
|
|
/* ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
|
|
Function: void OBJS_DestroyAllObjsOfAType(U32 Type,U32 AndMask)
|
|
Purpose: Go through all display lists and destroy objs
|
|
of a certain type.
|
|
if (O->ID&AndMask)==Type then obj is destroyed
|
|
Params: Type = Type of objs to destroy
|
|
AndMask = And maks
|
|
ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ */
|
|
void OBJS_DestroyAllObjsOfAType(U32 Type,U32 AndMask)
|
|
{
|
|
OBJ_LIST *ThisList;
|
|
|
|
ThisList=ListOfObjLists;
|
|
|
|
while (ThisList)
|
|
{
|
|
OBJS_DestroyListObjsOfAType(ThisList,Type,AndMask);
|
|
ThisList=ThisList->Next;
|
|
}
|
|
}
|
|
|
|
/* ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
|
|
Function: void OBJS_DestroyListObjsOfAType(OBJ_LIST *OL,U32 Type,U32 AndMask)
|
|
Purpose: Go through a single display list and destroy objs
|
|
of a certain type.
|
|
if (O->ID&AndMask)==Type then obj is destroyed
|
|
Params: Type = Type of objs to destroy
|
|
AndMask = And maks
|
|
ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ */
|
|
void OBJS_DestroyListObjsOfAType(OBJ_LIST *OL,U32 Type,U32 AndMask)
|
|
{
|
|
OBJ_STRUCT *O;
|
|
|
|
O=OL->Head;
|
|
|
|
while (O)
|
|
{
|
|
OBJ_STRUCT * NextO;
|
|
|
|
NextO=O->Next;
|
|
|
|
if (((O->ID)&AndMask)==Type)
|
|
OBJS_DestroyObj(O);
|
|
|
|
O=NextO;
|
|
}
|
|
}
|
|
|
|
/* ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
|
|
Function: OBJ_STRUCT *OBJS_DestroyObj(OBJ_STRUCT *O)
|
|
Purpose: Destroy an object
|
|
Params: O -> Obj to destroy
|
|
Returns: -> to what was next in list
|
|
ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ */
|
|
OBJ_STRUCT *OBJS_DestroyObj(OBJ_STRUCT *O)
|
|
{
|
|
MHANDLE ObjHandle;
|
|
OBJ_STRUCT * RetObj;
|
|
BOOL GalRet;
|
|
|
|
ObjHandle=O->MemHandle;
|
|
|
|
RetObj=O->Next;
|
|
|
|
if (O->OTI->Destructor)
|
|
O->OTI->Destructor(O);
|
|
|
|
OBJS_DetachFromList(&O->OL->Head,O);
|
|
|
|
O->Next=NULL; /* Handy for debugging */
|
|
O->Prev=NULL;
|
|
|
|
GalRet=GAL_Free(ObjHandle);
|
|
ASSERT(GalRet);
|
|
|
|
ObjsAlloced--;
|
|
|
|
return RetObj;
|
|
}
|
|
|
|
/* ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
|
|
Function: void OBJS_IterateAllObjs(U32 Type,U32 AndMask,void (*CallBack)(OBJ_STRUCT *O))
|
|
Purpose: Go through all display lists and do a callback for objs
|
|
of a certain type.
|
|
if (O->ID&AndMask)==Type then obj is callbacked
|
|
Params: Type = Type of objs to callback
|
|
AndMask = And maks
|
|
ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ */
|
|
void OBJS_IterateAllObjs(U32 Type,U32 AndMask,void (*CallBack)(OBJ_STRUCT *O))
|
|
{
|
|
OBJ_LIST *ThisList;
|
|
|
|
ThisList=ListOfObjLists;
|
|
|
|
while (ThisList)
|
|
{
|
|
OBJS_IterateListObjs(ThisList,Type,AndMask,CallBack);
|
|
ThisList=ThisList->Next;
|
|
}
|
|
}
|
|
|
|
/* ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
|
|
Function: void OBJS_IterateListObjs(OBJ_LIST *OL,U32 Type,U32 AndMask,void (*CallBack)(OBJ_STRUCT *O))
|
|
Purpose: Go through a single display list and do a callback for objs
|
|
of a certain type.
|
|
if (O->ID&AndMask)==Type then obj is callbacked
|
|
Params: Type = Type of objs to callback
|
|
AndMask = And maks
|
|
ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ */
|
|
void OBJS_IterateListObjs(OBJ_LIST *OL,U32 Type,U32 AndMask,void (*CallBack)(OBJ_STRUCT *O))
|
|
{
|
|
OBJ_STRUCT *O;
|
|
|
|
O=OL->Head;
|
|
|
|
while (O)
|
|
{
|
|
OBJ_STRUCT * NextO;
|
|
|
|
NextO=O->Next;
|
|
|
|
if (((O->ID)&AndMask)==Type)
|
|
CallBack(O);
|
|
|
|
O=NextO;
|
|
}
|
|
}
|
|
|
|
/* ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
|
|
Set the World's XY
|
|
ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ */
|
|
void OBJS_SetListXY(OBJ_LIST *OL,S32 X,S32 Y)
|
|
{
|
|
OBJS_SetListX(OL,X);
|
|
OBJS_SetListY(OL,Y);
|
|
}
|
|
|
|
/* ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
|
|
Set the World's X
|
|
ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ */
|
|
void OBJS_SetListX(OBJ_LIST *OL,S32 X)
|
|
{
|
|
OL->X=X;
|
|
}
|
|
|
|
/* ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
|
|
Set the World's X
|
|
ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ */
|
|
void OBJS_SetListY(OBJ_LIST *OL,S32 Y)
|
|
{
|
|
OL->Y=Y;
|
|
}
|
|
|
|
/* ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
|
|
Make a Priority level of sprites undestroyable
|
|
ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ */
|
|
void OBJS_MakeListImmortal(OBJ_LIST *OL)
|
|
{
|
|
OL->Killable=FALSE;
|
|
}
|
|
|
|
/* ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
|
|
Make a Priority level of sprites Destroyable
|
|
ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ */
|
|
void OBJS_MakeListMortal(OBJ_LIST *OL)
|
|
{
|
|
OL->Killable=TRUE;
|
|
}
|
|
|
|
/* ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
|
|
Function: void MKOBJS_NoVels(void)
|
|
Purpose: Say no vels to be addes
|
|
ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ */
|
|
BOOL OBJS_NoAddVels(void)
|
|
{
|
|
BOOL OldVels;
|
|
|
|
OldVels=AddVels;
|
|
AddVels=FALSE;
|
|
return(OldVels);
|
|
}
|
|
|
|
/* ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
|
|
Function: void MKOBJS_AddVels(void)
|
|
Purpose: Say vels to be addes
|
|
ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ */
|
|
BOOL OBJS_AddVels(void)
|
|
{
|
|
BOOL OldVels;
|
|
|
|
OldVels=AddVels;
|
|
AddVels=TRUE;
|
|
return(OldVels);
|
|
}
|
|
|
|
/* ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
|
|
Function: void OBJS_MakeListInvisible(OBJ_LIST *OL)
|
|
Purpose: Mark this list as invisble
|
|
Params: OL - > List to mark
|
|
Returns: Previous visible / invisible state of list
|
|
ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ */
|
|
BOOL OBJS_MakeListInvisible(OBJ_LIST *OL)
|
|
{
|
|
BOOL OldState;
|
|
OldState=OL->Visible;
|
|
OL->Visible=FALSE;
|
|
return(OldState);
|
|
}
|
|
|
|
/* ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
|
|
Function: void OBJS_MakeListInvisible(OBJ_LIST *OL)
|
|
Purpose: Mark this list as visble
|
|
Params: OL - > List to mark
|
|
Returns: Previous visible / invisible state of list
|
|
ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ */
|
|
BOOL OBJS_MakeListVisible(OBJ_LIST *OL)
|
|
{
|
|
BOOL OldState;
|
|
OldState=OL->Visible;
|
|
OL->Visible=TRUE;
|
|
return(OldState);
|
|
}
|
|
|
|
/* ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
|
|
Make a Priority level of sprites Invisible
|
|
ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ*/
|
|
BOOL OBJS_GetVelState(void)
|
|
{
|
|
return AddVels;
|
|
}
|
|
|
|
/* ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
|
|
Function: BOOL OBJS_SetVelState(BOOL NewState)
|
|
Purpose: Set wether to add vels
|
|
Params: Newstate =
|
|
Returns: Previous addvel state of list
|
|
ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ */
|
|
BOOL OBJS_SetVelState(BOOL NewState)
|
|
{
|
|
BOOL OldState;
|
|
|
|
OldState=AddVels;
|
|
AddVels=NewState;
|
|
return(OldState);
|
|
}
|
|
|
|
|
|
/* ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
|
|
Function: void OBJS_SetSortCompare(OBJ_LIST *OL,void (*CompRout)(OBJ_STRUCT *O1,OBJ_STRUCT *O1))
|
|
Purpose: Set the call back used in the sort routine
|
|
Params: OL -> List to set sort routine for
|
|
CompRout -> Function to do the compare
|
|
ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ */
|
|
void OBJS_SetSortCompare(OBJ_LIST *OL,BOOL (*CompRout)(OBJ_STRUCT *O1,OBJ_STRUCT *O2))
|
|
{
|
|
OL->SortCompare=CompRout;
|
|
}
|
|
|
|
/* ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
|
|
Function: int OBJS_GetWidth(OBJ_STRUCT *O)
|
|
Purpose: Get an objs width
|
|
Params: O -> Obj 2 get width off
|
|
Returns: Width, zero if no width routine
|
|
ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ */
|
|
int OBJS_GetWidth(OBJ_STRUCT *O)
|
|
{
|
|
if (O->OTI->GetWidth)
|
|
return(O->OTI->GetWidth(O));
|
|
else
|
|
return(0);
|
|
}
|
|
|
|
/* ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
|
|
Function: int OBJS_GetWidth(OBJ_STRUCT *O)
|
|
Purpose: Get an objs width
|
|
Params: O -> Obj 2 get width off
|
|
Returns: Width, zero if no width routine
|
|
ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ */
|
|
int OBJS_GetHeight(OBJ_STRUCT *O)
|
|
{
|
|
if (O->OTI->GetHeight)
|
|
return(O->OTI->GetHeight(O));
|
|
else
|
|
return(0);
|
|
}
|
|
|
|
/* ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
|
|
Function: int OBJS_GetXOff(OBJ_STRUCT *O)
|
|
Purpose: Get an objs X offset
|
|
Params: O -> Obj 2 get width off
|
|
Returns: Width, zero if no width routine
|
|
ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ */
|
|
int OBJS_GetXOff(OBJ_STRUCT *O)
|
|
{
|
|
if (O->OTI->GetXOff)
|
|
return(O->OTI->GetXOff(O));
|
|
else
|
|
return(0);
|
|
}
|
|
|
|
/* ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
|
|
Function: int OBJS_GetYOff(OBJ_STRUCT *O)
|
|
Purpose: Get an objs X offset
|
|
Params: O -> Obj 2 get width off
|
|
Returns: Width, zero if no width routine
|
|
ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ */
|
|
int OBJS_GetYOff(OBJ_STRUCT *O)
|
|
{
|
|
if (O->OTI->GetYOff)
|
|
return(O->OTI->GetYOff(O));
|
|
else
|
|
return(0);
|
|
}
|
|
|
|
/* ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
|
|
Function: int OBJS_GetYOff(OBJ_STRUCT *O)
|
|
Purpose: Get an objs X offset
|
|
Params: O -> Obj 2 get width off
|
|
Returns: Width, zero if no width routine
|
|
ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ */
|
|
int OBJS_GetPal(OBJ_STRUCT *O)
|
|
{
|
|
if (O->OTI->GetPal)
|
|
return(O->OTI->GetPal(O));
|
|
else
|
|
return(0);
|
|
}
|
|
|
|
/* ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
|
|
Function: static void SortList(OBJ_LIST *OL)
|
|
Purpose: Sort this list
|
|
Params: OL -> List to sort
|
|
ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ */
|
|
static void SortList(OBJ_LIST *OL)
|
|
{
|
|
if (OL->SortCompare && OL->Head && OL->Head->Next)
|
|
{
|
|
BOOL DidSwap;
|
|
|
|
do
|
|
{
|
|
OBJ_STRUCT * O;
|
|
OBJ_STRUCT * NO;
|
|
|
|
O=OL->Head;
|
|
|
|
DidSwap=FALSE;
|
|
|
|
do
|
|
{
|
|
NO=O->Next;
|
|
|
|
if (OL->SortCompare(O,NO))
|
|
{
|
|
O->Next=NO->Next;
|
|
NO->Next=O;
|
|
|
|
NO->Prev=O->Prev;
|
|
O->Prev=NO;
|
|
|
|
if (NO->Prev)
|
|
NO->Prev->Next=NO;
|
|
else
|
|
OL->Head=NO;
|
|
|
|
if (O->Next)
|
|
O->Next->Prev=O;
|
|
|
|
DidSwap=TRUE;
|
|
}
|
|
else
|
|
O=O->Next;
|
|
}
|
|
while (O->Next);
|
|
}
|
|
while(DidSwap);
|
|
|
|
}
|
|
}
|
|
|
|
|
|
/* ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
|
|
Function: int OBJS_GetObjsAlloced(void)
|
|
Purpose: Tell us how many objects are out
|
|
ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ */
|
|
int OBJS_GetObjsAlloced(void)
|
|
{
|
|
return(ObjsAlloced);
|
|
}
|
|
|
|
/* ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
|
|
ends */
|