3,198 Commits over 761 Days - 0.18cph!
Bugfix: ensure coverImage is enabled when initialized after initEmpty
Think it's time to move to standalone testing
Tests: navigated shop UI - all tiles had images
Bugfix: restore DLC prefab setup which caused NREs on dlc tile click
- ran dyn ref assign
Tests: clicked through all dlc items - all open
Bugfix: avoid invalidating sprites when shop opens (caused by closing page on warmup)
- Moved tab opening to OnOpened, after dynamic bundle resources were loaded
- also implement better handling of overwrites
Too much time chasing editor boot optim skipping warmup causing weirdness
Tests: could scroll in general shop page, most of the tiles were clickable, only special dlc items were throwing. Still missing icons
Bugfix: rename a field to let StoreBundleTool find replicated ref field
- ran dyn ref & bundle assigns
Tests: can click on featured tiles in store (but tile icon was still missing)
Update: ran "Update UI bundle assignments"
- fixed it up to skip reimporting assets with correct bundle assignations
Tests: checked meta files
Update: progress on reviving dynamic shop assets
- restore most of ui logic to cache/uncache dynamic bundle
- make storeitemdlc use dyn ref for page prefab
- change store logic to create empty tiles on warmup, then fill with content once opened
Tests: ran through the store in the editor. it's broken in a bunch of different ways, but seeing signs of system engaging, so progress
Update: add DynamicFullscreenSprite and DynamicGallerySprite to shadow respective fields on UI_StoreItemOverlayPage
- updated StoreBundleTool to also inspect private fields marked with SerializeField
- updated PageElementDrawer to render DynamicRef fields (and fix layout issues)
- ran UpdateDynRefs
Tests: inspected serialized prefabs
Update: Add DynamicPagePrefab to "shadow" PagePrefab field on ItemStoreTakeover
- added default picker rendering to DynamicResourceRefDrawer
- ran StoreBundleTool to auto-assign DynamicPagePrefab
Tests: inspected the prefab changes
Update: submitting the results of script run
Tests: none
Update(editor): automate copying of original resource to DynamicResourceRef
- change DynamicResourceRef to be a class type (reflection modification on values is quite a bit oh hassle). Will try to fix later if I got time
Tests: ran the new script, checked the modified prefabs
Update: Add DynamicResourceRef to UI_StoreTakeover
- amend prop drawer to invoke the right prop
Tests: none
Clean: remove PathProxyFor
- update StoreBundleTool to work with DynamicResourceRef
Tests: none, not in use yet
Update: Add DynamicResourceRef<T> to replace PathProxyForAttrib
Allows us to both automate more of the dynamic bundle assignment as well as help with future merge conflict resolution
Tests: added it to UI_StoreTakeover and it's drawer
Bugfix(editor): fix store prop drawer failing to draw
- added a fallback path for original image property
Cuased by missing path proxy field that I ripped out during merge
Tests: inspected JungleShowcase ui prefab
Buildfix: fix merge issues
Tests: editor opens
Merge: from hackweek_unsafescriptingaccess
- Bugfix for exception on boot for missing DLL entrypoint
Tests: booted into craggy on windows
Bugfix: grab latest binaries for Rust.Native
One of them was stale, breaking the feature
Tests: booted into craggy on windows - no more exception
Merge: from main
Been a year, lets see how borked everything is
Merge: from mt_snapshot_saving
- Bugfix for HittableByTrain components not saving in Jobs 4 mode
Tests: spawned a tall wooden barricade with Jobs 4 enabled
Bugfix: cache owner entity of HittableByTrains on init
Avoids lookups while running SaveComponent
Tests: spawned a wooden double barricade with jobs 4 enabled
Merge: from async_serveroccl_gen
- Optim: 4.5k server occlusion grid now generates in 22s, down from 45s
Tests: unit and perf tests, 2p on craggy to validate server occlusion, visualized 4.5k map occl grid results
Clean: extract GetBatchSize and WaitForTasks into ThreadingUtils
Tests: ran compile simulator
Update(editor): add heightmap sample and isInside visualization to server occlusion editor debug
Spent too long chasing non-existent domain reload ghosts
Tests: visualized occlusion of EU East 1. tested occlusion gen on craggy with 2p
Bugfix: avoid out of bounds access in FindComponent<T>
- also add editor ifdef guards for editor attribute
Results array can be oversized, since we reuse it
Tests: ran unit tests - pass
Optim: tweak batch size when calculating server occlusion narrow phase
This cuts down 4.5k world server occlusion generation from 45s to 35s in batched mode. Async further brings it down to 22s
Tests: ran generation in editor
Update: make UnsafeScriptingAccess initialize on editor load
Allows to use it in editor-only tools/workflows
Tests: ran server occclusion generation in editor, checked profile
Update: add GamePhysics.FindComponent<T> that supports async
Configured async to engage at more than 4 batches of 64 queries
Tests: ran perf tests. same perf up to 400 points, at 10k points is 2x faster 0.42ms batched+async vs 0.96ms batched vs 5.4ms serial
Update: add TerrainMeta.SampleTerrainMeshHeights
Configured to engage async after have more than 4 batches of 256 pos each
Tests: ran perf tests
Update(tests): add IsInsideTerrain perf comparison tests
Need them to tweak when to engage async and when to skip it internally
Tests: ran them
Merge: from mt_snapshot_savings
- Bugfixes for a couple unsafe Save codepaths in Jobs 4 mode
- Added debug utility in InvokeHandler to track down a thread race in Jobs 4
Tests: unit tests + gameplay on craggy
Bugfix: make Underwear.ValidateForPlayer MT friendly on server
Fixes BasePlayer saving throwing unity exceptions
Tests: changed underwear with Jobs 4
Bugfix: make FishMount.Save mt friendly - cache fish container index
Tests: placed a fish in a trophy display with Jobs 4
Update: wrap InvokeHandler internals in DebugMTLock
Tests: booted on craggy and ran around with EnableDebugMTLock
Update: add single-thread reentrant support to DebugMTLock to avoid deadlocks
- added unit tests
Because of course InvokeHandler is non-trivially recursive
Tests: uni tests
Update: Move UnsafeScriptingAccess and DebugMTLock to Facepunch.UnityEngine
- Cleanup empty asms
Tests: ran relevant unit tests
Update: explicitly capture callstack when DebugMTLock is tripped
- frame count can be limited to via unsafe.DebugMTLockMaxFrames (def 5)
Tests: ran unit tests
New: DebugMTLock - a named lock guard that print an error on concurrent access
- controlled by Unsafe.EnableDebugMTLock, disabled by default
- codegen, unit tests
Need it to help chase down unobvious thread races, like InvokeHandler
Tests: ran unit tests
Optim: Jobs 4 - reduce server.ParallelNetworkQueueBatchSize to 16 by default
256 was waaay to high for the per-frame workload we get, it basically disabled parallelization
Tests: none, trivial change
Bugfix: fix 6 TestMTSave failures
No legit mt issues, just new entity types with missing unit test setup
Tests: ran all TestMTSave tests, pass
Bugfix: make card table saving MT-friendly
Done by removing the concept of item "busy" or "locking" - was never set but checked against Time.time
Tests: none, trivial change
Bugfix: cache rocket ammo def to avoid get_gameObject calls in AttackHelicopterRockets
Tests: spawned attack heli and geared it up - could see them in inventory
Merge: from vehicle_pooling
- Buildfix for BallistaGun
Buildfix: wrap Ballista private members in relevant mode guards
Tests: ran compile test