private void Awake()
    {
        IsMenuOpen = true;

        if (LyumaAv3Runtime.addRuntimeDelegate != null)
        {
            LyumaAv3Runtime.addRuntimeDelegate(this);
        }
    }
Example #2
0
 private void Update()
 {
     if (RestartingEmulator)
     {
         RestartingEmulator = false;
         Awake();
     }
     else if (RestartEmulator)
     {
         RestartEmulator = false;
         OnDestroy();
         RestartingEmulator = true;
     }
     if (ViewBothRealAndMirror)
     {
         LyumaAv3Runtime.updateSceneLayersDelegate(~0);
     }
     else if (ViewMirrorReflection && !ViewBothRealAndMirror)
     {
         LyumaAv3Runtime.updateSceneLayersDelegate(~(1 << 10));
     }
     else if (!ViewMirrorReflection && !ViewBothRealAndMirror)
     {
         LyumaAv3Runtime.updateSceneLayersDelegate(~(1 << 18));
     }
     if (EnableHeadScaling != lastHead)
     {
         lastHead = EnableHeadScaling;
         foreach (var runtime in runtimes)
         {
             runtime.EnableHeadScaling = EnableHeadScaling;
         }
     }
     if (lastLegacyMenuGUI != legacyMenuGUI)
     {
         lastLegacyMenuGUI = legacyMenuGUI;
         foreach (var runtime in runtimes)
         {
             runtime.legacyMenuGUI = legacyMenuGUI;
         }
     }
     if (CreateNonLocalClone)
     {
         CreateNonLocalCloneCount -= 1;
         if (CreateNonLocalCloneCount <= 0)
         {
             CreateNonLocalClone = false;
         }
         foreach (var runtime in runtimes)
         {
             if (runtime.AvatarSyncSource == runtime)
             {
                 runtime.CreateNonLocalClone = true;
             }
         }
     }
 }
Example #3
0
 private void OnDestroy()
 {
     foreach (var runtime in runtimes)
     {
         Destroy(runtime);
     }
     runtimes.Clear();
     LyumaAv3Runtime.updateSceneLayersDelegate(~0);
 }
Example #4
0
    private void Awake()
    {
        Animator animator = gameObject.GetOrAddComponent <Animator>();

        animator.enabled = false;
        animator.runtimeAnimatorController = EmptyController;
        emulatorInstance = this;
        VRCAvatarDescriptor[] avatars = FindObjectsOfType <VRCAvatarDescriptor>();
        Debug.Log(this.name + ": Setting up Av3Emulator on " + avatars.Length + " avatars.", this);
        foreach (var avadesc in avatars)
        {
            if (avadesc.GetComponent <PipelineSaver>() != null)
            {
                Debug.Log("Found PipelineSaver on " + avadesc.name + ". Disabling clones and mirror copy.", avadesc);
                DisableMirrorClone  = true;
                DisableShadowClone  = true;
                CreateNonLocalClone = false;
                EnableHeadScaling   = false;
            }
            try {
                // Creates the playable director, and initializes animator.
                var oml = avadesc.gameObject.GetOrAddComponent <UnityEngine.AI.OffMeshLink>();
                oml.startTransform = this.transform;
                bool alreadyHadComponent = avadesc.gameObject.GetComponent <LyumaAv3Runtime>() != null;
                var  runtime             = avadesc.gameObject.GetOrAddComponent <LyumaAv3Runtime>();
                if (oml != null)
                {
                    GameObject.DestroyImmediate(oml);
                }
                runtime.emulator               = this;
                runtime.VRMode                 = DefaultToVR;
                runtime.TrackingType           = DefaultTrackingType;
                runtime.InStation              = DefaultTestInStation;
                runtime.DebugDuplicateAnimator = DefaultAnimatorToDebug;
                runtime.EnableHeadScaling      = EnableHeadScaling;
                runtimes.Add(runtime);
                if (!alreadyHadComponent && !DisableShadowClone)
                {
                    runtime.CreateShadowClone();
                }
                if (!alreadyHadComponent && !DisableMirrorClone)
                {
                    runtime.CreateMirrorClone();
                }
                runtime.DisableMirrorAndShadowClones = DisableShadowClone && DisableMirrorClone;
            } catch (System.Exception e) {
                Debug.LogException(e);
            }
        }
        if (WorkaroundPlayModeScriptCompile)
        {
            LyumaAv3Runtime.ApplyOnEnableWorkaroundDelegate();
        }
    }
