2,028 Commits over 518 Days - 0.16cph!
Bugfix: fix spawn ticks counting non-max pop as a fail, instead of requested spawn count
Tests: none, trivial change
Update: add ability to dump pngs of simulated spawning of a population
Tests: used locally
Update: spawn.report now also reports failed tick and how much were spawned recently on average when failing
Can use this as a further estimate which population is costing us when trying to spawn full pop
Tests: used in editor
Update: spawn.report now outputs max attempts it can do for next tick
Helps quickly spot what's the worst contributor to spawn overhead
Tests: used in editor on Craggy
▆▅▇▍▇: █▌▋▄ ▋▊▌▊▆_▉▋▍█▊▆
- ▌▆▉▉▊▍▍▅▊▊▋▋▄ ▊█▆▊▉▉ - ▅▉▉▋▍▅ ▊▋▊ ▉▍▉ █▆ ▆▌▄▊▋▇ ▇▉▊▅▇▍▌▌▄ ▋▇ ▅█▌▉▊▆█▉█▍▅▆▊▊▅▆█▋▌█▉▌▅▅
▉▌██▄: ▆▌▋▌, ▆▌▄▊▋▊▉ ▉▅▇▇▆▇
▋▌▊▋▌▊: █▆▍ ▇▌▄▄▋▌ ▅▉▌ ▊▌ ▊▍▇▆▉▆ ▄▉▇▌▇ █▊▊▅▆▋▌▇ ▉▌ ▆▅▌▊ ▋▇▊█ ▌ █▄▉▄
▊▋▉█▅: ▉▉▌▌, ▄▍▇█▇▉▊ ▇▋█▄▄▇
Merge: from triggerparentdelayedexit_optim
- Optim: sped up noclip check via OOB broadphase + reduced tick count + added BaseEntity caching
Tests: hopped around the boat
Merge: from opt_triggerparent_timeslice
- Optim: reduced component accesses and added support for triggerparent.ontick timeslicing
Tests: jumped around the boat
▅▍▌▉▊: ▋▋▄▅▇ ▍▅▄█▌▆▆▊ ▆▌ █▋▇▇▌▇██▅▄▇▇▇.▊▆▆▆▋▍ ▋▍▌ ▊▋▆▌▍▅ ▌▋▌ ▍▆█▉
- █▊▉▋▆▇▇▌▄▄▊▌▇▆▊▍█▊▉▌▉▄▉▄ ▍█ ▇▉█ ▆█▄▌ ▄▌▊ ▋▄▋▇▊▄▉▋▉▄ ▉▍, ▆▋▇▇▊▉▄▇▄█ ▋▌▍ ▋▇▌▊▊▄▇▇▍▆█▌▅▆▉▉▌▉▍▌█▇▋▌.▄▇▆▄█_▉▇▇▍_█▍▊▊▄▍▄▆(▉▆▉▍██▇ █▌▆▌) ▋▄▉ ▇▊▍▉_▆▋▆▌_▇▌▄▍▋▇▌(▌▋▉▍▉▌▅ ▅.▍)
▊▌▍▉▊: ▇█▊▌▌▉ ▄ ▋▉▋▆ ▄▊▌▊ ▌█▋ ▄▊▄█▇ ▋█▊▆ █▍ ▌▇▋▊▆, ▄██▄▌▋▋▄▅▋ ▋▉▆▆▉▅ ▆▅ ▍▍▊ ▍▄▌█▆▇ - ▊▋▋ ██▇█▌▆▇▇▌▆ ▌▍ ▆▉▄ ▌█▄▌, ▌▊▅ ▌▋▉▄▇▊▊ ▊█▄ ▇█ ▇▆▅▋▇ ▇▌▌▇▋▄▋▊█▋ (▉▌▆-▋▍▄▆▊▊▌▋ ▌▊▋▆▋). ▌▉▋▆▌▋▊▊ ▉ ▍▌▌▅▊▌ ▇▍▌▄▋.
Update: reorder clipping entities check to fast-exit on corpses
Tests: none, trivial change
Clean: remove duplicate IsDestroyed check
It's already checked as part of ToBaseEntity and our caching Entity
Tests: none, trivial change
Optim: TriggerParent - cache ToBaseEntity calls
Best case they cost us a hash-lookup + alive checks, worst case - hierarchy traversal. We can make do with alive checks only.
Tests: built a boat and rode it, put it in edit and reconstructed a foundation
Update: don't requiry parent exclusion trigger
Tests: none, trivial change
Merge: from invis_phantom
- Bugfix: old ServerOcclusion logic could spawn a phantom player on the client for invis players
Tests: on a fresh server tried to come into range of invis player - phantom no longer spawns. Validated UsePlayerUpdateJobs 0, 1, 2
▍▄▊▇▇█: ▇▊▊'▆ ▅█▌█ ▆▌▆▉▅ ▅▅▌▆▇ ▌▆ ▉▊▆█▍▄▌▉▇
▊▊▋▋▌'▄ ▄ ▉▋▉▄▊▍ ▍▌▆▄▊ ▇▆▄▌(▇▉▅▍▊▇▆▆▄.▊▆▄▉▅▉▌▇▅▄▇█ ▋▋▉▉▊'█ ▅▌██▇▆ ▌▇▅▊▍▇▋▇▉███▌█▊), ▋▆▇ ▅▅▋▇ ▉▌▉▇▄▍ ▄▇▉▅ ▍▋▊▌ ▇▅▇ ▌▇▄ ▍▆▇ ▅▊ ▆▋█▉ ▅▆▅▉▉▋▇▄.
▉▆▌▆▅: ▍▇█▄▌▌ ▇▅▍▇ ▌▋▇▆▉█▊▋ ▅▊▋ █▌ ▋▆▄ ▄▄▄ ▌▉█ ▋▋▇▍, ▊▊█▌ ▄█▆▍▇▌▅ █▋▊▌█▊▊▇██ - ▊▌▋▌▆▄▅▌▇▍ ▊▍▉▋▄ ▇▇▉ ▇▆▍█▇▍▉ ▆█▍▄▌▅ █▍▉▍▋▊▄▋-█▄▅▍▌▉▉▆ ▍▋ ▅▇▄▄
Bugfix: ServerOcclusion - don't send out initial snapshot if other player is invisible/spectating
UsePlayerUpdateJobs 0 & 1 only issue. Fallout from my invis rewrite
Tests: on playground, went invis and flew away from spawn. p2 connected then flew to p1 - no more phantom. Repeated 3x. Tested UsePlayerUpdateJobs 0, 1, 2
Merge: from spectate_3p_fix
- Bugfix for spectating yourself causing a client crash
Tests: tried to spectate via F1 menu - no longer possible
Clean: fix formatting for PlayerInfo
Tests: none, trivial change
Update: Block Spectate button in F1 Server menu when selected player is local player
- updated engineui.serveradmin.playerinfo.prefab to link up the button
Tests: Opened Server tab, selected self in list - button was not interactible
Bugfix: Spectating - prevent server accepting spectating yourself
Tests: Used F1 Server tab to spectate myself - no crash
Merge: from spectate_3p_fix
- Bugfix: fixes 3rd person spectate camera not following spectated player
Tests: spectated target in 3rd person while original body was in a box - camera orbitted target as expected
Bugfix: Spectating - when in 3rd person mode, run overshoot checks relative to target entity, rather than current
Used to work previously because current entity was part of parent - but since recent changes that's not the case
Tests: 2p session on craggy - put spectator into the white box the started spectating. when switching to 3rd person, camera no longer stuck in box and is orbiting around target player
Merge: from jobs_noclip_mask_fix
- Bugfix for UsePlayerUpdateJobs > 0 NoClip checks incorrectly using vehicle layer mask
- Updated unit test to check for above case
Tests: ran unit test, tried to push against modular vehicles on craggy
Bugfix: AreNoClipping - fix vehicle layer inclusion logic actually excluding the layer from the mask
- Also uncommented one test that I accidentally submitted as commented
Tests: ran unit tests - they now pass
Tests: TestNoClipConsistency - add vehicle detail colliders to catch inconsistency
- also don't reinvent the wheel with permutation combinations, just use [Values] instead as before
Tests: unit test fails (expected, will fix next)
Tests: Amend TestNoClipConsistency to generate players permutations with non-zero vehiclePauseTime alongside forceCastTime
This should trigger a slightly different code path for noclip checks. Still need to generate relevant physics colliders to validate this path.
Tests: ran TestNoClipConsistency
Merge: from jobs_coarsedist_crashfix
- Bugfix: fixes crash when players connect to a fresh server with UsePlayerUpdateJobs > 0
Tests: local C+S with UsePlayerUpdateJobs 2 enabled from the start - no more exceptions by height and shoredist jobs
Bugfix: UsePlayerUpdateJobs - fix GatherWavesIndicesJobIndirect returning invalid count of deepsea players
- Also fixed invalid index usage for acessing positions
Tests: local C+S with UsePlayerUpdateJobs 2 enabled from the start - no more exceptions by height and shoredist jobs
Merge: from main
- Bugfix: Removes client-side network group setting when updating parents - fixes phantom entities on cargoship and other global network entities
Tests: flew around craggy, was able to pick up items, chop trees, kill animals. spawned cargoship and dropped items on it, spawned dressed player & killed him, then deleted them using console cmd - they got cleaned up as expected
Update: BaseEntity.UpdateParenting no longer tries to update network group
- When client receives an entity snapshot, allow it to update the network group if it's out of sync
We already get network group change messages - there's no need to try to "guess" on the client and potentially desync.
Tests: flew around craggy, was able to pick up items, chop trees, kill animals. spawned cargoship and dropped items on it, spawned dressed player & killed him, then deleted them using console cmd - they got cleaned up as expected
Bugfix: Run same network-group-inheritance checks on client when recieving snapshots
This resovles a scenario where dropped items/players on a cargoship/crane/etc have local net group, but client resolves global net group.
Tests: Spawned cargo ship, spawned NPC, player - killed both. dropped items. flew away, destroyed them via console, flew back - they were gone
Bugfix: handle spawn groups on non-baseentity gameobjects
Tests: procgen 2.5k in editor
Merge: from navmeshsurface_optim
- Optim: Ghostships now use a static, detached navmesh, saving us on navmesh re-integration every physics step
- New scientists adapted to work with detached navmesh
- In C+S editor, we now automatically exclude client-scene entities from dynamic navmesh gen
Tests: spawned all ghost ships, observed scientists patrolling, dogfighting, sprinting
Clean: remove obsolete TODOs
Tests: none, trivial change
Clean: remove test code that offset the baked navmesh
Prepping to merge back
Tests: spawned all variations of ghostship, engaged scientists - didn't spot any weirdness
Bugfix: LimitedTurnNavAgent - when path following, ensure facing direction is applied in world space
Previously it was done in navmesh space, causing scientists to look in the sky during dogfight
Tests: observed scientists dogfighting and chasing behaviors - they either looked in direction of run or me
Bugfix: Ensure NavAgent properly initialzied when trying to spawn on a detached navmesh
Tests: spawned ghost ship, AI started patrolling and running around to shoot me when spotted
Bugfix: SpawnGroup now applies entitie's world<->navmesh transformations when picking a spawn point
Tests: Spawned ghostship - all NPCs spawned, but not moving (likely my other experimental code borks it)
Update: DynamicNavMesh allows to exclude specific navmesh source roots
- Ghostships register to be excluded, since they have their own baked navmesh
- [editor-only] Added logic to exclude all roots from the client scene
This CL also has some temp ghostship debug code (offsets navmesh to validate it)
Tests: in water world spawned a GhostShip and enabled AI - only backed navmesh popped into existence. AI didn't spawn - need to investigate next
Merge: from hackweek_jit_explorer
- Buildfix for missing type definitions
Tests: built scripts in all editor modes
Buildfix: move type declarations to JITViewer
Tests: compiled scripts in all editor build modes
Merge: from hackweek_jit_explorer
- New(editor): Tools/Engine/Jit Viewer that allows to inspect native instruction output from JIT compiling managed methods
Tests: used Jit Viewer to inspect BasePlayer::ServerUpdate. Ran perfsnapshot in C+S editor
Update: consolidate various editor tools in Tools/Engine
Tools top menu still doesn't fit on my 1080p screen .-.
Tests: checked the Tool menu
Update: Update ServerProfiler.Core binaries to release
- built from 6737a87e
Tests: perfsnapshot in editor, used jit viewer
Update: apped hex prefix when emitting native method address
Tests: none, trivial change