/************************************************************ * * * object.h * * * * * LPGE 1997 * * * * Copyright (C) 1996 Sony Computer Entertainment Inc. * * All Rights Reserved * * * ***********************************************************/ #ifndef OBJECT_H_INCLUDED #include "sys_libs.h" #include "asssert.h" #include "tmd.h" #include "2d1.h" #include "general.h" // display flag: by GsSPRITE or by GsDOBJ2 #define TMD 1 #define SPRITE 2 #define MAX_OBJECTS 24 #define MAX_MINI_OBJECTS 2400 #define MAX_LAPS_PER_OBJECT 60 // value for object alive field #define UNDEAD 2 // does tmd point right way or wrong way? #define TMD_RIGHT_WAY 1 #define TMD_WRONG_WAY 2 #define NO_MODEL_ROTATION 1001 #define SPLINE_PATH_FOLLOWER_SPEED_FACTOR 64 #define HALF_SPLINE_PATH_FOLLOWER_SPEED_FACTOR 32 typedef struct { int id; int alive; // boolean int type; char name[64]; int shipType; // see flying.h int controllerResponsiveFlag; // boolean int interactivityFlag; int displayFlag; // TMD, SPRITE or FALSE GsIMAGE* imageInfo; GsSPRITE sprite; int scaleX, scaleY; GsDOBJ2 handler; u_long modelAddress; int whichModel; int modelFlag; // right way, wrong way int viewMode; int storedViewMode; int scalingFlag; VECTOR scalingVector; // scaling in 3D: volume control VECTOR position; // position VECTOR velocity; int movementMomentumFlag; int accelerationSpeed; int brakingSpeed; int maximumSpeed; int movementFrictionCoefficient; int specialMovementFlag; // eg for AI fliers int rotationType; SVECTOR rotate; // angle VECTOR twist; // change of angle int rotationMomentumFlag; VECTOR rotationPower; int rotationFrictionCoefficient; int angle, tilt, a, b, c; // TRASHES EVERYTHING int collisionWithTunnelCoefficient; int collisionWithOtherShipsCoefficient; GsCOORDINATE2 coord; // coordinate system int superCoordinateObjectID; MATRIX matrix; // relation to SUPER int lifeTime; int specialTimeLimit; int framesSinceLastViewFlip; int framesSinceLastLookBehind; int lookBehindFlag; int collisionRadius; int tunnelCollisionTreatmentFlag; int shipCollisionTreatmentFlag; int tunnelSection; int racingFlag; // boolean int furthestLap; int lapProgressFlag; int furthestSection; int advancedFlag; int placeInRace; int framesWhenLapsEnd[MAX_LAPS_PER_OBJECT+1]; int bestLapTime; int properMovementFlag; int speedFactor; int discreteSpeed; int startFrame; int currentPositionIndex; int speedControlFlag, speedControlPeriod; int playbackFrameIndex; u_long pad0, pad1, pad2, pad3; } ObjectHandler; extern ObjectHandler* ObjectArray[MAX_OBJECTS]; // prototypes for object.c /*************** first section: class functions *************************/ void InitialiseObjectClass (void); int FindNextLowestObjectID (int objectID); int FindNextHighestObjectID (int objectID); int FindNextUnusedObjectID (void); int CountNumberOfLivingObjects (void); int CountNumberOfLivingTypedObjects (int type); void LinkAllObjectsToModelsOrSprites (void); void LinkAllObjectsToTheirCoordinateSystems (void); /*************** second section: individual object functions ***********************/ void BringObjectToLife (ObjectHandler* object, int type, u_long modelAddress, int whichModel, int superCoordinateObjectID); void KillAnObject (ObjectHandler* object); void RegisterObjectIntoObjectArray (ObjectHandler* object); void RemoveObjectFromObjectArray (ObjectHandler* object); void InitSingleObject (ObjectHandler* object); void SetObjectScaling (ObjectHandler* object, int scaleX, int scaleY, int scaleZ); void SortObjectSize (ObjectHandler* object); void SetObjectSubdivision (ObjectHandler* object, int setting); void DumpObject (ObjectHandler *object); #define OBJECT_H_INCLUDED 1 #endif