2,819 Commits over 700 Days - 0.17cph!
Merge: from stringview_indexof_fix
Bugfix: StringView.IndexOf - prevent skipping a character if we had to abour a sequence match
This affects Contains, Replace and IndexOfAny as well, as they depended on IndexOf
Tests: ran unit tests, they pass
Update(tests): add a unit test case for StringView.IndexOf failing edge case
Tests: test fails as expected
Bugfix: StringView.IndexOf - handle seraching for empty same way as string
- amended unit tests to enforce mathicng results check
Tests: ran unit tests
Update: StringView - add StringOptions overloads to StartsWith, EndsWith
- added unit tests to cover new methods
Tests: ran unit tests
Update: StringView now supports StringComparisons when comparing to other StringViews
- expanded unit tests to cover this
Tests: ran unit tests
Bugfix: StringView - ensure defaulted string view can compare to empty string as equal
- left a note about string.Equals(object) not recognizing StringView
- reorganized comparisons in Ranges test to make them pass
Tests: ran unit tests
Update(tests): add a bit more coverage to IndexOf and IndexOfAny null tests
Tests: ran tests
Merge: from tovector3_parse_format_fix
- Bugfix: fixes another edge case of weirdly formatted vec3 using StringView.ToVec3
Tests: unit tests
Bugfix: StringView.ToVec3 - ensure we grab first-of-a-set separator
Tests: ran StringView and Command unit tests
Update: add StringView.IndexOfAny
- expanded unit test to cover
Will need it to bugfix ToVec3 again
Tests: ran unit test
Update(editor): add a couple more ToVec3
Tests: catches failing cases
Update: StringView now allows construction from null strings
- expanded unit tests
This brings it closer to ReadOnlySpan semantics.
Tests: some unit tests failing, will investigate later
Merge: from tovector3_parse_format_fix
- Bugfix: fixes ToVector3 parsing bugs for various spacing configurations of Vec3, added unit tests to cover it
Tests: ran unit tests, checked F3 modes camera offset is correct and spawned entities appear where expecte
Bugfix: StringView.ToVector3 - trim off both whitespaces and ,
Tests: StringView and Command unit tests pass
Update: add a couple more test cases to ToVector3 unit test
Tests: still fails, as expected
New: add Facepunch.UnityEngine.Tests assembly
- added StringView.ToVector3 unit test
Currently fails, as reported
Tests: ran unit test, fails as expected
Clean: remove NetWrite.BytesWithSize(byte[]...) overloads
Tests: editor compiles
Clean: remove acouple obsolete things
- Get rid of IStreamReader/Writer - they're not used anywhere
- get rid of NetWrite.Bytes(byte[]) overload - superceded by Bytes(ReadOnlySpan<byte>)
Tests: editor compiles
Merge: from player_benchmark_improvements
- Bugfix for PlayerModelBenchmark scene missing from builds
Tests: none, trivial change
Bugfix: mark PlayerModelBenchmark.unity for maps bundle
Tests: none, trivial change
Update: in progress work to support ReadOnlySpan<byte> in NetWrite
- Rust.SourceGenerator updated to support ReadOnlySpan<byte>-like types in RPC sigs
- NetWrite pipes most byte[] calls to ReadOnlySpan overload
Still need to cleanup and figure out if IStreamWriter is needed
Tests: editor compiles
▊▋▊▅▊▊▄ ▄▄▊▉ ▄▊▋▉▅▅▄▊▆▇▇▅▊▊▍▇▅▅▄▆█▅▇▄▍▅ ▌▆▉▆▋▅█ ▅▍▄▍▄▉ ▍██▊▆▆▊▍▉ ▊▇▍▌▄▇ ▄▍ ▇▊ ▉▍▆ ▌▄▍▊▆▊▉▊▍▇▅ ▊▅▌▄█▅▋▇ ▅▇▊▆▇▌▄▅▄ ▍▋▇█▉▊▊▇▋▊ ▄▍▇▌▋▍▌▆▍▉▄█▅▌▆▋▍▅ ▌▉▋▅▉ ▉▋▅▄▊▄█ ▆▊▋█▋▇
▄█▍▍▅▌▊▉ ▍▇▌▆▍▅ ▌█▊█▊▌▆▄▄ ▇▉▇▉▉▌▆▍▆ ▋▇▊▌▆ ▅▄▍▉█▉▇▉▄ ▋▍▍▇▋▍ ▋█ ▄▍█▉ █ ▌▆▄▊▋ ▇▊ ▉▊█▍▆ ▉▇▊▇▋▉ ▊▋█ ▊▉▉██▍█ ▆▆▋ ▇▋▋▆▊█▌ ▌▍ ▍█▄█▄▅▆▊▅ ▅▆ █▌ ▌▍▆▋█ ▆▇█▅▆▇ ▋▉ █▋▅▍ ▌▍▋▊▋▍ ▉▄▉▆▅▆▇▅ ▍▆ ▉▌ ▌ ▄▍▍▊█▉▌▆▋▊█▋▉▉▅▆▇▊▅ ▄▍▊▋▍ ▍▅▅▋▅▇▉ ▄▊▍▄▄▍
Merge: from alloc_clean_june2026
- Optim: amortise or remove 19 allocation sources
Tests: on craggy, gathered resources, built a mini base
Optim: Replace Physics.OverlapBox with Physics.CheckBox in BaseVehicle.VehicleFixedUpdate
Saves allocating the results array, and should be cheaper as well
Tests: none, trivial change
Optim: get rid of string alloc in BaseCombatEntity.Hurt
1alloc/32b
Tests: none, trivial change
Optim: SpawnGroup - SpawnInstances not returns a List instead of IEnumerable
Allows to save on iterator allocation, 40b
Tests: none, trivial change
Optim: cache UpdateNetworkGroup invoke
Saves 1 alloc/128b
Tests: none, trivial change
Optim: cache PlayRadioChatter invoke
Saves 1 alloc/128b
Tests: none, trivial change
Optim: cache 2 invokes in Buoyancy.CheckSleepState
Saves 2 allocs/256b
Tests: none, trivial change
Optim: cache RemoveCorpse invoke
Saves 3 allocs, 384b total
Tests: none, trivial change
Undo of previous change - since entities can only be demolished once, the change was useless (and wasted memory)
Optim: cache StopBeingDemolishable invoke
1 alloc/128b
Tests: none, trivial change
Optim: use static action in ServerBuildingManager.Split
Should save another 2 allocs/160b per building block
Tests: none, trivial change
Clean: tabs -> spaces, get rid of explicit generic args
Tests: none, trivial change
Optim: use static callback to avoid allocs in ServerBuildingManager.CheckMerge
Saves 2 allocs, 160b total
Tests: none, trivial change
Optim: get rid of LINQ in Planner.FindSocket
Saves 3 allocs/180b total
Tests: none, trivial change
Optim: cache UpdatedVisibleHolsteredItems invoke
Saves 1 alloc/128b
Tests: none, trivial change
Optim: avoid boxing allocs in Azure.LogResource
Weirdly Enum.ToString has 2 boxing allocs, totalling 48b.
Tests: none, trivial change
Clean: fixup formatting in BasePlayer.OnProjectileAttack
Tests: none, trivial change
▍ ▊▋▌▇▅▋ ▄▆▄█▍ ▄▊█ ▊▇▋▆▉ ▄▇▄▇ ▌▇▊ ▄ ▋▅▉▉▇▉▋▄▍▌█▉▋▍▍▉▅█ ▅▋ ▇█ ▅█▄▄ ▉ ▊▊█▄▍█▋▇▅ █▌▉█ ▍▇▊▉▆▋▋▅█ █▅ ▇▅▍▊▆▍▅▉ ▇▍ ▄█▉▌▉▄▍▉▋▄▇▍▋ ▋▄▋▊▅ ▇▆█▅▅▇▊ ▋▉▅▄▅▇