private void DrawAchievementList(SteamworksFoundationManager pManager)
        {
            EditorGUILayout.BeginHorizontal(EditorStyles.toolbar, GUILayout.ExpandWidth(true));
            EditorGUILayout.LabelField("Achievements", EditorStyles.whiteLabel, GUILayout.Width(250));
            EditorGUILayout.EndHorizontal();

            int il = EditorGUI.indentLevel;

            EditorGUI.indentLevel++;

            for (int i = 0; i < pManager.settings.client.achievements.Count; i++)
            {
                var target = pManager.settings.client.achievements[i];

                if (target == null)
                {
                    continue;
                }

                Color sC = GUI.backgroundColor;

                GUI.backgroundColor = sC;
                EditorGUILayout.BeginHorizontal(EditorStyles.toolbar, GUILayout.ExpandWidth(true));
                if (GUILayout.Button(achievementIcon, EditorStyles.toolbarButton, GUILayout.Width(20)))
                {
                    GUI.FocusControl(null);
                    EditorGUIUtility.PingObject(target);
                    Selection.activeObject = target;
                }
                if (GUILayout.Button(target.name.Replace("Steam Achievement Data ", "") + " ID", EditorStyles.toolbarButton))
                {
                    GUI.FocusControl(null);
                    EditorGUIUtility.PingObject(target);
                }

                target.achievementId = EditorGUILayout.TextField(target.achievementId);

                var terminate = false;
                var color     = GUI.contentColor;
                GUI.contentColor = new Color(1, 0.50f, 0.50f, 1);
                if (GUILayout.Button("X", EditorStyles.toolbarButton, GUILayout.Width(25)))
                {
                    GUI.FocusControl(null);
                    pManager.settings.client.achievements.RemoveAt(i);
                    terminate = true;
                }
                GUI.contentColor = color;
                EditorGUILayout.EndHorizontal();

                if (terminate)
                {
                    break;
                }
            }
            EditorGUI.indentLevel = il;
        }
        private void DrawAppOverlayData(SteamworksFoundationManager pManager)
        {
            EditorGUILayout.PropertyField(DoNotDestroyOnLoad);
            EditorGUILayout.BeginHorizontal();
            if (pManager.settings != null)
            {
                var v = System.Convert.ToUInt32(EditorGUILayout.IntField("Steam App Id", System.Convert.ToInt32(pManager.settings.applicationId.m_AppId)));
                if (v != pManager.settings.applicationId.m_AppId)
                {
                    pManager.settings.applicationId.m_AppId = v;
                    EditorUtility.SetDirty(pManager.settings);
                }
            }
            EditorGUILayout.EndHorizontal();

            EditorGUILayout.Space();
            EditorGUILayout.BeginHorizontal();
            EditorGUILayout.PrefixLabel("Notification Settings");
            if (pManager.settings == null)
            {
                EditorGUILayout.LabelField("Requires Steam Settings");
            }
            else
            {
                int cSelected = (int)pManager.settings.client.overlay.notificationPosition;

                EditorGUILayout.BeginVertical();
                cSelected = EditorGUILayout.Popup(cSelected, new string[] { "Top Left", "Top Right", "Bottom Left", "Bottom Right" });

                var v = EditorGUILayout.Vector2IntField(GUIContent.none, pManager.settings.client.overlay.notificationInset);
                if (pManager.settings.client.overlay.notificationInset != v)
                {
                    pManager.settings.client.overlay.notificationInset = v;
                    EditorUtility.SetDirty(pManager.settings);
                }
                EditorGUILayout.EndVertical();

                if (pManager.settings.client.overlay.notificationPosition != (ENotificationPosition)cSelected)
                {
                    pManager.settings.client.overlay.notificationPosition = (ENotificationPosition)cSelected;
                    EditorUtility.SetDirty(pManager.settings);
                }
            }
            EditorGUILayout.EndHorizontal();
        }
        public override void OnInspectorGUI()
        {
            pManager = target as SteamworksFoundationManager;

            if (pManager != null)
            {
                if (pManager.settings != null)
                {
                    if (pManager.settings.client == null)
                    {
                        pManager.settings.client = new SteamSettings.GameClient();
                    }

                    if (pManager.settings.server == null)
                    {
                        pManager.settings.server = new SteamSettings.GameServer();
                    }

                    if (pManager.settings.client.achievements == null)
                    {
                        pManager.settings.client.achievements = new System.Collections.Generic.List <SteamAchievementData>();
                    }

                    if (pManager.settings.client.stats == null)
                    {
                        pManager.settings.client.stats = new System.Collections.Generic.List <SteamStatData>();
                    }

                    pManager.settings.client.stats.RemoveAll(p => p == null);
                    pManager.settings.client.achievements.RemoveAll(p => p == null);
                }
            }

            EditorGUILayout.PropertyField(Settings);

            if (pManager.settings == null)
            {
                EditorGUILayout.Space();
                EditorGUILayout.LabelField("Assign a Steam Settings object to get started!");
                EditorGUILayout.Space();
                EditorGUILayout.HelpBox("Create a new Steam Settings object by right clicking in your Project panel and selecting [Create] > [Steamworks] > [Steam Settings]", MessageType.Info);
            }
            else
            {
                EditorGUILayout.BeginHorizontal();
                seTab = GUILayout.Toggle(seTab == 0, "Settings", EditorStyles.toolbarButton) ? 0 : seTab;
                seTab = GUILayout.Toggle(seTab == 1, "Events", EditorStyles.toolbarButton) ? 1 : seTab;
                EditorGUILayout.EndHorizontal();

                if (seTab == 0)
                {
                    if (pManager.settings != null)
                    {
                        GeneralDropAreaGUI("... Drop Stats & Achievments Here ...", pManager);

                        DrawAppOverlayData(pManager);
                        EditorGUILayout.Space();
                        EditorGUILayout.Space();
                        EditorGUILayout.Space();
                        DrawStatsList(pManager);
                        EditorGUILayout.Space();
                        EditorGUILayout.Space();
                        EditorGUILayout.Space();
                        DrawAchievementList(pManager);
                    }
                }
                else
                {
                    if (pManager.settings != null)
                    {
                        EditorGUILayout.BeginHorizontal();

                        appTabPage = GUILayout.Toggle(appTabPage == 0, "Application", EditorStyles.toolbarButton) ? 0 : appTabPage;
                        appTabPage = GUILayout.Toggle(appTabPage == 1, "Overlay", EditorStyles.toolbarButton) ? 1 : appTabPage;
                        appTabPage = GUILayout.Toggle(appTabPage == 2, "Friends", EditorStyles.toolbarButton) ? 2 : appTabPage;
                        EditorGUILayout.EndHorizontal();

                        if (appTabPage == 0)
                        {
                            EditorGUILayout.PropertyField(OnNumberOfCurrentPlayersResult);
                            EditorGUILayout.PropertyField(OnSteamInitalized);
                            EditorGUILayout.PropertyField(OnSteamInitalizationError);
                        }
                        else if (appTabPage == 1)
                        {
                            EditorGUILayout.PropertyField(OnOverlayActivated);
                        }
                        else
                        {
                            EditorGUILayout.PropertyField(OnAvatarLoaded);
                            EditorGUILayout.PropertyField(OnPersonaStateChanged);
                            EditorGUILayout.PropertyField(OnRecievedFriendChatMessage);
                            EditorGUILayout.PropertyField(OnUserStatsRecieved);
                            EditorGUILayout.PropertyField(OnUserStatsStored);
                            EditorGUILayout.PropertyField(OnAchievementStored);
                        }
                    }
                    else
                    {
                        EditorGUILayout.LabelField("Requires Steam Settings");
                    }
                }
                //}
            }

            serializedObject.ApplyModifiedProperties();
        }
        private bool GeneralDropAreaGUI(string message, SteamworksFoundationManager pManager)
        {
            Event evt       = Event.current;
            Rect  drop_area = GUILayoutUtility.GetRect(0.0f, 70.0f, GUILayout.ExpandWidth(true));

            var style = new GUIStyle(GUI.skin.box);

            style.normal.background = dropBoxTexture;
            style.normal.textColor  = Color.white;
            style.border            = new RectOffset(20, 20, 20, 20);
            var color     = GUI.backgroundColor;
            var fontColor = GUI.contentColor;

            GUI.backgroundColor = SteamUtilities.Colors.SteamGreen * SteamUtilities.Colors.HalfAlpha;
            GUI.contentColor    = SteamUtilities.Colors.BrightGreen;
            GUI.Box(drop_area, "\n\n" + message, style);
            GUI.backgroundColor = color;
            GUI.contentColor    = fontColor;

            bool result = false;

            switch (evt.type)
            {
            case EventType.DragUpdated:
            case EventType.DragPerform:
                if (!drop_area.Contains(evt.mousePosition))
                {
                    return(false);
                }

                DragAndDrop.visualMode = DragAndDropVisualMode.Copy;

                if (evt.type == EventType.DragPerform)
                {
                    DragAndDrop.AcceptDrag();

                    foreach (UnityEngine.Object dragged_object in DragAndDrop.objectReferences)
                    {
                        // Do On Drag Stuff here
                        if (dragged_object.GetType() == typeof(SteamFloatStatData) || dragged_object.GetType() == typeof(SteamIntStatData))
                        {
                            SteamStatData go = dragged_object as SteamStatData;
                            if (!pManager.settings.client.stats.Exists(p => p == go))
                            {
                                pManager.settings.client.stats.Add(go);
                                EditorUtility.SetDirty(pManager.settings);
                                result = true;
                            }
                        }
                        else if (dragged_object.GetType() == typeof(SteamAchievementData))
                        {
                            SteamAchievementData go = dragged_object as SteamAchievementData;
                            if (!pManager.settings.client.achievements.Exists(p => p == go))
                            {
                                pManager.settings.client.achievements.Add(go);
                                EditorUtility.SetDirty(pManager.settings);
                                result = true;
                            }
                        }
                    }
                }
                break;
            }

            return(result);
        }
        private void DrawSteamUserData(SteamworksFoundationManager pManager)
        {
            if (pManager.settings == null)
            {
                EditorGUILayout.HelpBox("Requires Steam Settings", MessageType.Info);
                return;
            }

            if (pManager.settings.client.userData == null)
            {
                EditorGUILayout.HelpBox("Requires you reference a Steam User Data object in your Steam Settings", MessageType.Info);
                return;
            }

            EditorGUILayout.BeginHorizontal();
            EditorGUILayout.PrefixLabel("Steam Id");
            EditorGUILayout.LabelField(pManager != null ? pManager.settings.client.userData.id.m_SteamID.ToString() : "unknown");
            EditorGUILayout.EndHorizontal();

            if (pManager.settings.client.userData.State == Steamworks.EPersonaState.k_EPersonaStateAway)
            {
                EditorGUILayout.BeginHorizontal();
                EditorGUILayout.PrefixLabel("Status");
                EditorGUILayout.LabelField("Away");
                EditorGUILayout.EndHorizontal();
            }
            else if (pManager.settings.client.userData.State == Steamworks.EPersonaState.k_EPersonaStateBusy)
            {
                EditorGUILayout.BeginHorizontal();
                EditorGUILayout.PrefixLabel("Status");
                EditorGUILayout.LabelField("Busy");
                EditorGUILayout.EndHorizontal();
            }
            else if (pManager.settings.client.userData.State == Steamworks.EPersonaState.k_EPersonaStateLookingToPlay)
            {
                EditorGUILayout.BeginHorizontal();
                EditorGUILayout.PrefixLabel("Status");
                EditorGUILayout.LabelField("Looking to Play");
                EditorGUILayout.EndHorizontal();
            }
            else if (pManager.settings.client.userData.State == Steamworks.EPersonaState.k_EPersonaStateLookingToTrade)
            {
                EditorGUILayout.BeginHorizontal();
                EditorGUILayout.PrefixLabel("Status");
                EditorGUILayout.LabelField("Looking to Trade");
                EditorGUILayout.EndHorizontal();
            }
            else if (pManager.settings.client.userData.State == Steamworks.EPersonaState.k_EPersonaStateMax)
            {
                EditorGUILayout.BeginHorizontal();
                EditorGUILayout.PrefixLabel("Status");
                EditorGUILayout.LabelField("Max");
                EditorGUILayout.EndHorizontal();
            }
            else if (pManager.settings.client.userData.State == Steamworks.EPersonaState.k_EPersonaStateOffline)
            {
                EditorGUILayout.BeginHorizontal();
                EditorGUILayout.PrefixLabel("Status");
                EditorGUILayout.LabelField("Offline");
                EditorGUILayout.EndHorizontal();
            }
            else if (pManager.settings.client.userData.State == Steamworks.EPersonaState.k_EPersonaStateOnline)
            {
                EditorGUILayout.BeginHorizontal();
                EditorGUILayout.PrefixLabel("Status");
                EditorGUILayout.LabelField("Online");
                EditorGUILayout.EndHorizontal();
            }
            else if (pManager.settings.client.userData.State == Steamworks.EPersonaState.k_EPersonaStateSnooze)
            {
                EditorGUILayout.BeginHorizontal();
                EditorGUILayout.PrefixLabel("Status");
                EditorGUILayout.LabelField("Snooze");
                EditorGUILayout.EndHorizontal();
            }
            else
            {
                EditorGUILayout.BeginHorizontal();
                EditorGUILayout.PrefixLabel("Status");
                EditorGUILayout.LabelField("unknown");
                EditorGUILayout.EndHorizontal();
            }

            EditorGUILayout.BeginHorizontal();
            EditorGUILayout.PrefixLabel("Steam Name");
            EditorGUILayout.LabelField(pManager != null && !string.IsNullOrEmpty(pManager.settings.client.userData.DisplayName) ? pManager.settings.client.userData.DisplayName : "unknown");
            EditorGUILayout.EndHorizontal();

            EditorGUILayout.BeginHorizontal();
            EditorGUILayout.PrefixLabel("Avatar");
            Rect iRect = EditorGUILayout.GetControlRect(true, 150);

            EditorGUILayout.EndHorizontal();

            //iRect.y += iRect.height;
            iRect.width = 150;
            //iRect.height = 150;

            EditorGUILayout.Space();

            if (pManager.settings.client.userData.avatar != null)
            {
                EditorGUI.DrawPreviewTexture(iRect, pManager.settings.client.userData.avatar);
            }
            else
            {
                EditorGUI.DrawRect(iRect, Color.black);
            }
        }