SceneView3D ::SceneView3D(Context* context, SceneEditor3D *sceneEditor) : UIView3D(context), yaw_(0.0f), pitch_(0.0f), mouseLeftDown_(false), mouseMoved_(false), enabled_(true) { sceneEditor_ = sceneEditor; ResourceCache* cache = GetSubsystem<ResourceCache>(); scene_ = sceneEditor->GetScene(); debugRenderer_ = scene_->GetComponent<DebugRenderer>(); if (debugRenderer_.Null()) { debugRenderer_ = scene_->CreateComponent<DebugRenderer>(); } octree_ = scene_->GetComponent<Octree>(); if (octree_.Null()) { LOGWARNING("Scene without an octree loaded"); octree_ = scene_->CreateComponent<Octree>(); } cameraNode_ = scene_->CreateChild("Camera"); cameraNode_->SetTemporary(true); camera_ = cameraNode_->CreateComponent<Camera>(); debugRenderer_ = scene_->GetComponent<DebugRenderer>(); assert(debugRenderer_.NotNull()); octree_ = scene_->GetComponent<Octree>(); assert(octree_.NotNull()); cameraNode_->SetPosition(Vector3(0, 0, -10)); SetView(scene_, camera_); SetAutoUpdate(false); SubscribeToEvent(E_UPDATE, HANDLER(SceneView3D, HandleUpdate)); SubscribeToEvent(E_EDITORACTIVENODECHANGE, HANDLER(SceneView3D, HandleEditorActiveNodeChange)); SubscribeToEvent(E_POSTRENDERUPDATE, HANDLER(SceneView3D, HandlePostRenderUpdate)); // TODO: generate this event properly VariantMap eventData; eventData[EditorActiveSceneChange::P_SCENE] = scene_; SendEvent(E_EDITORACTIVESCENECHANGE, eventData); delegate_->SetIsFocusable(true); }
void ProcessEvent(EFlowEvent event, SActivationInfo* pActivationInfo) { switch (event) { case eFE_Initialize: { SetAutoUpdate(pActivationInfo, GetPortBool(pActivationInfo, eIP_Auto)); break; } case eFE_Activate: { if (IsPortActive(pActivationInfo, eIP_Auto)) { SetAutoUpdate(pActivationInfo, GetPortBool(pActivationInfo, eIP_Auto)); } else if (IsPortActive(pActivationInfo, eIP_Freq)) { m_frequency = GetPortFloat(pActivationInfo, eIP_Freq); } else if (IsPortActive(pActivationInfo, eIP_Sync)) { Sync(pActivationInfo); } break; } case eFE_Update: { CTimeValue delta = gEnv->pTimer->GetFrameStartTime() - m_prevTime; if (delta.GetSeconds() >= m_frequency) { Sync(pActivationInfo); } break; } } }