Skip to content

Instantly share code, notes, and snippets.

@FairlySadPanda
Created November 22, 2024 13:50
SyncOnStart test cases
using UdonSharp;
using UnityEngine;
using VRC.SDKBase;
namespace FairlySadPanda.TestCases
{
[UdonBehaviourSyncMode(BehaviourSyncMode.Manual)]
public class SyncOnStart : UdonSharpBehaviour
{
[SerializeField] private string testCaseName;
[SerializeField] private string dataToSync = "the quick brown fox jumped over the lazy dog";
[UdonSynced] private string newSyncedData;
private string oldSyncedData;
public void Start()
{
Debug.Log($"{buildPrefix()} sync on start triggered for {gameObject}");
if (!Networking.IsOwner(gameObject))
{
Debug.Log($"{buildPrefix()} we don't think you're the owner of {gameObject} so we're not going to sync anything...");
return;
}
if (oldSyncedData == dataToSync || newSyncedData == dataToSync)
{
Debug.Log($"{buildPrefix()} not syncing anything, test already run");
return;
}
newSyncedData = dataToSync;
RequestSerialization();
}
public override void OnPreSerialization()
{
Debug.Log($"{buildPrefix()} successfully reached preserialization of behaviour {gameObject}");
}
public override void OnPostSerialization(VRC.Udon.Common.SerializationResult result)
{
Debug.Log($"{buildPrefix()} successfully reached postserialization of behaviour {gameObject}");
}
public override void OnDeserialization(VRC.Udon.Common.DeserializationResult result)
{
if (newSyncedData == oldSyncedData)
{
Debug.LogWarning($"{buildPrefix()} successfully reached deserialization of behaviour {gameObject}: synced value is '{newSyncedData}' which isn't new data. Is this intended?");
return;
}
Debug.Log($"{buildPrefix()} successfully reached deserialization of behaviour {gameObject}: synced value is '{newSyncedData}'");
oldSyncedData = newSyncedData;
}
private string buildPrefix()
{
return $"[TEST] [{testCaseName}] [{Networking.LocalPlayer.displayName}:{Networking.LocalPlayer.playerId}]";
}
}
}
@FairlySadPanda
Copy link
Author

FairlySadPanda commented Nov 22, 2024

For the tests involving interact I used this code:

using UdonSharp;
using UnityEngine;
using VRC.SDKBase;

namespace FairlySadPanda.TestCases
{
    [UdonBehaviourSyncMode(BehaviourSyncMode.None)]
    public class EnableOnInteract : UdonSharpBehaviour
    {
        [SerializeField] private GameObject objectUnderTest;
        [SerializeField] private bool setOwnerWhenRunTest;

        public override void Interact()
        {
            if (objectUnderTest.activeSelf)
            {
                Debug.LogError($"object {objectUnderTest.name} is already active, test is invalid!");

                return;
            }
            
            objectUnderTest.SetActive(true);

            if (setOwnerWhenRunTest)
            {
                Networking.SetOwner(Networking.LocalPlayer, objectUnderTest);
            }
            
            Destroy(this);
        }
    }
}

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment