// Outputs all voxel maps in the scene to a file of the OBJ file format // All voxel maps will be output as a single mesh public static void SaveTriangles() { if (m_voxelMaps.Count <= 0) { return; } String fileName = Path.Combine(MyFileSystemUtils.GetApplicationUserDataFolder(), "VoxelMaps_" + MyValueFormatter.GetFormatedDateTimeForFilename(DateTime.Now) + ".obj"); using (FileStream fs = File.Create(fileName)) { using (StreamWriter sw = new StreamWriter(fs)) { foreach (MyVoxelMap voxelMap in m_voxelMaps) { voxelMap.SaveVoxelVertices(sw); } foreach (MyVoxelMap voxelMap in m_voxelMaps) { voxelMap.SaveVoxelNormals(sw); } int vertexOffset = 0; foreach (MyVoxelMap voxelMap in m_voxelMaps) { voxelMap.SaveVoxelFaces(sw, ref vertexOffset); } } } }
// Loads all values from config file // Result of this method is "m_values" filled with individual values. // If anything fails during loading, we ignore log it, but continue - because damaged cfg file must not stop this game public static void Load() { MyMwcLog.WriteLine("MyConfig.Load() - START"); MyMwcLog.IncreaseIndent(); string path = GetFilePath(); MyMwcLog.WriteLine("Path: " + path, LoggingOptions.CONFIG_ACCESS); // If anything fails during loading, we ignore log it, but continue - because damaged cfg file must not stop this game string xmlTextOriginal = ""; try { if (MyFileSystemUtils.FileExists(path) == false) { MyMwcLog.WriteLine("Config file not found! " + path); } else { xmlTextOriginal = File.ReadAllText(path); string xmlText = xmlTextOriginal.Replace('\0', ' '); // Sometimes there's null chars in config using (var textReader = new StringReader(xmlText)) { using (XmlReader xmlReader = XmlReader.Create(textReader)) { while (xmlReader.Read()) { if (xmlReader.NodeType == XmlNodeType.Element) { if (xmlReader.HasAttributes) { for (int i = 0; i < xmlReader.AttributeCount; i++) { m_values[xmlReader.Name] = xmlReader.GetAttribute(i); } } } } } } } } catch (Exception exc) { // Write exception to log, but continue as if nothing wrong happened MyMwcLog.WriteLine("Exception occured, but application is continuing. Exception: " + exc); MyMwcLog.WriteLine("Config:"); MyMwcLog.WriteLine(xmlTextOriginal); } foreach (KeyValuePair <string, string> kvp in m_values) { MyMwcLog.WriteLine(kvp.Key + ": " + kvp.Value, LoggingOptions.CONFIG_ACCESS); } MyMwcLog.DecreaseIndent(); MyMwcLog.WriteLine("MyConfig.Load() - END"); }
private void OnGenerateListOfMissions(MyGuiControlButton sender) { foreach(MyMissionID missionID in Enum.GetValues(typeof(MyMissionID))){ MyMission mission = MyMissions.GetMissionByID(missionID) as MyMission; if (mission != null) { if (!System.IO.Directory.Exists(MyFileSystemUtils.GetApplicationUserDataFolder() + "\\MissionTexts")) { System.IO.Directory.CreateDirectory(MyFileSystemUtils.GetApplicationUserDataFolder() + "\\MissionTexts"); } using (System.IO.StreamWriter output = new System.IO.StreamWriter(System.IO.File.Open(MyFileSystemUtils.GetApplicationUserDataFolder() + "\\MissionTexts\\" + Enum.GetName(typeof(MyMissionID), missionID) + ".txt", System.IO.FileMode.Create))) { output.WriteLine("Mission: " + mission.DebugName); output.WriteLine(); output.WriteLine("MyMissionID." + Enum.GetName(typeof(MyMissionID), mission.ID)); output.WriteLine("DebugName: \"" + mission.DebugName + "\""); output.WriteLine("Name: \"" + mission.Name + "\""); output.WriteLine("Description: \"" + mission.Description + "\""); output.WriteLine(); output.WriteLine("Objectives:"); foreach(MyObjective objective in mission.Objectives){ output.WriteLine("MyMissionID." + Enum.GetName(typeof(MyMissionID), objective.ID)); output.WriteLine("Name: \"" + objective.Name + "\""); output.WriteLine("Description: \"" + objective.Description + "\""); output.WriteLine(); } output.Flush(); output.Close(); } } } }
public static void LoadFromUserFolder(out string nextFreeName, out Matrix?lastShipPos) { if (m_attachedPhysObjects == null) // When triler was not loaded { m_attachedPhysObjects = new Dictionary <MyEntity, Dictionary <int, MyPhysObjectTrackedTickData> >(); } foreach (var obj in m_attachedPhysObjects) { var entity = obj.Key; if (MyEntities.GetEntities().Contains(entity)) { obj.Key.MarkForClose(); } } m_attachedPhysObjects.Clear(); lastShipPos = null; var path = Path.Combine(MyFileSystemUtils.GetApplicationUserDataFolder(), "Trailer"); if (!Directory.Exists(path)) { Directory.CreateDirectory(path); } int maxFileName = 0; var files = Directory.GetFiles(path, "*.tracked"); for (int i = 0; i < files.Length; i++) { string fileWithoutExt = Path.GetFileNameWithoutExtension(files[i]); int num; if (int.TryParse(fileWithoutExt, out num) && num > maxFileName) { maxFileName = num; } var smallShip = MyGuiScreenGamePlay.Static.CreateFakeMinerShip(null, MinerWars.CommonLIB.AppCode.ObjectBuilders.Object3D.MyMwcObjectBuilder_SmallShip_TypesEnum.GETTYSBURG, new Vector3((i * 100) + 10000, (i * 100) + 10000, (i * 100) + 10000), false, 1.0f); AttachPhysObjectFullPath(smallShip, files[i]); } if (m_attachedPhysObjects.Count > 0) { var firstTick = m_attachedPhysObjects.Values.Last().First().Value; var m = firstTick.Orientation; m.Translation = firstTick.Position; lastShipPos = m; } m_isEnabled = true; m_fromTick = MillisecondsToTick(0); // start now m_toTick = MillisecondsToTick(1000 * 1000); // max length 20min m_activeTick = m_fromTick; nextFreeName = (maxFileName + 1).ToString("D3"); }
public static void SaveScreenshotUserFolder(Texture texture2D, string name) { var datetimePrefix = MyValueFormatter.GetFormatedDateTimeForFilename(DateTime.Now); var folder = Path.Combine(MyFileSystemUtils.GetApplicationUserDataFolder(), "Screenshots\\"); var path = Path.Combine(folder, "MinerWars_" + MyEnumsToStrings.CameraDirection[(int)MyCamera.ActualCameraDirection] + "_" + datetimePrefix + "_" + name); SaveScreenshot(texture2D, path); }
// Save every voxel map into file. Destination folder is same as for log files. public static void SaveVoxelContents() { foreach (MyVoxelMap voxelMap in m_voxelMaps) { string voxelName = "VoxelMap_" + voxelMap.VoxelMapId + "_" + MyConfig.Username + ".vox"; string voxelFilePath = Path.Combine(MyFileSystemUtils.GetApplicationUserDataFolder(), voxelName); voxelMap.SaveVoxelContents(voxelFilePath, true); if (MyFakes.MWBUILDER) { //Use name as storage for filepath voxelMap.SetName(voxelName); } } }
public MyScreenshot(float sizeMultiplier) { MyMwcLog.WriteLine("MyScreenshot.Constructor() - START"); MyMwcLog.IncreaseIndent(); System.Diagnostics.Debug.Assert(sizeMultiplier > 0.0f); m_sizeMultiplier = sizeMultiplier; m_folder = Path.Combine(MyFileSystemUtils.GetApplicationUserDataFolder(), "Screenshots\\"); m_datetimePrefix = MyValueFormatter.GetFormatedDateTimeForFilename(DateTime.Now); MyMwcLog.DecreaseIndent(); MyMwcLog.WriteLine("MyScreenshot.Constructor() - END"); }
// Save tracked data to files public static void Save() { if (m_trackedPhysObjects == null) { return; } foreach (KeyValuePair <MyEntity, MyTrailerSaveObjectHolder> kvp in m_trackedPhysObjects) { var path = Path.Combine(MyFileSystemUtils.GetApplicationUserDataFolder(), "Trailer"); if (!Directory.Exists(path)) { Directory.CreateDirectory(path); } // Name is unique, that's preserved by Add() method using (FileStream fs = File.Create(Path.Combine(path, kvp.Value.Name + ".tracked"))) { using (BinaryWriter bw = new BinaryWriter(fs)) { foreach (KeyValuePair <int, MyPhysObjectTrackedTickData> kvpTicks in kvp.Value.Ticks) { MyUtils.BinaryWrite(bw, ref kvpTicks.Value.Position); MyUtils.BinaryWrite(bw, ref kvpTicks.Value.Orientation); bw.Write(kvpTicks.Value.ReflectorLevel); bw.Write(kvpTicks.Value.EngineLevel); if (kvpTicks.Value.GunShot == null) { bw.Write((int)-1); } else { bw.Write((int)kvpTicks.Value.GunShot.Value); } } } } } }
static string GetFilePath() { string postFix = MyMwcFinalBuildConstants.GetValueForBuildType("", "_TEST_BUILD", "_DEVELOP_BUILD"); return(Path.Combine(MyFileSystemUtils.GetApplicationUserDataFolder(), "MinerWars" + postFix + ".cfg")); }
private static void UpgradeSaves() { var oldCurrentDir = "Current"; var oldSavePath = Path.Combine(MyFileSystemUtils.GetApplicationUserDataFolder(), "Saves", MyMwcFinalBuildConstants.TYPE_AS_STRING); DirectoryInfo dir = new DirectoryInfo(oldSavePath); if (!dir.Exists) { return; } // Remove files directly in save dir foreach (var file in dir.GetFiles()) { try { file.Delete(); } catch (IOException e) { MyMwcLog.WriteLine(e); } } // Move subdirs to current save dir foreach (var subdir in dir.GetDirectories()) { var parts = subdir.Name.Split(new char[] { '_' }, StringSplitOptions.RemoveEmptyEntries); int part0; if ((subdir.Name == oldCurrentDir || int.TryParse(parts[0], out part0)) && IsCheckpointMwcInDir(subdir)) { try { string destDirName = Path.Combine(SavesPath, subdir.Name); if (Directory.Exists(destDirName)) { Directory.Delete(subdir.FullName, true); } else { Directory.Move(subdir.FullName, destDirName); } } catch (IOException e) { MyMwcLog.WriteLine(e); } } } // Rename saves to remove UserId from filenames var savesDir = new DirectoryInfo(SavesPath); if (!savesDir.Exists) { return; } foreach (var chapterDir in savesDir.GetDirectories()) { foreach (var file in chapterDir.GetFiles("*.mws")) { var parts = Path.GetFileName(file.FullName).Split(new char[] { '_' }, StringSplitOptions.RemoveEmptyEntries).ToList(); if (parts.Count == 6 && parts[1] == MyClientServer.LoggedPlayer.GetUserId().ToString()) { parts.RemoveAt(1); string newName = parts.Aggregate(CombineSectorName); try { file.MoveTo(Path.Combine(Path.GetDirectoryName(file.FullName), newName)); } catch (IOException e) { MyMwcLog.WriteLine(e); } } } } }
public MyGuiScreenHelp() : base(new Vector2(0.5f, 0.5f), MyGuiConstants.SCREEN_BACKGROUND_COLOR, new Vector2(1f, 0.98f)) { m_enableBackgroundFade = true; AddCaption(MyTextsWrapperEnum.HelpCaption, captionScale: 1.35f); if (MyGuiScreenGamePlay.Static != null) { MyGuiScreenGamePlay.Static.DrawHud = false; } List <ControlWithDescription> left = new List <ControlWithDescription>(); List <ControlWithDescription> right = new List <ControlWithDescription>(); // left.Add(new ControlWithDescription(MyGameControlEnums.FORWARD, MyGameControlEnums.REVERSE)); // left.Add(new ControlWithDescription(MyGameControlEnums.STRAFE_LEFT, MyGameControlEnums.STRAFE_RIGHT)); // left.Add(new ControlWithDescription(MyGameControlEnums.UP_THRUST, MyGameControlEnums.DOWN_THRUST)); // left.Add(new ControlWithDescription(MyGameControlEnums.ROLL_LEFT, MyGameControlEnums.ROLL_RIGHT)); left.Add(new ControlWithDescription(MyGameControlEnums.FORWARD)); left.Add(new ControlWithDescription(MyGameControlEnums.REVERSE)); left.Add(new ControlWithDescription(MyGameControlEnums.STRAFE_LEFT)); left.Add(new ControlWithDescription(MyGameControlEnums.STRAFE_RIGHT)); left.Add(new ControlWithDescription(MyGameControlEnums.UP_THRUST)); left.Add(new ControlWithDescription(MyGameControlEnums.DOWN_THRUST)); left.Add(new ControlWithDescription(MyGameControlEnums.ROLL_LEFT)); left.Add(new ControlWithDescription(MyGameControlEnums.ROLL_RIGHT)); left.Add(new ControlWithDescription(MyGameControlEnums.AFTERBURNER)); left.Add(new ControlWithDescription(MyGameControlEnums.MOVEMENT_SLOWDOWN)); left.Add(new ControlWithDescription(MyGameControlEnums.AUTO_LEVEL)); left.Add(new ControlWithDescription("", "")); left.Add(new ControlWithDescription( new StringBuilder(). Append(MyGuiManager.GetInput().GetGameControlTextEnum(MyGameControlEnums.FIRE_PRIMARY)). Append(", "). Append(MyGuiManager.GetInput().GetGameControl(MyGameControlEnums.FIRE_PRIMARY).GetControlButtonName(MyGuiInputDeviceEnum.Mouse)), MyGameControlEnums.FIRE_PRIMARY )); left.Add(new ControlWithDescription( new StringBuilder(). Append(MyGuiManager.GetInput().GetGameControlTextEnum(MyGameControlEnums.FIRE_SECONDARY)). Append(", "). Append(MyGuiManager.GetInput().GetGameControl(MyGameControlEnums.FIRE_SECONDARY).GetControlButtonName(MyGuiInputDeviceEnum.Mouse)), MyGameControlEnums.FIRE_SECONDARY )); left.Add(new ControlWithDescription( new StringBuilder(). Append(MyGuiManager.GetInput().GetGameControlTextEnum(MyGameControlEnums.SELECT_AMMO_BULLET)). Append(","). Append(MyGuiManager.GetInput().GetGameControlTextEnum(MyGameControlEnums.SELECT_AMMO_MISSILE)). Append(","). Append(MyGuiManager.GetInput().GetGameControlTextEnum(MyGameControlEnums.SELECT_AMMO_CANNON)). Append(","). Append(MyGuiManager.GetInput().GetGameControlTextEnum(MyGameControlEnums.SELECT_AMMO_UNIVERSAL_LAUNCHER_FRONT)). Append(","). Append(MyGuiManager.GetInput().GetGameControlTextEnum(MyGameControlEnums.SELECT_AMMO_UNIVERSAL_LAUNCHER_BACK)), MyTextsWrapper.Get(MyTextsWrapperEnum.SelectAmmo) )); left.Add(new ControlWithDescription(MyGameControlEnums.WEAPON_SPECIAL)); left.Add(new ControlWithDescription(MyGameControlEnums.PREV_TARGET)); left.Add(new ControlWithDescription(MyGameControlEnums.NEXT_TARGET)); for (int i = 0; i < specTexts.Length; i++) { StringBuilder specControl = new StringBuilder(); if (MyGuiManager.GetInput().GetGameControl(specFront[i]).IsControlAssigned(MyGuiInputDeviceEnum.Keyboard)) { specControl.Append(MyGuiManager.GetInput().GetGameControlTextEnum(specFront[i])); } if (MyGuiManager.GetInput().GetGameControl(specBack[i]).IsControlAssigned(MyGuiInputDeviceEnum.Keyboard)) { if (specControl.Length != 0) { specControl.Append(", "); } specControl.Append(MyGuiManager.GetInput().GetGameControlTextEnum(specBack[i])); } left.Add(new ControlWithDescription(specControl, MyTextsWrapper.Get(specTexts[i]))); } left.Add(new ControlWithDescription("", "")); left.Add(new ControlWithDescription(MyGameControlEnums.USE)); left.Add(new ControlWithDescription(MyGameControlEnums.GPS)); //Journal removed //left.Add(new ControlWithDescription(MyGameControlEnums.MISSION_DIALOG)); left.Add(new ControlWithDescription(MyGameControlEnums.INVENTORY)); left.Add(new ControlWithDescription(MyGameControlEnums.TRAVEL)); right.Add(new ControlWithDescription(MyGameControlEnums.DRILL)); right.Add(new ControlWithDescription(MyGameControlEnums.HARVEST)); right.Add(new ControlWithDescription(MyGameControlEnums.DRONE_DEPLOY)); right.Add(new ControlWithDescription(MyGameControlEnums.DRONE_CONTROL)); right.Add(new ControlWithDescription(MyGameControlEnums.CHANGE_DRONE_MODE)); right.Add(new ControlWithDescription(MyTextsWrapper.Get(MyTextsWrapperEnum.LeftMouseButton), MyTextsWrapper.Get(MyTextsWrapperEnum.DetonateDrone))); right.Add(new ControlWithDescription( new StringBuilder(). Append(MyGuiManager.GetInput().GetGameControlTextEnum(MyGameControlEnums.PREVIOUS_CAMERA)). Append(", "). Append(MyGuiManager.GetInput().GetGameControlTextEnum(MyGameControlEnums.NEXT_CAMERA)), MyTextsWrapper.Get(MyTextsWrapperEnum.CycleSecondaryCamera) )); right.Add(new ControlWithDescription(MyGameControlEnums.CONTROL_SECONDARY_CAMERA)); right.Add(new ControlWithDescription("", "")); right.Add(new ControlWithDescription(MyGameControlEnums.QUICK_ZOOM)); right.Add(new ControlWithDescription(MyGameControlEnums.ZOOM_IN, MyGameControlEnums.ZOOM_OUT)); right.Add(new ControlWithDescription(MyGameControlEnums.REAR_CAM)); right.Add(new ControlWithDescription(MyGameControlEnums.HEADLIGHTS)); right.Add(new ControlWithDescription(MyGameControlEnums.HEADLIGTHS_DISTANCE)); right.Add(new ControlWithDescription(MyGameControlEnums.VIEW_MODE)); right.Add(new ControlWithDescription(MyGameControlEnums.WHEEL_CONTROL)); right.Add(new ControlWithDescription(MyGameControlEnums.CHAT)); right.Add(new ControlWithDescription(MyGameControlEnums.SCORE)); right.Add(new ControlWithDescription("", "")); right.Add(new ControlWithDescription(new StringBuilder("F1"), MyTextsWrapper.Get(MyTextsWrapperEnum.OpenHelpScreen))); right.Add(new ControlWithDescription( new StringBuilder(). Append(MyTextsWrapper.Get(MyTextsWrapperEnum.Ctrl)). Append("+F1"), MyTextsWrapper.Get(MyTextsWrapperEnum.OpenCheats) )); right.Add(new ControlWithDescription(new StringBuilder("F4"), MyTextsWrapper.Get(MyTextsWrapperEnum.SaveScreenshotToUserFolder))); //These keys are to be used just for developers or testing if (!SysUtils.MyMwcFinalBuildConstants.IS_PUBLIC) { right.Add(new ControlWithDescription("", "")); //Programmers right.Add(new ControlWithDescription("F6", "Switch to player")); right.Add(new ControlWithDescription("F7", "Switch to following 3rd person")); right.Add(new ControlWithDescription("F9", "Switch to static 3rd person")); right.Add(new ControlWithDescription("F8, Ctrl+F8", "Switch to / reset spectator")); right.Add(new ControlWithDescription("Ctrl+Space", "Move ship to spectator")); right.Add(new ControlWithDescription("F11, Shift+F11", "Game statistics / FPS")); right.Add(new ControlWithDescription("F12", "Debug screen (jump to mission)")); right.Add(new ControlWithDescription("Ctrl+Del", "Skip current objective")); right.Add(new ControlWithDescription("Shift+\\", "Teleport to next obstacle")); } /* * right.Add(new ControlWithDescription("F5","Ship customization screen")); * right.Add(new ControlWithDescription("F9","restart current game and reload sounds")); * right.Add(new ControlWithDescription("F3","start sun wind")); * right.Add(new ControlWithDescription("F8","save all voxel maps into USER FOLDER - only for programmers")); * right.Add(new ControlWithDescription("F10","switch camera - only for programmers")); * right.Add(new ControlWithDescription("F11","save screenshot(s) into USER FOLDER")); * right.Add(new ControlWithDescription("F12","cycle through debug screens - only for programmers")); */ #if RENDER_PROFILING right.Add(new ControlWithDescription("Alt + Num0", "Enable/Disable render profiler or leave current child node.")); right.Add(new ControlWithDescription("Alt + Num1-Num9", "Enter child node in render profiler")); right.Add(new ControlWithDescription("Alt + Enter", "Pause/Unpause profiler")); #endif //RENDER_PROFILER Vector2 controlPosition = -m_size.Value / 2.0f + new Vector2(0.06f, 0.125f); Vector2 descriptionPosition = -m_size.Value / 2.0f + new Vector2(0.18f, 0.125f); foreach (var line in left) { Controls.Add(new MyGuiControlLabel(this, controlPosition, null, line.Control, MyGuiConstants.LABEL_TEXT_COLOR, MyGuiConstants.LABEL_TEXT_SCALE, MyGuiDrawAlignEnum.HORISONTAL_LEFT_AND_VERTICAL_CENTER, MyGuiManager.GetFontMinerWarsRed())); Controls.Add(new MyGuiControlLabel(this, descriptionPosition, null, line.Description, MyGuiConstants.LABEL_TEXT_COLOR, MyGuiConstants.LABEL_TEXT_SCALE, MyGuiDrawAlignEnum.HORISONTAL_LEFT_AND_VERTICAL_CENTER)); controlPosition.Y += 0.023f; descriptionPosition.Y += 0.023f; } controlPosition = new Vector2(0.03f, 0.125f - m_size.Value.Y / 2.0f); descriptionPosition = new Vector2(0.15f, 0.125f - m_size.Value.Y / 2.0f); foreach (var line in right) { Controls.Add(new MyGuiControlLabel(this, controlPosition, null, line.Control, MyGuiConstants.LABEL_TEXT_COLOR, MyGuiConstants.LABEL_TEXT_SCALE, MyGuiDrawAlignEnum.HORISONTAL_LEFT_AND_VERTICAL_CENTER, MyGuiManager.GetFontMinerWarsRed())); Controls.Add(new MyGuiControlLabel(this, descriptionPosition, null, line.Description, MyGuiConstants.LABEL_TEXT_COLOR, MyGuiConstants.LABEL_TEXT_SCALE, MyGuiDrawAlignEnum.HORISONTAL_LEFT_AND_VERTICAL_CENTER)); controlPosition.Y += 0.023f; descriptionPosition.Y += 0.023f; } Controls.Add(new MyGuiControlLabel(this, new Vector2(0.06f - m_size.Value.X / 2.0f, -0.085f + m_size.Value.Y / 2.0f), null, new StringBuilder().Append(MyTextsWrapper.Get(MyTextsWrapperEnum.UserFolder)).Append(": ").Append(MyFileSystemUtils.GetApplicationUserDataFolder()), MyGuiConstants.LABEL_TEXT_COLOR, MyGuiConstants.LABEL_TEXT_SCALE, MyGuiDrawAlignEnum.HORISONTAL_LEFT_AND_VERTICAL_CENTER)); Controls.Add(new MyGuiControlButton(this, 0.5f * m_size.Value + new Vector2(-0.14f, -0.085f), MyGuiConstants.BACK_BUTTON_SIZE, MyGuiConstants.BACK_BUTTON_BACKGROUND_COLOR, MyTextsWrapperEnum.Back, MyGuiConstants.BACK_BUTTON_TEXT_COLOR, MyGuiConstants.BACK_BUTTON_TEXT_SCALE, OnBackClick, MyGuiControlButtonTextAlignment.CENTERED, true, MyGuiDrawAlignEnum.HORISONTAL_CENTER_AND_VERTICAL_CENTER, true)); if (MyMultiplayerPeers.Static.Players.Count == 0) { m_wasPause = MyMinerGame.IsPaused(); MyMinerGame.SetPause(true); } }
public static void SaveScreenshot(Texture texture2D, string file) { MyMwcLog.WriteLine("MyScreenshot.SaveTexture2D() - START"); MyMwcLog.IncreaseIndent(); Texture systemTex = new Texture(MinerWars.AppCode.App.MyMinerGame.Static.GraphicsDevice, texture2D.GetLevelDescription(0).Width, texture2D.GetLevelDescription(0).Height, 0, Usage.None, Format.A8R8G8B8, Pool.SystemMemory); Surface sourceSurface = texture2D.GetSurfaceLevel(0); Surface destSurface = systemTex.GetSurfaceLevel(0); MinerWars.AppCode.App.MyMinerGame.Static.GraphicsDevice.GetRenderTargetData(sourceSurface, destSurface); sourceSurface.Dispose(); destSurface.Dispose(); texture2D = systemTex; try { MyMwcLog.WriteLine("File: " + file); MyFileSystemUtils.CreateFolderForFile(file); Stack <SharpDX.Rectangle> tiles = new Stack <SharpDX.Rectangle>(); int tileWidth = texture2D.GetLevelDescription(0).Width; int tileHeight = texture2D.GetLevelDescription(0).Height; while (tileWidth > 3200) { tileWidth /= 2; tileHeight /= 2; } int widthOffset = 0; int heightOffset = 0; while (widthOffset < texture2D.GetLevelDescription(0).Width) { while (heightOffset < texture2D.GetLevelDescription(0).Height) { tiles.Push(new SharpDX.Rectangle(widthOffset, heightOffset, tileWidth, tileHeight)); heightOffset += tileHeight; } heightOffset = 0; widthOffset += tileWidth; } int sc = 0; while (tiles.Count > 0) { SharpDX.Rectangle rect = tiles.Pop(); byte[] data = new byte[rect.Width * rect.Height * 4]; SharpDX.Rectangle rect2 = new SharpDX.Rectangle(rect.X, rect.Y, rect.Width, rect.Height); //texture2D.GetData<byte>(0, rect2, data, 0, data.Length); DataStream ds; texture2D.LockRectangle(0, rect2, LockFlags.None, out ds); ds.Read(data, 0, data.Length); /* * for (int i = 0; i < data.Length; i += 4) * { * //Swap ARGB <-> RGBA * byte b = data[i + 0]; * byte g = data[i + 1]; * byte r = data[i + 2]; * byte a = data[i + 3]; * data[i + 0] = r; //Blue * data[i + 1] = g; //Green * data[i + 2] = b; //Red * data[i + 3] = a; //Alpha * } */ ds.Seek(0, SeekOrigin.Begin); ds.WriteRange(data); texture2D.UnlockRectangle(0); string filename = file.Replace(".png", "_" + sc.ToString("##00") + ".png"); using (Stream stream = File.Create(filename)) { System.Drawing.Bitmap image = new System.Drawing.Bitmap(rect.Width, rect.Height); System.Drawing.Imaging.BitmapData imageData = image.LockBits(new System.Drawing.Rectangle(0, 0, rect.Width, rect.Height), System.Drawing.Imaging.ImageLockMode.WriteOnly, System.Drawing.Imaging.PixelFormat.Format32bppArgb); System.Runtime.InteropServices.Marshal.Copy(data, 0, imageData.Scan0, data.Length); image.Save(stream, System.Drawing.Imaging.ImageFormat.Png); image.UnlockBits(imageData); image.Dispose(); //texture2D.SaveAsPng(stream, texture2D.Width, texture2D.Height); //BaseTexture.ToStream(texture2D, ImageFileFormat.Png); } sc++; GC.Collect(); } } catch (Exception exc) { // Write exception to log, but continue as if nothing wrong happened MyMwcLog.WriteLine(exc); } texture2D.Dispose(); //BaseTexture.ToFile(texture2D, "c:\\test.png", ImageFileFormat.Png); MyMwcLog.DecreaseIndent(); MyMwcLog.WriteLine("MyScreenshot.SaveTexture2D() - END"); }
private void OnGenerateListOfUnusedDialogues(MyGuiControlButton sender) { //get List<MyDialogueSentence> sentences = new List<MyDialogueSentence>(); foreach (MyDialogueEnum dialogueEnum in Enum.GetValues(typeof(MyDialogueEnum))) { MyDialogue dialogue = MyDialogueConstants.GetDialogue(dialogueEnum); foreach (MyDialogueSentence sentence in dialogue.Sentences) { if (sentence.Text != MyDialoguesWrapperEnum.Dlg_DialoguePlaceholder) sentences.Add(sentence); } } //sort sentences.Sort(DialogueSentencesComparer); HashSet<MySoundCuesEnum> soundCues = new HashSet<MySoundCuesEnum>(); foreach (MySoundCuesEnum soundEnum in Enum.GetValues(typeof(MySoundCuesEnum))) { if (Enum.GetName(typeof(MySoundCuesEnum), soundEnum).StartsWith("Dlg_")) soundCues.Add(soundEnum); } HashSet<MyDialoguesWrapperEnum> dialogueTexts = new HashSet<MyDialoguesWrapperEnum>(); foreach (MyDialoguesWrapperEnum textEnum in Enum.GetValues(typeof(MyDialoguesWrapperEnum))) { dialogueTexts.Add(textEnum); } //Remove used foreach (MyDialogueSentence sentence in sentences) { if (sentence.Cue.HasValue) soundCues.Remove(sentence.Cue.Value); dialogueTexts.Remove(sentence.Text); } //print var dialoguesPath = Path.Combine(MyFileSystemUtils.GetApplicationUserDataFolder(), "UnusedDialogues.txt"); using (var output = new StreamWriter(File.Open(dialoguesPath, FileMode.Create))) { StringBuilder line = new StringBuilder(); line.Append("Unused cues: "); output.WriteLine(line); foreach (MySoundCuesEnum soundCue in soundCues) { line.Clear(); line.Append("MySoundCuesEnum." + Enum.GetName(typeof(MySoundCuesEnum), soundCue)); output.WriteLine(line); } line.Clear(); line.AppendLine(); output.WriteLine(line); line.Clear(); line.Append("Unused texts: "); output.WriteLine(line); foreach (MyDialoguesWrapperEnum textEnum in dialogueTexts) { line.Clear(); line.Append("MyDialoguesWrapperEnum." + Enum.GetName(typeof(MyDialoguesWrapperEnum), textEnum)); line.Append(":"); line.Append(MyDialoguesWrapper.Get(textEnum).ToString()); output.WriteLine(line); } output.Flush(); output.Close(); } }
private void OnGenerateListOfDialogues(MyGuiControlButton sender) { /* List<string> dialoguesString = new List<string>(); foreach (MyDialoguesWrapperEnum textEnum in Enum.GetValues(typeof(MyDialoguesWrapperEnum))) { dialoguesString.Add(textEnum.ToString()); } dialoguesString.Sort(); var dialoguesPath = Path.Combine(MyFileSystemUtils.GetApplicationUserDataFolder(), "Dialogues.txt"); using (var output = new StreamWriter(File.Open(dialoguesPath, FileMode.Create))) { StringBuilder line = new StringBuilder(); foreach (string str in dialoguesString) { foreach (MyDialoguesWrapperEnum textEnum in Enum.GetValues(typeof(MyDialoguesWrapperEnum))) { if (textEnum.ToString() == str) { line.Clear(); foreach (MyDialogueEnum dialogueEnum in Enum.GetValues(typeof(MyDialogueEnum))) { MyDialogue dialogue = MyDialogueConstants.GetDialogue(dialogueEnum); foreach (MyDialogueSentence sentence in dialogue.Sentences) { if (sentence.Text == textEnum) { line.Append(sentence.Actor.ToString() + " (" + MyDialoguesWrapper.Get(textEnum).ToString() + ")"); break; } } } output.WriteLine(line); break; } } } output.Flush(); output.Close(); } */ //get List<MyDialogueSentence> sentences = new List<MyDialogueSentence>(); foreach (MyDialogueEnum dialogueEnum in Enum.GetValues(typeof(MyDialogueEnum))) { MyDialogue dialogue = MyDialogueConstants.GetDialogue(dialogueEnum); foreach(MyDialogueSentence sentence in dialogue.Sentences){ if(sentence.Text!=MyDialoguesWrapperEnum.Dlg_DialoguePlaceholder) sentences.Add(sentence); } } //sort sentences.Sort(DialogueSentencesComparer); //print var dialoguesPath = Path.Combine(MyFileSystemUtils.GetApplicationUserDataFolder(), "Dialogues.txt"); using (var output = new StreamWriter(File.Open(dialoguesPath, FileMode.Create))) { StringBuilder line = new StringBuilder(); foreach(MyDialogueSentence sentence in sentences) { line.Clear(); if (sentence.Cue.HasValue) { line.Append("MySoundCuesEnum." + Enum.GetName(typeof(MySoundCuesEnum), sentence.Cue.Value)); } else { line.Append("[NULL]"); } line.Append(" ("); line.Append(MyTextsWrapper.Get(MyActorConstants.GetActorProperties(sentence.Actor).DisplayName).ToString()); line.Append("): "); line.Append(MyDialoguesWrapper.Get(sentence.Text).ToString()); output.WriteLine(line); } output.Flush(); output.Close(); } }