Beispiel #1
0
        public LevelProperties(Level level)
        {
            this.level = level;
            InitializeComponent();

            //Init textboxes
            sizeXTextBox.Text = level.Size.Width.ToString();
            sizeYTextBox.Text = level.Size.Height.ToString();
            minSizeLabel.Text = "Minimum Size: " + level.Project.LevelMinimumSize.Width + " x " + level.Project.LevelMinimumSize.Height;
            maxSizeLabel.Text = "Maximum Size: " + level.Project.LevelMaximumSize.Width + " x " + level.Project.LevelMaximumSize.Height;

            //Values
            int yy = 100;
            if (level.Values != null)
            {
                //Store the old values
                oldValues = new List<string>(level.Values.Count);
                foreach (var v in level.Values)
                    oldValues.Add(v.Content);

                //Create the editors
                ValueEditor ed;
                foreach (var v in level.Values)
                {
                    ed = v.Definition.GetInstanceLevelEditor(v, ClientSize.Width / 2 - 150, yy);
                    Controls.Add(ed);
                    yy += ed.Height;
                }
            }

            //Resize the form
            ClientSize = new Size(ClientSize.Width, yy + 52);
            applyButton.Location = new Point(applyButton.Location.X, ClientSize.Height - 40);
            cancelButton.Location = new Point(cancelButton.Location.X, ClientSize.Height - 40);
        }
        public LevelResizeAction(Level level, Size newSize)
            : base(level)
        {
            oldSize = level.Size;
            this.newSize = newSize;

            Resizer r;
            resizers = new List<Resizer>(level.Layers.Count);
            foreach (var l in Ogmo.MainWindow.LevelEditors[Ogmo.CurrentLevelIndex].LayerEditors)
            {
                r = l.GetResizer();
                if (r != null)
                    resizers.Add(r);
            }
        }
Beispiel #3
0
        public LevelEditor(Level level)
            : base()
        {
            Level = level;
            this.Size = level.Size;
            Dock = System.Windows.Forms.DockStyle.Fill;

            //Create the undo/redo stacks
            UndoStack = new LinkedList<OgmoAction>();
            RedoStack = new LinkedList<OgmoAction>();

            //Create the layer editors
            LayerEditors = new List<LayerEditor>();
            foreach (var l in level.Layers)
                LayerEditors.Add(l.GetEditor(this));
        }
Beispiel #4
0
 public void UnloadProject()
 {
     this.m_Project = null;
     this.m_Level = null;
     this.RecheckMenuEligibility();
 }
Beispiel #5
0
 public void SwitchLevel(Level level)
 {
     this.m_Level = level;
 }
Beispiel #6
0
 public Level(Level level)
     : this(level.Project, level.GenerateXML())
 {
 }
Beispiel #7
0
 public void CloneFrom(Level level)
 {
     LoadFromXML(level.GenerateXML());
 }
 public override LevelData.Layers.Layer GetInstance(Level level)
 {
     return new EntityLayer(level, this);
 }
Beispiel #9
0
 public virtual Layer GetInstance(Level level)
 {
     throw new NotImplementedException();
 }
Beispiel #10
0
        public static void OpenLevel()
        {
            //Get the file to load from the user
            OpenFileDialog dialog = new OpenFileDialog();
            dialog.Multiselect = true;
            dialog.Filter = Ogmo.LEVEL_FILTER;
            dialog.InitialDirectory = Ogmo.Project.SavedDirectory;
            if (dialog.ShowDialog() == DialogResult.Cancel)
                return;

            //If the only open level is an empty one, close it
            if (Ogmo.Levels.Count == 1 && Ogmo.Levels[0].IsEmpty)
                Ogmo.CloseLevel(Ogmo.Levels[0], false);

            //Get all the selected files, and alphabetize the list
            List<string> filenames = new List<string>(dialog.FileNames);
            filenames.Sort();

            //Load all the levels in the selected list, as long as they aren't already open
            foreach (string f in filenames)
            {
                int levelID = -1;
                for (int i = 0; i < Ogmo.Levels.Count; i++)
                {
                    if (Ogmo.Levels[i].SavePath == f)
                    {
                        levelID = i;
                        break;
                    }
                }

                if (levelID == -1)
                {
                    Level level = new Level(Project, f);
                    AddLevel(level);
                    SetLevel(Levels.Count - 1);
                }
                else
                    SetLevel(levelID);
            }

            //Set the status message
            string[] files = new string[dialog.FileNames.Length];
            for (int i = 0; i < dialog.FileNames.Length; i++)
                files[i] = Path.GetFileName(dialog.FileNames[i]);
            Ogmo.MainWindow.StatusText = "Opened level(s) " + String.Join(", ", files);
        }
Beispiel #11
0
 public static void CloseOtherLevels(Level level)
 {
     List<Level> temp = new List<Level>(Levels);
     foreach (Level lev in temp)
     {
         if (lev != level)
         {
             if (!CloseLevel(lev, true))
                 return;
         }
     }
 }
Beispiel #12
0
        public static bool CloseLevel(Level level, bool askToSave)
        {
            //If it's changed, ask to save it
            if (askToSave && level.Changed)
            {
                DialogResult result = MessageBox.Show(MainWindow, "Save changes to \"" + level.SaveName + "\" before closing it?", "Unsaved Changes!", MessageBoxButtons.YesNoCancel, MessageBoxIcon.Question);
                if (result == DialogResult.Cancel)
                    return false;
                else if (result == DialogResult.Yes)
                    return level.Save();
            }

            //Remove it
            int index = Levels.IndexOf(level);
            Levels.Remove(level);

            //Call the event
            if (OnLevelClosed != null)
                OnLevelClosed(index);

            //Set the current level to another one if that was the current one
            if (CurrentLevelIndex == index)
                SetLevel(Math.Min(index, Levels.Count - 1));
            else if (CurrentLevelIndex > index)
                CurrentLevelIndex--;

            //Force a garbage collection
            System.GC.Collect();

            //Set the status text
            Ogmo.MainWindow.StatusText = "Closed level " + level.SaveName;

            return true;
        }
Beispiel #13
0
        public static bool AddLevel(Level level)
        {
            //Can't if past level limit
            if (Ogmo.Levels.Count >= Properties.Settings.Default.LevelLimit)
            {
                MessageBox.Show(Ogmo.MainWindow, "Couldn't add level because the level limit was exceeded! You can change the level limit in the Preferences menu.", "Error!", MessageBoxButtons.OK, MessageBoxIcon.Error);
                return false;
            }

            //Add it
            Levels.Add(level);

            //Call the event
            if (OnLevelAdded != null)
                OnLevelAdded(Levels.Count - 1);

            return true;
        }
Beispiel #14
0
 public LevelAction(Level level)
 {
     Level = level;
 }