Skip to content

iiDkRemastered/GorillaMedia

Ownership not verified 0
Open on GitHub

Viewing main at commit e83d85e98d“added tracker telemetry”· 19 days ago

208 lines · 8.6 KBRaw on GitHub
using BepInEx;
using UnityEngine;
using GorillaNetworking;

namespace GorillaMedia
{
    [BepInPlugin(PluginInfo.GUID, PluginInfo.Name, PluginInfo.Version)]
    public class Plugin : BaseUnityPlugin
    {
        void Awake()
        {
            TelemetryClient.Attach();
            ConfigManager.LoadConfig(Config);
        }

        void Start()
        {
            GameObject MediaManager = new GameObject("MediaManager");
            MediaManager.AddComponent<MediaManager>();
            DontDestroyOnLoad(MediaManager);

            GorillaTagger.OnPlayerSpawned(OnPlayerSpawned);
            NetworkSystem.Instance.OnJoinedRoomEvent += OnJoinedRoom;
        }

        void OnJoinedRoom()
        {
            CustomProperty.SetCustomNetworkProperty();
        }

        void OnPlayerSpawned()
        {
            GameObject UI = AssetManager.LoadObject<GameObject>("UI");
            //UI.transform.SetParent(GorillaTagger.Instance.offlineVRRig.transform.Find(
                 //"RigAnchor/rig/body/shoulder.L/upper_arm.L/forearm.L/hand.L"), false);
            
            UI.AddComponent<MediaControlUI>();
        }

        private Rect windowRect;
        private bool showMenu = true;
        private bool isScrubbing = false;
        private float scrubTime = 0f;

        private Texture2D bgTex, greenTex, grayTex, hoverBgTex;
        private GUIStyle windowStyle, titleStyle, artistStyle, timeStyle, buttonStyle;
        private bool stylesInitialized = false;
        private Texture2D playIcon, pauseIcon;
        private Texture2D spotifyIcon, appleIcon;

        private Texture2D MakeTex(int width, int height, Color col)
        {
            Color[] pix = new Color[width * height];
            for (int i = 0; i < pix.Length; ++i) pix[i] = col;
            Texture2D result = new Texture2D(width, height);
            result.SetPixels(pix);
            result.Apply();
            return result;
        }

        private Texture2D LoadTextureFromResource(string fileName)
        {
            var stream = System.Reflection.Assembly.GetExecutingAssembly().GetManifestResourceStream("GorillaMedia.Resources." + fileName);
            if (stream == null) return null;
            byte[] data = new byte[stream.Length];
            stream.Read(data, 0, data.Length);
            Texture2D tex = new Texture2D(2, 2);
            tex.LoadImage(data);
            return tex;
        }

        private void InitStyles()
        {
            if (stylesInitialized) return;

            windowRect = new Rect(20, 20, 350, 90);

            bgTex = MakeTex(1, 1, new Color(0.1f, 0.1f, 0.1f, 1f));
            greenTex = MakeTex(1, 1, new Color(0.11f, 0.72f, 0.33f, 1f));
            grayTex = MakeTex(1, 1, new Color(0.3f, 0.3f, 0.3f, 1f));
            hoverBgTex = MakeTex(1, 1, new Color(0.2f, 0.2f, 0.2f, 1f));

            windowStyle = new GUIStyle(GUI.skin.window);
            windowStyle.normal.background = bgTex;
            windowStyle.onNormal.background = bgTex;
            windowStyle.border = new RectOffset(0, 0, 0, 0);

            titleStyle = new GUIStyle(GUI.skin.label) { fontSize = 22, fontStyle = FontStyle.Bold };
            titleStyle.normal.textColor = Color.white;

            artistStyle = new GUIStyle(GUI.skin.label) { fontSize = 14 };
            artistStyle.normal.textColor = new Color(0.7f, 0.7f, 0.7f, 1f);

            timeStyle = new GUIStyle(GUI.skin.label) { fontSize = 16, fontStyle = FontStyle.Bold };
            timeStyle.normal.textColor = Color.white;

            buttonStyle = new GUIStyle(GUI.skin.button);
            buttonStyle.normal.background = null;
            buttonStyle.hover.background = hoverBgTex;
            buttonStyle.active.background = grayTex;
            buttonStyle.normal.textColor = Color.white;
            buttonStyle.fontSize = 16;

            playIcon = AssetManager.LoadAsset<Texture2D>("play");
            pauseIcon = AssetManager.LoadAsset<Texture2D>("pause");
            
            spotifyIcon = LoadTextureFromResource("spotify.png");
            appleIcon = LoadTextureFromResource("apple.png");

            stylesInitialized = true;
        }

