1,298 Commits over 1,371 Days - 0.04cph!
Fixed a bug with static set/get wrap codegen not passing correct method name. Now support also adding [CodeGen] attributes directly to a method or property bypassing an attribute alias, these don't require setting the Instance/Static flags.
Use nameof where possible
Fixed tests for WrapSet/WrapGet
Let CodeGenType.WrapCall proxies return their own values. They can simple do "return resume();" if they wanna keep intended behavior, so we can also wrap methods that don't just return void
Added first version of WrapSet/WrapGet
Unit test stubs
Don't pass value for get accessor..
Cast to original return type in get accessor when wrapping
Support CodeGenType.Instance with CodeGenType.WrapCall
Finally sort of got somewhere... bit of a nightmare to debug this right now. Allow multiple CodeGenAttribute. Remove from ClientRpc and add some tests locally instead
Initial tests for static call wrap
Use Frustum instead to ensure created
Fix Vector3.ToScreen not working as it did before and breaking lots of stuff. Implement backwards compatibility and evaluate if this is the right solution later.
Allow local packages in game menu if we are not ourself a remote package. Fixes sboxgame/issues#3614
Fix NRE when trying to mount packages in game menu. Fixes sboxgame/issues#3806
Include token hash in log when unable to find string token
Added some extra logging and safety in reading inputs to try investigate sboxgames/issues#3886
Fixed AE_CL_PLAYSOUND anim events not playing for non-networked client-only entities
Revert AttachSteamAuthTicket
Authorization option for WebSocket, remove SetRequestHeader (duplicate functionality)
Revert DisposeAsync, it actually isn't needed. Only dispatch Disconnect if we're connected. Add EnableCompression to set deflate options if their socket server supports.
WebSocket implements IAsyncDisposable. When disposing websocket because of TaskSource cancellation, do so async and complete the WS close handshake if we can. If we receive a ConnectionClosedPrematurely message, only actually disconnect + dispose if the connection is no longer open. Call TaskSource.OnSessionEnded in GameMenuDll when resetting environment.
Clientside Anim Fix (#1188)
Delete unused method
Fix and simplify condition that could never be true
When setting GameLobby.Game set withLocal to true so that we actually load the local version if we're starting from a local version. This also fixes FileSystem.Data not using the folder with #local in when it should be.
StartServerAsync empties savedgame, gamesettings, extensions ConVars
Create Game on default menu actually respects Min/Max players in the project settings
Using min doens't make sense there actually
Saving a game stores current MaxPlayers in metadata. Fixed default menu Load Game not working, make it look OK.
Defer OnAfterTreeRender until end of tick to ensure children processed first and references set (#1180)
* Defer OnAfterTreeRender until end of tick to ensure children processed first and references set
* Only update (run pending events, tick, scroll velocity) after render once - reset that flag on hotload if render tree becomes dirty
* Revert "Only update (run pending events, tick, scroll velocity) after render once - reset that flag on hotload if render tree becomes dirty"
This reverts commit aae36e1777d11a5649c24985c0f8802ced3397b4.
Revert "Only update (run pending events, tick, scroll velocity) after render once - reset that flag on hotload if render tree becomes dirty"
This reverts commit aae36e1777d11a5649c24985c0f8802ced3397b4.
Only update (run pending events, tick, scroll velocity) after render once - reset that flag on hotload if render tree becomes dirty
Max 32 chars for ident edit, don't show sandbox gamemode twice
Add icons for all file menu items
Add "Open in Editor" context menu option to ProjectRow, shows up for library/tools/addon projects
Make StartScreen a BaseWindow, add HasMaximizeButton
Add modal package selector to main menu, use `Game.Overlay.ShowPackageSelector( query, onSelect )` https://files.facepunch.com/tony/1b1811b1/sbox_0pbOdyXzXM.mp4
Don't clean up Release path when running processor codegen shit, fixes razor gen when testing release builds
Revert "Don't clean up Release path when running processor codegen shit, fixes razor gen when testing release builds"
This reverts commit 738d6ef11f5591743600177ff476b7d5138f9741.
Trace.RunAll() - return empty array instead of null for no results
Fix copying text throwing exception
Use s&box logo as window icon for welcome screen 👋
Don't spam Draw: No Material Mode? from RenderTools::Draw, it's valid for there to be no valid mode when you're under tool vis modes
Fix crash when dragging cloud models quickly in/out of MapView
Merge branch 'master' into render-frag-ref-fix
Defer OnAfterTreeRender until end of tick to ensure children processed first and references set
Fix setting GameLobby.ConVars not checking correct key for input
Remove Map options for Game projects (this stuff to be handled in game menus only in future)
Remove map select stuff from LaunchConfig
Remove validate map stuff from GameMenuInstance
Obsolete ValidateMap, MapSelectionMode and MapList
Scrape Effects (#1139)
* Add props to Surface for impact decal and scrape effects / decals
* Use ContactPoint + SurfaceNormal to pass into AddImpactSound
* Let's add decals and particle effects for impacts but try only doing it if speed > 30 - maybe we configure this per surface?
* Add PhysicsImpact struct and use that to seperate effects for Hard and Soft impacts in Surface description (decals + fx)
* Correctly spawn soft or hard physics impact particles + decals based on squared speed
* Add normal from first valid manifold on contact to friction events to pass to C#
* Enable/Disable physics impacts and scrape events as props for now, pass normal from fiction event to AddFrictionSound and create effects where necessary
* Also grab contact center from first manifold and pass to C#
* Use contact pos for decals + effects, try to base effect frequency on energy volume scale, fix decal placement remove particles on friction effect stop
* Set destroy time to 0.5 (this is a failsafe anyway)
* Don't have particles follow entity, do it ourselves so we can set to actual contact pos
* Set forward for scrape particles to contact normal
* Use method for getting inherited surface values if necessary to avoid repeating same code
* Add Mass and Direction named control points for friction particles. Mass is body mass, direction is body velocity normal. CP0 is already setting position and contact normal
* Lower destroy time for effects
* Reorganize scrape data in surface def, lower default values. Don't fallback to rough by default. If it's a smooth scrape and there's no effects for that - do nothing by default
* Surface is considered smooth by default, can set roughness factor higher for rough surfaces...
* Get material for triangle by index for shape 2 on friction events should fix all friction events against world surfaces having hit surface be "default"
* Store friction hit surface (last) and if we've changed hit surface stop any previous effects and sounds
* Remove unused prop
* Remove unused var
* Make EnableScrapeEffects and EnableImpactEffects internal for now
* Make FrictionEffects a dictionary
* Call PhysicsGameSystem.Shutdown on GameLoop shutdown to ensure vars cleared
* Add an Intensity named control point value (0-1) for scrape particle effects to use
Set default value if property does not exist in AddDictionaryPropertyInt as we do in AddDictionaryProperty<T>
Add an Intensity named control point value (0-1) for scrape particle effects to use
Make EnableScrapeEffects and EnableImpactEffects internal for now
Make FrictionEffects a dictionary
Call PhysicsGameSystem.Shutdown on GameLoop shutdown to ensure vars cleared
TickRate Project Settings (#1134)
* TickRate project settings
* Def tick rate 50 as it was
* Obsolete Game.TickRate.set
* take tickrate stuff out of serverconfig
take tickrate stuff out of serverconfig
Obsolete Game.TickRate.set
Def tick rate 50 as it was
TickRate project settings
Store friction hit surface (last) and if we've changed hit surface stop any previous effects and sounds
Add Mass and Direction named control points for friction particles. Mass is body mass, direction is body velocity normal. CP0 is already setting position and contact normal
Lower destroy time for effects
Reorganize scrape data in surface def, lower default values. Don't fallback to rough by default. If it's a smooth scrape and there's no effects for that - do nothing by default
Surface is considered smooth by default, can set roughness factor higher for rough surfaces...
Get material for triangle by index for shape 2 on friction events should fix all friction events against world surfaces having hit surface be "default"
Add props to Surface for impact decal and scrape effects / decals
Use ContactPoint + SurfaceNormal to pass into AddImpactSound
Let's add decals and particle effects for impacts but try only doing it if speed > 30 - maybe we configure this per surface?
Add PhysicsImpact struct and use that to seperate effects for Hard and Soft impacts in Surface description (decals + fx)
Correctly spawn soft or hard physics impact particles + decals based on squared speed
Add normal from first valid manifold on contact to friction events to pass to C#
Enable/Disable physics impacts and scrape events as props for now, pass normal from fiction event to AddFrictionSound and create effects where necessary
Also grab contact center from first manifold and pass to C#
Use contact pos for decals + effects, try to base effect frequency on energy volume scale, fix decal placement remove particles on friction effect stop
Set destroy time to 0.5 (this is a failsafe anyway)
Don't have particles follow entity, do it ourselves so we can set to actual contact pos
Set forward for scrape particles to contact normal
Use method for getting inherited surface values if necessary to avoid repeating same code
Use method for getting inherited surface values if necessary to avoid repeating same code
Set forward for scrape particles to contact normal
Also grab contact center from first manifold and pass to C#
Use contact pos for decals + effects, try to base effect frequency on energy volume scale, fix decal placement remove particles on friction effect stop
Set destroy time to 0.5 (this is a failsafe anyway)
Don't have particles follow entity, do it ourselves so we can set to actual contact pos