userDaniel Pcancel

2,050 Commits over 518 Days - 0.16cph!

38 Days Ago
Update: serverocclusiondebug - clarify what invalid grid means Now explicitly saying that server occlusion treats path with one or more invalid grid positions as unblocked Tests: none, trivial change
38 Days Ago
Bugfix: server occlusion - skip occlusion for players outside of the occlusion grid Tests: checked occlusion between y:90 and y:110 - previously would stutter(OcclusionV1) or would occlude(OcclusionV2). Tested hiding behind a hill - still works
38 Days Ago
Update: introduce BaseEntity.ServerNavMeshPos property and use it instead of the methods Incomplete work(need to expose transform matrices), will return after bugfixing Tests: none
39 Days Ago
Update: LimitedTurnNavAgent sets npc's position via helper functions - ScientistNPC2 overrides it to optionally map on to the detached navmesh if it's on a ghost ship - LimitedTurnNavAgent uses navmesh positions to calculate steering to waypoint in FaceTarget mode (think it was the original intent anyway) There's a bunch more code that needs to be converted just to be safe with strong waves Tests: spawned ghost ship away from craggy, enabled AI, and ran around to different areas - scientist caught up, were able to shoot me
39 Days Ago
Update: GhostShip spawns navmesh instead of NavMeshSurface - Disabled NavMeshSurface on GhostSHip prefab (will need to do it for the rest later) This stops NavMeshSurface constrantly running add-remove navmesh every server frame. Need to figure out how to tie it to NPCs Tests: visualzied navmesh in editor via gizmos, checked profiler to not see any more NavMeshSurface::UpdateActive calls
39 Days Ago
Merge: from baseplayer_serverupdateparallel - Optim for OcclusionV2 - remove extra hash lookup in a busy loop Tests: with UsePlayerUpdateJobs 2 - toggled invis in close proximity and far away, suicided away from spawn and flew back, teleported around
39 Days Ago
Optim: OcclusionV2 - skip resetting lastPlayerVisibility every frame Turns out didn't need to make the other half of changes Tests: used invis close and far away
39 Days Ago
Update: UseOcclusionV2 - simplify toggling invis - when enabling invis, notify occlusion tracking that we destroyed entity on subscriber's end - when disabling invis, skip sending snapshots - occlusion will handle it Halfway to remove the constant hashSet.Remove calls in GatherPairs loop Tests: UsePlayerUpdateJobs 2, toggled invis in front of player. went invis, flew outside network range, flew back, disabled invis - spawned correctly.
39 Days Ago
Merge: from baseplayer_serverupdateparallel - Bugfix for UsePlayerUpdateJobs 2 not replicating players for spectators - Bugfix for leaking players in occlusion groups Tests: spectated players from far away. Inspected server state after killing a sleeper
39 Days Ago
Bugfix: ServerOcclusion - clean up players from all of their occlusion groups on server destroy Turns out we were leaving a lot of "zombie" players once sleepers were killed. This would slow down server occlusion eventually. Tests: on Craggy, killed a sleeper, moved to a different network group, and checked in debugger if the occlusion group only contains my player
40 Days Ago
Bugfix: UseOcclusionV2 - handle spectating players Since we no longer do bidirectional checks when iterating occlusion groups, we ended up missing out on spectators and wouldn't allow replication to them. Tests: on craggy with UsePlayerUpdateJobs 2, flew far away to get outside of network range then started spectating - could see target moving.
40 Days Ago
Merge: from main
40 Days Ago
Merge: from spectate_dontfloodsnapshots - Bugfix for occlusion not destroying all players in UsePlayerUpdateJobs 2 mode Tests: 2p on craggy - used hill as obstruction, checked entity lists on both clients in editor
40 Days Ago
Bugfix: UsePlayerTasks - calculate end of batch correctly in SendEntityDestroyMessages_AsyncState This was causing server occlusion to skip sending some of destroy commands (from last batch), leaving a phantom player Tests: on Craggy went on behind hill, then checked editor entity list - confirmed that replicated players got removed on both ends
40 Days Ago
Merge: from main
41 Days Ago
Merge: from spectate_dontfloodsnapshots - Fixes spectate not working in UsePlayerUpdateJobs 2 case Tests: tried to spectate occluded player
41 Days Ago
Bugfix: Ensure initial player snapshot gets sent to spectator in UsePlayerUpdateJobs 2 case Tests: on craggy with UsePlayerUpdateJobs 2, took 2nd player behind a hill to occlude, then tried to spectate them - confirmed that the first snapshot got sent.
41 Days Ago
Merge: from main
43 Days Ago
Clean: post-submit feedback - rename entity_prefabId field to entity_prefab_id - rename AddShortEntity to AddShortEntityField More consistent with other examples Tests: compiles in editor
43 Days Ago
Merge: from analytics_entity_createdestroy - minor code clean Tests: editor compiles
43 Days Ago
Merge: from analytics_entity_createdestroy - we now collect entity spawn and destroy events once the server has started up (part of `gameplay_analytics` servervar) Tests: observed logs of analytics in CLIENT+SERVER editor
43 Days Ago
Merge: from main
43 Days Ago
Clean: fix formatting in Analytics.Azure.cs Most of file was offset with 2 tabs. Sorry to anyone who has conflicting changes in same file (hopefully no-one) Tests: editor compiles
43 Days Ago
Update: Analytics - track all entity spawn/destroy events after server initializes - change the format of these events to only send vital data - HackableLockedCrate no longer has it's own EntityCreated event Tests: logged analytics on Craggy - saw events being appended after server initialized
44 Days Ago
Merge: from server_occlusion_poppin - Reduce player poppin by making occlusion grid generation more conservative - Bumped occlusion version, will cause regeneration on next server boot Tests: visualized in editor, ran previously failed queries
44 Days Ago
Update: ServerOcclusion - only block occlusion cell if it's fully under terrain - bumped occlusion file version Previously we considered it was blocked if one of sample points was in terrain. This allows more occlusion queries to pass, which should reduce poppin. Tests: visualized new grid, ran previously failing query - they now pass
45 Days Ago
Merge: from hide_getinternalarrayunsafe - Replaces dangerous API with a safer, updates existing use cases Tests: unit tests
45 Days Ago
Update: replace invalid usage of GetInternalArrayUnsafe Tests: none, trivial change
45 Days Ago
Update: Hide List.GetInternalArrayUnsafe - introduce ListAsReadOnlySpanOf to help deal with casting up (since we don't have ReadOnlySpan<T>.CastUp<U>) - added simple unit tests Tests: ran unit tests
45 Days Ago
Merge: from analytics_v2_expose_telem - Fixes CLient crash when running analytics.tablestats or uploaderstats Tests: built standalone and ran the commands - no crash
45 Days Ago
▊▉▆█▋▌: ▇█▍▊ ▌▋▉▋▍▅▆▍▇▊▌▊▌▇▇▊▋▌▉▋▇▋ ▊█ ▅▉▍██▉▋▉▄ █▌▉▅▊▍▍▆▆▌▋ ▋▄▊▌▅ ▄▄█▌▅▇▄ ▅▅▊▇▆▌, ▉▋▌▆▉ ██▋▉▅ ▍▊█▄▍ ▌▊▄▌▄ ▆▇ █▆ ▊▌▅▌█▍ ▄▉▋█▋▅▌ █▉▆█ █▉▍ ▉▅▋▆▅▆█▉█▅ ▉▅▇▉ ▊▊▆▊▆▉▄▇▍. ▄▆▌▄▆: ▉▊▊▌▌ █▋█▅▌▋▆▉▉▄ ▉▍▊▋▆▌, ▌▍▌ ▅▍▌▆▆▊▍▇▆.▅▍▌█▊▇▌▌▅▉ - █▍ ▄▄▉▆ ▇▅▊▄▋█▋
45 Days Ago
Merge: from main
46 Days Ago
Merge: from spectate_dontfloodsnapshots - reduce potential delay when starting to spectate a far-away player Tests: flew around 2k procgen map, got to the other side of it then spectated player on the opposite end.
46 Days Ago
Merge: from main
46 Days Ago
Update: spectator's snapshot queue is cleared when switching between far-away targets This should speed up switching around on a server. Doesn't help if the network write queue is backed up Tests: on a 2k procgen map and fast noclip, flew around the island to load up the snapshot queue, then spectated on a player that's on the other side of the island. Observed player moving.
46 Days Ago
Undo: 135590 - ISubscriberStrategy.GatherSubscriptions outputs whether it has fully or partially gathered subscriptions After implementing throttling realized there's a better way(invalidate grid sbuscriptions for spectator) - thottling solves only half of problem Tests: editor compiles
46 Days Ago
Update: ISubscriberStrategy.GatherSubscriptions outputs whether it has fully or partially gathered subscriptions - all existing implementations report "full" gathers This feeds into whether we'll stop running UpdateSubscriptions or not. Will use this to throttle-and-prioritize cell streaming to spectators Tests: editor compiles
47 Days Ago
Merge: from networkpositiontick_reduce - Optim: buoys, containers, water-junkpiles and vines no longer always replicate their position. Reduces number of NetworkPositionTick invokes from 2309 down to 522 on 4.5k map Tests: interacted with each prefab type, observed up close and from afar
47 Days Ago
Update: codegen Tests: editor compiles
47 Days Ago
Merge: from main
47 Days Ago
Bugfix: profile.CountSyncMoveEntities - check if invoke handlers are not instantiated - Also add a total count Tests: used it while swinging from vines
47 Days Ago
Optim: VineSwingMountable no longer syncs positions by default Should save another 0.7ms Tests: Swung across multiple vines in playground_vineswinging, descended on one to ground
47 Days Ago
Optim: crate_underwater_* - only sync positions once freed Should save us 0.7ms on 4.5k server Tests: untied basic and advanced crates on Craggy and observed them raise up
47 Days Ago
Bugfix: disable Drop To Ground on spawnpoints for junkpile_water_* barrel spawns Some were incorrectly placed leading to barrel spawning on the ocean floor. Tests: spawned on craggy, inspected a bunch of junkpile_water_*, none had underwater barrels
47 Days Ago
Optim: junkpile_water_* - enable client interpolation and use InvokeHandler instead of InvokeHandlerFixedTime Fixed time handler fires off 10x more by default, and it would generate 3x more position tick messages than InvokeHandler. Will need validating on naval_update Tests: observed transofrm values of a junkpile in editor while close and at a distance - interpolation didn't throw it anywhere
47 Days Ago
Buildfix: remove stale debug code Tests: editor compiles
47 Days Ago
Optim: OceanWreckBuoy/-Small skips syncing position if there are no nearby players - set Sync Position to false by default - marking buoys to always interpolate (need to do the same to junkpiles_water) Tests: observed transform in editor from craggy and from nearby. Buoys didn't sink/fly off due to continual interpolation (need to double check what's stopping it)
47 Days Ago
Optim: set junkpile_water_a/b/c Sync Position to false It is now script controlled, and having it off by default saves allocating an action per entity Tests: observed transform in editor on craggy at spawn then when close
47 Days Ago
Optim: junkpile_water_a/b/c replicate positions only if player is in sight - also switched them to the fixed time invoke handler, since their positionsare ran per fixed update Tests: booted craggy, validated they weren't moving while I was on island. Flew close, observed them moving and checked in inspector that values change
48 Days Ago
Update: bring over jarryd's 124139 - BasePlayer.ToggleNetworkPositionTick Slightly different form - lets us save on the IsInvoking lookups, fixed a bug with fixed time callbacks Tests: booted on craggy, pushed a car, observed buoys and junkpile_water movement