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); }
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!"); }
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)); }
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); }
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); } }
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); } }
public void Save(string folder) { string path = FileTools.Combine(folder, "metadata.json"); FileTools.WriteJson(path, this); }
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); } }
public static AssetBundle LoadBundle(WorkshopItemMetadata wsMeta) { string path = FileTools.Combine(wsMeta.folder, "data"); return(FileTools.LoadBundle(path)); }