예제 #1
0
 public static void EditStage(StageDocument stage)
 {
     var form = new StageProp();
     form.project = stage.Project;
     form.LoadStage(stage);
     form.Show();
 }
예제 #2
0
        /* *
         * SetStage - Decide the stage object that will be edited
         * */
        private void SetStage(StageDocument stage)
        {
            this.stage = stage;

            SetText();
            this.stage.DirtyChanged += (b) => SetText();

            stage.JoinChanged += (join) =>
            {
                AlignScreenSurfaces();
                if (surfaces.ContainsKey(join.screenOne))
                {
                    surfaces[join.screenOne].RedrawJoins();
                }
                if (surfaces.ContainsKey(join.screenTwo))
                {
                    surfaces[join.screenTwo].RedrawJoins();
                }
            };

            foreach (var screen in stage.Screens)
            {
                var surface = CreateScreenSurface(screen);
                surface.Location = new Point(0, 0);
            }

            AlignScreenSurfaces();
            stage.ScreenAdded += (s) =>
            {
                CreateScreenSurface(s);
                AlignScreenSurfaces();
            };
        }
예제 #3
0
 // this constructor implies a new screen
 private ScreenProp(StageDocument stage)
 {
     InitializeComponent();
     is_new        = true;
     textName.Text = "";
     this.stage    = stage;
 }
예제 #4
0
 // this constructor implies a new screen
 private ScreenProp(StageDocument stage)
 {
     InitializeComponent();
     is_new = true;
     textName.Text = "";
     this.stage = stage;
 }
예제 #5
0
 public StageDocument StageByName(string name)
 {
     if (openStages.ContainsKey(name))
     {
         return(openStages[name]);
     }
     foreach (var info in Project.Stages)
     {
         if (info.Name == name)
         {
             try
             {
                 StageDocument stage = new StageDocument(this, BaseDir, info.StagePath.Absolute);
                 openStages.Add(name, stage);
                 return(stage);
             }
             catch (IOException ex)
             {
                 MessageBox.Show("A required file or directory for the stage was not found:\n\n" + ex.Message, "CME Level Editor", MessageBoxButtons.OK, MessageBoxIcon.Error);
                 return(null);
             }
         }
     }
     return(null);
 }
예제 #6
0
        public override void DoubleClick()
        {
            if (Stage == null)
            {
                Stage = Project.StageByName(stageName);
                if (Stage == null)
                {
                    return;
                }

                parentNode.Nodes.Clear();
                foreach (var screen in Stage.Screens)
                {
                    var node = new TreeNode(screen.Name);
                    node.ImageIndex = node.SelectedImageIndex = 3;
                    node.Tag        = new ScreenNodeHandler(Project, node, screen);
                    parentNode.Nodes.Add(node);
                }

                Stage.ScreenAdded += screen =>
                {
                    var node = new TreeNode(screen.Name);
                    node.ImageIndex = node.SelectedImageIndex = 3;
                    node.Tag        = new ScreenNodeHandler(Project, node, screen);
                    parentNode.Nodes.Add(node);
                };
            }

            Stage.ReFocus();
        }
예제 #7
0
        public static void EditStage(StageDocument stage)
        {
            var form = new StageProp();

            form.project = stage.Project;
            form.LoadStage(stage);
            form.Show();
        }
예제 #8
0
        // this implies editing a screen
        private ScreenProp(ScreenDocument screen)
        {
            InitializeComponent();

            this.screen = screen;
            stage = screen.Stage;

            textName.Text = screen.Name;
            widthField.Value = screen.Width;
            heightField.Value = screen.Height;
        }
예제 #9
0
        // this implies editing a screen
        private ScreenProp(ScreenDocument screen)
        {
            InitializeComponent();

            this.screen = screen;
            stage       = screen.Stage;

            textName.Text     = screen.Name;
            widthField.Value  = screen.Width;
            heightField.Value = screen.Height;
        }
예제 #10
0
        public void FocusScreen(StageDocument stage)
        {
            if (stage != activeStage)
            {
                ActiveStage = stage;
                ChangeTileset(stage.Tileset);
                brushForm.ChangeTileset(stage.Tileset);

                if (stage.Project != activeProject)
                {
                    activeProject = stage.Project;
                    entityForm.LoadEntities(stage.Project);
                }
            }
        }
예제 #11
0
 private void LoadStage(StageDocument stage)
 {
     this.stage        = stage;
     this.Text         = stage.Name + " Properties";
     nameField.Text    = stage.Name;
     tilesetField.Text = stage.Tileset.FilePath;
     if (stage.MusicIntro != null)
     {
         introField.Text = stage.MusicIntro.Absolute;
     }
     if (stage.MusicLoop != null)
     {
         loopField.Text = stage.MusicLoop.Absolute;
     }
 }
