iiDkRemastered/GorillaMedia
Ownership not verified 0
Viewing main at commit e83d85e98d“added tracker telemetry”· 19 days ago
265 lines · 12 KBRaw on GitHub
using Photon.Pun;
using System.Linq;
using TMPro;
using UnityEngine;
using UnityEngine.UI;
namespace GorillaMedia
{
public class MediaControlUI : MonoBehaviour
{
public static MediaControlUI instance { get; private set; }
public Canvas canvas;
public TextMeshProUGUI title;
public TextMeshProUGUI author;
public TextMeshProUGUI progress;
public Image pauseButton;
public Image background;
public Image icon;
public Texture2D pauseIcon;
public Texture2D playIcon;
public Texture2D unknownIcon;
public AudioClip clickSound;
public RectTransform progressBar;
public Material pauseMaterial;
public Material playMaterial;
public float maxSliderProgress;
public Vector3 uiScale;
private bool isMenuToggledOpen = false;
private bool wasJoystickClicked = false;
public void Awake()
{
instance = this;
transform.localPosition = new Vector3(0.041f, 0.111f, 0f);
transform.localEulerAngles = new Vector3(32f, -88.55f, 92.8f);
transform.localScale = Vector3.zero;
uiScale = new Vector3(0.19f, 0.19f, 0.19f);
canvas = transform.Find("Canvas").GetComponent<Canvas>();
background = transform.Find("Canvas/Background").GetComponent<Image>();
pauseButton = transform.Find("Canvas/Background/Pause").GetComponent<Image>();
icon = transform.Find("Canvas/Background/Icon").GetComponent<Image>();
title = transform.Find("Canvas/Background/Title").GetComponent<TextMeshProUGUI>();
author = transform.Find("Canvas/Background/Author").GetComponent<TextMeshProUGUI>();
progress = transform.Find("Canvas/Background/ElapsedTime").GetComponent<TextMeshProUGUI>();
pauseIcon = AssetManager.LoadAsset<Texture2D>("pause");
playIcon = AssetManager.LoadAsset<Texture2D>("play");
unknownIcon = AssetManager.LoadAsset<Texture2D>("unknown");
clickSound = AssetManager.LoadAsset<AudioClip>("clickSound");
background.material = new Material(background.material)
{
mainTexture = AssetManager.LoadAsset<Texture2D>(
new string[] {
"BG-Spotify",
"BG-YouTube",
"BG-iTunes",
"BG-VLC"
} [ConfigManager.BackgroundIndex.Value]
)
};
progressBar = transform.Find("Canvas/Background/Slider/Progress").GetComponent<RectTransform>();
progressBar.gameObject.GetComponent<Image>().material = new Material(progressBar.gameObject.GetComponent<Image>().material)
{
color =
new Color[]
{
new Color32(29, 185, 84, 255),
new Color32(215, 0, 45, 255),
new Color32(182, 10, 204, 255),
new Color32(213, 97, 1, 255)
} [ConfigManager.BackgroundIndex.Value]
};
pauseButton.material = new Material(pauseButton.material);
icon.material = new Material(icon.material);
pauseMaterial = pauseButton.material;
playMaterial = new Material(pauseButton.material);
pauseMaterial.SetTexture("_MainTex", pauseIcon);
playMaterial.SetTexture("_MainTex", playIcon);
pauseButton.sprite = null;
icon.sprite = null;
maxSliderProgress = progressBar.sizeDelta.x;
progressBar.sizeDelta = new Vector2(
progressBar.sizeDelta.x,
progressBar.sizeDelta.y
);
string[] colliderObjects = new string[]
{
"Previous",
"Pause",
"Skip"
};
for (int i = 0; i < colliderObjects.Length; i++)
{
string colliderObject = colliderObjects[i];
transform.Find(colliderObject).gameObject.AddComponent<MediaControlButton>().buttonType =
(MediaControlButton.ButtonType)i;
}
canvas.gameObject.SetActive(false);
}
public void LateUpdate()
{
bool rightHand = ConfigManager.HandChoice.Value == "Right";
var activeHand = rightHand ? TrueRightHand() : TrueLeftHand();
var handTransform = rightHand ? GorillaTagger.Instance.offlineVRRig.rightHandTransform : GorillaTagger.Instance.offlineVRRig.leftHandTransform;
transform.position = activeHand.position;
transform.LookAt(GorillaTagger.Instance.headCollider.transform.position);
transform.position += transform.forward * 0.1f;
transform.Rotate(0, 180f, 0);
bool shouldGrow = false;
if (ConfigManager.OpenMethod.Value == "Button Click")
{
bool isClicking = rightHand ? ControllerInputPoller.instance.rightControllerPrimaryButton : ControllerInputPoller.instance.leftControllerPrimaryButton;
if (isClicking && !wasJoystickClicked)
{
isMenuToggledOpen = !isMenuToggledOpen;
}
wasJoystickClicked = isClicking;
shouldGrow = isMenuToggledOpen;
}
else
{
shouldGrow = Vector3.Distance(GorillaTagger.Instance.headCollider.transform.position, activeHand.position) < 0.7f
&& Vector3.Angle(GorillaTagger.Instance.headCollider.transform.forward, (activeHand.position - GorillaTagger.Instance.headCollider.transform.position).normalized) < 30f
&& (Vector3.Dot(
GorillaTagger.Instance.headCollider.transform.forward.normalized,
rightHand ? handTransform.right.normalized : -handTransform.right.normalized
) > 0.7f);
}
transform.localScale = Vector3.Lerp(transform.localScale, shouldGrow ? uiScale : Vector3.zero, Time.deltaTime * 15f);
canvas.gameObject.SetActive(transform.localScale.magnitude > 0.005f);
Texture2D targetIcon = MediaManager.Icon == null || !MediaManager.ValidData ? unknownIcon : MediaManager.Icon;
if (icon.material.GetTexture("_MainTex") != targetIcon)
icon.material.SetTexture("_MainTex", targetIcon);
Material currentPauseMaterial = MediaManager.Paused ? playMaterial : pauseMaterial;
if (pauseButton.material != currentPauseMaterial)
pauseButton.material = currentPauseMaterial;
title.text = MediaManager.Title;
author.text = MediaManager.Artist;
float clampedElapsed = Mathf.Clamp(MediaManager.ElapsedTime, MediaManager.StartTime, MediaManager.EndTime);
progress.text = $"{Mathf.Floor(clampedElapsed / 60)}:{Mathf.Floor(clampedElapsed % 60):00}";
progressBar.sizeDelta = new Vector2(
Mathf.Lerp(0f, maxSliderProgress, (clampedElapsed - MediaManager.StartTime) / (MediaManager.EndTime - MediaManager.StartTime)),
progressBar.sizeDelta.y
);
PhotonNetwork.LocalPlayer.CustomProperties.TryGetValue("CurrentSong", out object CurrentSong);
if (CurrentSong == null || (CurrentSong is string @currentSong && @currentSong != MediaManager.Title))
{
PhotonNetwork.LocalPlayer.SetCustomProperties(new ExitGames.Client.Photon.Hashtable
{
{ "CurrentSong", MediaManager.Title }
});
}
PhotonNetwork.LocalPlayer.CustomProperties.TryGetValue("SongArtist", out object SongArtist);
if (SongArtist == null || (SongArtist is string @songArtist && @songArtist != MediaManager.Artist))
{
PhotonNetwork.LocalPlayer.SetCustomProperties(new ExitGames.Client.Photon.Hashtable
{
{ "SongArtist", MediaManager.Artist }
});
}
}
public static (Vector3 position, Quaternion rotation, Vector3 up, Vector3 forward, Vector3 right) TrueRightHand()
{
Quaternion rot = GorillaTagger.Instance.rightHandTransform.rotation * GorillaLocomotion.GTPlayer.Instance.RightHand.handRotOffset;
return (GorillaTagger.Instance.rightHandTransform.position + GorillaTagger.Instance.rightHandTransform.rotation * GorillaLocomotion.GTPlayer.Instance.RightHand.handOffset, rot, rot * Vector3.up, rot * Vector3.forward, rot * Vector3.right);
}
public static (Vector3 position, Quaternion rotation, Vector3 up, Vector3 forward, Vector3 right) TrueLeftHand()
{
Quaternion rot = GorillaTagger.Instance.leftHandTransform.rotation * GorillaLocomotion.GTPlayer.Instance.LeftHand.handRotOffset;
return (GorillaTagger.Instance.leftHandTransform.position + GorillaTagger.Instance.leftHandTransform.rotation * GorillaLocomotion.GTPlayer.Instance.LeftHand.handOffset, rot, rot * Vector3.up, rot * Vector3.forward, rot * Vector3.right);
}
public class MediaControlButton : MonoBehaviour
{
public enum ButtonType
{
Previous,
Pause,
Skip
}
public void Start()
{
GetComponent<BoxCollider>().isTrigger = true;
gameObject.layer = (int)UnityLayer.GorillaInteractable;
}
public static float buttonDelay;
public ButtonType buttonType;
public void OnTriggerEnter(Collider collider)
{
bool rightHand = ConfigManager.HandChoice.Value == "Right";
var activeHand = rightHand ? TrueRightHand() : TrueLeftHand();
bool shouldGrow = instance.transform.localScale.magnitude > 0.005f;
string targetCollider = rightHand ? "LeftHandTriggerCollider" : "RightHandTriggerCollider";
if (shouldGrow && Time.time > buttonDelay && collider.name == targetCollider)
{
buttonDelay = Time.time + 0.2f;
GorillaTagger.Instance.StartVibration(false,
GorillaTagger.Instance.tagHapticStrength / 2f,
GorillaTagger.Instance.tagHapticDuration / 2f);
AudioSource audioSource = rightHand ? GorillaTagger.Instance.offlineVRRig.rightHandPlayer : GorillaTagger.Instance.offlineVRRig.leftHandPlayer;
audioSource.volume = 0.3f;
audioSource.PlayOneShot(instance.clickSound);
switch (buttonType)
{
case ButtonType.Previous:
MediaManager.instance.PreviousTrack();
break;
case ButtonType.Pause:
MediaManager.instance.PauseTrack();
break;
case ButtonType.Skip:
MediaManager.instance.SkipTrack();
break;
}
}
}
}
}
}
Code is shown from GitHub as-is. Linking a repository doesn’t prove that a release file on Canopy was built from it.