public static void EnforceInstance()
    {
        if (Instance != null)
        {
            return;
        }

        var existing = GameObject.FindObjectOfType <EditorSteamManager>();

        if (existing != null)
        {
            Instance = existing;
        }

        if (Instance == null)
        {
            Instance = new GameObject("EditorSteamManager").AddComponent <EditorSteamManager>();
        }

        if (!Packsize.Test())
        {
            Debug.LogError("[Steamworks.NET] Packsize Test returned false, the wrong version of Steamworks.NET is being run in this platform.");
        }
        if (!DllCheck.Test())
        {
            Debug.LogError("[Steamworks.NET] DllCheck Test returned false, One or more of the Steamworks binaries seems to be the wrong version.");
        }

        if (SteamAPI.RestartAppIfNecessary(AppId_t.Invalid))
        {
            Debug.LogError("[Steamworks.NET] Need to restart with steam running.");
        }
    }
Exemplo n.º 2
0
    public void OnGUI()
    {
        var valid = true;

        EditorSteamManager.EnforceInstance();
        EditorSteamManager.PrepareSteamworks();

        if (SteamUnity.Instance == null)
        {
            SteamUnity.Instance = GameObject.FindObjectOfType <SteamUnity>();
        }
        if (SteamUnity.Instance == null)
        {
            SteamUnity.Instance = (new GameObject("SteamUnity")).AddComponent <SteamUnity>();
        }
        if (SteamUnity.Instance == null)
        {
            return;
        }

        EditorGUILayout.HelpBox("Steam", MessageType.None);

        var steamid   = (int)((ulong)SteamUser.GetSteamID().m_SteamID);
        var steamname = SteamFriends.GetPersonaName();

        GUILayout.Label(string.Format("Initialized: {0}", EditorSteamManager.Instance.Initialized.ToString()));
        GUILayout.Label(string.Format("Steam Running: {0}", SteamAPI.IsSteamRunning()));
        GUILayout.Label(string.Format("Steam ID: {0}", steamid));
        GUILayout.Label(string.Format("Steam User: {0}", steamname));

        if (GUILayout.Button("Break Busy"))
        {
            SteamUnity.Instance.busy = false;
        }

        EditorGUILayout.HelpBox("Steam Published Files", MessageType.None);

        if (GUILayout.Button("Scan Published Items"))
        {
            SteamUnity.Instance.QueryPublishedItems();
        }

        GUILayout.BeginHorizontal();

        if (GUILayout.Button("Create Workshop Item"))
        {
            SteamUnity.Instance.CreateItem();
        }

        if (GUILayout.Button("Submit Item"))
        {
            SteamUnity.Instance.SubmitItem(textTitle, textDescription, textTag, textManifest, texturePreview);
        }

        GUILayout.EndHorizontal();

        EditorGUILayout.HelpBox("Steam Published Items", MessageType.None);

        var published = SteamUnity.Instance.GetPublishedItems();
        var working   = SteamUnity.Instance.GetWorking();

        for (int i = 0; i < published.Count; ++i)
        {
            var item = published[i];

            GUILayout.BeginHorizontal();
            GUILayout.Label(string.Format("{0} ({1})", item.m_rgchTitle, item.m_nPublishedFileId.m_PublishedFileId.ToString()), GUILayout.Width(200));

            if (GUILayout.Button("Select"))
            {
                SteamUnity.Instance.SelectWorking(item.m_nPublishedFileId);

                var details = SteamUnity.Instance.GetWorkingDetails();

                textTitle       = details.m_rgchTitle;
                textDescription = details.m_rgchDescription;
                textTag         = details.m_rgchTags;
                textManifest    = details.m_pchFileName;
            }

            GUILayout.EndHorizontal();
        }

        EditorGUILayout.HelpBox("Steam Submission", MessageType.None);

        if (working != PublishedFileId_t.Invalid)
        {
            var workingDetails = SteamUnity.Instance.GetWorkingDetails();

            if (workingDetails.m_nPublishedFileId != PublishedFileId_t.Invalid)
            {
                GUILayout.Label(string.Format("{0} ({1})", workingDetails.m_rgchTitle, workingDetails.m_nPublishedFileId), GUILayout.Width(200));

                GUILayout.BeginHorizontal();
                GUILayout.Label("Title", GUILayout.Width(200));
                textTitle = GUILayout.TextField(textTitle);
                GUILayout.EndHorizontal();

                GUILayout.BeginHorizontal();
                GUILayout.Label("Description", GUILayout.Width(200));
                textDescription = GUILayout.TextField(textDescription);
                GUILayout.EndHorizontal();

                GUILayout.BeginHorizontal();
                GUILayout.Label("Tag", GUILayout.Width(200));
                textTag = GUILayout.TextField(textTag);
                if (textTag != "character" && textTag != "world")
                {
                    textTag = "world";
                }
                GUILayout.EndHorizontal();

                EditorGUILayout.Separator();

                GUILayout.BeginHorizontal();
                GUILayout.Label("Folder", GUILayout.Width(200));
                textManifest = GUILayout.TextField(textManifest);
                var menu = new GenericMenu();
                if (GUILayout.Button("Select Bundle"))
                {
                    var exportsFolder = Path.GetFullPath(Path.Combine(Application.dataPath, "../Exports"));
                    var subFolder     = textTag == "world" ? "Worlds" : "Characters";
                    var contentFolder = Path.Combine(exportsFolder, subFolder);

                    if (Directory.Exists(contentFolder))
                    {
                        var contentFiles = new List <string>(Directory.GetFiles(contentFolder, "*.manifest"));

                        foreach (var content in contentFiles)
                        {
                            if (content == "Characters.manifest" || content == "Worlds.manifest")
                            {
                                continue;
                            }

                            var contentName = Path.GetFileNameWithoutExtension(content);

                            menu.AddItem(new GUIContent(contentName), textManifest == content, o => { textManifest = content; }, null);
                        }

                        menu.ShowAsContext();
                    }
                }
                GUILayout.EndHorizontal();

                GUILayout.BeginHorizontal();
                GUILayout.Label("Preview Texture", GUILayout.Width(200));
                texturePreview = EditorGUILayout.ObjectField(texturePreview, typeof(Texture2D), true) as Texture2D;
                GUILayout.EndHorizontal();
            }
        }
    }