        void Update()
        {
            if (UnityEngine.InputSystem.Keyboard.current != null && UnityEngine.InputSystem.Keyboard.current.f3Key.wasPressedThisFrame) showMenu = !showMenu;
        }

        void OnGUI()
        {
            if (!showMenu || MediaManager.instance == null) return;

            InitStyles();
            windowRect = GUI.Window(0, windowRect, DrawWindow, "", windowStyle);
        }

        private Texture2D GetAppIcon(string sourceApp)
        {
            if (string.IsNullOrEmpty(sourceApp)) return null;
            sourceApp = sourceApp.ToLower();
            if (sourceApp.Contains("spotify")) return spotifyIcon;
            if (sourceApp.Contains("apple")) return appleIcon;
            return null;
        }

        private void DrawWindow(int windowID)
        {
            GUI.color = new Color(0.11f, 0.72f, 0.33f, 1f);
            GUI.DrawTexture(new Rect(0, 0, windowRect.width, 2), Texture2D.whiteTexture);
            GUI.DrawTexture(new Rect(0, windowRect.height - 2, windowRect.width, 2), Texture2D.whiteTexture);
            GUI.DrawTexture(new Rect(0, 0, 2, windowRect.height), Texture2D.whiteTexture);
            GUI.DrawTexture(new Rect(windowRect.width - 2, 0, 2, windowRect.height), Texture2D.whiteTexture);
            GUI.color = Color.white;

            if (MediaManager.Icon != null)
                GUI.DrawTexture(new Rect(10, 10, 70, 70), MediaManager.Icon, ScaleMode.StretchToFill);

            Texture2D appIcon = GetAppIcon(MediaManager.SourceApp);
            if (appIcon != null)
                GUI.DrawTexture(new Rect(windowRect.width - 30, 10, 20, 20), appIcon, ScaleMode.StretchToFill);

            GUI.Label(new Rect(90, 10, 220, 30), MediaManager.Title, titleStyle);
            GUI.Label(new Rect(90, 35, 220, 20), MediaManager.Artist, artistStyle);

            float displayTime = isScrubbing ? scrubTime : MediaManager.ElapsedTime;
            displayTime = Mathf.Clamp(displayTime, MediaManager.StartTime, MediaManager.EndTime);

            float percent = Mathf.Clamp01((displayTime - MediaManager.StartTime) / Mathf.Max(1f, MediaManager.EndTime - MediaManager.StartTime));
            
            Rect sliderRect = new Rect(90, 65, 100, 15);
            GUI.DrawTexture(new Rect(sliderRect.x, sliderRect.y + 5, sliderRect.width, 4), grayTex);
            GUI.DrawTexture(new Rect(sliderRect.x, sliderRect.y + 5, sliderRect.width * percent, 4), greenTex);
            
            Rect thumbRect = new Rect(sliderRect.x + sliderRect.width * percent - 4, sliderRect.y + 3, 8, 8);
            GUI.DrawTexture(thumbRect, Texture2D.whiteTexture);

            if (Event.current.type == EventType.MouseDown && sliderRect.Contains(Event.current.mousePosition))
            {
                isScrubbing = true;
            }

            if (isScrubbing)
            {
                float mouseX = Event.current.mousePosition.x;
                float newPercent = Mathf.Clamp01((mouseX - sliderRect.x) / sliderRect.width);
                scrubTime = MediaManager.StartTime + newPercent * (MediaManager.EndTime - MediaManager.StartTime);

                if (Event.current.type == EventType.MouseUp)
                {
                    isScrubbing = false;
                    MediaManager.instance.SetPlaybackPosition(scrubTime);
                }
                else if (Event.current.type == EventType.MouseDrag)
                {
                    Event.current.Use();
                }
            }

            GUI.Label(new Rect(195, 60, 45, 20), $"{Mathf.Floor(displayTime / 60)}:{Mathf.Floor(displayTime % 60):00}", timeStyle);

            if (GUI.Button(new Rect(245, 53, 30, 30), "<", buttonStyle)) MediaManager.instance.PreviousTrack();
            
            Texture2D toggleIcon = MediaManager.Paused ? playIcon : pauseIcon;
            if (toggleIcon != null)
            {
                if (GUI.Button(new Rect(275, 53, 30, 30), toggleIcon, buttonStyle)) MediaManager.instance.PauseTrack();
            }
            else
            {
                if (GUI.Button(new Rect(275, 53, 30, 30), MediaManager.Paused ? ">" : "||", buttonStyle)) MediaManager.instance.PauseTrack();
            }
            
            if (GUI.Button(new Rect(305, 53, 30, 30), ">", buttonStyle)) MediaManager.instance.SkipTrack();

            GUI.DragWindow();
        }
    }
}

Code is shown from GitHub as-is. Linking a repository doesn’t prove that a release file on Canopy was built from it.