292 lines
9.2 KiB
C++
292 lines
9.2 KiB
C++
//////////////////////////////////////////////////////////////////////
|
|
//
|
|
// CryEngine Source code
|
|
//
|
|
// File:IStatObj.h
|
|
// Interface for CStatObj class
|
|
//
|
|
// History:
|
|
// -:Created by Vladimir Kajalin
|
|
//
|
|
//////////////////////////////////////////////////////////////////////
|
|
|
|
#ifndef _IStatObj_H_
|
|
#define _IStatObj_H_
|
|
|
|
// forward declarations
|
|
//////////////////////////////////////////////////////////////////////
|
|
class CIndexedMesh;
|
|
struct CLeafBuffer;
|
|
template <class T> class list2;
|
|
struct ShadowMapLightSourceInstance;
|
|
struct ShadowMapLightSource;
|
|
class CCObject;
|
|
struct ItShadowVolume;
|
|
struct IShader;
|
|
class CDLight;
|
|
class CIndoorArea;
|
|
|
|
//! Interface to non animated object
|
|
struct phys_geometry;
|
|
|
|
#include "IBindable.h"
|
|
|
|
// Summary:
|
|
// Interface to hold static object data
|
|
struct IStatObj: public IBindable
|
|
{
|
|
// Description:
|
|
// Provide access to the faces, vertices, texture coordinates, normals and
|
|
// colors of the object.
|
|
// Return Value:
|
|
//
|
|
// Summary:
|
|
// Get the object geometry
|
|
virtual CIndexedMesh * GetTriData()=0;
|
|
|
|
//! Access to rendering geometry for indoor engine ( optimized vert arrays, lists of shader pointers )
|
|
virtual CLeafBuffer * GetLeafBuffer()=0;
|
|
//! Assign leaf buffer to static object.
|
|
virtual void SetLeafBuffer( CLeafBuffer *buf ) = 0;
|
|
//! Prepare leaf buffer for lightmaps, return true if success
|
|
virtual bool EnableLightamapSupport() = 0;
|
|
|
|
// Description:
|
|
// Returns the physical representation of the object.
|
|
// Arguments:
|
|
// nType - Pass 0 to get the physic geometry or pass 1 to get the obstruct geometry
|
|
// Return Value:
|
|
// A pointer to a phys_geometry class.
|
|
// Summary:
|
|
// Get the physic representation
|
|
virtual phys_geometry * GetPhysGeom(int nType = 0)=0;
|
|
|
|
//! Returns script material name
|
|
virtual const char * GetScriptMaterialName(int Id=-1)=0;
|
|
|
|
// Return Value:
|
|
// A Vec3 object countaining the bounding box.
|
|
// Summary:
|
|
// Get the minimal bounding box component
|
|
virtual Vec3 GetBoxMin()=0;
|
|
|
|
// Return Value:
|
|
// A Vec3 object countaining the bounding box.
|
|
// Summary:
|
|
// Get the minimal bounding box component
|
|
virtual Vec3 GetBoxMax()=0;
|
|
|
|
// Arguments:
|
|
// Minimum bounding box component
|
|
// Summary:
|
|
// Set the minimum bounding box component
|
|
virtual void SetBBoxMin(const Vec3 &vBBoxMin)=0;
|
|
|
|
// Arguments:
|
|
// Minimum bounding box component
|
|
// Summary:
|
|
// Set the minimum bounding box component
|
|
virtual void SetBBoxMax(const Vec3 &vBBoxMax)=0;
|
|
|
|
// Summary:
|
|
// Get the object radius
|
|
// Return Value:
|
|
// A float containing the radius
|
|
virtual float GetRadius()=0;
|
|
|
|
//! Sets shader template for rendering
|
|
// virtual bool SetShaderTemplate(int nTemplate, const char *TemplName, const char *ShaderName, bool bOnlyRegister=false)=0;
|
|
|
|
//! Sets shader float parameter
|
|
virtual void SetShaderFloat(const char *Name, float Val)=0;
|
|
|
|
//DOC-IGNORE-BEGIN
|
|
// not implemented
|
|
//! Sets color parameter
|
|
virtual void SetColor(const char *Name, float fR, float fG, float fB, float fA)=0;
|
|
//DOC-IGNORE-END
|
|
|
|
// Description:
|
|
// Reloads one or more component of the object. The possible flags
|
|
// are FRO_SHADERS, FRO_TEXTURES and FRO_GEOMETRY.
|
|
// Arguments:
|
|
// nFlags - One or more flag which indicate which element of the object
|
|
// to reload
|
|
// Summary:
|
|
// Reloads the object
|
|
virtual void Refresh(int nFlags)=0;
|
|
|
|
// Description:
|
|
// Registers the object elements into the renderer.
|
|
// Arguments:
|
|
// rParams - Render parameters
|
|
// nLogLevel - Level of the LOD
|
|
// Summary:
|
|
// Renders the object
|
|
virtual void Render(const struct SRendParams & rParams, const Vec3& t, int nLodLevel=0)=0;
|
|
|
|
// Description:
|
|
// Returns the LOD object, if present.
|
|
// Arguments:
|
|
// nLodLevel - Level of the LOD
|
|
// Return Value:
|
|
// A static object with the desired LOD. The value NULL will be return if
|
|
// there isn't any LOD object for the level requested.
|
|
// Summary:
|
|
// Get the LOD object
|
|
virtual IStatObj * GetLodObject(int nLodLevel)=0;
|
|
|
|
// Description:
|
|
// Draw the shadow volumes for the object into the stencil buffer.
|
|
// Arguments:
|
|
// rParams - Rendering Parameters
|
|
// nLimitLOD - The maximum LOD to be used, this functionality may or
|
|
// may not supported in the implementation
|
|
// Summary:
|
|
// Draw the shadow volumes
|
|
virtual void RenderShadowVolumes(const struct SRendParams *pParams, int nLimitLod = -1)=0;
|
|
|
|
// Description:
|
|
// Returns a light source specified by the id.
|
|
// Arguments:
|
|
// nId - Id of the light source
|
|
// Return Value:
|
|
// A pointer to a CDLight object will be returned. In case the id
|
|
// specified as parameter was out of range, the value NULL will be
|
|
// returned.
|
|
// Summary:
|
|
// Get the light sources
|
|
virtual const CDLight * GetLightSources(int nId) = 0;
|
|
|
|
// Summary:
|
|
// Returns the folder name of the object
|
|
// Return Value:
|
|
// A null terminated string which contain the folder name of the object.
|
|
virtual const char *GetFolderName()=0;
|
|
|
|
// Summary:
|
|
// Returns the filename of the object
|
|
// Return Value:
|
|
// A null terminated string which contain the filename of the object.
|
|
virtual const char *GetFileName()=0;
|
|
|
|
// Summary:
|
|
// Returns the name of the geometry
|
|
// Return Value:
|
|
// A null terminated string which contains the name of the geometry
|
|
virtual const char *GetGeoName()=0;
|
|
|
|
// Summary:
|
|
// Compares if another object is the same
|
|
// Arguments:
|
|
// szFileName - Filename of the object to compare
|
|
// szGeomName - Geometry name of the object to compare (optional)
|
|
// Return Value:
|
|
// A boolean which equals to true in case both object are the same, or false in the opposite case.
|
|
virtual bool IsSameObject(const char * szFileName, const char * szGeomName)=0;
|
|
|
|
// Description:
|
|
// Will return the position of the helper named in the argument. The
|
|
// helper should have been specified during the exporting process of
|
|
// the cgf file.
|
|
// Arguments:
|
|
// szHelperName - A null terminated string holding the name of the helper
|
|
// Return Value:
|
|
// A Vec3 object which contains the position.
|
|
// Summary:
|
|
// Gets the position of a specified helper
|
|
virtual Vec3 GetHelperPos(const char * szHelperName)=0;
|
|
|
|
//! Returns name, position and rotation for specified helper id, returns false if id is out of range
|
|
virtual const char *GetHelperById(int nId, Vec3 & vPos, Matrix44 * pMat = NULL, int * pnType = NULL)=0;
|
|
|
|
// Description:
|
|
// Will return the matrix of the helper named in the argument. The
|
|
// helper should have been specified during the exporting process of
|
|
// the cgf file.
|
|
// Arguments:
|
|
// szHelperName - A null terminated string holding the name of the helper
|
|
// Return Value:
|
|
// A Matrix44 of the object
|
|
// Summary:
|
|
// Gets the matrix of a specified helper
|
|
virtual const Matrix44 * GetHelperMatrixByName(const char * szHelperName) = 0;
|
|
|
|
// Description:
|
|
// Increase the reference count of the object.
|
|
// Summary:
|
|
// Notifies that the object is being used
|
|
virtual void RegisterUser() = 0;
|
|
|
|
// Description:
|
|
// Decrease the reference count of the object. If the reference count
|
|
// reaches zero, the object will be deleted from memory.
|
|
// Summary:
|
|
// Notifies that the object is no longer needed
|
|
virtual void UnregisterUser() = 0;
|
|
|
|
//DOC-IGNORE-BEGIN
|
|
//! Tell us if the object is not found
|
|
virtual bool IsDefaultObject()=0;
|
|
//DOC-IGNORE-END
|
|
|
|
// Summary: Unsupported. Should not be used.
|
|
virtual bool MakeObjectPicture(unsigned char * pRGBAData, int nWidth) = 0;
|
|
|
|
// Summary:
|
|
// Get the shadow volume object
|
|
// Return Value:
|
|
// An ItShadowVolume object.
|
|
virtual ItShadowVolume *GetShadowVolume()=0;
|
|
|
|
// Summary:
|
|
// Set the shadow volume object
|
|
// Arguments:
|
|
// pSvObj - A new shadow volume
|
|
virtual void SetShadowVolume(ItShadowVolume *pSvObj)=0;
|
|
|
|
//! returns occlusion volume in object space
|
|
virtual bool GetOcclusionVolume(list2<Vec3> * & plstOcclVolVerts, list2<int> * & plstOcclVolInds) = 0;
|
|
|
|
// Summary:
|
|
// Free the geometry data
|
|
virtual void FreeTriData() = 0;
|
|
|
|
//DOC-IGNORE-BEGIN
|
|
// Pushes the underlying tree of objects into the given Sizer object for statistics gathering
|
|
virtual void GetMemoryUsage(class ICrySizer* pSizer) {} // TODO: implement
|
|
//DOC-IGNORE-END
|
|
|
|
// Description:
|
|
// Will looks if the object has all the needed shaders to be used as vegetation.
|
|
// Return Value:
|
|
// true will be returned if the object can be used as vegetation, else false will be returned.
|
|
// Summary:
|
|
// Determines if the object can be used as vegetation
|
|
virtual bool CheckValidVegetation() = 0;
|
|
|
|
//DOC-IGNORE-BEGIN
|
|
//! used for sprites
|
|
virtual float & GetRadiusVert() = 0;
|
|
|
|
//! used for sprites
|
|
virtual float & GetRadiusHors() = 0;
|
|
//DOC-IGNORE-END
|
|
|
|
// Summary:
|
|
// Determines if the object has physics capabilities
|
|
virtual bool IsPhysicsExist() = 0;
|
|
|
|
// Summary:
|
|
// Starts preloading textures, shaders and sprites
|
|
virtual void PreloadResources(float fDist, float fTime, int dwFlags) = 0;
|
|
|
|
// Summary:
|
|
// Returns a pointer to the object
|
|
// Return Value:
|
|
// A pointer to the current object, which is simply done like this "return this;"
|
|
virtual struct IStatObj* GetIStatObj() {return this;}
|
|
};
|
|
|
|
#endif // _IStatObj_H_
|