Example #5
0
 public ReflectedVrcParam(string name, LyumaAv3Runtime runtime, System.Reflection.FieldInfo property) : base(name,
                                                                                                             property.FieldType == typeof(bool) ? AnimatorControllerParameterType.Bool : (property.FieldType == typeof(float) ? AnimatorControllerParameterType.Float : AnimatorControllerParameterType.Int))
 {
     this.property = property;
     this.runtime  = runtime;
 }
Example #6
0
 public VelocityParam(string name, LyumaAv3Runtime runtime, int axis) : base(name, AnimatorControllerParameterType.Float)
 {
     this.axis    = axis;
     this.runtime = runtime;
 }
Example #7
0
 public StubAv3Module(LyumaAv3Runtime runtime, VRCAvatarDescriptor avatarDescriptor) : base(null, avatarDescriptor)
 {
     _runtime = runtime;
 }
    public void Update()
    {
        LyumaAv3Runtime runtime = avatarDescriptor != null?avatarDescriptor.GetComponent <LyumaAv3Runtime>() : null;

        commandLine = "--osc=" + udpPort + ":" + outgoingUdpIp + ":" + outgoingUdpPort;
        if (clearGizmos)
        {
            clearGizmos = false;
            knownPaths.Clear();
            minMaxByPath.Clear();
        }
        if (openSocket && receiver != null && oldPort != udpPort)
        {
            receiver.StopClient();
            receiver = null;
        }
        if ((!disableOSC && openSocket) && receiver == null)
        {
            localIp   = "";
            localPort = -1;
            oldPort   = udpPort;
            receiver  = new A3ESimpleOSC();
            bool success = false;
            try {
                var localEndpoint = receiver.OpenClient(udpPort);
                localIp   = localEndpoint.Address.ToString();
                localPort = localEndpoint.Port;
                success   = localEndpoint.Port == udpPort || (udpPort == 0 && localEndpoint.Port > 0);
            } catch (System.Exception e) {
                localIp = e.Message;
                Debug.LogException(e);
            }
            if (!success)
            {
                Debug.LogError("Failed to bind socket to OSC");
                openSocket = false;
            }
            else
            {
                resendAllParameters = true;
            }
        }
        if ((disableOSC || !openSocket) && receiver != null)
        {
            receiver.StopClient();
            receiver = null;
        }
        if (resendAllParameters)
        {
            resendAllParameters = false;
            lastSent.Clear();
        }
        messages.Clear();
        if (receiver != null)
        {
            receiver.GetIncomingOSC(messages);
            if (sendLoopbackOSCReplies && messages.Count > 0)
            {
                receiver.SetUnconnectedEndpoint(messages[0].sender);
                var tt = new A3ESimpleOSC.TimeTag();
                for (int i = 0; i < messages.Count; i++)
                {
                    if (messages[i].bundleId != 0)
                    {
                        tt = messages[i].time;
                        break;
                    }
                }
                receiver.SendOSCBundle(messages, tt);
            }
            foreach (var msg in messages)
            {
                numberOfOSCMessages += 1;
                if (debugPrintReceivedMessages)
                {
                    Debug.Log("Got OSC message: " + msg.ToString());
                }
                knownPaths[msg.path] = msg;
                if (!minMaxByPath.ContainsKey(msg.path))
                {
                    minMaxByPath[msg.path] = new Vector2(0, 0);
                }
            }
            if (forwardToAllAvatarsInScene)
            {
                if (emulator != null && emulator.runtimes != null)
                {
                    foreach (var instRuntime in emulator.runtimes)
                    {
                        instRuntime.HandleOSCMessages(messages);
                    }
                }
            }
            else if (runtime != null)
            {
                runtime.HandleOSCMessages(messages);
            }
        }
        if (runtime != null && receiver != null)
        {
            messages.Clear();
            runtime.GetOSCDataInto(messages);
            if (messages.Count > 0)
            {
                receiver.SetUnconnectedEndpoint(new System.Net.IPEndPoint(System.Net.IPAddress.Parse(outgoingUdpIp), outgoingUdpPort));
                // receiver.SendOSCBundle(messages, new A3ESimpleOSC.TimeTag { secs=-1, nsecs=-1 }, oscBuffer);
                foreach (var message in messages)
                {
                    if (lastSent.ContainsKey(message.path) && Enumerable.SequenceEqual(message.arguments, lastSent[message.path].arguments))
                    {
                        continue;
                    }
                    lastSent[message.path] = message;
                    if (debugPrintReceivedMessages)
                    {
                        Debug.Log("Sending " + message + " to " + outgoingUdpIp + ":" + outgoingUdpPort);
                    }
                    receiver.SendOSCPacket(message, oscBuffer);
                }
            }
        }
        if (!enabled && receiver != null)
        {
            receiver = null;
        }
    }