Ever Wonder what the inheritance tree is for T3D?
by Vince Gee · 03/26/2014 (8:02 pm) · 19 comments
Hey all,
I thought this could be useful to the T3D community. While working on OMNI I found my self in a situation where I needed to know the inheritance tree for all simobjects in the game. Well, the static code analyzer I wrote for OMNI figures it out, but I didn't have it dumping to a text file so I could review it.
After a couple minutes of tinkering, I was finally able to see the inheritance tree!
Have a great night!
Vince
I thought this could be useful to the T3D community. While working on OMNI I found my self in a situation where I needed to know the inheritance tree for all simobjects in the game. Well, the static code analyzer I wrote for OMNI figures it out, but I didn't have it dumping to a text file so I could review it.
After a couple minutes of tinkering, I was finally able to see the inheritance tree!
Have a great night!
Vince
-->SimObject ---->TCPObject ------>HTTPObject ---->ArrayObject ---->ConsoleLogger ---->FieldBrushObject ---->PersistenceManager ---->ScriptObject ------>ScriptTickObject ---->SimDataBlock ------>ForestItemData -------->TSForestItemData ------>ReflectorDesc ------>SFXFMODEventGroup ------>SFXFMODProject ------>SFXAmbience ------>SFXDescription ------>SFXEnvironment ------>SFXState ------>SFXTrack -------->SFXFMODEvent -------->SFXPlayList -------->SFXProfile ------>DecalData ------>ParticleData ------>GameBaseData -------->DebrisData -------->ExplosionData -------->LightningData -------->ParticleEmitterData -------->ParticleEmitterNodeData -------->PrecipitationData -------->SplashData -------->PhysicsDebrisData -------->PhysicsShapeData -------->ProjectileData -------->ShapeBaseImageData -------->ShapeBaseData ---------->CameraData ---------->ItemData ------------>ProximityMineData ------------>TurretShapeData -------------->AITurretShapeData ---------->MissionMarkerData ---------->PathCameraData ---------->PhysicsBodyData ------------>RagDollData ------------>RigidBodyData -------------->SoftBodyData ---------->PlayerData ---------->RigidShapeData ---------->StaticShapeData ---------->VehicleData ------------>FlyingVehicleData ------------>HoverVehicleData ------------>WheeledVehicleData -------->TriggerData -------->VisualEffectData ------>LightAnimData ------>LightDescription ------>LightFlareData ------>WheeledVehicleTire ------>WheeledVehicleSpring ---->SimSet ------>SimPersistSet -------->WorldEditorSelection ------>SimGroup -------->ScriptGroup -------->ForestBrush -------->GuiControl ---------->GuiButtonBaseCtrl ------------>GuiBorderButtonCtrl ------------>GuiButtonCtrl -------------->GuiBitmapButtonCtrl ---------------->GuiBitmapButtonTextCtrl -------------->GuiIconButtonCtrl -------------->GuiToggleButtonCtrl -------------->GuiToolboxButtonCtrl ------------>GuiCheckBoxCtrl -------------->GuiRadioCtrl ------------>GuiSwatchButtonCtrl -------------->GuiGradientSwatchCtrl ---------->GuiContainer ------------>GuiTSCtrl -------------->EditTSCtrl ---------------->GuiMeshRoadEditorCtrl ---------------->GuiRiverEditorCtrl ---------------->GuiRoadEditorCtrl ---------------->ForestEditorCtrl ---------------->GuiShapeEdPreview ---------------->GuiConvexEditorCtrl ---------------->GuiDecalEditorCtrl ---------------->GuiMissionAreaEditorCtrl ---------------->TerrainEditor ---------------->WorldEditor -------------->GameTSCtrl -------------->GuiMaterialPreview -------------->GuiObjectView ------------>GuiFrameSetCtrl ------------>GuiPanel -------------->GuiFormCtrl ------------>GuiScrollCtrl -------------->GuiTableControl ------------>GuiSplitContainer ------------>GuiTabBookCtrl ------------>GuiWindowCtrl -------------->GuiWindowCollapseCtrl ------------>GuiMaterialCtrl ------------>GuiTextCtrl -------------->GuiPopUpMenuCtrl -------------->GuiPopUpMenuCtrlEx -------------->GuiTabPageCtrl -------------->GuiTextEditCtrl ---------------->GuiAutoCompleteCtrl ---------------->GuiConsoleEditCtrl ---------------->GuiTextEditSliderBitmapCtrl ---------------->GuiTextEditSliderCtrl -------------->GuiProgressBitmapCtrl -------------->GuiProgressCtrl -------------->GuiBubbleTextCtrl ---------->GuiControlArrayControl ---------->GuiDragAndDropControl ---------->GuiDynamicCtrlArrayControl ---------->GuiPaneControl ---------->GuiRolloutCtrl ------------>GuiInspectorGroup -------------->GuiInspectorDynamicGroup -------------->GuiInspectorVariableGroup ---------->GuiStackControl ------------>GuiInspector -------------->GuiVariableInspector ---------->GuiBackgroundCtrl ---------->GuiBitmapBorderCtrl ---------->GuiBitmapCtrl ------------>GuiFadeinBitmapCtrl ------------>GuiIdleCamFadeBitmapCtrl ------------>GuiMissionAreaCtrl ------------>GuiCrossHairHud ------------>GuiSpeedometerHud ---------->GuiColorPickerCtrl ---------->GuiConsoleTextCtrl ---------->GuiDecoyCtrl ---------->GuiGameListMenuCtrl ------------>GuiGameListOptionsCtrl ---------->GuiGradientCtrl ---------->GuiListBoxCtrl ------------>GuiDirectoryFileListCtrl ---------->GuiMLTextCtrl ------------>GuiMLTextEditCtrl ---------->GuiSliderCtrl ---------->GuiArrayCtrl ------------>GuiConsole ------------>GuiTextListCtrl -------------->PopupTextListCtrl -------------->GuiPopupTextListCtrl -------------->GuiPopupTextListCtrlEx -------------->GuiMenuTextListCtrl ------------>GuiTreeViewCtrl -------------->GuiFileTreeCtrl ------------>DbgFileView ------------>CreatorTree ---------->GuiCanvas ---------->GuiScriptNotifyCtrl ---------->GuiEaseViewCtrl ---------->GuiEditorRuler ---------->GuiEditCtrl ---------->GuiFilterCtrl ---------->GuiGraphCtrl ---------->GuiMenuBackgroundCtrl ------------>GuiSubmenuBackgroundCtrl ---------->GuiParticleGraphCtrl ---------->GuiRectHandles ---------->GuiSeparatorCtrl ---------->GuiInspectorField ------------>GuiInspectorTypeMenuBase -------------->GuiInspectorTypeEnum -------------->GuiInspectorTypeCubemapName -------------->GuiInspectorTypeGuiProfile -------------->GuiInspectorTypeSFXParameterName -------------->GuiInspectorTypeSFXStateName -------------->GuiInspectorTypeSFXSourceName -------------->GuiInspectorDatablockField ---------------->GuiInspectorTypeSFXDescriptionName ---------------->GuiInspectorTypeSFXTrackName ---------------->GuiInspectorTypeSFXEnvironmentName ---------------->GuiInspectorTypeSFXAmbienceName ------------>GuiInspectorTypeMaterialName -------------->GuiInspectorTypeRegularMaterialName -------------->GuiInspectorTypeTerrainMaterialIndex -------------->GuiInspectorTypeTerrainMaterialName ------------>GuiInspectorTypeCheckBox ------------>GuiInspectorTypeCommand ------------>GuiInspectorTypeFileName -------------->GuiInspectorTypeImageFileName -------------->GuiInspectorTypePrefabFilename -------------->GuiInspectorTypeShapeFilename ------------>GuiInspectorTypeRectUV ------------>GuiInspectorTypeEaseF ------------>GuiInspectorTypeColor -------------->GuiInspectorTypeColorI -------------->GuiInspectorTypeColorF ------------>GuiInspectorTypeS32 ------------>GuiInspectorTypeBitMask32 ------------>GuiInspectorTypeBitMask32Helper ------------>GuiInspectorTypeName ------------>GuiInspectorCustomField ------------>GuiInspectorDynamicField ------------>GuiInspectorVariableField ---------->GuiChunkedBitmapCtrl ---------->GuiMessageVectorCtrl ---------->GuiTickCtrl ------------>GuiAutoScrollCtrl ------------>GuiMenuBar ---------->GuiTheoraCtrl ---------->GuiMouseEventCtrl ------------>GuiInputCtrl ---------->EditManager ---------->GuiTerrPreviewCtrl ---------->GuiClockHud ---------->GuiHealthBarHud ---------->GuiHealthTextHud ---------->GuiShapeNameHud ---------->GuiNoMouseCtrl -------->DInputManager -------->PostEffect ---------->BarrelDistortionPostEffect -------->Path -------->SFXSource ---------->SFXFMODEventSource ---------->SFXController ---------->SFXSound -------->NetConnection ---------->GameConnection ------------>AIConnection -------------->AIClient ------>MenuBar ---->SimXMLDocument ---->FileObject ---->StreamObject ------>FileStreamObject ---->ZipObject ---->ForestBrushElement ---->ForestTool ------>ForestBrushTool ------>ForestSelectionTool ---->CubemapData ---->DebugDrawer ---->GFXStateBlockData ---->GFXSamplerStateData ---->TheoraTextureObject ---->GuiCursor ---->GuiControlProfile ------>GuiGameListMenuProfile -------->GuiGameListOptionsProfile ---->GuiImageList ---->MessageVector ---->GizmoProfile ---->Gizmo ---->LangTable ---->SceneLighting ---->BaseMaterialDefinition ------>Material -------->CustomMaterial ---->ShaderData ---->SimResponseCurve ---->LeapMotionFrame ---->RazerHydraFrame ---->PopupMenu ---->FileDialog ------>OpenFileDialog -------->OpenFolderDialog ------>SaveFileDialog ---->RenderBinManager ------>RenderImposterMgr ------>RenderMeshMgr -------->ForcedMaterialMeshMgr ------>RenderObjectMgr ------>RenderOcclusionMgr ------>RenderPassStateBin ------>RenderTerrainMgr ------>RenderTexTargetBinManager -------->AdvancedLightBinManager -------->RenderGlowMgr -------->RenderHeatMapMgr -------->RenderParticleMgr -------->RenderPrePassMgr ------>RenderTranslucentMgr ---->RenderPassManager ------>ShadowRenderPassManager ---->RenderPassStateToken ------>RenderFormatToken ---->SFXParameter ---->ActionMap ---->NetObject ------>SimpleNetObject ------>SimComponent -------->DynamicConsoleMethodComponent -------->MoreAdvancedComponent -------->SimpleComponent -------->T3DSceneClient -------->CachedInterfaceExampleComponent ------>SceneObject -------->BasicClouds -------->CloudLayer -------->DecalRoad -------->MeshRoad -------->ScatterSky -------->SkyBox -------->Sun -------->TimeOfDay -------->WaterObject ---------->River ---------->WaterBlock ---------->WaterPlane -------->Forest -------->ForestWindEmitter -------->NavMesh -------->NavPath -------->SceneSpace ---------->SceneZoneSpace ------------>SceneSimpleZone -------------->SceneRootZone -------->Marker -------->ConvexShape -------->DecalManager -------->RenderMeshExample -------->RenderObjectExample -------->RenderShapeExample -------->fxFoliageReplicator -------->fxShapeReplicatedStatic -------->fxShapeReplicator -------->GroundCover -------->GameBase ---------->Debris ---------->Explosion ---------->Lightning ---------->ParticleEmitter ---------->ParticleEmitterNode ------------>ParticleEmitterNodeClient ---------->Precipitation ---------->Splash ---------->PhysicsDebris ---------->PhysicsShape ---------->Projectile ---------->ShapeBase ------------>Camera ------------>Item -------------->ProximityMine -------------->TurretShape ---------------->AITurretShape ------------>MissionMarker -------------->WayPoint -------------->SpawnSphere -------------->CameraBookmark ------------>PathCamera ------------>PhysBody -------------->RagDoll -------------->RigidBody ---------------->SoftBody ------------>Player -------------->AIPlayer ---------------->AIBot ------------>RigidShape ------------>StaticShape -------------->ScopeAlwaysShape ------------>Vehicle -------------->FlyingVehicle -------------->HoverVehicle -------------->WheeledVehicle ---------->Trigger ---------->VisualEffect -------->GroundPlane -------->LightBase ---------->PointLight ---------->SpotLight -------->PhysicalZone -------->PhysicsForce -------->Prefab -------->T3DSceneComponent -------->SFXEmitter -------->TSStatic -------->VehicleBlocker -------->TerrainBlock ------>LevelInfo ------>MissionArea ---->TerrainMaterial ---->TSShapeConstructor ---->RuntimeRegisteredSimObject ---->EventManager ---->Message ---->ScriptMsgListener ------>MessageForwarder ---->ReadXML ---->Settings ---->UndoAction ------>ForestUndoAction -------->ForestCreateUndoAction -------->ForestDeleteUndoAction -------->ForestUpdateAction ------>DICreateUndoAction ------>DIDeleteUndoAction ------>DBDeleteUndoAction ------>DBRetargetUndoAction ------>TerrainSmoothAction ------>MECreateUndoAction ------>MEDeleteUndoAction ------>InspectorFieldUndoAction ------>ExplodePrefabUndoAction ------>CompoundUndoAction ------>UndoScriptAction ---->UndoManager
About the author
www.winterleafentertainment.com
#3
03/27/2014 (3:14 am)
Nice
#4
But mine gets updated automatically when ever I add new classes :)
It's just one of the outputs from the parser.
03/27/2014 (3:57 am)
@lukas,But mine gets updated automatically when ever I add new classes :)
It's just one of the outputs from the parser.
#5
But yours don't have fancy graphs and colors!
Make a graph-generator! Naow!
03/27/2014 (3:59 am)
@Vince,But yours don't have fancy graphs and colors!
Make a graph-generator! Naow!
#6
I know every persist on the object, every callback and console function. I just don't have it dumping out.
03/27/2014 (4:00 am)
Actually, I could add that :PI know every persist on the object, every callback and console function. I just don't have it dumping out.
#7
Just let me say here that the whole inheritance diagram for T3D is scary.
03/27/2014 (6:47 am)
Lukas is right - the docs have diagrams for many of the engine classes. There is a program called "Doc-o-matic" that will generate graphs for the whole thing, but it can't actually generate docs for the whole thing - it crashes unless you break the engine into roughly thirds for documentation (unless they've fixed that - it was two years ago after all). You can use the free trial to generate these diagrams but if you try to use it to generate documentation you get about two sentences per entry before it goes lorum ipsum on you.Just let me say here that the whole inheritance diagram for T3D is scary.
#9
03/27/2014 (8:26 am)
I can understand some things, but damn, that seems way too overly complex.
#11
03/27/2014 (2:45 pm)
The funny thing is that ShapeBase's part of the tree is actually pretty small :P. Check out the GUI classes...
#13
03/28/2014 (12:02 pm)
I hate to say it, but it's moments like this that make me think Torque is past due for a full-scale overhaul. The entire engine has been added to, changed, and tweaked for so long it's starting to look rather Frankenstien'ish.
#14
The thing there isn't that the tree is short, so much as thick, with tons of extraneous functionality laying about. Know I make it a point to kill off cloaking, shields, and invulnerability (the portion not related to a flag where it can or can't take damage) pretty much every game, simply because those methods are half-implemented at best.
That's actually been under active discussion and development for a while. Believe Jeff Raab is the latest to embark on that particular journey?
03/28/2014 (12:10 pm)
Quote: The funny thing is that ShapeBase's part of the tree is actually pretty small :P. Check out the GUI classes...
The thing there isn't that the tree is short, so much as thick, with tons of extraneous functionality laying about. Know I make it a point to kill off cloaking, shields, and invulnerability (the portion not related to a flag where it can or can't take damage) pretty much every game, simply because those methods are half-implemented at best.
Quote: I hate to say it, but it's moments like this that make me think Torque is past due for a full-scale overhaul. The entire engine has been added to, changed, and tweaked for so long it's starting to look rather Frankenstien'ish.
That's actually been under active discussion and development for a while. Believe Jeff Raab is the latest to embark on that particular journey?
#15
03/29/2014 (3:12 am)
Would be interesting to see a comparison between other engines - these things tend to get very complex!
#16
03/29/2014 (6:51 am)
@Azaezel yes Jeff did try to fix it but there wasn't enough backing for it and then.. Silence... Dunno what happened after that.
#17
03/29/2014 (9:03 am)
I've been half tempted to try myself. Not in a clean way, mind you. Basically I'd love to strip the engine down to the core renderer. And slowly trickle systems back in.
#18
Az: yeah, you're right, there's just lots of stuff in that class that doesn't need to be there. Hey, I think we'd be happy to start accepting pull-requests in that direction...
03/29/2014 (2:59 pm)
Jeff is still hammering away at his component system rewrite - I'll let him give you the lowdown but it's still happening, and from what I've heard it's going quite well.Az: yeah, you're right, there's just lots of stuff in that class that doesn't need to be there. Hey, I think we'd be happy to start accepting pull-requests in that direction...
#19
Yeah, I'm still doing it.
Currently, I'm updating some backend stuff(how the behaviors interface with one another) which broke a few things I have to fix.
When that's finished, I need to wrap up some updates to the editor side of things and I think it'll be more or less ready.
It's taken longer than I wanted, but such is the price of a complex system written in your free time ;)
Don't worry guys, it's still on it's way. I'll see about a blog post with a proper update.
03/29/2014 (3:03 pm)
And like a magician, Dan summons me ;)Yeah, I'm still doing it.
Currently, I'm updating some backend stuff(how the behaviors interface with one another) which broke a few things I have to fix.
When that's finished, I need to wrap up some updates to the editor side of things and I think it'll be more or less ready.
It's taken longer than I wanted, but such is the price of a complex system written in your free time ;)
Don't worry guys, it's still on it's way. I'll see about a blog post with a proper update.

Torque 3D Owner JeffH