mirror of
https://github.com/ptitSeb/Serious-Engine
synced 2024-11-24 19:30:26 +01:00
147 lines
4.4 KiB
C++
147 lines
4.4 KiB
C++
218
|
|
%{
|
|
#include "Entities/StdH/StdH.h"
|
|
#include <Entities/AnimationHub.h>
|
|
%}
|
|
|
|
uses "Entities/ModelHolder2";
|
|
uses "Entities/Light";
|
|
|
|
// event sent to the entity that should change animation
|
|
event EChangeAnim {
|
|
INDEX iModelAnim,
|
|
BOOL bModelLoop,
|
|
INDEX iTextureAnim,
|
|
BOOL bTextureLoop,
|
|
INDEX iLightAnim,
|
|
INDEX iAmbientLightAnim,
|
|
BOOL bLightLoop,
|
|
BOOL bAmbientLightLoop,
|
|
COLOR colAmbient,
|
|
COLOR colDiffuse,
|
|
};
|
|
|
|
class CAnimationChanger : CRationalEntity {
|
|
name "AnimationChanger";
|
|
thumbnail "Thumbnails\\AnimationChanger.tbn";
|
|
features "HasName", "HasTarget", "IsTargetable";
|
|
|
|
properties:
|
|
1 CTString m_strName "Name" 'N' = "Animation changer",
|
|
2 CTString m_strDescription = "",
|
|
3 CEntityPointer m_penTarget "Target" 'T' COLOR(C_GREEN|0xFF),
|
|
4 ANIMATION m_iModelAnim "Model Animation" 'M' = 0,
|
|
5 BOOL m_bModelLoop "Model Looping" = FALSE,
|
|
6 ANIMATION m_iTextureAnim "Texture Animation" 'X' = 0,
|
|
7 BOOL m_bTextureLoop "Texture Looping" = FALSE,
|
|
8 ANIMATION m_iLightAnim "Diffuse Light Animation" 'L' = 0,
|
|
9 BOOL m_bLightLoop "Diffuse Light Looping" = FALSE,
|
|
10 ANIMATION m_iAmbientLightAnim "Ambient Light Animation" 'B' = 0,
|
|
11 BOOL m_bAmbientLightLoop "Ambient Light Looping" = FALSE,
|
|
12 COLOR m_colAmbient "Ambient Light Color" 'A' = C_dBLUE,
|
|
13 COLOR m_colDiffuse "Diffuse Light Color" 'C' = C_GRAY,
|
|
|
|
components:
|
|
1 model MODEL_CHANGER "Models\\Editor\\AnimationChanger.mdl",
|
|
2 texture TEXTURE_CHANGER "Models\\Editor\\AnimationChanger.tex"
|
|
|
|
functions:
|
|
const CTString &GetDescription(void) const {
|
|
((CTString&)m_strDescription).PrintF("-><none>");
|
|
if (m_penTarget!=NULL) {
|
|
((CTString&)m_strDescription).PrintF("->%s",(const char *) m_penTarget->GetName());
|
|
}
|
|
return m_strDescription;
|
|
}
|
|
|
|
/* Get anim data for given animation property - return NULL for none. */
|
|
CAnimData *GetAnimData(SLONG slPropertyOffset)
|
|
{
|
|
CEntity *penTarget = m_penTarget;
|
|
|
|
if (penTarget==NULL) {
|
|
return NULL;
|
|
}
|
|
|
|
if (IsOfClass(penTarget, "AnimationHub")) {
|
|
penTarget = ((CAnimationHub*)penTarget)->m_penTarget0;
|
|
}
|
|
|
|
if (penTarget==NULL) {
|
|
return NULL;
|
|
}
|
|
|
|
// if modelholder
|
|
if (IsOfClass(penTarget, "ModelHolder2")) {
|
|
CModelHolder2 *penModel = (CModelHolder2*)&*penTarget;
|
|
if (slPropertyOffset==offsetof(CAnimationChanger, m_iModelAnim)) {
|
|
return penModel->GetModelObject()->GetData();
|
|
} else if (slPropertyOffset==offsetof(CAnimationChanger, m_iTextureAnim)) {
|
|
return penModel->GetModelObject()->mo_toTexture.GetData();
|
|
} else if (slPropertyOffset==offsetof(CAnimationChanger, m_iLightAnim)) {
|
|
return penModel->m_aoLightAnimation.GetData();
|
|
}
|
|
|
|
// if light
|
|
} else if (IsOfClass(penTarget, "Light")) {
|
|
CLight *penLight = (CLight*)&*penTarget;
|
|
|
|
if (slPropertyOffset==offsetof(CAnimationChanger, m_iLightAnim))
|
|
{
|
|
return penLight->m_aoLightAnimation.GetData();
|
|
}
|
|
else if (slPropertyOffset==offsetof(CAnimationChanger, m_iAmbientLightAnim))
|
|
{
|
|
return penLight->m_aoAmbientLightAnimation.GetData();
|
|
}
|
|
}
|
|
|
|
return CEntity::GetAnimData(slPropertyOffset);
|
|
};
|
|
|
|
procedures:
|
|
Main()
|
|
{
|
|
InitAsEditorModel();
|
|
SetPhysicsFlags(EPF_MODEL_IMMATERIAL);
|
|
SetCollisionFlags(ECF_IMMATERIAL);
|
|
|
|
// set appearance
|
|
SetModel(MODEL_CHANGER);
|
|
SetModelMainTexture(TEXTURE_CHANGER);
|
|
|
|
// check target type
|
|
if (m_penTarget!=NULL &&
|
|
!IsOfClass(m_penTarget, "AnimationHub") &&
|
|
!IsOfClass(m_penTarget, "ModelHolder2") &&
|
|
!IsOfClass(m_penTarget, "Light")) {
|
|
WarningMessage("Target must be AnimationHub ModelHolder2 or Light!");
|
|
m_penTarget=NULL;
|
|
}
|
|
if (m_penTarget==NULL) {
|
|
return;
|
|
}
|
|
|
|
//main loop
|
|
wait() {
|
|
on (EBegin) : { resume; }
|
|
on (EStart) : {
|
|
EChangeAnim eChange;
|
|
eChange.iModelAnim =m_iModelAnim ;
|
|
eChange.iTextureAnim =m_iTextureAnim;
|
|
eChange.iLightAnim =m_iLightAnim ;
|
|
eChange.iAmbientLightAnim =m_iAmbientLightAnim;
|
|
eChange.bModelLoop =m_bModelLoop ;
|
|
eChange.bTextureLoop =m_bTextureLoop;
|
|
eChange.bLightLoop =m_bLightLoop ;
|
|
eChange.colAmbient =m_colAmbient ;
|
|
eChange.colDiffuse =m_colDiffuse ;
|
|
m_penTarget->SendEvent(eChange);
|
|
resume;
|
|
}
|
|
}
|
|
return;
|
|
}
|
|
};
|
|
|