20,759 Commits over 1,522 Days - 0.57cph!
Long Folder names will wrap in Asset Browser icon view
Reorganise cloud browser sidebar, add type shortcuts
Add count badge to cloud Installed node
Fix qt exception when installing cloud assets
Cloud browser: Update facet dropdown selection from actual value in query, avoid putting crap in the searchbar from sidebar shortcuts
Cloud browser: Still show facet title when there's a selection
Fix crash in CModelStream::CopyValuesFromStream, assert out of bounds
Add failing hotload test, reproducing #1673
Stricter AreEquivalentTypes, fixes #1673
Fix asset context menus in native tools, resolves Facepunch/sbox-issues#6722
Process inputs in the menu
Post-rebase compile fixes
Add gamepad navigation support to main menu UI and game menu UI
- Virtual cursor system
- Panel traversal system
Refactor: remove IVirtualCursor, IMenuSystem hook-ins, cursor razor component - add InputOverlaySystem which works in MenuDll and GameMenuDll, add RootPanel.Priority
Demote some new stuff from being public
Fixed overlay flicker when re-laying out (due to stuff being pressed on), don't set Style.Width|Height
GameManager -> Game
Use input actions instead of now gone digital action state stuff
Remove unused code
Remove IGameInstance.InputSettings (not used)
Push menu inputs when we don't have an input config to read
Fixed editor error w/ InputSettings.Actions
Add SteamItemDefinitionId to Clothing
Humans: fixed compile errors
Fix Folder Icons not being centered
Added Folder Metadata window. Allows you to change folder Color/Icon and see additional information. Resolves Facepunch/sbox-issues#6705
https://files.facepunch.com/CarsonKompon/2024/October/28_13-38-MeagerIbizanhound.png
IsValid() wrapper for main asset browser instance
Fix path breadcrumbs not working outside of main asset browser
Citizen/animgraph: improved turn poses (and enabled them) as well as standing shuffle
Don't hide compiled assets if no source file is available
Re-implemented FilterAssetTypes in AssetBrowser and CloudBrowser. ResourceControlWidgets will now only show the selected resources
Unify "Show In Explorer" icons in Asset Browser
Don't show Games in the Cloud Browser. Don't include in type facet
Show 'open with' dialog if we can't open a file
Set hammer material when selected (both in cloud and asset browsers)
Moving selected facet dropdown entry fetches from current facet entries rather than copying
Don't show the menu path for custom assets' file type, just the title
Add "Open File Location" shortcut for files in search results, meta locations etc. Tweak context menu icons.
Tex2DBicubic uses generic hlsl, make DoF compositing use bicubic filtering, makes it look nice even at lowest quality
https://files.facepunch.com/sam/1b2811b1/jXqgNeXnCK.png
Explicit quality level for DoF
Focus Gap in world units and outside the shader
Fix asset icons at 16x16, centre
Use 16x16 icon for unknown files so that doesn't get cut off
Pretty up file modified date, standardised w/ leading zeros so it's nicer in column view
Don't need these Hammer prefab templates anymore
Add "Create Game Object" button to Hammer outliner
Don't try add menu project if we're headless
Use full paths for engine asset locations
Add 'copy absolute path' option
Find root paths automatically instead of just using current project
Show base, citizen, and core
Better sidebar separation
Hide cloud browser when not requested
Limit file count for now, need pagination
Docs
If we're headless, we should shut down SteamGameServer when disconnecting from network system
Pass actual version into SteamGameServer init for version. Test server list cmd
DistanceAttenuation bool is now used again
Rename `Attenuation` to `Falloff` with better Curve initializing
SoundComponent gizmos no longer rotate with the GameObject
Change default Distance value to something closer to the previous default
Updated default curve to feel more like the previous range calculation. Added some more curves to CurvePresets
Created JsonUpgrader for SoundEvent which tries to maintain previous range settings while resetting Volume to 1. Doesn't perform changes to 2D sounds or sounds without DistanceAttenuation
Moved SoundEvent into Sound folder
PreviewSound dragging is more intuitive. Removed logs
SoundEvent Upgrader fixes/adjustments
When tying a MapMesh to a MapGameObject add ModelRenderer and ModelCollider automatically
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
* MapGameObjects can be tied to MapMesh and generate model geometry
Add MapSourceLocation for editing action graphs in .vmap files
* Open source map when inspecting graph from .vmap
* Parent action graph editor to hammer window if editing map graph
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)
Only try to filter by asset type if we have any filters on, fixes excluding most files from search
Show full file path in window status bar on hover again, resolves Facepunch/sbox-issues#6709
Update Dedicated Server bootstrap logs
Remove baked cubemaps code from Hammer
Fix Hammer default layout. Also add Cloud Browser by default
Fixes Facepunch/sbox-issues#6708
Dedicated Server (#1679)
* Initial branch commit for dedi server message routing
* Try to synchronize Connection State through ConnectionInfo where possible
* Use Connection.All for filtered broadcasts so that will use ConnectionInfo if exists
* TargetedMessage support for byte[] array for already packed messages, and pass in NetTransmission flags for routing as well
* For now, one idea is to override SendRawMessage on MockConnection - for these type of Connection we can route through the host
* Store Connection internal state if ConnectionInfo doesn't exist then we can just use that
* Better synchronization of Connection State - now working as it was before, but should also synchronize other clients properly when on a dedicated server
* For filtered connection list / broadcast - if we're the host then use the connections we have, otherwise we should use Connection.All
* Include Connection with available connections when broadcasting - as Dedicated Server won't be included in Connection.All (maybe it should, or maybe people should just use Connection.Host)
* Serialize TargetMessage flags as byte
* system must be set to SendMessage to a Connection. Fix an issue with SenderId when receiving a TargetedMessage - this can't be local, so try to find the connection but if we can't find it just use the source.
* Test logs
* Some cleanup - fix issue where system isn't initialized so can't serialize. Could be wrong here, but only one system can be active so just use that.
* Remove this log
* Remove unusued code
* Add NetTransmission flag support when using SendMessage via Steam Sockets
* Don't forget to add arg to header
* Clearer docs here, only log warning if networking debug is enabled here
* Some tidy up here
* Reset local connection state to Unconnected when closing network system - some debug log for other machine
* Close these connections
* Remove this log
* Add Dedicated Server page to Project Config with its own option for a Startup Scene. When loading a game, if we're headless, use that if its set instead of the usual one.
* Don't call INetworkListener.OnActive for dedicated server, similarly don't call OnDisconnected. OnConnected will never get called anyway because it doesn't go through the handshake.
* This bit isn't needed actually
* Test boot back to main menu
* Properly get when disconnected
* Use CollectionExtensions properly
* Fix test, re-add system member
* Fix this state
---------
Co-authored-by: Garry Newman <garrynewman@users.noreply.github.com>
Fixed Facepunch/sbox-issues#6696
Always update the path widget even if it's not a real location
Fix asset browser not saving to cookies, bring back history cookie logic
(this is all in the project cookie now too)
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)
Initial branch commit for dedi server message routing
* Try to synchronize Connection State through ConnectionInfo where possible
* Use Connection.All for filtered broadcasts so that will use ConnectionInfo if exists
* TargetedMessage support for byte[] array for already packed messages, and pass in NetTransmission flags for routing as well
* For now, one idea is to override SendRawMessage on MockConnection - for these type of Connection we can route through the host
Store Connection internal state if ConnectionInfo doesn't exist then we can just use that
Better synchronization of Connection State - now working as it was before, but should also synchronize other clients properly when on a dedicated server
For filtered connection list / broadcast - if we're the host then use the connections we have, otherwise we should use Connection.All
Include Connection with available connections when broadcasting - as Dedicated Server won't be included in Connection.All (maybe it should, or maybe people should just use Connection.Host)
Serialize TargetMessage flags as byte
system must be set to SendMessage to a Connection. Fix an issue with SenderId when receiving a TargetedMessage - this can't be local, so try to find the connection but if we can't find it just use the source.
Test logs
Some cleanup - fix issue where system isn't initialized so can't serialize. Could be wrong here, but only one system can be active so just use that.
Remove this log
Remove unusued code
Add NetTransmission flag support when using SendMessage via Steam Sockets
Don't forget to add arg to header
Clearer docs here, only log warning if networking debug is enabled here
Some tidy up here
Reset local connection state to Unconnected when closing network system - some debug log for other machine
Close these connections
Remove this log
Add Dedicated Server page to Project Config with its own option for a Startup Scene. When loading a game, if we're headless, use that if its set instead of the usual one.
Don't call INetworkListener.OnActive for dedicated server, similarly don't call OnDisconnected. OnConnected will never get called anyway because it doesn't go through the handshake.
This bit isn't needed actually
Test boot back to main menu
Properly get when disconnected
Use CollectionExtensions properly
Fix test, re-add system member
Fix test, re-add system member
Remove mock GameObject/Prefab code from managed MapEntity
Clean up Entity tool as you can no longer add/target games this way
# Conflicts:
# game/editor/Hammer/Code/Tools/EntityTool.cs
# game/editor/Hammer/Code/Tools/EntityTool/EntitySelector.cs
Remove Hammer EntityIO UI
Remove unused complicated stuff from worldbuilder: point templates, some hardcoded ents, dioramas, ...
remove nav markup volumes from fgd
ActionGraph source location refactor
Save launcher cookies to it's own file
Make sure launcher doesn't save editor cookies, they would stomped on close
Restore fix for dragging in installed cloud assets, resolves Facepunch/sbox-issues#6703
Add WithExtension(this string path, string ext)
Refactor rename flyout in asset browser, add error flyout
Fixed Facepunch/sbox-issues#6695
https://files.facepunch.com/ziks/2024-10-28/sbox-dev_do9WlbwLbF.mp4
Added Distance and Attenuation overrides to SoundComponents
Draw range gizmos on SoundComponents when selected, respecting
Added `Range` float and `Falloff` Curve to SoundEvent. Allows you to directly specify how many units away a sound can be heard and where along that range the sound begins to falloff.
Rename Range and Falloff to Distance and Attenuation
Added Sound Distance ControlWidget. Includes quick access to some preset common distances
https://files.facepunch.com/CarsonKompon/2024/October/27_19-32-DopeyAmericancrocodile.mp4
Moved all distance-related variables into a Distance Attentuation ToggleGroup (similar to occlusion)
Add attribute for audio distance float
Slider fixes
Re-implemented PreviewSound
https://files.facepunch.com/CarsonKompon/2024/October/27_20-48-SteepBighorn.mp4
Fix SoundHandle.ListenLocal not working as intended
FloatSlider on AudioDistanceFloatProperty is now exponential, so lower ranges can be fine-tuned with more granularity
Humans: remove animation-processing VMDL prefab instances living under currently disabled nodes, to work around issue #1681
Humans: added WalkFast_E + NE/SE (roughs)