public void DeletePreset(RagdollPresetMetadata preset)
 {
     FileTools.DeleteFile(preset.metaPath);
     FileTools.DeleteFile(preset.thumbPath);
     FileTools.DeleteFile(FileTools.Combine(preset.folder, WorkshopItemType.ModelFull.ToString() + ".png"));
     FileTools.DeleteFile(FileTools.Combine(preset.folder, WorkshopItemType.ModelHead.ToString() + ".png"));
     FileTools.DeleteFile(FileTools.Combine(preset.folder, WorkshopItemType.ModelLowerBody.ToString() + ".png"));
     FileTools.DeleteFile(FileTools.Combine(preset.folder, WorkshopItemType.ModelUpperBody.ToString() + ".png"));
     RemoveItem(WorkshopItemSource.LocalWorkshop, preset);
 }
Exemple #2
0
 public void LoadFromPreset(RagdollPresetMetadata preset)
 {
     ReleaseBaseTexture();
     savePath = FileTools.Combine(preset.folder, part.ToString() + ".png");
     textureLoadSuppressed = preset.GetPart(part).suppressCustomTexture;
     if (!textureLoadSuppressed)
     {
         RagdollPresetPartMetadata ragdollPresetPartMetadata = preset.GetPart(part);
         if (ragdollPresetPartMetadata != null && ragdollPresetPartMetadata.bytes != null)
         {
             ChangeBaseTexture(FileTools.TextureFromBytes(part.ToString(), ragdollPresetPartMetadata.bytes), isAsset: false);
         }
         else if (!string.IsNullOrEmpty(savePath))
         {
             bool      isAsset;
             Texture2D newRes = FileTools.ReadTexture(savePath, out isAsset);
             ChangeBaseTexture(newRes, isAsset);
         }
         if (baseTexture != null)
         {
             baseTexture.Compress(highQuality: true);
             baseTexture.Apply(updateMipmaps: true);
         }
     }
     if (model.meta.metaPath.StartsWith("builtin"))
     {
         if (baseTexture == null)
         {
             ChangeBaseTexture(HFFResources.instance.FindTextureResource("SkinTextures/" + model.meta.modelPrefab.name + "Color"), isAsset: true);
         }
         if (model.maskTexture == null)
         {
             ChangeMaskTexture(HFFResources.instance.FindTextureResource("SkinTextures/" + model.meta.modelPrefab.name + "Mask"), isAsset: true);
         }
     }
     if (baseTexture != null)
     {
         width           = baseTexture.width;
         height          = baseTexture.height;
         paintingEnabled = true;
     }
     else if (model.maskTexture != null)
     {
         width           = model.maskTexture.width;
         height          = model.maskTexture.height;
         paintingEnabled = true;
     }
     else
     {
         width           = (height = 2048);
         paintingEnabled = true;
     }
 }
 public string GenerateNewPresetPath()
 {
     for (int i = 0; i < 100; i++)
     {
         string text = FileTools.Combine("pr:Presets", i.ToString());
         if (GetItem(text) == null)
         {
             return(text);
         }
     }
     throw new InvalidOperationException("Too many presets!");
 }
Exemple #4
0
    public static WorkshopLevelMetadata GetLevelMetaDataFromID(ulong levelID)
    {
        string path  = "ws:" + levelID;
        string path2 = FileTools.Combine(path, "metadata.json");
        string text  = FileTools.ReadAllText(path2);

        if (text == null)
        {
            return(null);
        }
        return(JsonUtility.FromJson <WorkshopLevelMetadata>(text));
    }
Exemple #5
0
    public void ApplyPresetColors(RagdollPresetMetadata preset, bool bake, bool compress)
    {
        string b = FileTools.Combine(preset.folder, part.ToString() + ".png");
        bool   suppressCustomTexture = preset.GetPart(part).suppressCustomTexture;

        if (savePath != b || textureLoadSuppressed != suppressCustomTexture)
        {
            LoadFromPreset(preset);
        }
        RagdollPresetPartMetadata ragdollPresetPartMetadata = preset.GetPart(part);

        ApplyColors(HexConverter.HexToColor(ragdollPresetPartMetadata.color1, default(Color)), HexConverter.HexToColor(ragdollPresetPartMetadata.color2, default(Color)), HexConverter.HexToColor(ragdollPresetPartMetadata.color3, default(Color)), bake, compress);
    }
