示例#1
0
        private void Save_Main(ProjectWriter writer)
        {
            const int Magic = 1234321;

            writer.Write(Magic);
            writer.Write(Version);
            Save_Header(writer);
            Save_Options(writer);
            Save_Triggers(writer);
            Save_Constants(writer);
            Save_Sounds(writer);
            Save_Sprites(writer);
            Save_Backgrounds(writer);
            Save_Paths(writer);
            Save_Scripts(writer);
            Save_Fonts(writer);
            Save_Timelines(writer);
            Save_Objects(writer);
            Save_Rooms(writer);
            Save_LastIDs(writer);
            Save_IncludedFiles(writer);
            Save_ExtensionPackages(writer);
            Save_GameInformation(writer);
            Save_LibCreationCode(writer);
            Save_RoomOrder(writer);
            Save_ResourceTree(writer);
        }
示例#2
0
        public static void Script(ProjectWriter writer, GMScript self, GMProject _)
        {
            writer.Write(self.Name);
            writer.Write(self.Version);

            writer.Write(self.Code);
        }
示例#3
0
 public void Save(ProjectWriter writer)
 {
     writer.Write(Name);
     writer.Write(LastChanged);
     writer.Write(Version);
     writer.Write(Code);
 }
示例#4
0
 public void Save(ProjectWriter writer)
 {
     writer.Write(Version);
     writer.Write(Name);
     writer.Write(Condition);
     writer.Write((int)Event);
     writer.Write(ConstName);
 }
示例#5
0
 public static void Trigger(ProjectWriter writer, GMTrigger self, GMProject _)
 {
     writer.Write(self.Version);
     writer.Write(self.Name);
     writer.Write(self.Condition);
     writer.Write((int)self.Event);
     writer.Write(self.ConstName);
 }
示例#6
0
 public static void WriteLibCC(ProjectWriter writer, List <string> list)
 {
     writer.Write(500);
     writer.Write(list.Count);
     foreach (string cc in list)
     {
         writer.Write(cc);
     }
 }
示例#7
0
 public static void WriteRoomExecOrder(ProjectWriter writer, List <GMRoom> list, GMProject proj)
 {
     writer.Write(700);
     writer.Write(list.Count);
     foreach (GMRoom rm in list)
     {
         writer.Write(proj.Rooms.IndexOf(rm));
     }
 }
示例#8
0
 public static void WriteConstants(ProjectWriter writer, List <GMConstant> list)
 {
     writer.Write(800);
     writer.Write(list.Count);
     foreach (GMConstant constant in list)
     {
         writer.Write(constant.Name);
         writer.Write(constant.Value);
     }
 }
示例#9
0
 private void Save_ExtensionPackages(ProjectWriter writer)
 {
     writer.Write(700);
     writer.Write(ExtensionPackageNames.Count);
     for (int i = 0; i < ExtensionPackageNames.Count; i++)
     {
         var s = ExtensionPackageNames[i];
         writer.Write(s);
     }
 }
示例#10
0
 private void Save_RoomOrder(ProjectWriter writer)
 {
     writer.Write(700);
     writer.Write(RoomExecutionOrder.Count);
     for (int i = 0; i < RoomExecutionOrder.Count; i++)
     {
         var r = RoomExecutionOrder[i];
         writer.Write(RoomExecutionOrder.IndexOf(r));
     }
 }
示例#11
0
 private void Save_LibCreationCode(ProjectWriter writer)
 {
     writer.Write(500);
     writer.Write(LibraryCreationCode.Count);
     for (int i = 0; i < LibraryCreationCode.Count; i++)
     {
         var l = LibraryCreationCode[i];
         writer.Write(l);
     }
 }
示例#12
0
        public int Key; // only used in GMObject.

        public void Save(ProjectWriter writer, GMProject proj)
        {
            writer.Write(Version);
            writer.Write(Actions.Count);
            for (int i = 0; i < Actions.Count; i++)
            {
                var action = Actions[i];
                action.Save(writer, proj);
            }
        }
示例#13
0
 private void Save_Constants(ProjectWriter writer)
 {
     writer.Write(800);
     writer.Write(Constants.Count);
     for (int i = 0; i < Constants.Count; i++)
     {
         var c = Constants[i];
         c.Save(writer);
     }
     writer.Write(ConstantsLastChanged);
 }
示例#14
0
        public static void Timeline(ProjectWriter writer, GMTimeline self, GMProject proj)
        {
            writer.Write(self.Name);
            writer.Write(self.Version);

            writer.Write(self.Moments.Count);
            foreach (var moment in self.Moments)
            {
                writer.Write(moment.Point);
                moment.Event.Save(writer, proj);
            }
        }
示例#15
0
 public void Save(ProjectWriter writer, GMProject proj)
 {
     writer.Write(Name);
     writer.Write(LastChanged);
     writer.Write(Version);
     writer.Write(Moments.Count);
     for (int i = 0; i < Moments.Count; i++)
     {
         var moment = Moments[i];
         moment.Save(writer, proj);
     }
 }
