Esempio n. 1
0
        //  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);
                    }
                }
            }
        }
Esempio n. 2
0
        //  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");
        }
Esempio n. 3
0
        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();
                    }
                }
            }
        }
Esempio n. 4
0
        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");
        }
Esempio n. 5
0
        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);
        }
Esempio n. 6
0
 //  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);
         }
     }
 }
Esempio n. 7
0
        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");
        }
Esempio n. 8
0
        //  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);
                            }
                        }
                    }
                }
            }
        }
Esempio n. 9
0
        static string GetFilePath()
        {
            string postFix = MyMwcFinalBuildConstants.GetValueForBuildType("", "_TEST_BUILD", "_DEVELOP_BUILD");

            return(Path.Combine(MyFileSystemUtils.GetApplicationUserDataFolder(), "MinerWars" + postFix + ".cfg"));
        }
Esempio n. 10
0
        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);
                        }
                    }
                }
            }
        }
Esempio n. 11
0
        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);
            }
        }
Esempio n. 12
0
        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");
        }
Esempio n. 13
0
        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();
            }
        }
Esempio n. 14
0
        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();
            }
        }