Exemple #6
0
        public static WorkshopItemMetadata Load(string folder)
        {
            string path = FileTools.Combine(folder, "metadata.json");
            string text = FileTools.ReadAllText(path);

            if (text == null)
            {
                return(null);
            }
            try
            {
                WorkshopItemMetadata workshopItemMetadata = JsonUtility.FromJson <WorkshopItemMetadata>(text);
                if (workshopItemMetadata != null)
                {
                    switch (workshopItemMetadata.itemType)
                    {
                    case WorkshopItemType.Levels:
                    case WorkshopItemType.Lobbies:
                        workshopItemMetadata = JsonUtility.FromJson <WorkshopLevelMetadata>(text);
                        if (workshopItemMetadata.typeTags == 2)
                        {
                            workshopItemMetadata.itemType = WorkshopItemType.Lobbies;
                        }
                        break;

                    case WorkshopItemType.ModelFull:
                    case WorkshopItemType.ModelHead:
                    case WorkshopItemType.ModelUpperBody:
                    case WorkshopItemType.ModelLowerBody:
                        workshopItemMetadata = JsonUtility.FromJson <RagdollModelMetadata>(text);
                        break;

                    case WorkshopItemType.RagdollPreset:
                        workshopItemMetadata = JsonUtility.FromJson <RagdollPresetMetadata>(text);
                        break;
                    }
                    if (workshopItemMetadata != null)
                    {
                        workshopItemMetadata.folder = folder;
                        return(workshopItemMetadata);
                    }
                }
            }
            catch (Exception exception)
            {
                Debug.LogException(exception);
            }
            return(null);
        }
 public void WorkshopUploadClick()
 {
     if (MenuSystem.CanInvoke)
     {
         SteamProgressOverlay.instance.ShowSteamProgress(showProgress: true, null, null);
         base.gameObject.SetActive(value: false);
         tempFolder = FileTools.GetTempDirectory();
         string text = FileTools.Combine(tempFolder, "thumbnail.png");
         preset.Save(tempFolder);
         FileTools.WriteTexture(text, preset.thumbnailTexture);
         preset.ReleaseThumbnailReference();
         PresetRepository.CopySkinTextures(preset, tempFolder);
         WorkshopUpload.Upload(preset, tempFolder, text, string.Empty, OnPublishOver);
     }
 }
    private static void CopyPartTexture(RagdollPresetMetadata preset, WorkshopItemType part, string targetFolder)
    {
        string sourcePath = FileTools.Combine(preset.folder, part.ToString() + ".png");
        string text       = FileTools.Combine(targetFolder, part.ToString() + ".png");
        RagdollPresetPartMetadata part2 = preset.GetPart(part);

        if (part2 == null || string.IsNullOrEmpty(part2.modelPath) || part2.suppressCustomTexture)
        {
            FileTools.DeleteFile(text);
        }
        else
        {
            FileTools.Copy(sourcePath, text, deleteIfMissing: true);
        }
        if (part2 != null && part2.suppressCustomTexture)
        {
            part2.suppressCustomTexture = false;
        }
    }
    public void MigrateLegacySkin()
    {
        string text = Path.Combine(Application.persistentDataPath, "characterTexture" + 0 + ".png");

        if (File.Exists(text))
        {
            RagdollPresetMetadata ragdollPresetMetadata = new RagdollPresetMetadata();
            ragdollPresetMetadata.folder   = text;
            ragdollPresetMetadata.itemType = WorkshopItemType.RagdollPreset;
            ragdollPresetMetadata.main     = new RagdollPresetPartMetadata
            {
                modelPath = "builtin:LegacyBody"
            };
            RagdollPresetMetadata ragdollPresetMetadata2 = ragdollPresetMetadata;
            ragdollPresetMetadata2.title  = "Legacy";
            ragdollPresetMetadata2.folder = GenerateNewPresetPath();
            ragdollPresetMetadata2.Save(ragdollPresetMetadata2.folder);
            AddItem(WorkshopItemSource.LocalWorkshop, ragdollPresetMetadata2);
            string targetPath = FileTools.Combine(ragdollPresetMetadata2.folder, WorkshopItemType.ModelFull.ToString() + ".png");
            FileTools.Copy(text, targetPath, deleteIfMissing: true);
            File.Delete(text);
        }
    }
Exemple #10
0
        private void SerializePart(WorkshopItemType part, NetStream stream)
        {
            byte[] array = null;
            RagdollPresetPartMetadata part2 = GetPart(part);

            if (part2 != null)
            {
                array = part2.bytes;
                if (array == null && !string.IsNullOrEmpty(folder))
                {
                    string path = FileTools.Combine(folder, part.ToString() + ".png");
                    array = FileTools.ReadAllBytes(path);
                }
            }
            if (array != null)
            {
                stream.Write(v: true);
                stream.WriteArray(array, 32);
            }
            else
            {
                stream.Write(v: false);
            }
        }
Exemple #11
0
        public void Save(string folder)
        {
            string path = FileTools.Combine(folder, "metadata.json");

            FileTools.WriteJson(path, this);
        }
