diff options
Diffstat (limited to 'src/include/module.h')
| -rw-r--r-- | src/include/module.h | 484 |
1 files changed, 484 insertions, 0 deletions
diff --git a/src/include/module.h b/src/include/module.h new file mode 100644 index 0000000..a42a6ca --- /dev/null +++ b/src/include/module.h @@ -0,0 +1,484 @@ +#ifndef MODULE_INCLUDED + + +/* + + Modules + +*/ + + +#ifdef __cplusplus + + extern "C" { + +#endif + + + #if SupportModules + + +#include "bh_waypt.h" + +typedef struct moduletableheader { + + int mth_xsize; /* Extents in world space */ + int mth_ysize; + int mth_zsize; + + int mth_numx; /* Number of modules along each axis */ + int mth_numy; + int mth_numz; + + /* Pointer to an array of pointers to modules */ + + struct module **mth_moduletable; + +} MODULETABLEHEADER; + + +/* + + NOTES + + There are no pointers to strategy and/or animation data structures yet. + These will be added as and when they are needed. + +*/ + +typedef enum { + + mtype_module, + mtype_term + +} MODULETYPE; + + +typedef union mref { + + char mref_name[4]; /* Module name */ + struct module *mref_ptr; /* Module pointer */ + +} MREF; + + +typedef enum { + + vmtype_vmodule, + vmtype_term + +} VMODULETYPE; + + +typedef enum { + + vmodi_null, /* Null instruction */ + vmodi_bra_vc /* Branch if viewport closed */ + +} VMODI; + +typedef union _vmodidata { + + char vmodidata_label[4]; + struct vmodule *vmodidata_ptr; + int vmodidata; + +} VMODIDATA; + + +typedef struct vmodule { + + VMODULETYPE vmod_type; + char vmod_name[4]; /* Unique name for this VMODULE */ + VMODI vmod_instr; + VMODIDATA vmod_data; + MREF vmod_mref; + VECTORCH vmod_dir; + int vmod_angle; + int vmod_flags; + +} VMODULE; + + +#define vm_flag_gotptrs 0x00000001 /* VMODULE references have + been converted from + names to pointers */ + + +#if 0 + +typedef enum { + + vptype_viewport, + vptype_term + +} VIEWPORTTYPE; + + +typedef struct viewport { + + VIEWPORTTYPE vp_type; + + int vp_flags; + + VECTORCH vp0; + VECTORCH vp1; + VECTORCH vp2; + VECTORCH vp3; + +} VIEWPORT; + +#endif + + +/* + + This is the map block for module objects. It was originally based on the + MAPBLOCK8 structure. + +*/ + +typedef struct modulemapblock { + + int MapType; + int MapShape; + + #if LoadingMapsShapesAndTexturesEtc + + int MapFNameIndex; + char **MapFNameArray; + SHAPEHEADER **MapShapeDataArray; + + #endif + + VECTORCH MapWorld; + + EULER MapEuler; + + int MapFlags; + int MapFlags2; + int MapFlags3; + + + + MAPSETVDB *MapVDBData; + + int MapInteriorType; + + #if InterfaceEngine + + /* This will point to the Object_Chunk, it will have to be */ + /* cast within C++ though */ + + void * o_chunk; + + #endif + + int MapLightType; /* See LIGHTTYPES */ + + + VECTORCH MapOrigin; /* Origin of Rotation */ + + SIMSHAPELIST *MapSimShapes; + + int MapViewType; /* See "VDB_ViewType" */ + + + struct displayblock **MapMPtr; /* Write our dptr here as mother */ + struct displayblock **MapDPtr; /* Read our dptr here as daughter */ + + VECTORCH MapMOffset; /* Offset from mother */ + + #if SupportMorphing + MORPHHEADER *MapMorphHeader; + #endif + +} MODULEMAPBLOCK; + + +/* + + Module functions called either when the module is visible or when the view + is inside the module. + +*/ + +typedef enum { + + mfun_null, + +} MFUNCTION; + + +/* + + This is the MODULE structure + +*/ + +struct aimodule; + +typedef struct module { + + MODULETYPE m_type; + + char m_name[4]; /* Unique name for this MODULE */ + + int m_index; /* Unique module index */ + + int m_flags; + + VECTORCH m_world; /* World location */ + + MREF m_ext; /* Get module extents from the shape + found through this other module */ + + int m_ext_scale; /* Scale extents by this value (fp) */ + + int m_maxx; /* Module extents */ + int m_minx; + int m_maxy; + int m_miny; + int m_maxz; + int m_minz; + + MODULEMAPBLOCK *m_mapptr; /* Map data for the module object */ + struct displayblock *m_dptr; /* Display block (not constant) */ + + MREF m_vptr; /* Vertical pointer to module array */ + + VMODULE *m_vmptr; /* Pointer to an array of VMODULE, or + "visible module" structures */ + + MREF *m_link_ptrs; /* Pointer to an arbitrary sized array + of module references - the array is + zero terminated */ + /*should be got rid of soon*/ + + + + MODULETABLEHEADER *m_table; /* A hash table whose creation is + triggered by a threshold value set by + "system.h". This is to speed up module + list traversal */ + + MFUNCTION m_ifvisible; /* Function called if module visible */ + MFUNCTION m_ifvinside; /* Function called if view inside */ + MREF m_funref; /* Function access to another module */ + + struct strategyblock *m_sbptr; /* Project supplies structure */ + + int m_numlights; /* # light blocks in array */ + struct lightblock *m_lightarray; /* Ptr. to array of light blocks */ + + struct extraitemdata *m_extraitemdata; + + MATRIXCH m_mat; /* Internal use only */ + + #if SupportWindows95 + char * name; + #endif + + WAYPOINT_HEADER *m_waypoints; + + struct aimodule *m_aimodule; /* the aimodule that this module is a part of*/ + + float m_sound_reverb; /*settings for the way sound should */ + int m_sound_env_index;/*be played in this module*/ + +} MODULE; + + +/* Flags */ + +#define m_flag_infinite 0x00000001 /* No extent test, the + view is always in this + module */ + +#define m_flag_gotptrs 0x00000002 /* Module references have + been converted from + names to pointers */ + +#define m_flag_open 0x00000004 /* The viewport/Door is + open. This state is + read from the "dptr" + morphing frame if it is + present and if it is + appropriate to do so */ + +#define m_flag_dormant 0x00000008 /* The module is not active */ + + +#define m_flag_gotmat 0x00000010 /* Internal use only */ + +#define m_flag_visible_on_map 0x00000020 /* Flag for Kevin's map stuff */ + +#define m_flag_slipped_inside 0x00000040 /* Another flag 4 Kevin */ + +#define MODULEFLAG_AIRDUCT 0x80000000 +#define MODULEFLAG_STAIRS 0x40000000 +#define MODULEFLAG_SKY 0x20000000 +#define MODULEFLAG_FOG 0x10000000 +#define MODULEFLAG_HORIZONTALDOOR 0x08000000 + + +typedef struct aimodule +{ + int m_index; //the index in AIModuleArray + + VECTORCH m_world; /* World location */ + + //adjacent aimodules - null terminated array + struct aimodule **m_link_ptrs; + + //the render modules that make up this ai module - null terminated array + MODULE **m_module_ptrs; + + WAYPOINT_HEADER *m_waypoints; + + /* CDF 1/6/98 - Routefinder Globals */ + int RouteFinder_FrameStamp; + int RouteFinder_IterationNumber; + +}AIMODULE; + + +/* + Module Scene Structure + +*/ + +typedef struct scenemodule { + + MODULE *sm_module; /* Pointer to module structure for this scene */ + MODULE **sm_marray; /* Pointer to array of pointers to all modules */ + +} SCENEMODULE; + + +/* + + "The View" + + The "View Finder" accesses the view location and orientation through this + global structure. This is so that views can be passed to other functions as + a single pointer if required. + +*/ + +typedef struct aview { + + VECTORCH vloc; + MATRIXCH vmat; + struct viewdescriptorblock *vvdb; + +} AVIEW; + + + + +/* + + Module Function Prototypes + +*/ + +#if IncludeModuleFunctionPrototypes + +void ModuleHandler(VIEWDESCRIPTORBLOCK *vdb); +void ProcessModules(VIEWDESCRIPTORBLOCK *vdb, MODULE *mptr); +void ViewFinder(MODULE *mptr); +void ReadVMODULEArrays(VMODULE *vptr); + + +void UpdateModules(void); +void ModuleFunctions(MODULE *mptr, MFUNCTION mf); +void AllocateModuleObject(MODULE *mptr); +void DeallocateModuleObject(MODULE *mptr); + + +/* + + A project supplied function. The display block has been successfuly + allocated and has been fully initialised. + +*/ + +void ModuleObjectJustAllocated(MODULE *mptr); + + +/* + + A project supplied function. The display block is about to be deallocated. + +*/ + +void ModuleObjectAboutToBeDeallocated(MODULE *mptr); + + +/* + + A project supplied function. These are the new and old modules this ???? + +*/ + +void NewAndOldModules(int num_new, MODULE **m_new, + int num_old, MODULE **m_old, char *m_currvis); + + + +#if SupportMultiCamModules +void InitGlobalVMA(void); +void DeallocateGlobalVMA(void); +#if SupportMultiCamModules +void UpdateDynamicModuleObjects(void); +#endif +#endif + +void PreprocessAllModules(void); +void PreprocessModuleArray(MODULE **m_array_ptr); +void PreprocessVMODIDATA(VMODULE *v_ptr); + +void DeallocateModuleVisArrays(void); +int GetModuleVisArrays(void); +int InsideModule(MODULE *mptr); + +void ConvertModuleNameToPointer(MREF *mref_ptr, MODULE **m_array_ptr); +void ConvertVModuleNameToPointer(VMODIDATA *vmodidata_ptr, VMODULE *v_array_ptr); + +int CompareName(char *name1, char *name2); +void PrintName(char *name); + +int SaveModuleArray(MODULE *mptr, char *filename); +MODULE* LoadModuleArray(MODULE *mptr, int size, char *filename); + +int IsModuleVisibleFromModule(MODULE *source, MODULE *target); + +#endif /* IncludeModuleFunctionPrototypes */ + +extern SCENEMODULE **Global_ModulePtr; +extern SCENEMODULE *MainSceneArray[]; +extern AVIEW ModuleView; +extern MODULE *Global_MotherModule; +extern char *ModuleCurrVisArray; +extern char *ModulePrevVisArray; +extern char *ModuleTempArray; +extern char *ModuleLocalVisArray; +extern int ModuleArraySize; + +extern int AIModuleArraySize; +extern AIMODULE *AIModuleArray; + + +#endif /* SupportModules */ + + +#ifdef __cplusplus + + }; + +#endif + +#define MODULE_INCLUDED + +#endif |
