Files
FC1/CryCommon/IBindable.h
romkazvo 34d6c5d489 123
2023-08-07 19:29:24 +08:00

127 lines
4.9 KiB
C

//////////////////////////////////////////////////////////////////////
//
// CryEngine Source code
//
// File:IBindable.h
// Interface for IBindable class, which must be implemented by all
// objects that can be bound to a character bone
//
// History:
// April 07, 2003: Created by Sergiy Migdalskiy
//
//////////////////////////////////////////////////////////////////////
#ifndef _CRY_COMMON_BINDABLE_INTERFACE_HDR_
#define _CRY_COMMON_BINDABLE_INTERFACE_HDR_
// Description:
// This interface define a way to allow an object to be bound to a
// character bone. An IBindable should usually be attached to a bone using
// member functions of ICryCharInstance.
struct IBindable
{
// Summary:
// Get the bounding box
// Arguments:
// Mins - Position of the bottom left close corner of the bounding box
// Maxs - Position of the top right far corner of the bounding box
virtual void GetBBox(Vec3& Mins, Vec3& Maxs)=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;
// 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;
// renders the shadow volumes of this whole object (together with attachments if any)
// the implementation may or may not implement the limit lod functionality: if it does,
// it will render the specified or lower LOD
virtual void RenderShadowVolumes(const struct SRendParams *pParams, int nLimitLod = -1)=0;
//! Sets shader template for rendering
virtual bool SetShaderTemplate(int nTemplate, const char *TemplName, const char *ShaderName, bool bOnlyRegister=false, int * pnNewTemplateId=NULL)=0;
// Description:
// Values for the nFlags parameter of SetShaderTemplateName.
// Summary:
// Flags used for SetShaderTemplateName
enum ECharShaderFlags
{
FLAGS_SET_SHADER_RECURSIVE = 1
};
//! Set shader template to be used with character
virtual bool SetShaderTemplateName(const char *TemplName, int Id, const char *ShaderName=0,struct IMatInfo *pCustomMaterial=0,unsigned nFlags = 0)
{
// [Sergiy] please ask Tiago about details: this function maps to SetShaderTemplate because some of the derived classes (IStatObj)
// don't implement it, but do implement SetShaderTemplate. The mapping is exactly like in ScriptObjectEntity::SetShader function
return SetShaderTemplate(-1,TemplName,NULL);
}
//there must be only one function
// 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;
//! Start the specified animation with the given parameters, if the bindable is an animatable object
virtual bool StartAnimation (const char* szAnimName, const struct CryCharAnimationParams& params){return false;}
//! Start the specified by parameters morph target, if the bindable is a morphable object
virtual void StartMorph (const char* szMorphTarget, const struct CryCharMorphParams& params) {}
//! Resets all animation layers ( stops all animations )
virtual void ResetAnimations() {}
//! Stops all morphs
virtual void StopAllMorphs() {}
//! freezes all currently playing morphs at the point they're at
virtual void FreezeAllMorphs(){}
//! Processes skining (call this function every frame to animate character)
//! dwFlags is a bitwise OR of one of the flags specified in the UpdateEnum enumeration
virtual void Update (Vec3 vPos = Vec3(0,0,0), float fRadius=0, unsigned uFlags = 0) {}
//! start preloading of object resources
virtual void PreloadResources(float fDist, float fTime, int dwFlags) = 0;
// Summary:
// Get the character instance, if valid
// Return Value:
// A pointer to an IStatObj object if the IBindable represent a static
// object, else the NULL value will be returned.
virtual struct IStatObj* GetIStatObj() {return NULL;}
// Summary:
// Get the character instance, if valid
// Return Value:
// A pointer to an ICryCharInstance object if the IBindable represent
// a character instance, else the NULL value will be returned.
virtual struct ICryCharInstance* GetICryCharInstance() {return NULL;}
};
#endif