예제 #12
0
        public StageForm(StageDocument stage)
        {
            InitializeComponent();

            joinOverlay = new JoinOverlay();
            joinOverlay.Owner = this;

            this.SetBackgroundGrid();

            history = new History();
            surfaces = new Dictionary<String, ScreenDrawingSurface>();
            surfaceLocations = new Dictionary<string, Point>();

            SetStage(stage);

            MainForm.Instance.DrawOptionToggled += () => { joinOverlay.Visible = MainForm.Instance.DrawJoins; };
        }
예제 #13
0
        public StageForm(StageDocument stage)
        {
            InitializeComponent();

            joinOverlay       = new JoinOverlay();
            joinOverlay.Owner = this;

            this.SetBackgroundGrid();

            history          = new History();
            surfaces         = new Dictionary <String, ScreenDrawingSurface>();
            surfaceLocations = new Dictionary <string, Point>();

            SetStage(stage);

            MainForm.Instance.DrawOptionToggled += () => { joinOverlay.Visible = MainForm.Instance.DrawJoins; };
        }
예제 #14
0
        public StageDocument AddStage(string name, string tilesetPath)
        {
            string stageDir = Path.Combine(BaseDir, "stages");

            if (!Directory.Exists(stageDir))
            {
                Directory.CreateDirectory(stageDir);
            }
            string stagePath = Path.Combine(stageDir, name);

            if (!Directory.Exists(stagePath))
            {
                Directory.CreateDirectory(stagePath);
            }

            var stage = new StageDocument(this)
            {
                Path = FilePath.FromAbsolute(stagePath, this.BaseDir),
                Name = name
            };

            stage.ChangeTileset(tilesetPath);

            stage.Save();

            openStages.Add(name, stage);

            var info = new StageLinkInfo {
                Name = name, StagePath = FilePath.FromAbsolute(stagePath, BaseDir)
            };

            Project.AddStage(info);

            Save(); // need to save the reference to the new stage

            if (StageAdded != null)
            {
                StageAdded(stage);
            }

            return(stage);
        }