示例#16
0
        public string Text;      // it's an rtf string.

        public void Save(ProjectWriter writer)
        {
            writer.Write(BackgroundColor);
            writer.Write(SeparateWindow);
            writer.Write(Caption);
            writer.Write(Position);
            writer.Write(ShowBorder);
            writer.Write(AllowResize);
            writer.Write(AlwaysOnTop);
            writer.Write(Freeze);
            writer.Write(LastChanged);
            writer.Write(Text);
        }
示例#17
0
 public void Save(ProjectWriter writer, GMProject proj)
 {
     writer.Write(Position);
     if (Object != null)
     {
         writer.Write(proj.Objects.IndexOf(Object));
     }
     else
     {
         throw new System.Exception("Cannot write an instance with a non existing object!");
     }
     writer.Write(ID);
     writer.Write(CreationCode);
     writer.Write(IsLocked);
 }
示例#18
0
 public void Save(ProjectWriter writer)
 {
     writer.Write(Name);
     writer.Write(LastChanged);
     writer.Write(Version);
     writer.Write(FontName);
     writer.Write(Size);
     writer.Write(Bold);
     writer.Write(Italic);
     writer.Write(RangeMinInt);
     writer.Write(RangeMax);
 }
示例#19
0
        public void SaveGMBCK(ProjectWriter writer)
        {
            const int Magic = 1234321;

            writer.Write(Magic);

            var zlib_w = new ProjectWriter(new MemoryStream());

            zlib_w.Write(Version);

            zlib_w.Write(UseAsTileset);
            zlib_w.Write(TileWidth);
            zlib_w.Write(TileHeight);
            zlib_w.Write(OffsetH);
            zlib_w.Write(OffsetV);
            zlib_w.Write(SepH);
            zlib_w.Write(SepV);
            zlib_w.Write(FrameVersion);
            if (Background != null)
            {
                zlib_w.Write(Background.Size);
                zlib_w.Write(Background, true);
            }
            else
            {
                // w = 0, h = 0, no image.
                zlib_w.Write(0);
                zlib_w.Write(0);
            }

            writer.WriteZlibChunk(zlib_w);
        }
示例#20
0
        public void SaveGMSPR(ProjectWriter writer)
        {
            writer.Write(GMProject.GMMagic);

            var zlib_w = new ProjectWriter(new MemoryStream());

            zlib_w.Write(Version);
            zlib_w.Write(Origin);

            zlib_w.Write(Subimages.Count);
            for (int i = 0; i < Subimages.Count; i++)
            {
                var frame = Subimages[i];
                zlib_w.Write(800);
                zlib_w.Write(frame.Size);
                if (frame.Width * frame.Height != 0)
                {
                    zlib_w.Write(frame, true);
                }
            }

            zlib_w.Write((int)MaskMode);
            zlib_w.Write(AlphaTolerance);
            zlib_w.Write(SeparateMasks);
            zlib_w.Write((int)BBoxMode);
            zlib_w.Write(BBox);

            writer.WriteZlibChunk(zlib_w); // zlib_w gets disposed automatically wew.
        }
示例#21
0
        public void DeletedNonEmptyFolderIsNotProcessed()
        {
            var filesToDelete = new FileSystemInfo[]
            {
                new DirectoryInfo(@"TestFiles\Deletions\NonEmptyFolder2")
            };

            var actualDeletedFiles = new List <FileSystemInfo>();

            //Just simulate deletion so we can just check the list
            void Deletion(FileSystemInfo info) => actualDeletedFiles.Add(info);

            var writer = new ProjectWriter(Deletion, _ => { });

            writer.Write(
                new Project
            {
                FilePath  = new FileInfo(@"TestFiles\Deletions\Test4.csproj"),
                Deletions = filesToDelete.ToArray()
            },
                false
                );

            CollectionAssert.AreEqual(new FileSystemInfo[0], actualDeletedFiles);
        }
示例#22
0
        public void DeletedFolderIsProcessed()
        {
            //delete the dummy file we put in to make sure the folder was copied over
            File.Delete(@"TestFiles\Deletions\EmptyFolder\a.txt");

            var filesToDelete = new FileSystemInfo[]
            {
                new DirectoryInfo(@"TestFiles\Deletions\EmptyFolder")
            };

            var actualDeletedFiles = new List <FileSystemInfo>();

            //Just simulate deletion so we can just check the list
            void Deletion(FileSystemInfo info) => actualDeletedFiles.Add(info);

            var writer = new ProjectWriter(Deletion, _ => { });

            writer.Write(
                new Project
            {
                FilePath  = new FileInfo(@"TestFiles\Deletions\Test2.csproj"),
                Deletions = filesToDelete.ToArray()
            },
                false
                );

            CollectionAssert.AreEqual(filesToDelete, actualDeletedFiles);
        }
