userDaniel Pcancel
reporust_rebootcancel

1,904 Commits over 457 Days - 0.17cph!

10 Days Ago
Merge: from analytics_save - Adds a "save" event tracking when server creates a save Tests: triggered save in editor with logging
10 Days Ago
Update: add analytics save event Tests: ran an explicit save in editor
11 Days Ago
Update: add extra TODO for UseOcclusionV2 Tests: none, trivial change
11 Days Ago
Update: UseOcclusionV2 - propagate networkTime to OcclusionGetRecentlySeen Should be a smidge faster, but it's primarily to enable threading if we go that way. Also saves on profiler inhibiting the call (need to exclude it on the profiler side) Tests: none, trivial change
11 Days Ago
Clean: restructure UseOcclusionV2 code to make profiling easier Tests: compiles in editor
11 Days Ago
Clean: fix ShouldSkipServerOcclusSion typo English is hard Tests: editor compiles
11 Days Ago
Optim: UseOcclusionV2 - OcclusionFrameCache uses NetIDs instead of BasePlayer pairs This avoids ObjectEqualityComparer which has overhead because of unity-null checks Tests: none, trivial change
11 Days Ago
Optim: UseOcclusionV2 - reduce lastPlayerVisibility hash lookups Should help OcclusionGatherLostPairsToSend internal loop to stay hot. Also gets rid of small funcs that are inhibited by profiler Tests: ran in and out of occlusion
11 Days Ago
Clean: add a comment explaining the extra OcclusionUpdateLostVisibility Tests: none, trivial change
11 Days Ago
Optim: UseOcclusionV2 - invert how we process occludees - instead of checking if we need to send player to occludees, we process occludees against player This caused us to miss sleepers previously, which we corrected with extra checks by reversing pairs(and potentially generating more netowrk messages). But we don't need to do all of that extra work if we do it in the right order. Hoping this cuts downstream queue 2x. Tests: 2p on craggy - checked occlusion works, going invis works, spectating works, sleepers replicate
11 Days Ago
Clean: introduce BasePlayer.UseOcclusionV2 use it as a switch instead of UsePlayerTasks (works same way) Makes it easier to track what's related to what Tests: editor compiles
11 Days Ago
Optim: ServerOcclusion - use network IDs instead of BasePlayer for dictionary key Helps avoid unity-null check overhead when looking up recently seen players Tests: 2p session on craggy - disconnected as second and killed sleeper
11 Days Ago
Bugfix: ServerOcclusion - remove destroyed players from lastPlayerVisibility cache We were leaking baseplayers and it was slowing down hash lookups Tests: 2p session on craggy, 2nd player disconnected, killed their sleeper - lastPlayerVisibility was empty for the remaining player
12 Days Ago
Update: UsePlayerTasks - lifting skipping logic out of OcclusionLineOfSight to caller - left a couple more TODOs as I found a weirdness in the original code Only thing left in OcclusionLineOfSight is grid-cell caching and deduplication. Tests: none, discovered unit tests are broken since I upgraded occlusion cache version a month ago. Will fix and test later
12 Days Ago
Optim: UsePlayerTasks - ServerOcclusion uses CustomShouldNetworkTo and CustomShouldSkipServerOcclusion Microoptim - this reduces hashset look ups and moves some checks to be run earlier. Main benefit is lifting more code out of BasePlayer.OcclusionLineOfSight Tests: none, skipping tests for now
12 Days Ago
Update: refactor ServerUpdateOcclusionParallel to allow for experimental changes Tests: compiles in editor
12 Days Ago
Update: add a bunch of optimization TODO notes for UsePlayerUpdateJobs 2 Gathered from inspecting 330p server snapshot from a late-in-the-patch-cycle server. Will clean-up before merge. Tests: none, trivial merge
13 Days Ago
Buildfix: add missing CLIENT guards Tests: build all configs locally
13 Days Ago
Merge: from analytics_queue_rewrite - New analytics uploading backend, disabled by default (analytics.usev2) - New debug vars - analytics.log and analytics.dryrun Tests: unit tests, used both old and new analytics backends and monitored logs
13 Days Ago
Merge: from baseplayer_vis_nre - Simplified how debug.invis works - Reimplemented how global.spectate and spectateid work - spectator no longer parents to the spectated player - Tightened existing debug logs around mystery baseplayer NRE. This eliminates a source of potential NREs related to players spectating others, but doesn't outright forbid them Tests: 2p sesions on Craggy, one player spectates other - killed scientist with AK(hs audio replicated), helicopter fly around, motorbike ride around, noclipped outside of usual network range and back, cycled invis, left the server and returned - no issues. Tried debug camera.
13 Days Ago
▉▋▆▅▆▇: ▊▊▇▌▄▍▋ ▊▇▄▍▋▇▄▄▆▇ ▍▊▍ ▍▅▄▍ ▍▄▇▌▇▌▇▋█▄▉ ▍▇▆▋ ▍▋▅█▋▋▋▇▊▊▆ █▇ █▇▇▉▊ ▇▍▄-▉▌▇█▊ ▅▆▆█▅▌▄ ▅▋▅▋▊: ▆▅▆▊▊▆▅▇▄ ▇▅▋▍▇▍ ▇▊▇▍▌ ▍▅▊█ ▅▅▉▇ █▆▋▅▉▍▇▆, ▋▇▍▉▆ ▅▊▌▄, ▉▉▋▍▋██, ▆▍▊▅█▋▉▉▊▋, ▍▌▉▄▅▄▍▋ - ▊▇ ▇▇▊▌█ ▌█▉▊▌█▊▋ ▆▌ ▊▆▆ ▋▍▌█▍█▅▌▆'▍ ██▋, ▅▅ ▅▄▌▆ ▋▊ ▊▆▍▌
13 Days Ago
Merge: from main
13 Days Ago
Update: Add a safety guard to DestroyOnClient to avoid destroying client's local player Tests: 2p session on craggy (though there's no case in vanilla where this can happen)
13 Days Ago
Optim: pool SpectatorSubStrategy and SpectatedSubStrategy Tests: 2p session on craggy with disconnects - checked pool.print_memory afterwards
13 Days Ago
Update: convert IsBeingSpectated utility - Updated dependent code to use new GetSpectators instead of old nested children approach Tests: spectated player on craggy that shot scientists - headshot sounds replicated correctly to the spectator
13 Days Ago
Clean: remove BaseEntity spectating support and fix up types/names of relevant code This code was broken for multiple years, and couldn't think of a reason it could be useful, so simplifying. Tests: spectated on craggy, cycled view modes
13 Days Ago
Update: when spectated player disconnects, switch spectators to a new target - this also fixes a leak of spectated players list, since it gets cleared by above action Tests: flew out, disconnected - spectator returned to self. Reconnected, started spectating joined player - all replicated.
13 Days Ago
Update: reimplement spectating to use ISubscriptionStrategy instead of secondary groups - Done via SpectatorSubStrategy (takes subscriptions of target) and SpectatedSubStrategy (notifies when group changes) - Removed old secondary group code and reverted relevant Network API changes - Made Networkable.OnSubscriptionChange public This also fixes the bug with previous version that it only saw "near" distance entities Tests: Spectated player on craggy, flew around until island disappeared from rendering - no NREs. Got 2 things to improve, and I think it's done
14 Days Ago
Update: extract how we gather network group subscribers into a ISubscriberStrategy - implemented a DefaultSubscriberStrategy This CL doesn't have any logic change, it just reorganizes code so that we can start overwriting this(need it for spectating now and parallel processing in the future). Tests: 2p on craggy - saw the island entities spawn in as well as the players replicate
14 Days Ago
Bugfix: spectators now subscribe to spectatees via secondary group This prevents spectatee from being culled out by network grid onthe spectators end, leading to NREs. This is temporary solution, as it doesn't have the same network range as the primary group. Tests: spectating a palyer on craggy, then flew around till the island was no longer visible
14 Days Ago
▋▇▅▋▍: ▅▍▌'▍ ▅▌▇ ▋▇ ▄▄█▉▅ ▌▍▌▇▌▅██▄▌▋▅▆▇▅▇▊▌▍▅▋█ █▆ ▌▄██▆▄▌▌▉▍ ▅▌ ▌▍▆▊▉▊▍▍▆▍ ▊▄▊ ▍▇ ▆████▉ ▊▉▋▊▍▆▄▄ ▌▊ ▆▅▇█▋▉▇▉▄█, █▄ ▌██▌▆'▊ ▊▇▅▉ ▋▇▆█▉▍▉ █▍▍ ▇▇▇▌▇ ▉▊▊ ▅▌▇▍▄'▊ ▊▆▆▄▄▇▇ ▉▉▋█▄▆▆ ▄▇▍▊█ █▊█▅▉▉▋, ▍▍▆▆▅▋ ▆▊▋ ▆▋▉█▊ ▉▌▌▊ █▆▆█▊: ▌▌▋▉ ▉▍▆▅▊ ▉▆██▇▆▉ ▊▋ ▊ █▌ ▊█▅▌▌▌▊ █▅▆█ ▉▇▇██▆▋▊▉▄ - ▄▍▅▅'▅ █▊▅ ▌▉▊ ▍▋▅▇▉▊▊.
14 Days Ago
▋▋▋▇▄: █▄▌'▊ █▇▌ █▇ ▊▋▊▇ ▅▄▋▇▄▅▍▅▋▋▆▅█▊▉▅▊▉▅▊▋▊▌▍▄ ▊▄▋ ▋▆▌▉▊▊▉▋█▇ ▋▉█▍▊▇▉ ▉ ▍▊▆▆▊ ▄▊▄▉ ▉▅▌ ▇█ ▅▆ ▇▉▍▋ ▉▋▅▋▊▇▌▉▅▌ ▍▉▇▉▊▇██▉▋ ▍▊▅▄▉▊▄ ▇█▅▉▅ ▇▌ ▄▆█▉▊▇▆▄▌▊ (▉▊ █▋▋ ▋▌ ▌▄▆▋▍ ▊▅▅▄ ▆▉ ▅▄▆▌▆▉██▍). ▍▌▆ ▉▍ ▋█ █▍▅▆▉▊ ▇▋▄▅▄▅ ▉▇▇▉▄▊▌▋▇▋ █▍ ▇▇▌▌▍▋▊▌▅▆, ▋▆ ▌▄▄ █▊▉▋▄ █▆▌▉▊▆ ▆▌▄▍. ▄▋▉▆▌: ▅▌█▋ ▇█▅▄▇ ▊▄▋▍▊█▅ ▌▍ ▇█▅▉▆▆▊ ▉▋▌▅ ▅▍▊▉ ▅▍▉▅ ▋█▉▇▅ - ▉▍ ▉▉▆▆▉▌▆▋▆▌ ▋▊▊▅▄. ▌▋▆ ▍▅▊█▅▋▊▌ ▄▄▉▋ ▅▍▍▆▋▅▆█▇ ▆▍▅█ ▋█▇▍▍▊▉▌▄ ▆█ ▇▄▇▉▉▋▌▅▆█ ▋▌▊ ▇█▍ ▊▆ ▍▊▆█▍█▇ ▇▌▄█▍ ▍▄▋▉▍▊ - ▋▋▌▊ █▌▍ ▄▍▊▊ ▊▉ ▋ ▍▉▄
14 Days Ago
Optim: cache spectated target Turns out it's quieried very frequenly Tests: 2p session on craggy with disconnects
14 Days Ago
Update: first version of spectate that doesn't require parenting to target player Doing this to avoid weird bugs with nested players in other systems. Tests: 2p session on craggy with spectating. Toggled camera modes and toggled invis. tried spectating after server occlusion culled other player. Noticed that nutrition, comfort info didn't replicate, map compas reacted to spectator's input - will fix those next
17 Days Ago
Bugfix: fix invis players not replicating positions & rotations Tests: spectated invis player, didn't observe and animation glitches as the comment warned (tried rock, torch, ak)
17 Days Ago
Bugfix: don't destroy local player when spectating player going invisible Fallout from the recent rewrite. Tests: while being spectated, toggled invis a bunch of times - no NREs on the client. invis player doesn't replicate, though, will fix next.
17 Days Ago
▉█▊▋▊▋: █▍▌▇▇▊▋▉▇▆▋ ▋█▅▍▅.▋▅█▊▄ ▆▉▋▆▊█▌ - ▊▉▄▅▍▍█ ▌▉▍▌▊▊▍▇▍▇.█▊▅▉█▋▉▆▍▋▅█▄▄▋ ▅▌▌▌▆ ▉▋ ▉▊▅▊▋▇▌▄▅ - ▌▊█▌ ▄▇▆▆▌▉▌▄ ▆ ▆██▌ ▅█▌▄▉ ▋▋▋▅██▌▍▅█ ▍▉▆▌▉▆▋▌▉ ▊▄ ▊▊▋▆█ ▊▅▌▅▇▅▅▇▍▋ ▅▍ ▌▋█▌▇█ ▄▊▍▊▌▊█ ▊▆ █▉▄▄▍▌▄▌▊▅▍▅▋█▍, ▍▌ ▅▌ ▄▋▅ ▅▇▆▊▊█▄ ▆▆ ▋▊▍▊▋▌▊▅▄▋ ▍▋▋▇▆▆▆▍ ▊▄█▊▊ █▆▇▊▋ <-> ▆▆▉▋█▌▆ ▉▌▋▆ ▄▅▍▋ ▆▋██▍. ▄███▇▆▋, ▅▄█ ██▅▍▌▌ ▆▆ ▇▌▅▋██▋▊▌█▌ █▊▌▌▋: ▊▌▋▄▇ ▅▄ ▄█▇▇▌▌▆ ▅▌ ▄▉▄▊▌▇▄▍▋▋, ▇▆▆▊▌▊▉█▆ ▄▄▅▌▅, ▋▅▆▄▄ ▍▋▉▇▄▇, ▅▋▆▌▇▌▌▇ ▊▋▋▋▌, ▉▋▆▇▄▅▋▍ ▊▍▌▋▅ - ▍▌▋▍▌▍▆▆▋▌ ▆▊▌▅ ▆▋▆ ▇▍█▇▉ ▇▊ █▉▆ ▇██▌█ ▅▅▌▍. ▉▋▍▌█▊▋▌▄▋ ▅▍ █▅█▉▌▇, ▌█▉ ▅▉ ▆ ▊▍▋▇ ▍▌█ - ▋▆▇▅█▇▅▍ ▊▋█▊▊█▇ ▌▇▍▆ ▉▌ ▇█ ██▆▋/▅▉▌█▌▅▆, █▊ ▅▍▍ ▆ ▋█▅ ▊▄▉▌▌▇▄█▇▋▇.
17 Days Ago
Bugfix: remove false-positive log for deferred player destroy - remove unnecessary override Discovered when spactating a player that constantly toggles invis. Doesn't fix the NRE itself, but further reduces false-positives. Still looking for the root cause Tests: spectated a player constantly toggling invis
17 Days Ago
Bugfix: reduce error false-positives by ensuring bot IDs never overlap - Permit random overlap once we exhaust MaxBotIdRange ids (which is old behavior) but emit an error Because we always picked a random bot ID, it was possible that there'd be an overlap and it could confuse dependent systems (like my logging for the NRE). Hoping this reduces false-positive error logging. Tests: in editor spawned a couple players and killed them, then monitored the ID queue with debugger
18 Days Ago
Merge: from main
18 Days Ago
Merge: from main Didn't refresh and missed the desired fixes
18 Days Ago
Merge: from main
18 Days Ago
Update: skip server occlusion culling for players in the deep sea It'll still have some overhead for the server occlusion processing, but that'll be improved separately Tests: 2p session on craggy - tested occlusion with both on Craggy, one on Craggy and one in deep sea, and both in deep sea
19 Days Ago
Bugfix(editor): StoreBundleTool - handle invalid paths This can happen if the serialized path now points to renamed or deleted resource. Tests: none, don't have a case like that right now.
19 Days Ago
Update(editor): StoreBundleTool - stage timings emit volume of work Makes it easier to confirm if it's doing anything when there are no dirty changes Tests: ran the tool
19 Days Ago
Clean(editor): remove Tools/Menu2 Checked both the editor pref by variable and by value, they're not used anywhere Tests: none, trivial change
19 Days Ago
Update(editor): StoreBundleTool - scan scriptable objects - fix assembly scanner skipping public fields if it's type is nested Tests: created a dummy scriptable object, ran a scan - it got picked up
19 Days Ago
Updateeditor): StoreBundleTool - activate bundle assignment code - removed extra logging Tests: editor compiles
19 Days Ago
Update(editor): StoreBundleTool - scan for already-assigned-to-bundles resources - fixed timer reporting invalid times for sections of code Tests: ran it, doesn't find any diffs with my manual assignments from last month
19 Days Ago
Update(editor): StoreBundleTool - add proxy path scanning from existing prefabs Tests: ran the code, checked some of the paths. gotta implement comparison to fully validate