612 %{ #include "Entities/StdH/StdH.h" #include "Entities/WorldSettingsController.h" #include "Entities/BackgroundViewer.h" %} uses "Entities/Marker"; enum BlendControllerType { 0 BCT_NONE "None", // no FX 1 BCT_PYRAMID_PLATES "Appear pyramid plates", // effect of appearing of pyramid plates 2 BCT_ACTIVATE_PLATE_1 "Activate plate 1", // plate 1 activating 3 BCT_ACTIVATE_PLATE_2 "Activate plate 2", // plate 2 activating 4 BCT_ACTIVATE_PLATE_3 "Activate plate 3", // plate 3 activating 5 BCT_ACTIVATE_PLATE_4 "Activate plate 4", // plate 4 activating 6 BCT_ACTIVATE_PYRAMID_MORPH_ROOM "Pyramid morph room", // pyramid morph room activated }; class CBlendController: CMarker { name "Blend controller"; thumbnail "Thumbnails\\BlendController.tbn"; features "IsImportant"; properties: 1 enum BlendControllerType m_bctType "Blend type" 'Y' = BCT_NONE, // type of effect components: 1 model MODEL_CONTROLLER "Models\\Editor\\BlendController.mdl", 2 texture TEXTURE_CONTROLLER "Models\\Editor\\BlendController.tex", functions: // ----------- Obtain world settings controller CWorldSettingsController *GetWSC(void) { CWorldSettingsController *pwsc = NULL; // obtain bcg viewer CBackgroundViewer *penBcgViewer = (CBackgroundViewer *) GetWorld()->GetBackgroundViewer(); if( penBcgViewer != NULL) { // obtain world settings controller pwsc = (CWorldSettingsController *) &*penBcgViewer->m_penWorldSettingsController; } return pwsc; } /* Handle an event, return false if the event is not handled. */ BOOL HandleEvent(const CEntityEvent &ee) { // obtain world settings controller CWorldSettingsController *pwsc = GetWSC(); if( pwsc == NULL) { return FALSE; } FLOAT tmNow = _pTimer->CurrentTick(); if (ee.ee_slEvent==EVENTCODE_EActivate) { switch(m_bctType) { case BCT_PYRAMID_PLATES: pwsc->m_tmPyramidPlatesStart = tmNow; break; case BCT_ACTIVATE_PLATE_1: pwsc->m_tmActivatedPlate1 = tmNow; pwsc->m_tmDeactivatedPlate1 = 1e6; break; case BCT_ACTIVATE_PLATE_2: pwsc->m_tmActivatedPlate2 = tmNow; pwsc->m_tmDeactivatedPlate2 = 1e6; break; case BCT_ACTIVATE_PLATE_3: pwsc->m_tmActivatedPlate3 = tmNow; pwsc->m_tmDeactivatedPlate3 = 1e6; break; case BCT_ACTIVATE_PLATE_4: pwsc->m_tmActivatedPlate4 = tmNow; pwsc->m_tmDeactivatedPlate4 = 1e6; break; case BCT_ACTIVATE_PYRAMID_MORPH_ROOM: pwsc->m_tmPyramidMorphRoomActivated = tmNow; break; } } else if (ee.ee_slEvent==EVENTCODE_EDeactivate) { switch(m_bctType) { case BCT_ACTIVATE_PLATE_1: pwsc->m_tmDeactivatedPlate1 = tmNow; break; case BCT_ACTIVATE_PLATE_2: pwsc->m_tmDeactivatedPlate2 = tmNow; break; case BCT_ACTIVATE_PLATE_3: pwsc->m_tmDeactivatedPlate3 = tmNow; break; case BCT_ACTIVATE_PLATE_4: pwsc->m_tmDeactivatedPlate4 = tmNow; break; } } return FALSE; } procedures: Main() { // init model InitAsEditorModel(); SetPhysicsFlags(EPF_MODEL_IMMATERIAL); SetCollisionFlags(ECF_IMMATERIAL); // set appearance SetModel(MODEL_CONTROLLER); SetModelMainTexture(TEXTURE_CONTROLLER); return; } };