Contains the base scripts/tools for TLP packages as well as prefabs and potentially helpful scripts for VRChat worlds.
Please note that there is no explicit documentation available. The code is changing less frequently now and relatively stableand where it made sense there is some documentation in the code.
- Install/Add VRChat World SDK 3.7 to your project
- Install/Add CyanPlayerObjectPool to your project: https://cyanlaser.github.io/CyanPlayerObjectPool/
- Install/Add TLP UdonUtils to your project: https://guribo.github.io/TLP/
- Add
TLP_Essentials
prefab to your scene to get the core components- TLPLogger - for logging anything TLP related (mandatory)
- WorldVersionCheck - Warns users if a player with a new world version joins
- TLPNetworkTime - Much more accurate VRC network time provider (sub-millisecond accuracy)
This package is versioned using Semantic Version.
The used pattern MAJOR.MINOR.PATCH indicates:
- MAJOR version: incompatible API changes occurred
- Implication: after updating backup, check and update your scenes/scripts as needed
- MINOR version: new functionality has been added in a backward compatible manner
- Implication: after updating check and update your usages if needed
- PATCH version: backward compatible bug fixes were implemented
- Implication: after updating remove potential workarounds you added
All notable changes to this project will be documented in this file.
- (EditorUtils) Move ClearLog, add RecompileAll function with hotkey Ctrl+Shift+R
- (UdonCommon) Add PlayerDataInfosToReadableString function
- (Task) Add TryScheduleTask method to easily schedule a task for execution with the default TaskScheduler
- (TlpLogger) Fix whitelisting not working as intended
- (UdonEvent) Add support to optionally notify listeners in the background for reduced hitching
- (TestWithLogger) Fix missing time sources
- (Pool) Fix exception when pool object has no UdonSharpBehaviour
- (Model) NotifyIfDirty fails if Model not yet initialized
- (Task) New tasks are in "Finished" state with result "Unknown"
- (StateMachine) Fix null error on invalid state in AllStates
- (Model) Ignore NotifyIfDirty errors if not dirty
- (Task) Magic strings to const variables
- (TaskScheduler) Ensure it turns off without tasks
- (TlpBaseBehaviour) Add IsReady property that initializes scripts if needed
- (UdonEvent) Ensure listener is ready before event is invoked
- Ensure init runs
- Add warning to isReady check
- Add camera start and end section, refactor
- Add TlpSingleton
- (ObjectSpawner) Use setup and validate override
- (Model) [breaking] Update isReady function for MVC
- (MvcBase) [breaking] Removed isready property
- (UdonEvent) Adjust executionorder
- (Player) Update error handling
- (Pool) Update error handling
- (NtpClient) Update error handling and initialization
- (TlpBaseBehaviour) Add IsActiveAndEnabled
- (Runtime) Update assets and prefabs
- (ExecutionOrderCheck) Split logging of duplicates into multiple lines
- (Persistence) Add custom playerdata restored event, experimental executor for own lifecycle
- Make ExecutionOrderReadOnly public
- Add more changes
- [breaking] Change IsReady to HasStartedOk
- Add taskscheduler and task + example
- Add progress
- Fix using all available cpu time if vsync limited
- (ExecutionOrderCheck) Reduce logging and remove check on compilation
- (WorldVersionGenerator) Remove executionorder check added to scene saving
- (UdonEditorUtils) Add tool options to un-/lock framerate
- (Comparer) Update executionorder
- (ImageDownloader) Turn into controller
- (UdonCommon) Add ToReadableString and SecondsToLocalTime
- (Controller) [breaking] Change Initialized to IsControllerInitialized
- (UiEvent) [breaking] Disable sync
- (Executor) Add missing executionorders
- (Tasks) Add missing executionorders
- (VRCPlayerApiUtils) Add Set-/GetPlayerTagSafe
- (Pool) [breaking] Turn pool initialization into background task
- (DemoBlackListToggle) [breaking] Turn into controller
- (UiButton) Add UiEvent
- (UiTextTMP) Enable squishing of text before it is wrapped
- (Controller) Update error handling
- (View) Updated error handling
- (Factory) Update error handling
- (CenterOfMass) Update error handling
- (InertiaTensor) Update error handling
- Compile error
- (TlpBaseBehaviour) Add check if player is valid during init
- (Model) Improve debug logs and fix init not working during start()
- (PlayerDataRestoredEvent) Support players with the same name
- (TimeSources) Fix tag reading, update executionorders
- (UdonEvent) Fix slow RemoveListener method
- (MVC) Update error setting in mocks
- (TestController) Update error handling
- (TestMaxSendRateSender) Update error handling
- Update and fix broken tests
- Update and fix broken tests
- Update assets
- (View) Migrate to new Controller
- Update assets
- Update assets
- Update assets
- Update assets
- Update assets
- Bump version
- (ExecuteAfter) Address compiler error caused by special exception
- (StateMachine) Add transtion to delayed method to statemachine
- [breaking] Deterministic execution order of scripts to address know VRC-bug
- (RigidbodyVelocityProvider) Add missing dependency validation
- Update events and lists, improve error handling, set some missing execution orders
- (TlpBaseBehaviour) Correct gameobject path in setup error message
- Prevent error log spam when logger is missing
- Add support for com.vrchat.worlds 3.7.x
- Add state machine implementation with optionally synchronized transition timing
- (UtcTimeSource) Prevent usage of utc float time due to accuracy problems
- (NtpTime) Fix new master not maintaining current time offset when old master leaves
- (TlpAccurateSyncbehaviour) Use float instead of double for timestamp
- Move missed base files to TLP.UdonUtils.Runtime namespace
- Bump version
- Add Stopwatch TimeSource
- (TimeSource) [breaking] Custom ntp servertime synchronization, move Runtime files to TLP.UdonUtils.Runtime namespace
- Add quaternion compression utils
- Remove unused code
- [breaking] Upgrade logging, world version check, split/extend physics based prediction utils, increase accuracy of TLP network time to double, improved overall accuracy/robustness in low performance situations, added latency checker, various prefab and scene updates
- Add GetInstance function to TlpNetworkTime, expose various variables, add basic usage documentation
- Update test scene
- Support com.vrchat.worlds 3.6.x and Unity 2022.3.22
- (Physics) Add PhysicsUtils class with function CalculateAccelerationAndVelocity from positions
- (DemoBlackListToggle) Add check for unset White-/Blacklist buttons
- Prevent creating new branches on Github
- (TlpNetworkTime) Add ExactError property and instant Drift compensation with DriftThreshold
- (Sync) [breaking] Change network timestamp resolution from float to double
- (TlpNetworkTime) Add ExactError property
- (VrcNetworkTime) Ensure that there is a single point of truth throughout a given frame for VRChats network time
- (Build) Fix compiler errors caused by test utils
- (Logging) Fix logs not mentioning script name correctly
- Split get scene path functions and fix C## error in test utils
- (testing) Add base scripts for easy unit testing
- (Prefabs) Add ui prefabs and fonts
- (TlpAccurateSyncBehaviour) Extract Update methods into new child classes: TlpAccurateSyncBehaviourUpdate/TlpAccurateSyncBehaviourFixedUpdate
- (TlpAccurateSyncBehaviour) [breaking] Remove getter for synced send time, make network state private
- (TlpAccurateSyncBehaviour) Verify update methods provide correct snapshot ages
- Bump version
- (SanityTest) Correct object name
- (TlpAccurateSyncBehaviour) Make Start() method virtual
- (Sync) Make dependencies public
- (UdonCommon) Add extension function to get path in the scene of a transform
- (UdonCommon) Add extension function to get path in the scene of a component
- (TlpBaseBehaviour) [breaking] Switch to TimeSources, change logging of time and deltas, add SetupAndValidate method and call it in Start(), fix scenes and delete obsolete ones
- (TransformBacklog) Prevent adding of time values from the past, add boolean return value, add tests
- (Testing) Added new example runtime test GameTime vs DeltaTime, restructured Testing folder
- (TlpAccurateSyncBehaviour) Add some descriptions
- (TimeBacklog) Ensure interpolatable check works
- (TransformBacklog) Fix failure due to floating point accuracy
- (TransformBacklog) Fix another floating point accuracy error
- Bump version
- Bump version
- (TimeSource) Add DeltaTime getter, reformat codebase
- (TlpAccurateSyncBehaviour) Add setup checks to start
- [breaking] Add time sources
- Append changelog to readme
- Prepare release 3.0.0
- Revert deletion of Testing folder
- Add fallback position handling to tracking data tracker
- Create Test Result UI
- Create UI with overview
- Update status visibility
- Add test for eye height updates coming from master
- Update
- Improve error message by adding hint
- Add prediction reduction
- Create basic image downloader with automatic aspect ratio adjustment
- Add new demo world for uvu (wip)
- Prevent datalist access to invalid indices
- Add lights and sfx to light, add more visuals, add toggle
- Create slideshow with buttons
- Update version
- Reorder, rename
- Add change notes to readme
- Add versioning info"
- Add some missing method implementations
- Update version
- Namespace
- Update to represent fix update that removed EditorOnly from release on github
- Move udon pool into utils
- Remove no longer needed asmdef
- Update version
- Use any tag
- Remove old readme content, update exporter
- Add legacy folder
- Update asmdef after update to latest udonsharp version
- Update assets to lfs
- Update serialization
- Add SetOwner functionality
- Fix stuttering at high speed
- Change layers and make objects static that can be
- Fix finding closest player
- Damage indicator UI
- Use distance check for player detection
- Add kill confirmation
- Start implementing leader boards
- Start AVL tree
- Continue implementing AVL tree
- Fix most AVL issues
- Improve comparer
- Add UdonPool and usage
- Fix build error, add executionorder to logger
- Create basic leader board entry
- Improve menu, add automatic scaling for content
- Add UdonEvent
- Add remove all listeners
- Add basic audio to gun
- Update logging
- Update to U## 1.0 and client sim
- Move logging to base class
- Refactor player state to have base class PlayerStats
- Moved
- Fix loglevels, assert and perf limit warning
- Fix entries with invalid names being added to leaderboard
- Add vehicle sync, update leader board (break it too)
- Initial (failed) version of better-tracking pickups
- Jitterfree pickups
- Make few functions static
- Start creating composite weapons
- Disallow multiple instances of same override in lists
- Add gamemode, update vr components, test improvements, add serialization retry to base behaviour
- Continue ai state machine
- Give each damage target a unique id
- Cleanup and add getTarget
- Start implementing damage to targets
- Update imported projects
- Add loose files
- Fix damage targets not receiving damage locally
- Add logging of all logs in frame to profiler
- Fix null error on player death
- Create chair scripts
- Add basic startup torque
- Add execution order, fix runtime tests
- Simplify comparison of behaviours
- Fix scene setups
- Update board (failing)
- Create player entry from controller
- Add indefinite patch
- Fix leaving player not updating entry
- Remove guribo references
- Add start event to deserialization
- Create events for ui
- Reserialize
- Convert recycling scroll view to udon
- Add TLP_UNIT_TESTING define, add companion version of VRWorldToolkit
- Change event handling and make it functionality of base class
- Fix up scenes and broken event callbacks
- Fix updates not being displayed
- Display data in leaderboard entry
- Use textmesh pro, add animation to leaderboard
- Start adding feature for delayed event invokation
- Implement delayed execution
- Extract custom player stats into own class
- Add integer utils
- Add variations
- Add mvc, test controller init/deinit
- Create init for model
- Test init of model and view
- Enforce init order
- Deinit controller
- Test deinit of view
- Add listening to model changes from view
- Change editor, expose variables
- Create vrcplayerapi extensions
- Add new util
- Start simplifying executionorder dependencies
- Add more events for different executionorder sections, refactor executionorder on most scripts
- Update qvpen to v3.2.5.1
- Update tribes scene, create leaderboard prefab
- Convert basic performance stats to model view controller
- Update version of world on save now, requires 2 saves to go through though for now...
- Add multiple sorting algorithms, update privacy zones example scene
- Add dirty property to event
- Create a factory for gameobjects
- Create instantiating factory
- Create factories for avl tree, factory with pool
- Add leaderboard model
- Add default categories
- Reduce type spam in logs, add execution order to logs
- Extend model to create avl trees for each category
- Create default factories for scenes, update logging
- Add data storing capability to LeaderModelEntryModel
- Add comparer creation, update exectionorders, move pooleable code to base behaviour
- Support adding players to model
- Fix finding of inactive gameobjects
- Add new data source using leaderboard model
- Deinit on destroy, selectable categories with view
- Add entries again, support ascending/descending sort direction (wip)
- Start with sync of entries with new model
- Fix category adding without custom categories
- Raise change event on dirty in entry
- Have entry synchronizer get notified when an entry changes
- Have synchronizer attach entry to dirty root
- Continue implementing new sync
- Create statemachine for synchronizer
- Continue working on sync (wip)
- Support playmode test
- Patch more vrc components for easier unit testing
- Add missed vrc script to patcher, complete idle state testing
- Remove Leaderboard, continue updating entrysynchronizer
- Synchronization of single dirty entry
- Convert syncing to use string
- Update test controller and test template to test case with inheritance
- Add max exec order, ensure tests don't respond after completion
- Add tracking of jumps and movement distance
- Made more utils static only
- Removed old prefab
- Create round robin sync
- Update runtime folder structure
- Add usagenote
- Update UVU exporter and readme
- Move some generic audio scripts here, add dummyview
- Update
- Remove vrc patcher
- Change folder structure for vpm
- Update dependencies
- Rename and add udonutils dependency
- Warn instead of error
- Create synced event class
- Raise on deserialization
- Send the number of calls to the event since the last synchronization
- Replace synchronize playerlist with new version
- Fix missing asset
- Update
- Use inheritance, improve execution order
- Add improved tracking scripts and first draft of a velocity provider
- Add improved tracking scripts and first draft of a velocity provider
- Test and improve rigidbody velocity provider
- Create network time script that grabs a shared time for the current frame
- Important update for smooth vehicle sync
- Replace time.time
- Extract accurate timing code into a parent class, add smooth error correction, add teleportation
- Update assets
- Update namespaces, update velocity provider
- Add networktime assets
- Create exporter
- Add missing assets to exporter
- Add support for collision detection during prediction
- Create white/blacklist
- Add whitelist mode and restricted usage
- Add demo toggle script for adding local player to blacklist
- Separate cyan dependency, update assets
- Update assets
- Fix some edge cases using unit testing
- Add more tests, refactoring
- Update model, add new ownership transfer function, add logs to base behaviour
- Update chair, refactoring
- Add gitconfig
- Change tests to verify floating point issue
- Fix relative velocity recording in velocity provider
- Turn string loading error message into error
- Revert severity
- Improve compile symbols
- Move development tools, update exporter
- Fix/improve exporting and versioning
- Debug symbol
- Lfs for assets
- Remove all files to fix lfs issues
- Add all files again to get rid of lfs issues
- Setting references from editor script works again
- Cleanup and more test coverage
- Remove unused code and cleanup
- Improve contains checking
- Make playerstats inherit from cyanpoolable
- Fix naming
- Use Tlpbasebehaviour
- Fix roslyn warnings
- Extract some duplicate code to base class
- Cleanup model
- Cleanup
- Update Readme
- Fix file link
- Benchmark performance (ca. 0.4ms insertion time @ 100k elements)
- Fix tests with debug enabled
- Fix errors
- Ensure logasserts are on by default
- Show gameobjects in playtest
- Fix failures caused by missing log expects
- Update tests to use TestWithLogger, reduce log spam
- Added more values and log
- Initial setup and test of PlayerBlackList.cs
- Continue testing for full coverage
- Fix missing logger and test additional check
- Fix player test
- Add release template
- Add serialized programs
- Remove programs
- Update serialization
- Cleanup, refactoring
- Add optional event listeners
- Add master only activation support
- Debug symbol toggle, cleanup
- Add voice range far
- Add transform recorder/player, add synced bool script that uses properties
- Add lateBoneFollower, refactor: SyncedInteger uses Properties now
- Add ToggleObject behaviour
- Support disabling behaviours
- Add synced string
- World version check, various new scripts
- Add more extensive path checking, replace Guribo with TLP
- Improve error handling, add hashing of created package
- Fix explorer opening at wrong position, update package.json
- Missing assembly reference
- Restructure content
- Cleanup
- Test and unity 2019
- Update
- Add udonsharp as dependency
- Improved scene checking, added editor udonbehaviour extensions
- Add test contoller template and gizmos
- Prepare for UnU
- Add test aborting
- Add libraries, add networking behaviours
- Prevent detecting default values as null, fix build error
- Cleanup and add meta files
- Add documentation, refactoring
- Change file structure