/*************************************************************************/ /* File : CKGridManager.h */ /* Author : Cabrita Francisco */ /* */ /* Virtools SDK */ /* Copyright (c) Virtools 2000, All Rights Reserved. */ /*************************************************************************/ #ifndef CKGridManager_H #define CKGridManager_H "$Id:$" #define GRID_FLAG_SCENE 0 #define GRID_FLAG_LEVEL 1 #include "CKGrid.h" #include "CKBaseManager.h" #define CKPGUID_LAYERSQUARETYPE_ENUM CKGUID(0x454d7d88,0x210e3f33) #define CKPGUID_LINKERGRAPH_ENUM CKGUID(0x16a90c1b,0x740d0f12) #define DEFAULT_LAYER_NAME "- default -" /************************************************* Name: CKGridManager Summary: Grids Management Remarks: + The Grid Manager manages the layer types : they are defined by a name to which is associated an integer (what is called the layer type). The layer type has also a type of parameter that is associated with (SetAssociatedParam) most of the time the layers use integer values (CKPGUID_INT). + For every grid you can then decide to create one of more layer on this grid using the existing layer type. {Image:Grid2} + For Dev Interface purposes a layer type can also be given a color with SetAssociatedColor + The Grid Manager is the entry point to acces a grid given a custom point in Space. + The Grid Manager, manage all grids and is the gateway between a point in 3D Space and the correspondant grid. The Grid Manager, also manages the Layer Types (eg: fire, danger, grass) See also: CKGrid *************************************************/ class CKGridManager :public CKBaseManager { public: //____________________________________________________ // TYPE /************************************************* Summary: Returns the layer type given its name. Arguments: TypeName: Name of the layer type to return (ex: "collision", "Walls", ...) Return Value: Layer type integer value if successful, 0 otherwise. Remarks: A 0 return value means the TypeName type was not registered yet. See also: GetTypeName,SetTypeName,RegisterType *************************************************/ virtual int GetTypeFromName(CKSTRING TypeName)=0; /************************************************* Summary: Returns the name of a layer type. Arguments: type: Layer Type Return Value: Name of the layer type or NULL if the layer type is invalid. See also: GetTypeFromName,SetTypeName,RegisterType *************************************************/ virtual CKSTRING GetTypeName(int type)=0; /************************************************* Summary: Changes the name of a layer type. Arguments: iType: Layer Type Name: New name for the layer type. Return Value: CK_OK if successful or an error code otherwise. See also: GetTypeFromName,GetTypeName,RegisterType *************************************************/ virtual CKERROR SetTypeName(int iType, CKSTRING Name)=0; /************************************************* Summary: Register a new layer type. Arguments: TypeName: name for the layer type. Return Value: Newly created layer type. See also: GetTypeFromName,GetTypeName,RegisterType,UnRegisterType,SetAssociatedParam,SetAssociatedColor *************************************************/ virtual int RegisterType(CKSTRING TypeName)=0; virtual int UnRegisterType(CKSTRING TypeName)=0; /************************************************* Summary: Sets the type of data associated with a layer type. Input Arguments: type: Layer Type param: CKGUID of the parameter type associated with the layer type. Return Value: CK_OK if successful or an error code otherwise (invalid layer type). Remarks: Most of the time an integer data (CKPGUID_INT) is associated with layer types. Some exception such as the path finding use a Linker type (CKPGUID_LINKERGRAPH_ENUM) when linking grids together. See also: GetTypeFromName,GetTypeName,RegisterType,SetAssociatedColor *************************************************/ virtual CKERROR SetAssociatedParam(int type, CKGUID param)=0; /************************************************* Summary: Gets the type of data associated with a layer type. Input Arguments: type: Layer Type Return Value: CKGUID of the parameter type associated with the layer type. Remarks: Most of the time an integer data (CKPGUID_INT) is associated with layer types. Some exception such as the path finding use a Linker type (CKPGUID_LINKERGRAPH_ENUM) when linking grids together. See also: GetTypeFromName,GetTypeName,RegisterType,SetAssociatedParam *************************************************/ virtual CKGUID GetAssociatedParam(int type)=0; /************************************************* Summary: Sets the color associated with a layer type. Input Arguments: type: Layer Type col: Color to associate to this layer type. Return Value: CK_OK if successful or an error code otherwise (invalid layer type). Remarks: The color association is used in the Dev Interface to draw the layer data. See also: GetTypeFromName,GetTypeName,RegisterType,GetAssociatedColor *************************************************/ virtual CKERROR SetAssociatedColor(int type, VxColor *col)=0; /************************************************* Summary: Returns the color associated with a layer type. Input Arguments: type: Layer Type Output Arguments: col: Color associated with layer type. Return Value: CK_OK if successful or an error code otherwise (invalid layer type). Remarks: The color association is used in the Dev Interface to draw the layer data. See also: GetTypeFromName,GetTypeName,RegisterType,SetAssociatedColor *************************************************/ virtual CKERROR GetAssociatedColor(int type, VxColor *col)=0; /************************************************* Summary: Returns the number of registered layer types. Return Value: Number of existing layer type. See also: GetTypeFromName,GetTypeName,RegisterType,UnRegisterType *************************************************/ virtual int GetLayerTypeCount()=0; //____________________________________________________ // CLASSIFICATION /************************************************* Summary: Returns an attribute given a classification name See also: GetClassificationName,RegisterClassification,GetGridClassificationCatego,CKAttributeManager *************************************************/ virtual int GetClassificationFromName(CKSTRING ClassificationName)=0; /************************************************* Summary: Returns the classification name associated with an attribute See also: GetClassificationFromName,RegisterClassification,GetGridClassificationCatego,CKAttributeManager *************************************************/ virtual CKSTRING GetClassificationName(int Classification)=0; /************************************************* Summary: Register a new classification name (new attribute) See also: GetClassificationFromName,GetClassificationName,GetGridClassificationCatego,CKAttributeManager *************************************************/ virtual int RegisterClassification(CKSTRING ClassificationName)=0; /************************************************* Summary: Gets the attribute category used by the grid manager See also: GetClassificationFromName,GetClassificationName,RegisterClassification,CKAttributeManager *************************************************/ virtual int GetGridClassificationCatego()=0; //____________________________________________________ // GRID FINDING /************************************************* Summary: Gets the list of CKGrids Arguments: flag: GRID_FLAG_SCENE to return the list of grids in the current scene or GRID_FLAG_LEVEL to return the global list of grids. Return Value: A XObjectPointerArray reference to the scene or global list of CKGrids. See also: GetPreferredGrid,IsIngrid *************************************************/ virtual const XObjectPointerArray& GetGridArray( int flag=GRID_FLAG_SCENE )=0; /************************************************* Summary: Gets the nearest grid from a 3d position expressed in a referential Arguments: pos: the 3d position expressed in the referential ref ref: the referential of the position (NULL by default = World) Return Value: the nearest grid if successful, NULL if no grid was found. See also: GetPreferredGrid,IsIngrid *************************************************/ virtual CKGrid *GetNearestGrid( VxVector *pos, CK3dEntity *ref=NULL )=0; /************************************************* Summary: Gets the grid containing a point given its priority. Arguments: pos: position to consider, expressed in the referential ref ref: the referential in which the pos are expressed (NULL by default = World) Return Value: The grid with the highest priority that contains the point pos. See also:GetNearestGrid,IsIngrid *************************************************/ virtual CKGrid *GetPreferredGrid( VxVector *pos, CK3dEntity *ref=NULL )=0; /************************************************* Summary: Returns whether a given point is inside a grid range. Arguments: grid: Grid in which the point should be tested. pos: position to consider, expressed in the referential ref ref: the referential in which the pos are expressed (NULL by default = World) Return Value: TRUE is pos is inside the grid range. See also:GetNearestGrid,GetPreferredGrid *************************************************/ virtual CKBOOL IsInGrid( CKGrid *grid, VxVector *pos, CK3dEntity *ref=NULL )=0; /************************************************* Summary: Returns the number of grids Input Arguments: flag: GRID_FLAG_SCENE to return the number of grid in the current scene or GRID_FLAG_LEVEL to return the total number of grids. Return Value: Number of grids See also: GetGridObject *************************************************/ virtual int GetGridObjectCount( int flag=GRID_FLAG_SCENE )=0; /************************************************* Summary: Returns the Nth grid in the scene or level. Input Arguments: pos: index of the grid to return. flag: GRID_FLAG_SCENE to return the number of grid in the current scene or GRID_FLAG_LEVEL to return the total number of grids. Return Value: A pointer to a CKGrid. See also: GetGridObjectCount *************************************************/ virtual CKGrid* GetGridObject(int pos, int flag=GRID_FLAG_SCENE )=0; //____________________________________________________ // OTHER ... /************************************************* Summary: Fills grids with an object shape. Input Arguments: ent: Entity to use to fill grids. layerType: Layer type on which values should be written. fillVal: A pointer to the value to set in the layerType layer. See also: CKLayer::SetValue *************************************************/ virtual void FillGridWithObjectShape (CK3dEntity *ent, int layerType, void *fillVal)=0; virtual void FillGridWithObjectShape (CK3dEntity *ent, int solidLayerType, int shapeLayerType, void *fillVal)=0; //____________________________________________________ // LINKER GRAPH //virtual void InitLinkerIterator (int layerType, unsigned int flags, LinkerGraphIterator &it)=0; #ifdef DOCJETDUMMY // Docjet secret macro #else virtual void Init()=0; virtual CKERROR OnCKInit()=0; virtual CKERROR PostClearAll()=0; virtual CKERROR PostLoad()=0; virtual CKERROR PreSave()=0; virtual CKERROR OnCKReset()=0; virtual CKERROR PreProcess()=0; virtual CKDWORD GetValidFunctionsMask() { return CKMANAGER_FUNC_PostClearAll| CKMANAGER_FUNC_OnCKInit| CKMANAGER_FUNC_PreSave| CKMANAGER_FUNC_PostLoad| CKMANAGER_FUNC_OnCKReset| CKMANAGER_FUNC_PreProcess; } virtual CKERROR LoadData(CKStateChunk *chunk,CKFile* LoadedFile)=0; virtual CKStateChunk* SaveData(CKFile *SavedFile)=0; //-------------------------------------------------------- //// Private Part CKGridManager(CKContext *Context,CKGUID guid,char* name); virtual ~CKGridManager() {} virtual void ClearData()=0; virtual void InitData()=0; int m_RemapCount; int *m_Remap; // Array for remapping of the layer type parameters {secret} #endif // Docjet secret macro }; // CK2 VERSION ... #endif