コード例 #1
0
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);


}
コード例 #2
0
	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;
		}
		}
	}