Пример #1
0
    protected void Save(bool chooseName)
    {
        if (fileName == null)
        {
            chooseName = true;
        }

        if (level == null)
        {
            return;
        }

        if (chooseName)
        {
            fileChooser.Title  = "Select file to save Level";
            fileChooser.Action = Gtk.FileChooserAction.Save;
            fileChooser.SetCurrentFolder(Settings.Instance.LastDirectoryName);
            fileChooser.Filter = fileChooser.Filters[(level.isWorldmap)?2:1];
            int result = fileChooser.Run();
            fileChooser.Hide();
            if (result != (int)Gtk.ResponseType.Ok)
            {
                return;
            }
            Settings.Instance.LastDirectoryName = fileChooser.CurrentFolder;
            Settings.Instance.addToRecentDocuments(fileChooser.Filename);
            Settings.Instance.Save();
            UpdateRecentDocuments();
            fileName = fileChooser.Filename;
        }
        QACheck.ReplaceDeprecatedTiles(level);

        try {
            serializer.Write(fileName, level);
        } catch (Exception e) {
            ErrorDialog.Exception("Couldn't save level", e);
        }

        UndoManager.MarkAsSaved();
        UpdateTitlebar();
    }
Пример #2
0
    public void CustomLispWrite(Writer Writer)
    {
        if (SortObjectTags)
        {
            var attributes = new List <Tuple <Type, SupertuxObjectAttribute> >();

            foreach (Type type in GetType().Assembly.GetTypes())
            {
                var attr = (SupertuxObjectAttribute)Attribute.GetCustomAttribute(type, typeof(SupertuxObjectAttribute));
                if (attr != null)
                {
                    attributes.Add(Tuple.Create(type, attr));
                }
            }

            attributes.Sort((lhs, rhs) => lhs.Item2.Name.CompareTo(rhs.Item2.Name));

            foreach (var attr in attributes)
            {
                LispSerializer serializer = new LispSerializer(attr.Item1);
                foreach (var obj in GetObjects(attr.Item1))
                {
                    serializer.Write(Writer, attr.Item2.Name, obj);
                }
            }
        }
        else
        {
            foreach (object obj in GetObjects())
            {
                Type type = obj.GetType();

                SupertuxObjectAttribute objectAttribute = (SupertuxObjectAttribute)
                                                          Attribute.GetCustomAttribute(type, typeof(SupertuxObjectAttribute));
                if (objectAttribute == null)
                {
                    continue;
                }

                string         name       = objectAttribute.Name;
                LispSerializer serializer = new LispSerializer(type);
                serializer.Write(Writer, name, obj);
            }
        }
    }
Пример #3
0
    public static void ResaveLevel(string inFileName, string outFileName)
    {
        Console.WriteLine($"Datadir: {Settings.Instance.SupertuxData}");
        LispSerializer serializer = new LispSerializer(typeof(Level));

        Console.WriteLine($"loading {inFileName}");
        Level level = (Level)serializer.Read(inFileName);

        if (level.Version < 2)
        {
            throw new Exception("Couldn't load level: Old Level Format not supported\n" +
                                "Supertux-Editor does not support Supertux-0.1.x levels");
        }
        else
        {
            Console.WriteLine($"saving {outFileName}");
            serializer.Write(outFileName, level);
        }
    }
Пример #4
0
    public void CustomLispWrite(Writer Writer)
    {
        Type[] types = this.GetType().Assembly.GetTypes();
        Array.Sort(types, CompareTypeNames);
        foreach (Type type in types)
        {
            SupertuxObjectAttribute objectAttribute = (SupertuxObjectAttribute)
                                                      Attribute.GetCustomAttribute(type, typeof(SupertuxObjectAttribute));
            if (objectAttribute == null)
            {
                continue;
            }

            string         name       = objectAttribute.Name;
            LispSerializer serializer = new LispSerializer(type);
            foreach (object Object in GetObjects(type))
            {
                serializer.Write(Writer, name, Object);
            }
        }
    }