mirror of
https://github.com/TorqueGameEngines/Torque3D.git
synced 2026-02-19 14:43:47 +00:00
Shifts handling of forest brush and item elements into standard simsets for consistency
Updates the forest editor tooling to utilize the new sets, and adjusts the creation of new Brushes in the forest editor to have user select a target module first. This ensures all a module's brushes are grouped into the new ForestBrushGroup class which auto-registers into the ForestBrushSet, thus allowing modules to have their own sets of brushes that automatically hook into the editor workflow.
This commit is contained in:
parent
42e2eecee7
commit
bfe3d4d02b
11 changed files with 177 additions and 88 deletions
|
|
@ -68,6 +68,8 @@ namespace Sim
|
|||
ImplementNamedSet(SFXAmbienceSet)
|
||||
ImplementNamedSet(TerrainMaterialSet)
|
||||
ImplementNamedSet(DataBlockSet);
|
||||
ImplementNamedSet(ForestBrushSet);
|
||||
ImplementNamedSet(ForestItemDataSet);
|
||||
ImplementNamedGroup(ActionMapGroup)
|
||||
ImplementNamedGroup(ClientGroup)
|
||||
ImplementNamedGroup(GuiGroup)
|
||||
|
|
|
|||
|
|
@ -107,6 +107,8 @@ namespace Sim
|
|||
DeclareNamedSet(SFXAmbienceSet);
|
||||
DeclareNamedSet(TerrainMaterialSet);
|
||||
DeclareNamedSet(DataBlockSet);
|
||||
DeclareNamedSet(ForestBrushSet);
|
||||
DeclareNamedSet(ForestItemDataSet);
|
||||
DeclareNamedGroup(ActionMapGroup)
|
||||
DeclareNamedGroup(ClientGroup)
|
||||
DeclareNamedGroup(GuiGroup)
|
||||
|
|
|
|||
|
|
@ -565,6 +565,8 @@ void init()
|
|||
InstantiateNamedSet(SFXAmbienceSet);
|
||||
InstantiateNamedSet(TerrainMaterialSet);
|
||||
InstantiateNamedSet(DataBlockSet);
|
||||
InstantiateNamedSet(ForestBrushSet);
|
||||
InstantiateNamedSet(ForestItemDataSet);
|
||||
InstantiateNamedGroup(ActionMapGroup);
|
||||
InstantiateNamedGroup(ClientGroup);
|
||||
InstantiateNamedGroup(GuiGroup);
|
||||
|
|
|
|||
|
|
@ -197,4 +197,78 @@ DefineEngineMethod( ForestBrush, containsItemData, bool, ( const char * obj ), ,
|
|||
}
|
||||
|
||||
return object->containsItemData( data );
|
||||
}
|
||||
}
|
||||
|
||||
//-------------------------------------------------------------------------
|
||||
// ForestBrushGroupSet
|
||||
//-------------------------------------------------------------------------
|
||||
|
||||
IMPLEMENT_CONOBJECT(ForestBrushGroup);
|
||||
|
||||
ConsoleDocClass(ForestBrushGroup,
|
||||
"@brief Container class for ForestBrushes\n\n"
|
||||
"Editor use only.\n\n"
|
||||
"@internal"
|
||||
);
|
||||
|
||||
ForestBrushGroup::ForestBrushGroup()
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
bool ForestBrushGroup::onAdd()
|
||||
{
|
||||
if (!Parent::onAdd())
|
||||
return false;
|
||||
|
||||
SimSet* forestBrushSet;
|
||||
if (!Sim::findObject("ForestBrushSet", forestBrushSet))
|
||||
{
|
||||
Con::errorf("ForestBrushGroup::onAdd() - failed to find ForestBrushSet to add new ForestBrushGroup to!");
|
||||
}
|
||||
|
||||
forestBrushSet->addObject(this);
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
void ForestBrushGroup::addObject(SimObject* inObj)
|
||||
{
|
||||
ForestBrush* ele = dynamic_cast<ForestBrush*>(inObj);
|
||||
if (!ele)
|
||||
return;
|
||||
|
||||
//if ( containsItemData( ele->mData ) )
|
||||
// return;
|
||||
|
||||
Parent::addObject(inObj);
|
||||
}
|
||||
|
||||
bool ForestBrushGroup::containsBrushData(const ForestBrush* inData)
|
||||
{
|
||||
SimObjectList::iterator iter = mObjectList.begin();
|
||||
for (; iter != mObjectList.end(); iter++)
|
||||
{
|
||||
ForestBrush* pElement = dynamic_cast<ForestBrush*>(*iter);
|
||||
|
||||
if (!pElement)
|
||||
continue;
|
||||
|
||||
if (pElement == inData)
|
||||
return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
DefineEngineMethod(ForestBrushGroup, containsBrushData, bool, (const char* obj), , "( ForestBrush obj )")
|
||||
{
|
||||
ForestBrush* data = NULL;
|
||||
if (!Sim::findObject(obj, data))
|
||||
{
|
||||
Con::warnf("ForestBrush::containsBrushData - invalid object passed");
|
||||
return false;
|
||||
}
|
||||
|
||||
return object->containsBrushData(data);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -121,5 +121,28 @@ protected:
|
|||
static SimObjectPtr<SimGroup> smGroup;
|
||||
};
|
||||
|
||||
//-------------------------------------------------------------------------
|
||||
// ForestBrushGroup
|
||||
//-------------------------------------------------------------------------
|
||||
|
||||
#endif // _FOREST_EDITOR_BRUSHELEMENT_H_
|
||||
class ForestBrushGroup : public SimGroup
|
||||
{
|
||||
typedef SimGroup Parent;
|
||||
|
||||
public:
|
||||
|
||||
ForestBrushGroup();
|
||||
|
||||
DECLARE_CONOBJECT(ForestBrushGroup);
|
||||
|
||||
virtual bool onAdd();
|
||||
|
||||
virtual void addObject(SimObject*);
|
||||
|
||||
bool containsBrushData(const ForestBrush* inData);
|
||||
protected:
|
||||
|
||||
static SimObjectPtr<SimGroup> smGroup;
|
||||
};
|
||||
|
||||
#endif // _FOREST_EDITOR_BRUSHELEMENT_H_
|
||||
|
|
|
|||
|
|
@ -610,9 +610,14 @@ void ForestBrushTool::_collectElements()
|
|||
}
|
||||
|
||||
// Find all ForestBrushElements that are directly or indirectly selected.
|
||||
SimSet* brushSet;
|
||||
if (!Sim::findObject("ForestBrushSet", brushSet))
|
||||
{
|
||||
Con::errorf("ForestBrushTool::_collectElements() - could not find ForestBrushSet!");
|
||||
return;
|
||||
}
|
||||
|
||||
SimGroup *brushGroup = ForestBrush::getGroup();
|
||||
brushGroup->findObjectByCallback( findSelectedElements, mElements );
|
||||
brushSet->findObjectByCallback( findSelectedElements, mElements );
|
||||
|
||||
// We just needed to flag these objects as selected for the benefit of our
|
||||
// findSelectedElements callback, we can now mark them un-selected again.
|
||||
|
|
|
|||
|
|
@ -328,10 +328,16 @@ void ForestEditorCtrl::deleteMeshSafe( ForestItemData *mesh )
|
|||
}
|
||||
|
||||
// Find ForestBrushElement(s) referencing this datablock.
|
||||
SimGroup *brushGroup = ForestBrush::getGroup();
|
||||
SimSet* brushSet;
|
||||
if (!Sim::findObject("ForestBrushSet", brushSet))
|
||||
{
|
||||
Con::errorf("ForestBrushTool::_collectElements() - could not find ForestBrushSet!");
|
||||
return;
|
||||
}
|
||||
|
||||
sKey = mesh;
|
||||
Vector<SimObject*> foundElements;
|
||||
brushGroup->findObjectByCallback( &findMeshReferences, foundElements );
|
||||
brushSet->findObjectByCallback( &findMeshReferences, foundElements );
|
||||
|
||||
// Add UndoAction to delete the ForestBrushElement(s) and the ForestItemData.
|
||||
MEDeleteUndoAction *elementAction = new MEDeleteUndoAction();
|
||||
|
|
@ -408,4 +414,4 @@ DefineEngineMethod(ForestEditorCtrl, setActiveForest, void, (const char * obj),
|
|||
return;
|
||||
|
||||
object->setActiveForest(forestObject);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue