private void Awake() { IsMenuOpen = true; if (LyumaAv3Runtime.addRuntimeDelegate != null) { LyumaAv3Runtime.addRuntimeDelegate(this); } }
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; } } } }
private void OnDestroy() { foreach (var runtime in runtimes) { Destroy(runtime); } runtimes.Clear(); LyumaAv3Runtime.updateSceneLayersDelegate(~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(); } }
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; }
public VelocityParam(string name, LyumaAv3Runtime runtime, int axis) : base(name, AnimatorControllerParameterType.Float) { this.axis = axis; this.runtime = runtime; }
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; } }