branchrust_reboot/main/syncvarscancel
99 Commits over 120 Days - 0.03cph!
Remove excess protos on train engine
SyncVars (by default) will require a value to be changed before syncing over the network. Turning this off will sync everytime its changed, not every unique change.
Fix some logic errors in train sync vars
Try to ensure editor weaving process isn't running on build
Try and skip setter injection on the client by checking the subtarget
Ensure build looks in the correct path
Call patch assembly anytime scripts reload
Only generate symbols if pdb exists
Wrap inside of setter in if server block
Ensure SyncVars run first in the build process.
Don't create a lock on Rust.Global.dll
Ensure injector errors when it cant find sync method (dont bother throwing)
Safeguards for client weaving process (dont try to hook setter at at all)
Fixed autosave/autoload not using preprocessor directives
Fixed Changed event being ran on autoload
Convert train line up to unload and train num connected cars to syncvars
Set GenerateEvent default to true
Use a wrapper method instead of emitting equality comparitor in IL - it was ugly at best
Add support for RequireChanged flag - this runs the old and new values through an equality comparison before pushing sync.
Swapped train engine fuel amount over to use SyncVars instead of protobufs.
First set of testing.
Use an autosave buffer as an intermediary when writing to syncvar bytes
Prevents byte allocations every autosave
Add Autosave system. SyncVars marked as Autosave will automatically be injected into Save/Load methods so no need to write protobufs.
Updated source generator to support event generation.
Ensured our attribute matches this
More tests in the legacy shelter
Better weaver symbol logic (to prepare for being built)
Downgraded code analysis to 3.8 so it doesnt explode hot reload
Safer SyncVar Implementation:
Rosyln Source Generator creates: Weaver ID table (managed to make it free), read, write methods and backing fields.
Run Weaving step based on the result of source generator, only bother hooking setter IL to run code created during the source generator phase
Add source generator dependencies
Fix strings not parsing correctly in the receive code. Net read strings take an argument (needs to be supported on our end)
Properly handle error messages
Display more information when something goes wrong
Show postive/negative error logs as green and red
First set of code cleanup on the new weaving solution
Split everything off into smaller areas
Injection simplification
Seperate build/editor dependency logic
SyncVars fully working with weaving.
Fixed incorrect stack for WriteSyncVar.
Fix malformed WriteSyncVar
Setter plumbed up to the correct entry logic for queueing/sending SyncVars
Find queue/send method properly (search parent class)
Don't pass byte - cant append that OpCode unless its an int
Use Cecil for SyncVar weaving.
Boostrap weaving on domain reload
Properly map depdency paths
Include unity modules
Better timing to avoid race conditions
Attempts to better filter what files are pushed for weaving
Better Diagnostics
Cleanup GenerateResult (Just generate pe and pdb output streams in method before writing to them)
Scrap Source Generator - Try IL Weaving instead
Moved to new project -> Rust.SourceGenerators.SyncVar
Fix legacy shelter mini example
Throw error if greater > 31 packed SyncVars
New Implementation is done! 🎉
Fixed SourceGenerator not throwing errors properly when looking at field name (invalid string/uppercase starting string)
Add support for Pack=True/False.
Unpacked SyncVars are sent immediately when changed.
Removed old SyncVar implementation
Successful queue, sending and receiving on new code generator implementation.
Stripped out another overhead byte not needed with our new solution.
Generate byte table inside code generator.
Developer > 2 logging support.
Safety with property setter on the client (throw an exception).
Few more Diagnostics error throws (class > 256 syncvars, Base Class == BaseEntity).
Try & Catch on Syncvar replicate.
Time to fully rip out the old solution.
Missed Files - Code Analysis Dependencies
Roslyn Compiler setup for SyncVars working (auto property generation)
Not adding to queue etc yet.
Seperated .csproj to seperate directory since Unity keeps forcing .NET Framework
Implemented Microsoft.CodeAnalysis via plugins instead (fetched nuget dlls from external project)