/* Copyright (c) 2002-2012 Croteam Ltd. All rights reserved. */ 228 %{ #include "StdH.h" #include %} class CAnimationHub : CRationalEntity { name "AnimationHub"; thumbnail "Thumbnails\\AnimationHub.tbn"; features "HasName", "IsTargetable"; properties: 1 CTString m_strName "Name" 'N' = "Animation hub", 2 CTString m_strDescription = "", 3 FLOAT m_tmDelayEach "Delay each" 'D' = 0.0f, 10 CEntityPointer m_penTarget0 "Target0" 'T' COLOR(C_GREEN|0xFF), 11 CEntityPointer m_penTarget1 "Target1" COLOR(C_GREEN|0xFF), 12 CEntityPointer m_penTarget2 "Target2" COLOR(C_GREEN|0xFF), 13 CEntityPointer m_penTarget3 "Target3" COLOR(C_GREEN|0xFF), 14 CEntityPointer m_penTarget4 "Target4" COLOR(C_GREEN|0xFF), 15 CEntityPointer m_penTarget5 "Target5" COLOR(C_GREEN|0xFF), 16 CEntityPointer m_penTarget6 "Target6" COLOR(C_GREEN|0xFF), 17 CEntityPointer m_penTarget7 "Target7" COLOR(C_GREEN|0xFF), 18 CEntityPointer m_penTarget8 "Target8" COLOR(C_GREEN|0xFF), 19 CEntityPointer m_penTarget9 "Target9" COLOR(C_GREEN|0xFF), 20 FLOAT m_tmDelay0 "Delay0" = 0.0f, 21 FLOAT m_tmDelay1 "Delay1" = 0.0f, 22 FLOAT m_tmDelay2 "Delay2" = 0.0f, 23 FLOAT m_tmDelay3 "Delay3" = 0.0f, 24 FLOAT m_tmDelay4 "Delay4" = 0.0f, 25 FLOAT m_tmDelay5 "Delay5" = 0.0f, 26 FLOAT m_tmDelay6 "Delay6" = 0.0f, 27 FLOAT m_tmDelay7 "Delay7" = 0.0f, 28 FLOAT m_tmDelay8 "Delay8" = 0.0f, 29 FLOAT m_tmDelay9 "Delay9" = 0.0f, 100 INDEX m_iModelAnim = 0, 101 BOOL m_bModelLoop = 0, 102 INDEX m_iTextureAnim = 0, 103 BOOL m_bTextureLoop = 0, 104 INDEX m_iLightAnim = 0, 105 BOOL m_bLightLoop = 0, 106 COLOR m_colAmbient = 0, 107 COLOR m_colDiffuse = 0, 110 INDEX m_iCounter = 0, components: 1 model MODEL_HUB "Models\\Editor\\AnimationHub.mdl", 2 texture TEXTURE_HUB "Models\\Editor\\AnimationHub.tex" functions: const CTString &GetDescription(void) const { ((CTString&)m_strDescription).PrintF("->"); if (m_penTarget0!=NULL) { ((CTString&)m_strDescription).PrintF("->%s...", (const char *) m_penTarget0->GetName()); } return m_strDescription; } procedures: RelayEvents() { // for each target m_iCounter=0; while(m_iCounter<10) { // get delay FLOAT fDelay = m_tmDelayEach + (&m_tmDelay0)[m_iCounter]; // if has delay if (fDelay>0) { // wait autowait(fDelay); } // get the target CEntity *penTarget = (&m_penTarget0)[m_iCounter]; // if no more targets if (penTarget==NULL) { // stop jump WaitChange(); } // sent event to it EChangeAnim eca; eca.iModelAnim = m_iModelAnim ; eca.bModelLoop = m_bModelLoop ; eca.iTextureAnim = m_iTextureAnim; eca.bTextureLoop = m_bTextureLoop; eca.iLightAnim = m_iLightAnim ; eca.bLightLoop = m_bLightLoop ; eca.colAmbient = m_colAmbient ; eca.colDiffuse = m_colDiffuse ; penTarget->SendEvent(eca); m_iCounter++; } jump WaitChange(); } WaitChange() { // wait forever while(TRUE) { wait() { on (EChangeAnim eca) : { m_iModelAnim = eca.iModelAnim ; m_bModelLoop = eca.bModelLoop ; m_iTextureAnim = eca.iTextureAnim; m_bTextureLoop = eca.bTextureLoop; m_iLightAnim = eca.iLightAnim ; m_bLightLoop = eca.bLightLoop ; m_colAmbient = eca.colAmbient ; m_colDiffuse = eca.colDiffuse ; jump RelayEvents(); } } } } Main() { InitAsEditorModel(); SetPhysicsFlags(EPF_MODEL_IMMATERIAL); SetCollisionFlags(ECF_IMMATERIAL); // set appearance SetModel(MODEL_HUB); SetModelMainTexture(TEXTURE_HUB); // check target types for (INDEX i=0; i<10; i++) { CEntityPointer &penTarget = (&m_penTarget0)[i]; if (penTarget!=NULL && !IsOfClass(penTarget, "ModelHolder2") && !IsOfClass(penTarget, "Light")) { WarningMessage("All targets must be ModelHolder2 or Light!"); penTarget=NULL; } } jump WaitChange(); } };