1,708 Commits over 1,219 Days - 0.06cph!
Add remote asset.party location to asset browser, fill it with model query
Add drag data to Package in AssetList: e.g package://matt.box
Add managed handler for Hammer map view drag drop events
ManifestMount from Sandbox.Game -> Sandbox.Engine
Bare bones dragging asset.party models into Hammer
https://files.facepunch.com/matt/1b0611b1/sbox_5qCyTB85LC.mp4
Tidy up map view drag/drop targets in C#, interop more MapDoc so we can create an empty model and asynchronously set it's asset from the package fetch.
There's still some messy code here, I think I need to figure out how to do handles for map nodes before this becomes a sprawling mess.
And the async method is getting blocked on the main thread once dragging.. but a background thread is going to crash it.
Paginate asset.party assets in browser so we see all of them
Make our package drag data in the format "https://asset.party/facepunch/boomerjumppad" we could easily extend this code to let you grab these assets straight from the website then
Delete dota healthbar SFM code that plagued the IToolService and ISource2Engine
Update paddle hit physics, calculate bounce with relative ball velocity to the paddle, dont add multiplied paddle velocity to ball on bounce normal, simply transfer the velocity 1:1
Fix up debug mode so the game throws endless balls at you to return
Calculate drag properly, remember that we use kg/in³ and in/s² - fuck knows how what I was doing before worked in the slightest, this feels much better
Bounce a bit higher
Only use this paddle sound, it's cooler
Keep cleaning / refactoring, keep game logic seperated from everything else, isolate RPCs for future lag comp
Tidy up, remove any concept of serverside balls, isolate all physics logic to its own class
More sync fixes, got a better idea though
Adjust networking even more, this is very playable now, but I think I can still do better
Don't bounce on carpet, scale bounce sound w/ velocity
Client decides when it wants to take control, various other desync fixes
Haptic feedback when hitting ball
Make the ball completely clientside with a backing server entity for sync, make all of serving clientside too
Revert "Make Entity.IsAuthority a virtual property"
This reverts commit 1533014f19347562cbac07a148ee3926da2f64ad.
Quick hack to update client values to server values when authority changes to you
Pack our ball velocity into the usercmd as well so the server/other client can take it over
Alternating client authoritative networking
* Implement an alternating client authoritative model - whichever clients side of the table the ball is on gets complete authority over the ball position and velocity.
* Physics are simulated entirely on the current authoritative client now. Pack the ball position into the UserCmd and the server sets the ball entity's position so the other client can see it and takeover when authority switches.
* Substep the physics at fixed(ish) 0.005ms steps within FrameSimulate's delta time, each step moves the ball and checks against the paddle sweep. This may be unconventional but it gives us a perfect result and never misses.
* Fix paddle collision sometimes sending the ball backwards because of a negative velocity length, added an abs.
implement simple debug slowmo to make sure the angular hits are correct
Implement alternating client authoritative - whoevers side of the table the ball is on gets complete control of the ball
Make Entity.IsAuthority a virtual property
Neater way of giving client authority over the ball
Implement physics substeps on a fixed-ish time step within FrameSimulate, move the ball and try to collide with the paddle each step - this is probably quite unconventional but it gives us the perfect result and never misses
Use abs on our paddle return velocity length before multiplying by the sweep normal, stops the ball flying behind the paddle
Simulate physics entirely clientside each frame, make the client authoritative packing the ball position into the usercmd. The game should decide which client is authoritative based on which side of the table the ball is on.
Tidy up map view drag/drop targets in C#, interop more MapDoc so we can create an empty model and asynchronously set it's asset from the package fetch.
There's still some messy code here, I think I need to figure out how to do handles for map nodes before this becomes a sprawling mess.
And the async method is getting blocked on the main thread once dragging.. but a background thread is going to crash it.
Paginate asset.party assets in browser so we see all of them
Make our package drag data in the format "https://asset.party/facepunch/boomerjumppad" we could easily extend this code to let you grab these assets straight from the website then
Add remote asset.party location to asset browser, fill it with model query
Add drag data to Package in AssetList: e.g package://matt.box
Add managed handler for Hammer map view drag drop events
ManifestMount from Sandbox.Game -> Sandbox.Engine
Bare bones dragging asset.party models into Hammer
https://files.facepunch.com/matt/1b0611b1/sbox_5qCyTB85LC.mp4
BaseItemWidget: Ctrl clicking selected items removes them from the selection
Fix AssetBrowser not loading saved settings correctly - Fixes Facepunch/sbox-issues#2063
Fix Hammer texture replace window's asset picker shrinking and becoming unusable
Asset Browser: can make new folder from AssetList
Enable MultiSelect on AssetList
Don't try to open a context menu if we have no options, otherwise Qt will moan
Implement shift click multiselect in BaseItemWidget
https://files.facepunch.com/matt/1b0211b1/sbox_2u4H5Gcpcl.mp4
Entity.networkTags should use StringComparer.OrdinalIgnoreCase when updated from network
Fix FileSystem.RebuildContentPath() skipping over addons because it was using File.Exists instead of Directory.Exists. Fixes Facepunch/sbox-issues#2085 and probably quite a bit of other stuff
steamaudio_enabled -> steamaudio_enable, drop FC_ARCHIVE since I suspect loads of people had it saved to 1 :(
Temporarily disable Steam Audio by default to resolve crashes as the heap corruption has persisted even without IPL_SCENETYPE_EMBREE
Tag steamaudio_enabled so we can see it in Sentry, so we can be 100% sure
Add steamaudio_enabled cvar
forgot to force add the .dll / .lib for aftermath
Catch nvidia gpu crashes with nsight aftermath and `-nvgpucrashdebugging` cli flag, struggling to get any significant context out of this on D3D11 so may just revert this at some point
m_pDriverVersion reports as "unknown" instead of a null string
don't use V_vsnprintf in SentryOutput, external code can specify the funky %S format specifiers
Texture2DBuilder.Finish(): correctly check the memory required for texures w/ mips
Remove fallback DX9 code for getting driver version, it's straightforward to grab from the registry by the DX adapter LUID.
This returns the same windows driver version numbers DX9 was reporting, but I've added some vendor specific renames
e.g for nvidia "31.0.15.1659" becomes "516.59" making it easier to filter by driver for us
rendersystemdx11: stop linking d3d9
rendersystemdx11: stop linking nvapi
LoadD3dCompiler calls Plat_LoadModule without full path ( this is exactly the same way ADJ and we use the same d3dcompiler_47.dll - so hopefully that fixes weird WINE shit )
Replace Direct3D 9 PIX with D3D11 ID3DUserDefinedAnnotation - we're getting a much better list of events in RenderDoc now too
New: https://files.facepunch.com/matt/1b2911b1/qrenderdoc_5uxtBKqZlV.png
Old: https://files.facepunch.com/matt/1b2911b1/qrenderdoc_fcTCgPGtQT.png
- Enable CPixEventScope to record events, these are used to tell us our View / Layer
- Don't limit these events behind Plat_IsRunningOnCustomerMachine() - there is no overhead and it can be incredibly helpful for us having them on Steam builds
Implemented following guidance of: https://developer.nvidia.com/blog/best-practices-gpu-performance-events/
rendersystemdx11: don't link d3dx11 legacy stuff
Fix ErrorReports::UpdateGpu usage from rebase conflcit
Delete dead D3DX dlls
Remove fallback DX9 code for getting driver version, it's straightforward to grab from the registry by the DX adapter LUID.
This returns the same windows driver version numbers DX9 was reporting, but I've added some vendor specific renames
e.g for nvidia "31.0.15.1659" becomes "516.59" making it easier to filter by driver for us
rendersystemdx11: stop linking d3d9
rendersystemdx11: stop linking nvapi
LoadD3dCompiler calls Plat_LoadModule without full path ( this is exactly the same way ADJ and we use the same d3dcompiler_47.dll - so hopefully that fixes weird WINE shit )
Replace Direct3D 9 PIX with D3D11 ID3DUserDefinedAnnotation - we're getting a much better list of events in RenderDoc now too
New: https://files.facepunch.com/matt/1b2911b1/qrenderdoc_5uxtBKqZlV.png
Old: https://files.facepunch.com/matt/1b2911b1/qrenderdoc_fcTCgPGtQT.png
- Enable CPixEventScope to record events, these are used to tell us our View / Layer
- Don't limit these events behind Plat_IsRunningOnCustomerMachine() - there is no overhead and it can be incredibly helpful for us having them on Steam builds
Implemented following guidance of: https://developer.nvidia.com/blog/best-practices-gpu-performance-events/
rendersystemdx11: don't link d3dx11 legacy stuff
Fix ErrorReports::UpdateGpu usage from rebase conflcit
Hammer: fix crash when closing editor sessions with active working sets
Make compile errors from publishing report to error list, catch this and report it properly on the publish window. Also make tool addons report to error list properly.
Include prerelease versions of Visual Studio when looking with vswhere
Fixes Facepunch/sbox-issues#2058
Accidentally removed 1 line too many, fixes non-tools not opening
Remove some obvious dead code and unused stuff from gameinfo.gi, update the DeveloperHelpURL to the wiki
Get rid of -toolsonly, didn't launch anything and our tools are so integrated with the editor it doesn't make sense
Remove GameUI interface
Cleanup native tools menu bars to match our C# editor, I'd do this entirely in C# but we don't have interop on every tool
Delete complicated / hacky pane modes from Hammer map views ( Game, Asset Browser, Object Properties, Entity IO )
Create a dock widget below the Hammer viewport for the asset browser
Create the new C# asset browser in Hammer, quite a few things work already with no effort :o
Reimplement the Hammer pane embedded asset browser as a dock widget, tabify it at the bottom alongside our new C# one, always show the legacy first (for now). And in general tidy up / simplify the implementation of this
Add these asset browser dock widgets to the View->Toolbars menu
Need to setObjectName on these so they saveState properly
Remove QHeaderView from asset browser grid layout, not useful takes up a shit load of space
Legacy asset browser icon sizes match our new asset browser icon sizes, makes the medium icons actually usable in embedded browsers
Don't bother showing the new asset browser at all in Hammer, have it opt in from View -> Toolbars so we can get some proper feedback on it
Asset browser dock widgets collapse properly on ToggleAssetBrowserDockWidget command
Add ToggleAssetBrowserDockWidget command to Hammer that does exactly that, default key bind Alt + A
Cleanup HammerAssetBrowser class location, move OnAssetHighlight / OnAssetSelected that inspect / open in editor to MainAssetBrowser
Setup default locations for Hammer dock widgets a bit better, open selection sets by default but tab them next to the Outliner since you're going to be using one or the other and not both.
Give asset browser dock widget a sane default size
Default Hammer map view port to single 3d pane since thats what 90% of people use all the time
Default Hammer map view port to single 3d pane since thats what 90% of people use all the time
Don't bother showing the new asset browser at all in Hammer, have it opt in from View -> Toolbars so we can get some proper feedback on it
Asset browser dock widgets collapse properly on ToggleAssetBrowserDockWidget command
Add ToggleAssetBrowserDockWidget command to Hammer that does exactly that, default key bind Alt + A
Cleanup HammerAssetBrowser class location, move OnAssetHighlight / OnAssetSelected that inspect / open in editor to MainAssetBrowser
Setup default locations for Hammer dock widgets a bit better, open selection sets by default but tab them next to the Outliner since you're going to be using one or the other and not both.
Give asset browser dock widget a sane default size
Reimplement the Hammer pane embedded asset browser as a dock widget, tabify it at the bottom alongside our new C# one, always show the legacy first (for now). And in general tidy up / simplify the implementation of this
Add these asset browser dock widgets to the View->Toolbars menu
Need to setObjectName on these so they saveState properly
Remove QHeaderView from asset browser grid layout, not useful takes up a shit load of space
Legacy asset browser icon sizes match our new asset browser icon sizes, makes the medium icons actually usable in embedded browsers
Delete complicated / hacky pane modes from Hammer map views ( Game, Asset Browser, Object Properties, Entity IO )
Create a dock widget below the Hammer viewport for the asset browser
Create the new C# asset browser in Hammer, quite a few things work already with no effort :o
AssetPicker explicitly plays sound files and sound events, these are normally handled w/ the inspector previews of them.
Add IAssetSystem::OpenPicker( IAssetType* type, IAssetPickerListener* pListener ) which opens our AssetPicker from tools addon
CQAttributeEditor_SoundPicker ( used in Hammer and probs other shit ) uses the managed AssetPicker, this is way easier to use, doesn't show duplicate entries and shows all sound events not just base ones.
Old: https://files.facepunch.com/matt/1b2311b1/sbox_yEIejKDxCd.png
New: https://files.facepunch.com/matt/1b2311b1/sbox_8xvDTdEb0c.png
Addon creator will derive a path from the provided ident
Fix tool.minimal template
Tool addons reference base tools addon
Add Rider as a code editor (thanks @peter-r-g), I didn't test it but it's just the same as the VSCode one with different regkeys so it should be fine, & clean up some duplicate code around code editors too
For default code editor pick VS > VS Code > anything that is installed
Fix touch events collision filter exclusion where it needed both entites to have touch events off
Fixes Facepunch/sbox-issues#2046