예제 #15
0
        private bool Save()
        {
            if (stage == null) // new
            {
                try
                {
                    stage = project.AddStage(nameField.Text, tilesetField.Text);
                }
                catch (Exception)
                {
                    MessageBox.Show("There was an error creating the stage.\nPerhaps your tileset path is incorrect?", "CME Level Editor", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                    return(false);
                }
            }
            else
            {
                stage.Name = nameField.Text;
                try
                {
                    stage.ChangeTileset(tilesetField.Text);
                }
                catch
                {
                    MessageBox.Show("The tileset specified could not be loaded. Sorry.", "CME Project Editor", MessageBoxButtons.OK, MessageBoxIcon.Error);
                    return(false);
                }
            }
            if (introField.Text != "")
            {
                stage.MusicIntro = FilePath.FromAbsolute(introField.Text, stage.Path.BasePath);
            }
            if (loopField.Text != "")
            {
                stage.MusicLoop = FilePath.FromAbsolute(loopField.Text, stage.Path.BasePath);
            }

            return(true);
        }
예제 #16
0
 public ScreenDocument(ScreenInfo screen, StageDocument stage)
 {
     Stage       = stage;
     this.screen = screen;
 }
예제 #17
0
 private void LoadStage(StageDocument stage)
 {
     this.stage = stage;
     this.Text = stage.Name + " Properties";
     nameField.Text = stage.Name;
     tilesetField.Text = stage.Tileset.FilePath.Absolute;
     if (stage.MusicIntro != null) introField.Text = stage.MusicIntro.Absolute;
     if (stage.MusicLoop != null) loopField.Text = stage.MusicLoop.Absolute;
 }
예제 #18
0
 public StageDocument StageByName(string name)
 {
     if (openStages.ContainsKey(name)) return openStages[name];
     foreach (var info in Project.Stages)
     {
         if (info.Name == name)
         {
             try
             {
                 StageDocument stage = new StageDocument(this, BaseDir, info.StagePath.Absolute);
                 openStages.Add(name, stage);
                 return stage;
             }
             catch (IOException ex)
             {
                 MessageBox.Show("A required file or directory for the stage was not found:\n\n" + ex.Message, "CME Level Editor", MessageBoxButtons.OK, MessageBoxIcon.Error);
                 return null;
             }
         }
     }
     return null;
 }
예제 #19
0
        public StageDocument AddStage(string name, string tilesetPath)
        {
            string stageDir = Path.Combine(BaseDir, "stages");
            if (!Directory.Exists(stageDir))
            {
                Directory.CreateDirectory(stageDir);
            }
            string stagePath = Path.Combine(stageDir, name);
            if (!Directory.Exists(stagePath))
            {
                Directory.CreateDirectory(stagePath);
            }

            var stage = new StageDocument(this)
            {
                Path = FilePath.FromAbsolute(stagePath, this.BaseDir),
                Name = name
            };
            stage.ChangeTileset(tilesetPath);

            stage.Save();

            openStages.Add(name, stage);

            var info = new StageInfo {Name = name, StagePath = FilePath.FromAbsolute(stagePath, BaseDir)};
            Project.AddStage(info);

            Save(); // need to save the reference to the new stage

            if (StageAdded != null) StageAdded(stage);

            return stage;
        }
예제 #20
0
 public ScreenDocument(ScreenInfo screen, StageDocument stage)
 {
     Stage = stage;
     this.screen = screen;
 }
예제 #21
0
 public StageNodeHandler(ProjectEditor project, TreeNode node, StageDocument stage) : base(project, node)
 {
     Stage     = stage;
     stageName = stage.Name;
 }
예제 #22
0
 public static void CreateScreen(StageDocument stage)
 {
     new ScreenProp(stage).Show();
 }
예제 #23
0
 public static void CreateScreen(StageDocument stage)
 {
     new ScreenProp(stage).Show();
 }
 public StageNodeHandler(ProjectEditor project, TreeNode node, StageDocument stage)
     : base(project, node)
 {
     Stage = stage;
     stageName = stage.Name;
 }
예제 #25
0
        public void FocusScreen(StageDocument stage)
        {
            if (stage != activeStage)
            {
                ActiveStage = stage;
                ChangeTileset(stage.Tileset);
                brushForm.ChangeTileset(stage.Tileset);

                if (stage.Project != activeProject)
                {
                    activeProject = stage.Project;
                    entityForm.LoadEntities(stage.Project);
                }
            }
        }
        public override void DoubleClick()
        {
            if (Stage == null)
            {
                Stage = Project.StageByName(stageName);
                if (Stage == null) return;

                parentNode.Nodes.Clear();
                foreach (var screen in Stage.Screens)
                {
                    var node = new TreeNode(screen.Name);
                    node.ImageIndex = node.SelectedImageIndex = 3;
                    node.Tag = new ScreenNodeHandler(Project, node, screen);
                    parentNode.Nodes.Add(node);
                }

                Stage.ScreenAdded += screen =>
                {
                    var node = new TreeNode(screen.Name);
                    node.ImageIndex = node.SelectedImageIndex = 3;
                    node.Tag = new ScreenNodeHandler(Project, node, screen);
                    parentNode.Nodes.Add(node);
                };
            }

            Stage.ReFocus();
        }
예제 #27
0
        /* *
         * SetStage - Decide the stage object that will be edited
         * */
        private void SetStage(StageDocument stage)
        {
            this.stage = stage;

            SetText();
            this.stage.DirtyChanged += (b) => SetText();

            stage.JoinChanged += (join) =>
            {
                AlignScreenSurfaces();
                if (surfaces.ContainsKey(join.screenOne)) surfaces[join.screenOne].RedrawJoins();
                if (surfaces.ContainsKey(join.screenTwo)) surfaces[join.screenTwo].RedrawJoins();
            };

            foreach (var screen in stage.Screens)
            {
                var surface = CreateScreenSurface(screen);
                surface.Location = new Point(0, 0);
            }

            AlignScreenSurfaces();
            stage.ScreenAdded += (s) =>
            {
                CreateScreenSurface(s);
                AlignScreenSurfaces();
            };
        }
예제 #28
0
 public StageNodeHandler(ProjectEditor project, TreeNode node, string stageName) : base(project, node)
 {
     Stage          = null;
     this.stageName = stageName;
 }
예제 #29
0
        private void closeToolStripMenuItem_Click(object sender, EventArgs e)
        {
            if (ActiveProject == null) return;

            if (ActiveProject.Close())
            {
                projectForm.CloseProject();
                tilestrip.ChangeTileset(null);
                entityForm.Unload();
                brushForm.Clear();
                ActiveProject = null;
                ActiveStage = null;
            }
        }
예제 #30
0
        private bool Save()
        {
            if (stage == null) // new
            {
                try
                {
                    stage = project.AddStage(nameField.Text, tilesetField.Text);
                }
                catch (Exception)
                {
                    MessageBox.Show("There was an error creating the stage.\nPerhaps your tileset path is incorrect?", "CME Level Editor", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                    return false;
                }
            }
            else
            {
                stage.Name = nameField.Text;
                try
                {
                    stage.ChangeTileset(tilesetField.Text);
                }
                catch
                {
                    MessageBox.Show("The tileset specified could not be loaded. Sorry.", "CME Project Editor", MessageBoxButtons.OK, MessageBoxIcon.Error);
                    return false;
                }
            }
            if (introField.Text != "") stage.MusicIntro = FilePath.FromAbsolute(introField.Text, stage.Path.BasePath);
            if (loopField.Text != "") stage.MusicLoop = FilePath.FromAbsolute(loopField.Text, stage.Path.BasePath);

            return true;
        }