Beispiel #1
0
//----------------------------------------------------------------------------
void ProjTree::OnSelChanged(wxTreeEvent& event)
{
	Project *proj = Project::GetSingletonPtr();
	if (!proj) return;

	wxTreeItemId id = event.GetItem();

	ProjTreeItem *item = GetItem(id);
	if (item)
	{
		void *id = item->GetItemID().GetID();
		const std::string &itemName = item->GetName();

		Object *obj = item->GetObject();
		if (obj)
		{
			PX2_SELECTION.Clear();
			PX2_SELECTION.AddObject(obj);
		}
		else
		{
			PX2_SELECTION.Clear();
		}
	}
}
Beispiel #2
0
//-----------------------------------------------------------------------------
void ProjTree::SetSelectItemLevel(ProjTreeLevel level)
{
	wxTreeItemId selectID = GetSelection();
	ProjTreeItem *item = GetItem(selectID);
	if (item)
	{
		item->SetTreeLevel(level, mIsShowHelpNode);
		SelectItem(item->GetItemID());
	}
}
Beispiel #3
0
//----------------------------------------------------------------------------
void ProjTree::_RemoveObject(PX2::Object *obj)
{
	ProjTreeItem *item = GetItem(obj);
	if (item)
	{
		ProjTreeItem *parItem = item->GetParent();
		if (parItem)
		{
			parItem->RemoveChild(obj);
		}
	}
}
//----------------------------------------------------------------------------
void ProjTree::_AddObject(Object *obj)
{
	Actor *actor = DynamicCast<Actor>(obj);
	Movable *move = DynamicCast<Movable>(obj);
	EffectModule *eftModule = DynamicCast<EffectModule>(obj);

	if (move)
	{
		Node *parNode = DynamicCast<Node>(move->GetParent());
		ProjTreeItem *item = GetItem(parNode);

		if (parNode && item)
		{
			ProjTreeLevel treeLevel = mTreeLevel;

			UIFrame *uiFrame = DynamicCast<UIFrame>(parNode);
			if (uiFrame)
			{
				if (treeLevel == PTL_GENERAL)
					treeLevel = PTL_CHILDREN;
			}

			item->AddChild(move, 0, treeLevel, mIsShowHelpNode);
			Expand(item->GetItemID());
		}
	}
	else if (eftModule)
	{
		EffectableController *eftableCtrl = DynamicCast<EffectableController>(
			eftModule->GetEffectableController());
		ProjTreeItem *item = GetItem(eftableCtrl);
		if (eftableCtrl && item)
		{
			item->AddChild(eftModule, 0, mTreeLevel, mIsShowHelpNode);
			Expand(item->GetItemID());
		}
	}
}
Beispiel #5
0
//----------------------------------------------------------------------------
void ProjTree::DoExecute(Event *event)
{
	if (EditEventSpace::IsEqual(event, EditEventSpace::NewProject) ||
		EditEventSpace::IsEqual(event, EditEventSpace::LoadedProject))
	{
		_RefreshProject();
	}
	else if (EditEventSpace::IsEqual(event, EditEventSpace::CloseProject))
	{
		_ClearProject();
	}
	else if (EditEventSpace::IsEqual(event, EditEventSpace::NewScene))
	{
		_RefreshScene();
	}
	else if (EditEventSpace::IsEqual(event, EditEventSpace::LoadedScene))
	{
		_RefreshScene();
	}
	else if (EditEventSpace::IsEqual(event, EditEventSpace::CloseScene))
	{
		_ClearScene();
	}
	else if (EditEventSpace::IsEqual(event, EditEventSpace::NewUI) ||
		EditEventSpace::IsEqual(event, EditEventSpace::LoadedUI))
	{
		_RefreshUI();
	}
	else if (EditEventSpace::IsEqual(event, EditEventSpace::CloseUI))
	{
		_ClearUI();
	}
	else if (SimuES_E::IsEqual(event, SimuES_E::AddObject))
	{
		Object *object = event->GetData<Object*>();
		_AddObject(object);
	}
	else if (SimuES_E::IsEqual(event, SimuES_E::RemoveObject))
	{
		Object *object = event->GetData<Object*>();
		_RemoveObject(object);
	}
	else if (NirvanaEventSpace::IsEqual(event, NirvanaEventSpace::SetProjTreeLevel))
	{
		int level = event->GetData<int>();
		SetTreeLevel((ProjTreeLevel)level);
	}
	else if (NirvanaEventSpace::IsEqual(event, NirvanaEventSpace::TaggleProjTreeShowHelpNode))
	{
		ShowHelpNode(!IsShowHelpNode());
		SetTreeLevel(GetTreeLevel());
	}
	else if (NirvanaEventSpace::IsEqual(event, NirvanaEventSpace::ObjectNameChanged))
	{
		Object *obj = event->GetData<Object*>();
		ProjTreeItem *item = GetItem(obj);
		if (item) item->SetName(obj->GetName());
	}
	else if (EditEventSpace::IsEqual(event, EditEventSpace::FindActorInProjectTree))
	{
		Object *obj = PX2_SELECTION.GetFirstObject();
		ProjTreeItem *item = GetItem(obj);
		if (item)
		{
			SelectItem(item->GetItemID());
			SetFocus();
		}
	}
	else if (EditEventSpace::IsEqual(event, EditEventSpace::SetEditType))
	{
		Edit::EditType et = PX2_EDIT.GetEditType();

		if (Edit::ET_TERRAIN == et)
		{
			Scene *scene = PX2_PROJ.GetScene();
			TerrainActor *terrainActor = scene->GetTerrainActor();
			if (terrainActor)
			{
				PX2_SELECTION.Clear();
				PX2_SELECTION.AddObject(terrainActor);
			}
		}
	}
}
Beispiel #6
0
//----------------------------------------------------------------------------
void ProjTree::_AddObject(Object *obj)
{
	Actor *actor = DynamicCast<Actor>(obj);
	Movable *move = DynamicCast<Movable>(obj);
	EffectModule *eftModule = DynamicCast<EffectModule>(obj);

	if (actor)
	{
		if (actor->IsDerived(CameraActor::TYPE))
		{
			mItemCameras->AddChild(obj, 0, mTreeLevel, mIsShowHelpNode);
		}
		else if (actor->IsDerived(Character::TYPE))
		{
			mItemCharacters->AddChild(obj, 0, mTreeLevel, mIsShowHelpNode);
		}
		else if (actor->IsDerived(EffectActor::TYPE))
		{
			mItemEffects->AddChild(obj, 0, mTreeLevel, mIsShowHelpNode);
		}
		else if (actor->IsDerived(TriggerActor::TYPE) &&
			!actor->IsDerived(AmbientRegionActor::TYPE))
		{
			mItemTriggers->AddChild(obj, 0, mTreeLevel, mIsShowHelpNode);
		}
		else if (actor->IsDerived(AmbientRegionActor::TYPE))
		{
			mItemAmbientRegions->AddChild(obj, 0, mTreeLevel, mIsShowHelpNode);
		}
		else if (actor->IsDerived(SkyActor::TYPE))
		{
			mItemSky->AddChild(obj, 0, mTreeLevel, mIsShowHelpNode);
		}
		else if (actor->IsDerived(TerrainActor::TYPE))
		{
			mItemTerrain->AddChild(obj, 0, mTreeLevel, mIsShowHelpNode);
		}
		else
		{
			mItemObjects->AddChild(obj, 0, mTreeLevel, mIsShowHelpNode);
		}
	}
	else if (move)
	{
		Node *parNode = DynamicCast<Node>(move->GetParent());
		ProjTreeItem *item = GetItem(parNode);

		if (parNode && item)
		{
			ProjTreeLevel treeLevel = mTreeLevel;

			UIFrame *uiFrame = DynamicCast<UIFrame>(parNode);
			if (uiFrame)
			{
				if (treeLevel == PTL_GENERAL)
					treeLevel = PTL_CHILDREN;
			}

			item->AddChild(move, 0, treeLevel, mIsShowHelpNode);
			Expand(item->GetItemID());
		}
	}
	else if (eftModule)
	{
		EffectableController *eftableCtrl = DynamicCast<EffectableController>(
			eftModule->GetEffectableController());
		ProjTreeItem *item = GetItem(eftableCtrl);
		if (eftableCtrl && item)
		{
			item->AddChild(eftModule, 0, mTreeLevel, mIsShowHelpNode);
			Expand(item->GetItemID());
		}
	}
}
//-----------------------------------------------------------------------------
void ProjTreeItem::SetTreeLevel(ProjTreeLevel level, bool isShowHelpNode)
{
	mTreeLevel = level;
	mIsShowHelpNode = isShowHelpNode;

	Project *proj = DynamicCast<Project>(mObject);
	Scene *scene = DynamicCast<Scene>(mObject);
	if (proj || scene)
		return;

	Actor *actor = DynamicCast<Actor>(mObject);
	Movable *mov = DynamicCast<Movable>(mObject);
	Node *node = DynamicCast<Node>(mObject);
	Renderable *renderable = DynamicCast<Renderable>(mObject);
	EffectableController *effectableCtrl = DynamicCast<EffectableController>(mObject);
	Material *mtl = DynamicCast<Material>(mObject);
	MaterialTechnique *mtlTechnique = DynamicCast<MaterialTechnique>(mObject);
	MaterialPass *mtlPass = DynamicCast<MaterialPass>(mObject);

	if (!mObject)
	{ // IT_CATALOG
		for (int i = 0; i < (int)mChildItems.size(); i++)
		{
			ProjTreeItem *item = mChildItems[i];
			if (item) item->SetTreeLevel(level, isShowHelpNode);
		}
		return;
	}
	else
	{
		ClearChildren();
	}

	bool addCtrl = false;
	bool addModule = false;
	bool addNode = false;
	bool addMaterial = false;

	if (PTL_GENERAL == mTreeLevel)
	{
	}
	else if (PTL_CHILDREN == mTreeLevel)
	{
		if (!scene && !proj && node)
		{
			addNode = true;
		}
	}
	else if (PTL_CONTROLS == mTreeLevel)
	{
		if (!scene && !proj && mov)
		{
			addCtrl = true;
		}

		if (!scene && !proj && node)
		{
			addNode = true;
		}

		if (effectableCtrl)
		{
			addModule = true;
		}
	}
	else if (PTL_MATERIALS == mTreeLevel)
	{
		if (!scene && !proj && mov)
		{
			addCtrl = true;
		}

		if (!scene && !proj && node)
		{
			addNode = true;
		}

		if (renderable)
		{
			addMaterial = true;
		}
	}
	else if (PTL_DETAIL == mTreeLevel)
	{
		if (!scene && !proj && mov)
		{
			addCtrl = true;
		}

		if (!scene && !proj && node)
		{
			addNode = true;
		}

		if (renderable)
		{
			addMaterial = true;
		}
	}

	if (addCtrl)
	{
		int numCtrls = mov->GetNumControllers();
		for (int i = 0; i < numCtrls; i++)
		{
			Controller *ctrl = mov->GetController(i);

			AddChild(ctrl, mIconID, mTreeLevel, mIsShowHelpNode);
		}
	}

	if (addMaterial)
	{
		MaterialInstance *mtlInst = renderable->GetMaterialInstance();
		Material *mtl = mtlInst->GetMaterial();
		AddChild(mtl, mIconID, mTreeLevel, mIsShowHelpNode);
	}
	if (mtl)
	{
		int numTechniques = mtl->GetNumTechniques();
		for (int i = 0; i < numTechniques; i++)
		{
			MaterialTechnique *mtlTechnique = mtl->GetTechnique(i);
			AddChild(mtlTechnique, mIconID, mTreeLevel, isShowHelpNode);
		}
	}
	if (mtlTechnique)
	{
		int numPasses = mtlTechnique->GetNumPasses();
		for (int i = 0; i < numPasses; i++)
		{
			MaterialPass *mtlPass = mtlTechnique->GetPass(i);
			AddChild(mtlPass, mIconID, mTreeLevel, isShowHelpNode);
		}
	}
	if (mtlPass)
	{
		AddChild(mtlPass->GetVertexShader(), mIconID, mTreeLevel, isShowHelpNode);
		AddChild(mtlPass->GetPixelShader(), mIconID, mTreeLevel, isShowHelpNode);

		AddChild(mtlPass->GetAlphaProperty(), mIconID, mTreeLevel, isShowHelpNode);
		AddChild(mtlPass->GetCullProperty(), mIconID, mTreeLevel, isShowHelpNode);
		AddChild(mtlPass->GetDepthProperty(), mIconID, mTreeLevel, isShowHelpNode);
		AddChild(mtlPass->GetOffsetProperty(), mIconID, mTreeLevel, isShowHelpNode);
		AddChild(mtlPass->GetStencilProperty(), mIconID, mTreeLevel, isShowHelpNode);
		AddChild(mtlPass->GetWireProperty(), mIconID, mTreeLevel, isShowHelpNode);
	}

	if (addModule)
	{
		int numModules = effectableCtrl->GetNumModules();
		for (int i = 0; i < numModules; i++)
		{
			EffectModule *module = effectableCtrl->GetModule(i);
			AddChild(module, mIconID, mTreeLevel, mIsShowHelpNode);
		}
	}

	if (addNode)
	{
		int numChildren = node->GetNumChildren();
		for (int i = 0; i < numChildren; i++)
		{
			Movable *child = node->GetChild(i);
			if (child)
			{
				bool ingore = false;
				if (!isShowHelpNode && ("HelpNode" == child->GetName()))
					ingore = true;

				if (!ingore)
				{
					AddChild(child, mIconID, mTreeLevel, mIsShowHelpNode);
				}
			}
		}
	}
}