Exemple #12
0
    private void Update()
    {
        if (Game.instance == null)
        {
            return;
        }
        if (NetGame.isLocal && Game.GetKeyDown(KeyCode.F6))
        {
            if (Time.timeScale == 0f)
            {
                Time.timeScale = 1f;
            }
            else
            {
                Time.timeScale = 0f;
            }
        }
        if (Input.GetKeyDown(KeyCode.F7) && NetGame.instance.players.Count == 2)
        {
            MenuCameraEffects.instance.SetCOOPFullScreenViewport(coopCameraToggle);
            coopCameraToggle = !coopCameraToggle;
        }
        if (Game.GetKeyDown(KeyCode.F8))
        {
            if (!GameSave.ProgressMoreOrEqual(Game.instance.currentLevelNumber + 1, 0))
            {
                SubtitleManager.instance.SetProgress(ScriptLocalization.TUTORIAL.CAMERADISABLED, 5f, -1f);
                return;
            }
            ResetKeyFrames();
            if (!allowFreeRoam)
            {
                Camera gameCam = NetGame.instance.local.players[0].cameraController.gameCam;
                base.transform.position = gameCam.transform.position;
                base.transform.rotation = gameCam.transform.rotation;
                allowFreeRoam           = true;
                cam = MenuCameraEffects.instance.OverrideCamera(base.transform, applyEffects: true);
            }
            else
            {
                CleanUp();
            }
        }
        if (NetGame.isLocal && Game.GetKeyDown(KeyCode.T) && Game.GetKey(KeyCode.LeftShift) && Game.GetKey(KeyCode.LeftControl))
        {
            if (Time.timeScale == 1f)
            {
                Time.timeScale = 0.5f;
            }
            else
            {
                Time.timeScale = 1f;
            }
        }
        if (Game.GetKey(KeyCode.LeftBracket))
        {
            MenuCameraEffects.instance.zoom.to *= Mathf.Pow(1.4f, Time.unscaledDeltaTime);
        }
        if (Game.GetKey(KeyCode.RightBracket))
        {
            MenuCameraEffects.instance.zoom.to /= Mathf.Pow(1.4f, Time.unscaledDeltaTime);
        }
        if (Game.GetKey(KeyCode.Comma))
        {
            CaveRender.fogDensityMultiplier -= 10f * Time.unscaledDeltaTime;
        }
        if (Game.GetKey(KeyCode.Period))
        {
            CaveRender.fogDensityMultiplier += 10f * Time.unscaledDeltaTime;
        }
        CaveRender.fogDensityMultiplier = Mathf.Clamp(CaveRender.fogDensityMultiplier, 0f, 60f);
        if (Game.GetKeyDown(KeyCode.F9))
        {
            Camera gameCam2 = cam;
            if (gameCam2 == null)
            {
                gameCam2 = NetGame.instance.local.players[0].cameraController.gameCam;
            }
            if (!gameCam2.isActiveAndEnabled)
            {
                MultiplayerLobbyController multiplayerLobbyController = Object.FindObjectOfType <MultiplayerLobbyController>();
                if (multiplayerLobbyController != null)
                {
                    gameCam2 = multiplayerLobbyController.gameCamera.gameCam;
                }
            }
            if (gameCam2 != null)
            {
                RenderTexture renderTexture2 = gameCam2.targetTexture = new RenderTexture(1024, 576, 16);
                gameCam2.Render();
                RenderTexture.active = renderTexture2;
                Texture2D texture2D = new Texture2D(renderTexture2.width, renderTexture2.height, TextureFormat.RGB24, mipmap: false);
                texture2D.ReadPixels(new Rect(0f, 0f, renderTexture2.width, renderTexture2.height), 0, 0);
                RenderTexture.active   = null;
                gameCam2.targetTexture = null;
                FileTools.WriteTexture(FileTools.Combine(Application.persistentDataPath, "thumbnail.png"), texture2D);
                Object.Destroy(renderTexture2);
                SubtitleManager.instance.SetProgress(ScriptLocalization.Get("WORKSHOP/ThumbnailCaptured"), 2f, 0.5f);
            }
        }
        if (!allowFreeRoam)
        {
            return;
        }
        if (Game.GetKeyDown(KeyCode.Alpha0))
        {
            ResetKeyFrames();
        }
        for (int i = 0; i < keyframes.Length; i++)
        {
            if (Game.GetKeyDown((KeyCode)(49 + i)))
            {
                Human human = Human.all[0];
                keyframes[i] = new CameraKeyFrame
                {
                    pos           = base.transform.position,
                    targetPos     = human.transform.position,
                    rot           = base.transform.rotation,
                    targetFocus   = (Input.GetKey(KeyCode.LeftShift) || Input.GetKey(KeyCode.RightShift) || Input.GetKey(KeyCode.LeftControl) || Input.GetKey(KeyCode.RightControl) || Input.GetKey(KeyCode.Tab)),
                    humanRelative = (Input.GetKey(KeyCode.LeftControl) || Input.GetKey(KeyCode.RightControl) || Input.GetKey(KeyCode.Tab)),
                    frame         = ReplayRecorder.instance.currentFrame
                };
                if (keyframes[i].humanRelative)
                {
                    keyframes[i].pos -= human.transform.position;
                }
                ReplayUI.instance.SyncCameras(keyframes);
            }
        }
        if (ReplayRecorder.instance.state == ReplayRecorder.ReplayState.PlayForward || ReplayRecorder.instance.state == ReplayRecorder.ReplayState.PlayBackward)
        {
            for (int j = 0; j < keyframes.Length; j++)
            {
                CameraKeyFrame cameraKeyFrame = keyframes[j];
                if (cameraKeyFrame.frame < 0f)
                {
                    break;
                }
                if (cameraKeyFrame.frame >= (float)ReplayRecorder.instance.currentFrame)
                {
                    CameraKeyFrame prevKeyframe = (j <= 0) ? cameraKeyFrame : keyframes[j - 1];
                    float          t            = Mathf.InverseLerp(prevKeyframe.frame, cameraKeyFrame.frame, ReplayRecorder.instance.currentFrame);
                    SyncCamera(cameraKeyFrame, prevKeyframe, t);
                    return;
                }
            }
        }
        else if (ReplayRecorder.instance.state == ReplayRecorder.ReplayState.None && keyframes[0].pos != Vector3.zero && keyframes[1].pos != Vector3.zero)
        {
            if (Game.GetKeyDown(KeyCode.Space))
            {
                if (animationPhase < 1f)
                {
                    animationPhase = 1f;
                }
                else
                {
                    animationPhase = 0f;
                }
            }
            if (animationPhase < 1f)
            {
                animationPhase += Time.unscaledDeltaTime / duration;
                SyncCamera(keyframes[1], keyframes[0], animationPhase);
                return;
            }
        }
        bool flag = Game.GetKey(KeyCode.LeftShift) || Input.GetKey(KeyCode.RightShift);
        int  num  = flag ? 1 : 10;

        if (Game.GetKey(KeyCode.W))
        {
            base.transform.position += base.transform.forward * Time.unscaledDeltaTime * num;
        }
        if (Game.GetKey(KeyCode.S))
        {
            base.transform.position -= base.transform.forward * Time.unscaledDeltaTime * num;
        }
        if (Game.GetKey(KeyCode.A))
        {
            base.transform.position -= base.transform.right * Time.unscaledDeltaTime * num;
        }
        if (Game.GetKey(KeyCode.D))
        {
            base.transform.position += base.transform.right * Time.unscaledDeltaTime * num;
        }
        if (Game.GetKey(KeyCode.Q))
        {
            base.transform.position += base.transform.up * Time.unscaledDeltaTime * num;
        }
        if (Game.GetKey(KeyCode.Z))
        {
            base.transform.position -= base.transform.up * Time.unscaledDeltaTime * num;
        }
        Vector2 mouseScrollDelta = Input.mouseScrollDelta;
        float   y = mouseScrollDelta.y;

        cam.fieldOfView  *= Mathf.Pow(1.1f, 0f - y);
        cam.fieldOfView   = Mathf.Clamp(cam.fieldOfView, 5f, 120f);
        cam.nearClipPlane = 0.05f * Mathf.Pow(1.1f, 0f - Mathf.Log(cam.fieldOfView / 60f, 1.1f));
        if (Input.GetMouseButton(2))
        {
            cam.fieldOfView   = 60f;
            cam.nearClipPlane = 0.05f;
        }
        float num2  = (!flag) ? 0.2f : 0.1f;
        float axis  = Input.GetAxis("mouse x");
        float axis2 = Input.GetAxis("mouse y");

        if (axis != 0f || axis2 != 0f)
        {
            Vector3 eulerAngles = base.transform.rotation.eulerAngles;
            if (eulerAngles.x > 180f)
            {
                eulerAngles.x -= 360f;
            }
            if (eulerAngles.x < -180f)
            {
                eulerAngles.x += 360f;
            }
            eulerAngles.x -= axis2 * num2;
            if (eulerAngles.x < -89f)
            {
                eulerAngles.x = -89f;
            }
            if (eulerAngles.x > 89f)
            {
                eulerAngles.x = 89f;
            }
            eulerAngles.y          += axis * num2;
            base.transform.rotation = Quaternion.Euler(eulerAngles);
        }
    }
Exemple #13
0
    public static AssetBundle LoadBundle(WorkshopItemMetadata wsMeta)
    {
        string path = FileTools.Combine(wsMeta.folder, "data");

        return(FileTools.LoadBundle(path));
    }