55 Days Ago
Add jsoncpp so we can read/write json properly without fucking around with kv3 Add CMapGameObject map node with managed counter part that wraps a GameObject Hammer world's Scene uses HammerSceneEditorSession Add HammerManagedInspector that can take over if it likes the MapNode. We only like MapGameObject for now Run Scene.EditorDraw() on MapView for gizmos, remove old Entity.DrawGizmos More explicit HammerEvents Managed map node callback interface, a little convoluted because of mapdoclib <-> hammer <-> managed. But this is easier to do callbacks and can return values And the managed side Serialize/deserialize CMapGameObject CMapGameObject::GeneratesEntityModelGeometry() Expose CMapGameObject JSON to MapBuilder via IHammerMapLoader Collect CMapGameObjects, compile them into scene.json inside the vpk and let MapInstance load them (Very hacky code needs cleaning up) Tie Meshes to GameObject button Implement CMapGameObject::Copy CMapGameObject overrides child selection Sync native transforms to managed Can tie map meshes to GameObjects, these get built into models and any components on the GameObject with a Model property get populated by it CMapGameObject's that generate model geometry are ignored by physicsbuilder TieToGameObject takes TieToEntity keybind (Ctrl+T), remove button for entity as there's no entities to tie them to anymore, if you really need it the command is still accessible through F1 Replace manual scene serialization with jsoncpp, can map guids to map meshes better and it's cleaner Add MapSourceLocation, fix editing action graphs in .vmap files Check for MapSourceLocation in ActionGraphView Open source map when inspecting graph from .vmap Parent action graph editor to hammer window if editing map graph Fix action graphs from maps not caching correctly Only OpenContainingResource if not already open Several assumptions of SceneEditorSession.Active.Scene should be GameObject.Scene Gizmo interactions work in MapView, Hammer gizmo selectionset syncs with native selection set (native has authority), clean up MapView loop Managed can set DragData of map nodes in Hammer outliner, MapGameObject sets its GameObject DragData uses QObject.FindOrCreate so it persists when going native -> managed -> native for DragData.Object to work correctly QOutliner: Remove hidden entity list QOutliner: Defer selection until mouse release so it acts like our managed treeview, allowing dragging without switching the inspector away [~] ModelRenderer don't default to box if Model is null InspectorWidgets are explicitly marked with [Inspector( Type )] instead of [CanEdit( Type )], created with InspectorWidget.Create( SerializedObject ) Hammer Scene is serialized entirely in MapWorld & written into VPK as world.scene_c MapInstance: Load from SceneFile from inside the VPK (A little more logic because we don't normally read managed from VPKs)