示例#23
0
        public void ValidatesFileIsWritableProgram()
        {
            var writer  = new ProjectWriter();
            var xmlNode = writer.CreateXml(new Project
            {
                AssemblyAttributes = new AssemblyAttributes(),
                FilePath           = new FileInfo("test.cs")
            });

            var copiedProjectFile = Path.Combine("TestFiles", "OtherTestProjects", $"{nameof(ValidatesFileIsWritableProgram)}.readonly");

            if (File.Exists(copiedProjectFile))
            {
                File.SetAttributes(copiedProjectFile, FileAttributes.Normal);
                File.Delete(copiedProjectFile);
            }

            File.Copy(Path.Combine("TestFiles", "OtherTestProjects", "readonly.testcsproj"), copiedProjectFile);
            File.SetAttributes(copiedProjectFile, FileAttributes.ReadOnly);
            var project = new ProjectReader().Read(copiedProjectFile);

            var messageNum = 0;
            var progress   = new Progress <string>(x =>
            {
                if (messageNum++ == 0)
                {
                    Assert.AreEqual(
                        $@"TestFiles\OtherTestProjects\{nameof(ValidatesFileIsWritableProgram)}.readonly is readonly, please make the file writable first (checkout from source control?).",
                        x);
                }
            });

            writer.Write(project, false);
        }
        public void DeletedFileIsProcessed()
        {
            var filesToDelete = new FileSystemInfo[]
            {
                new FileInfo(@"TestFiles\Deletions\a.txt")
            };

            var actualDeletedFiles = new List <FileSystemInfo>();

            //Just simulate deletion so we can just check the list
            void Deletion(FileSystemInfo info) => actualDeletedFiles.Add(info);

            var writer = new ProjectWriter(Deletion, _ => { });

            writer.Write(
                new Project
            {
                FilePath  = new FileInfo(@"TestFiles\Deletions\Test1.csproj"),
                Deletions = filesToDelete.ToArray()
            },
                false, new Progress <string>()
                );

            CollectionAssert.AreEqual(filesToDelete, actualDeletedFiles);
        }
        public void ValidatesFileIsWritable()
        {
            var writer  = new ProjectWriter();
            var xmlNode = writer.CreateXml(new Project
            {
                AssemblyAttributes = new AssemblyAttributes(),
                FilePath           = new System.IO.FileInfo("test.cs")
            });

            var copiedProjectFile = $"TestFiles\\OtherTestProjects\\{nameof(ValidatesFileIsWritable)}.readonly";

            File.Copy("TestFiles\\OtherTestProjects\\readonly.testcsproj", copiedProjectFile);
            File.SetAttributes(copiedProjectFile, FileAttributes.ReadOnly);
            var project = new ProjectReader().Read(copiedProjectFile);

            var messageNum = 0;
            var progress   = new Progress <string>(x =>
            {
                if (messageNum++ == 0)
                {
                    Assert.AreEqual(
                        $@"TestFiles\OtherTestProjects\{nameof(ValidatesFileIsWritable)}.readonly is readonly, please make the file writable first (checkout from source control?).",
                        x);
                }
            });

            writer.Write(project, false, progress);
        }
示例#26
0
        private void Save_NullItem(ProjectWriter writer)
        {
            var stream = new MemoryStream();
            var w      = new ProjectWriter(stream);

            w.Write(0);
            writer.WriteZlibChunk(w);
        }
示例#27
0
        private void Save_Options(ProjectWriter writer)
        {
            writer.Write(Options.FormatVersion);
            var z_writer = new ProjectWriter(new MemoryStream());

            Options.Write(z_writer);
            writer.WriteZlibChunk(z_writer);
        }
示例#28
0
        private void Save_GameInformation(ProjectWriter writer)
        {
            writer.Write(GameInformation.Version);
            var z_writer = new ProjectWriter(new MemoryStream());

            GameInformation.Save(z_writer);
            writer.WriteZlibChunk(z_writer);
        }
示例#29
0
        public static void WriteExtensions(ProjectWriter writer, List <string> list, string searchDir)
        {
            writer.Write(700);
            writer.Write(list.Count);
            foreach (string name in list)
            {
                // load the extensions here!!!
                string filePath = Path.Combine(searchDir, name + ".gex");
                // {searchDir}\Prikol.gex
                if (!File.Exists(filePath))
                {
                    Console.WriteLine($"Warning: Extension package {name} does not exist, it will not be written!");
                    continue;
                }

                // if the file does exist, write it!
                Extension.WriteGEX(writer, filePath);
            }
        }
示例#30
0
 public void Save(ProjectWriter writer, GMProject proj)
 {
     writer.Write(Visible);
     writer.Write(IsForeground);
     if (Background != null)
     {
         writer.Write(proj.Backgrounds.IndexOf(Background));
     }
     else
     {
         writer.Write(-1);
     }
     writer.Write(Position);
     writer.Write(TileHorizontal);
     writer.Write(TileVertical);
     writer.Write(SpeedHorizontal);
     writer.Write(SpeedVertical);
     writer.Write(Stretch);
 }