using System; using System.Drawing; using System.Collections; using System.ComponentModel; using System.Windows.Forms; using System.Data; using System.IO; namespace LevelEditor { /// /// Summary description for Form1. /// public class Form1 : System.Windows.Forms.Form { #region Designer Generated Declarations private System.Windows.Forms.Panel panelWorkSpace; private System.Windows.Forms.StatusBar statusBar1; private System.Windows.Forms.MainMenu mainMenu1; private System.Windows.Forms.MenuItem menuItem1; private System.Windows.Forms.PictureBox pictureBox1; private System.Windows.Forms.OpenFileDialog openFileDialog1; private System.Windows.Forms.StatusBarPanel statusBarPanel1; private System.Windows.Forms.StatusBarPanel statusBarPanel2; private System.Windows.Forms.SaveFileDialog saveFileDialog1; private System.Windows.Forms.MenuItem menuItem7; private System.Windows.Forms.MenuItem menuItemAddStage; private System.Windows.Forms.MenuItem menuItem9; private System.Windows.Forms.MenuItem menuItemRemoveStage; private System.Windows.Forms.MenuItem menuItemOpen; private System.Windows.Forms.MenuItem menuItemExit; private System.Windows.Forms.MenuItem menuItemSaveAs; private System.Windows.Forms.ListBox lbWorldObjects; private System.Windows.Forms.ListBox lbCollisionBoxes; private System.Windows.Forms.ListBox lbStages; private System.Windows.Forms.ListBox lbShapes; private System.Windows.Forms.GroupBox groupBox1; private System.Windows.Forms.GroupBox groupBox2; private System.Windows.Forms.GroupBox groupBox3; private System.Windows.Forms.GroupBox groupBox4; private System.Windows.Forms.GroupBox groupBox5; private System.Windows.Forms.GroupBox groupBox6; private System.Windows.Forms.Label label1; private System.Windows.Forms.Label label2; private System.Windows.Forms.Label label3; private System.Windows.Forms.GroupBox groupBox7; private System.Windows.Forms.Button buttonAddStage; private System.Windows.Forms.Button buttonDeleteStage; private System.Windows.Forms.Button buttonEditImage; private System.Windows.Forms.Button buttonSave; private System.Windows.Forms.Button buttonSelectMode; /// /// Required designer variable. /// private System.ComponentModel.Container components = null; #endregion #region Declarations private int iGridSize = 10; private int iCurrMode = 0; private bool bDraggingRect = false; private bool bShowGrid = true; private enum enumMode {None, Select, NewCollisionBox, NewWorldObject ,Resize, MovingWO, MovingCB}; private enum enumCollisionBoxStrings {CollisionBox, CB_Floor, CB_Wall, CB_Floor_NegSlope, CB_Floor_PosSlope, CB_Ceiling_NegSlope, CB_Ceiling_PosSlope, Transition, Transition100}; private string[] strCollisionBoxes = {"Collision Box", "CB_Floor", "CB_Wall", "CB_Floor_NegSlope", "CB_Floor_PosSlope", "CB_Ceiling_NegSlope", "CB_Ceiling_PosSlope", "Transition", "Transition100"}; private enum enumShapes {Rectangle, Rect_Floor, Rect_Wall, Tri_Floor_NegSlope, Tri_Floor_PosSlope, Tri_Ceiling_NegSlope, Tri_Ceiling_PosSlope}; private string[] strShapes = {"Rectangle", "Rect_Floor", "Rect_Wall", "Tri_Floor_NegSlope", "Tri_Floor_PosSlope", "Tri_Ceiling_NegSlope", "Tri_Ceiling_PosSlope"}; private enum enumWorldObjStrings {Merc, MovingPlatform, MovingPlatformHor, MovingPlatformVer, Tux, Geek, GNU_Robot, Zoom}; private string[] strWorldObjs = {"Merc", "MovingPlatform", "MovingPlatformHor", "MovingPlatformVer", "Tux", "Geek", "GNU Robot", "Zoom"}; private int iResizingState = 0; private Rectangle rectCurr = new Rectangle(); private Rectangle rectTemp = new Rectangle(); private Icarus.Logic.WorldObject woCurr = null; private Icarus.Logic.Level level = null; private string strLevelPath = null; private Point pntCurr = new Point(); private Point pntPrev = new Point(); private Icarus.Logic.Physics.CollisionBox cbCurr = null; private enum enumDirection{None, Up, Down, Left, Right}; private int iResizeBoxSize = 10; private Rectangle rectResizeTop = new Rectangle(); private Rectangle rectResizeBottom = new Rectangle(); private Rectangle rectResizeLeft = new Rectangle(); private Rectangle rectResizeRight = new Rectangle(); //Pens private Pen penGrid = new Pen(System.Drawing.Color.Gray); private Pen penSelected = new Pen(System.Drawing.Color.Red); private Pen penUnselected = new Pen(System.Drawing.Color.LightGreen); private Pen penWorldObj = new Pen(System.Drawing.Color.Pink); private Pen penInternal = new Pen(System.Drawing.Color.White); private Pen penWorldObjChild = new Pen(System.Drawing.Color.LightPink); private System.Windows.Forms.Button buttonDeleteSelected; private System.Windows.Forms.Button buttonToggleGrid; private System.Windows.Forms.MenuItem menuItemToggleGrid; private System.Windows.Forms.GroupBox groupBoxTransitionEditor; private System.Windows.Forms.TextBox textBoxTransitionY; private System.Windows.Forms.TextBox textBoxTransitionNext; private System.Windows.Forms.TextBox textBoxTransitionX; private System.Windows.Forms.Label label4; private System.Windows.Forms.Label label5; private System.Windows.Forms.Label label6; private System.Windows.Forms.Label label7; private System.Windows.Forms.Button buttonTransitionSet; private System.Windows.Forms.Label label8; private System.Windows.Forms.Label label9; private System.Windows.Forms.Label label10; private System.Windows.Forms.TextBox textBoxXviewcenter; private System.Windows.Forms.GroupBox groupBoxZoomFactor; private System.Windows.Forms.Label label11; private System.Windows.Forms.TextBox textBoxZoomFactor; private System.Windows.Forms.TextBox textBoxYveiwcenter; #endregion #region Construction public Form1() { // // Required for Windows Form Designer support // InitializeComponent(); //Set stages string array to size of max stages strShapes = new string[Icarus.Logic.GameEngine.GameSettings.Instance.sv_maxStages]; //Setup Collision object listbox for(int i = 0; i < strCollisionBoxes.Length; i++) { if(strCollisionBoxes[i] == null) break; lbCollisionBoxes.Items.Add(strCollisionBoxes[i]); } //Setup the world object listbox for(int i = 0; i < strWorldObjs.Length; i++) { if(strWorldObjs[i] == null) break; lbWorldObjects.Items.Add(strWorldObjs[i]); } //Setup the shape listbox for(int i = 0; i < strShapes.Length; i++) { if(strShapes[i] == null) break; lbShapes.Items.Add(strShapes[i]); } Icarus.Graphics.Animation.AnimationFactory.setInstance(new Icarus.Graphics.Animation.GDI.GDIAnimationFactory()); //Check to see if the config exists Icarus.Resources.ConfigParser cp = null; //Set level content path try { cp = new Icarus.Resources.ConfigParser("config.icfg"); } catch (Exception) { //Too bad... Crash } Icarus.Resources.ResourceManager.Instance.BasePath = cp["Load_Asset_Path"]; level = new Icarus.Logic.Level(); //level.Stages[0] = new Icarus.Logic.Stage(); rectResizeTop.Width = rectResizeBottom.Width = rectResizeLeft.Width = rectResizeRight.Width = iResizeBoxSize; rectResizeTop.Height = rectResizeBottom.Height = rectResizeLeft.Height = rectResizeRight.Height = iResizeBoxSize; // Do a silly useless thing so the smart compiler does not discard our reference to tuxhunter: bool discard = TuxHunter.TuxHunterSettings.Instance.ShowSnappy; } #endregion #region Disposal /// /// Clean up any resources being used. /// protected override void Dispose( bool disposing ) { if( disposing ) { if (components != null) { components.Dispose(); } } base.Dispose( disposing ); } #endregion #region Windows Form Designer generated code /// /// Required method for Designer support - do not modify /// the contents of this method with the code editor. /// private void InitializeComponent() { System.Configuration.AppSettingsReader configurationAppSettings = new System.Configuration.AppSettingsReader(); this.panelWorkSpace = new System.Windows.Forms.Panel(); this.pictureBox1 = new System.Windows.Forms.PictureBox(); this.statusBar1 = new System.Windows.Forms.StatusBar(); this.statusBarPanel1 = new System.Windows.Forms.StatusBarPanel(); this.statusBarPanel2 = new System.Windows.Forms.StatusBarPanel(); this.mainMenu1 = new System.Windows.Forms.MainMenu(); this.menuItem1 = new System.Windows.Forms.MenuItem(); this.menuItemOpen = new System.Windows.Forms.MenuItem(); this.menuItemSaveAs = new System.Windows.Forms.MenuItem(); this.menuItemExit = new System.Windows.Forms.MenuItem(); this.menuItem7 = new System.Windows.Forms.MenuItem(); this.menuItemAddStage = new System.Windows.Forms.MenuItem(); this.menuItemRemoveStage = new System.Windows.Forms.MenuItem(); this.menuItem9 = new System.Windows.Forms.MenuItem(); this.menuItemToggleGrid = new System.Windows.Forms.MenuItem(); this.openFileDialog1 = new System.Windows.Forms.OpenFileDialog(); this.saveFileDialog1 = new System.Windows.Forms.SaveFileDialog(); this.lbWorldObjects = new System.Windows.Forms.ListBox(); this.lbCollisionBoxes = new System.Windows.Forms.ListBox(); this.lbStages = new System.Windows.Forms.ListBox(); this.lbShapes = new System.Windows.Forms.ListBox(); this.groupBox1 = new System.Windows.Forms.GroupBox(); this.groupBox2 = new System.Windows.Forms.GroupBox(); this.groupBox3 = new System.Windows.Forms.GroupBox(); this.groupBox4 = new System.Windows.Forms.GroupBox(); this.label1 = new System.Windows.Forms.Label(); this.label2 = new System.Windows.Forms.Label(); this.groupBox5 = new System.Windows.Forms.GroupBox(); this.groupBox6 = new System.Windows.Forms.GroupBox(); this.label3 = new System.Windows.Forms.Label(); this.groupBox7 = new System.Windows.Forms.GroupBox(); this.buttonDeleteStage = new System.Windows.Forms.Button(); this.buttonAddStage = new System.Windows.Forms.Button(); this.buttonEditImage = new System.Windows.Forms.Button(); this.buttonSave = new System.Windows.Forms.Button(); this.buttonSelectMode = new System.Windows.Forms.Button(); this.buttonDeleteSelected = new System.Windows.Forms.Button(); this.buttonToggleGrid = new System.Windows.Forms.Button(); this.groupBoxTransitionEditor = new System.Windows.Forms.GroupBox(); this.textBoxYveiwcenter = new System.Windows.Forms.TextBox(); this.textBoxXviewcenter = new System.Windows.Forms.TextBox(); this.label9 = new System.Windows.Forms.Label(); this.label10 = new System.Windows.Forms.Label(); this.label8 = new System.Windows.Forms.Label(); this.buttonTransitionSet = new System.Windows.Forms.Button(); this.label7 = new System.Windows.Forms.Label(); this.label6 = new System.Windows.Forms.Label(); this.label5 = new System.Windows.Forms.Label(); this.label4 = new System.Windows.Forms.Label(); this.textBoxTransitionX = new System.Windows.Forms.TextBox(); this.textBoxTransitionNext = new System.Windows.Forms.TextBox(); this.textBoxTransitionY = new System.Windows.Forms.TextBox(); this.groupBoxZoomFactor = new System.Windows.Forms.GroupBox(); this.label11 = new System.Windows.Forms.Label(); this.textBoxZoomFactor = new System.Windows.Forms.TextBox(); this.panelWorkSpace.SuspendLayout(); ((System.ComponentModel.ISupportInitialize)(this.statusBarPanel1)).BeginInit(); ((System.ComponentModel.ISupportInitialize)(this.statusBarPanel2)).BeginInit(); this.groupBox4.SuspendLayout(); this.groupBox6.SuspendLayout(); this.groupBox7.SuspendLayout(); this.groupBoxTransitionEditor.SuspendLayout(); this.groupBoxZoomFactor.SuspendLayout(); this.SuspendLayout(); // // panelWorkSpace // this.panelWorkSpace.AutoScroll = ((bool)(configurationAppSettings.GetValue("panelWorkSpace.AutoScroll", typeof(bool)))); this.panelWorkSpace.BackColor = System.Drawing.SystemColors.ControlDark; this.panelWorkSpace.BorderStyle = System.Windows.Forms.BorderStyle.Fixed3D; this.panelWorkSpace.Controls.Add(this.pictureBox1); this.panelWorkSpace.Location = new System.Drawing.Point(280, 8); this.panelWorkSpace.Name = "panelWorkSpace"; this.panelWorkSpace.Size = new System.Drawing.Size(504, 512); this.panelWorkSpace.TabIndex = 0; // // pictureBox1 // this.pictureBox1.Location = new System.Drawing.Point(0, 0); this.pictureBox1.Name = "pictureBox1"; this.pictureBox1.Size = new System.Drawing.Size(16, 16); this.pictureBox1.TabIndex = 0; this.pictureBox1.TabStop = false; this.pictureBox1.Paint += new System.Windows.Forms.PaintEventHandler(this.pictureBox1_Paint); this.pictureBox1.MouseUp += new System.Windows.Forms.MouseEventHandler(this.pictureBox1_MouseUp); this.pictureBox1.MouseMove += new System.Windows.Forms.MouseEventHandler(this.pictureBox1_MouseMove); this.pictureBox1.MouseDown += new System.Windows.Forms.MouseEventHandler(this.pictureBox1_MouseDown); // // statusBar1 // this.statusBar1.Location = new System.Drawing.Point(0, 763); this.statusBar1.Name = "statusBar1"; this.statusBar1.Panels.AddRange(new System.Windows.Forms.StatusBarPanel[] { this.statusBarPanel1, this.statusBarPanel2}); this.statusBar1.ShowPanels = true; this.statusBar1.Size = new System.Drawing.Size(1256, 22); this.statusBar1.TabIndex = 1; this.statusBar1.Text = "statusBar1"; // // statusBarPanel1 // this.statusBarPanel1.Text = "Status"; this.statusBarPanel1.Width = 400; // // statusBarPanel2 // this.statusBarPanel2.Alignment = System.Windows.Forms.HorizontalAlignment.Right; this.statusBarPanel2.AutoSize = System.Windows.Forms.StatusBarPanelAutoSize.Spring; this.statusBarPanel2.Width = 840; // // mainMenu1 // this.mainMenu1.MenuItems.AddRange(new System.Windows.Forms.MenuItem[] { this.menuItem1, this.menuItem7, this.menuItem9}); // // menuItem1 // this.menuItem1.Index = 0; this.menuItem1.MenuItems.AddRange(new System.Windows.Forms.MenuItem[] { this.menuItemOpen, this.menuItemSaveAs, this.menuItemExit}); this.menuItem1.Text = "File"; // // menuItemOpen // this.menuItemOpen.Index = 0; this.menuItemOpen.Text = "Open"; this.menuItemOpen.Click += new System.EventHandler(this.menuItemOpen_Click); // // menuItemSaveAs // this.menuItemSaveAs.Index = 1; this.menuItemSaveAs.Text = "Save as"; this.menuItemSaveAs.Click += new System.EventHandler(this.menuItemSaveAs_Click); // // menuItemExit // this.menuItemExit.Index = 2; this.menuItemExit.Text = "Exit"; this.menuItemExit.Click += new System.EventHandler(this.menuItemExit_Click); // // menuItem7 // this.menuItem7.Index = 1; this.menuItem7.MenuItems.AddRange(new System.Windows.Forms.MenuItem[] { this.menuItemAddStage, this.menuItemRemoveStage}); this.menuItem7.Text = "Edit"; // // menuItemAddStage // this.menuItemAddStage.Index = 0; this.menuItemAddStage.Text = "Add Stage"; this.menuItemAddStage.Click += new System.EventHandler(this.menuItemAddStage_Click); // // menuItemRemoveStage // this.menuItemRemoveStage.Index = 1; this.menuItemRemoveStage.Text = "Remove Stage"; this.menuItemRemoveStage.Click += new System.EventHandler(this.menuItemRemoveStage_Click); // // menuItem9 // this.menuItem9.Index = 2; this.menuItem9.MenuItems.AddRange(new System.Windows.Forms.MenuItem[] { this.menuItemToggleGrid}); this.menuItem9.Text = "Options"; // // menuItemToggleGrid // this.menuItemToggleGrid.Index = 0; this.menuItemToggleGrid.Text = "Toggle Grid"; this.menuItemToggleGrid.Click += new System.EventHandler(this.menuItemToggleGrid_Click); // // lbWorldObjects // this.lbWorldObjects.Location = new System.Drawing.Point(8, 32); this.lbWorldObjects.Name = "lbWorldObjects"; this.lbWorldObjects.Size = new System.Drawing.Size(120, 43); this.lbWorldObjects.TabIndex = 2; this.lbWorldObjects.SelectedIndexChanged += new System.EventHandler(this.lbWorldObjects_SelectedIndexChanged); // // lbCollisionBoxes // this.lbCollisionBoxes.Location = new System.Drawing.Point(8, 32); this.lbCollisionBoxes.Name = "lbCollisionBoxes"; this.lbCollisionBoxes.Size = new System.Drawing.Size(120, 56); this.lbCollisionBoxes.TabIndex = 3; this.lbCollisionBoxes.TabIndexChanged += new System.EventHandler(this.lbCollisionBoxes_TabIndexChanged); this.lbCollisionBoxes.SelectedIndexChanged += new System.EventHandler(this.lbCollisionBoxes_SelectedIndexChanged); // // lbStages // this.lbStages.Location = new System.Drawing.Point(8, 16); this.lbStages.Name = "lbStages"; this.lbStages.Size = new System.Drawing.Size(168, 69); this.lbStages.TabIndex = 5; this.lbStages.SelectedIndexChanged += new System.EventHandler(this.lbStages_SelectedIndexChanged); // // lbShapes // this.lbShapes.Location = new System.Drawing.Point(136, 32); this.lbShapes.Name = "lbShapes"; this.lbShapes.Size = new System.Drawing.Size(120, 56); this.lbShapes.TabIndex = 6; // // groupBox1 // this.groupBox1.Location = new System.Drawing.Point(8, 344); this.groupBox1.Name = "groupBox1"; this.groupBox1.Size = new System.Drawing.Size(264, 40); this.groupBox1.TabIndex = 7; this.groupBox1.TabStop = false; this.groupBox1.Text = "Level Properties"; // // groupBox2 // this.groupBox2.Location = new System.Drawing.Point(8, 392); this.groupBox2.Name = "groupBox2"; this.groupBox2.Size = new System.Drawing.Size(264, 40); this.groupBox2.TabIndex = 8; this.groupBox2.TabStop = false; this.groupBox2.Text = "Stage Properties"; // // groupBox3 // this.groupBox3.Location = new System.Drawing.Point(8, 440); this.groupBox3.Name = "groupBox3"; this.groupBox3.Size = new System.Drawing.Size(264, 40); this.groupBox3.TabIndex = 9; this.groupBox3.TabStop = false; this.groupBox3.Text = "Current Box Properties"; // // groupBox4 // this.groupBox4.Controls.Add(this.lbCollisionBoxes); this.groupBox4.Controls.Add(this.lbShapes); this.groupBox4.Controls.Add(this.label1); this.groupBox4.Controls.Add(this.label2); this.groupBox4.Location = new System.Drawing.Point(8, 144); this.groupBox4.Name = "groupBox4"; this.groupBox4.Size = new System.Drawing.Size(264, 96); this.groupBox4.TabIndex = 10; this.groupBox4.TabStop = false; this.groupBox4.Text = "Collision Boxes"; // // label1 // this.label1.Location = new System.Drawing.Point(8, 16); this.label1.Name = "label1"; this.label1.Size = new System.Drawing.Size(40, 23); this.label1.TabIndex = 13; this.label1.Text = "Boxes"; // // label2 // this.label2.Location = new System.Drawing.Point(136, 16); this.label2.Name = "label2"; this.label2.Size = new System.Drawing.Size(48, 23); this.label2.TabIndex = 13; this.label2.Text = "Shapes"; // // groupBox5 // this.groupBox5.Location = new System.Drawing.Point(8, 488); this.groupBox5.Name = "groupBox5"; this.groupBox5.Size = new System.Drawing.Size(264, 40); this.groupBox5.TabIndex = 11; this.groupBox5.TabStop = false; this.groupBox5.Text = "Current Shape Properties"; // // groupBox6 // this.groupBox6.Controls.Add(this.lbWorldObjects); this.groupBox6.Controls.Add(this.label3); this.groupBox6.Location = new System.Drawing.Point(8, 248); this.groupBox6.Name = "groupBox6"; this.groupBox6.Size = new System.Drawing.Size(264, 88); this.groupBox6.TabIndex = 12; this.groupBox6.TabStop = false; this.groupBox6.Text = "World Objects"; // // label3 // this.label3.Location = new System.Drawing.Point(8, 16); this.label3.Name = "label3"; this.label3.TabIndex = 13; this.label3.Text = "Players/Items/etc."; // // groupBox7 // this.groupBox7.Controls.Add(this.buttonDeleteStage); this.groupBox7.Controls.Add(this.buttonAddStage); this.groupBox7.Controls.Add(this.lbStages); this.groupBox7.Controls.Add(this.buttonEditImage); this.groupBox7.Location = new System.Drawing.Point(8, 40); this.groupBox7.Name = "groupBox7"; this.groupBox7.Size = new System.Drawing.Size(264, 96); this.groupBox7.TabIndex = 13; this.groupBox7.TabStop = false; this.groupBox7.Text = "Stages"; // // buttonDeleteStage // this.buttonDeleteStage.Location = new System.Drawing.Point(184, 40); this.buttonDeleteStage.Name = "buttonDeleteStage"; this.buttonDeleteStage.Size = new System.Drawing.Size(72, 23); this.buttonDeleteStage.TabIndex = 7; this.buttonDeleteStage.Text = "Delete"; this.buttonDeleteStage.Click += new System.EventHandler(this.buttonDeleteStage_Click); // // buttonAddStage // this.buttonAddStage.Location = new System.Drawing.Point(184, 16); this.buttonAddStage.Name = "buttonAddStage"; this.buttonAddStage.Size = new System.Drawing.Size(72, 23); this.buttonAddStage.TabIndex = 6; this.buttonAddStage.Text = "Add"; this.buttonAddStage.Click += new System.EventHandler(this.buttonAddStage_Click); // // buttonEditImage // this.buttonEditImage.Location = new System.Drawing.Point(184, 64); this.buttonEditImage.Name = "buttonEditImage"; this.buttonEditImage.Size = new System.Drawing.Size(72, 23); this.buttonEditImage.TabIndex = 14; this.buttonEditImage.Text = "Edit Stage"; this.buttonEditImage.Click += new System.EventHandler(this.buttonEditImage_Click); // // buttonSave // this.buttonSave.Location = new System.Drawing.Point(8, 8); this.buttonSave.Name = "buttonSave"; this.buttonSave.Size = new System.Drawing.Size(32, 32); this.buttonSave.TabIndex = 14; this.buttonSave.Text = "Save"; this.buttonSave.Click += new System.EventHandler(this.buttonSave_Click); // // buttonSelectMode // this.buttonSelectMode.Location = new System.Drawing.Point(160, 8); this.buttonSelectMode.Name = "buttonSelectMode"; this.buttonSelectMode.Size = new System.Drawing.Size(48, 32); this.buttonSelectMode.TabIndex = 15; this.buttonSelectMode.Text = "SelectMode"; this.buttonSelectMode.Click += new System.EventHandler(this.buttonSelectMode_Click); // // buttonDeleteSelected // this.buttonDeleteSelected.Location = new System.Drawing.Point(216, 8); this.buttonDeleteSelected.Name = "buttonDeleteSelected"; this.buttonDeleteSelected.Size = new System.Drawing.Size(56, 32); this.buttonDeleteSelected.TabIndex = 16; this.buttonDeleteSelected.Text = "Delete Selected"; this.buttonDeleteSelected.Click += new System.EventHandler(this.buttonDeleteSelected_Click); // // buttonToggleGrid // this.buttonToggleGrid.Location = new System.Drawing.Point(80, 8); this.buttonToggleGrid.Name = "buttonToggleGrid"; this.buttonToggleGrid.Size = new System.Drawing.Size(48, 32); this.buttonToggleGrid.TabIndex = 17; this.buttonToggleGrid.Text = "Toggle Grid"; this.buttonToggleGrid.Click += new System.EventHandler(this.buttonToggleGrid_Click); // // groupBoxTransitionEditor // this.groupBoxTransitionEditor.Controls.Add(this.textBoxYveiwcenter); this.groupBoxTransitionEditor.Controls.Add(this.textBoxXviewcenter); this.groupBoxTransitionEditor.Controls.Add(this.label9); this.groupBoxTransitionEditor.Controls.Add(this.label10); this.groupBoxTransitionEditor.Controls.Add(this.label8); this.groupBoxTransitionEditor.Controls.Add(this.buttonTransitionSet); this.groupBoxTransitionEditor.Controls.Add(this.label7); this.groupBoxTransitionEditor.Controls.Add(this.label6); this.groupBoxTransitionEditor.Controls.Add(this.label5); this.groupBoxTransitionEditor.Controls.Add(this.label4); this.groupBoxTransitionEditor.Controls.Add(this.textBoxTransitionX); this.groupBoxTransitionEditor.Controls.Add(this.textBoxTransitionNext); this.groupBoxTransitionEditor.Controls.Add(this.textBoxTransitionY); this.groupBoxTransitionEditor.Location = new System.Drawing.Point(8, 600); this.groupBoxTransitionEditor.Name = "groupBoxTransitionEditor"; this.groupBoxTransitionEditor.Size = new System.Drawing.Size(264, 128); this.groupBoxTransitionEditor.TabIndex = 18; this.groupBoxTransitionEditor.TabStop = false; this.groupBoxTransitionEditor.Text = "Transition Editor"; this.groupBoxTransitionEditor.Visible = false; // // textBoxYveiwcenter // this.textBoxYveiwcenter.Location = new System.Drawing.Point(80, 96); this.textBoxYveiwcenter.Name = "textBoxYveiwcenter"; this.textBoxYveiwcenter.Size = new System.Drawing.Size(24, 20); this.textBoxYveiwcenter.TabIndex = 13; this.textBoxYveiwcenter.Text = ""; // // textBoxXviewcenter // this.textBoxXviewcenter.Location = new System.Drawing.Point(24, 96); this.textBoxXviewcenter.Name = "textBoxXviewcenter"; this.textBoxXviewcenter.Size = new System.Drawing.Size(24, 20); this.textBoxXviewcenter.TabIndex = 12; this.textBoxXviewcenter.Text = ""; // // label9 // this.label9.Location = new System.Drawing.Point(64, 104); this.label9.Name = "label9"; this.label9.Size = new System.Drawing.Size(16, 16); this.label9.TabIndex = 11; this.label9.Text = "Y:"; // // label10 // this.label10.Location = new System.Drawing.Point(8, 104); this.label10.Name = "label10"; this.label10.Size = new System.Drawing.Size(16, 16); this.label10.TabIndex = 10; this.label10.Text = "X:"; // // label8 // this.label8.Location = new System.Drawing.Point(8, 72); this.label8.Name = "label8"; this.label8.TabIndex = 9; this.label8.Text = "New View Center:"; // // buttonTransitionSet // this.buttonTransitionSet.Location = new System.Drawing.Point(184, 96); this.buttonTransitionSet.Name = "buttonTransitionSet"; this.buttonTransitionSet.Size = new System.Drawing.Size(48, 23); this.buttonTransitionSet.TabIndex = 8; this.buttonTransitionSet.Text = "Set"; this.buttonTransitionSet.Click += new System.EventHandler(this.buttonTransitionSet_Click); // // label7 // this.label7.Location = new System.Drawing.Point(120, 48); this.label7.Name = "label7"; this.label7.Size = new System.Drawing.Size(96, 16); this.label7.TabIndex = 7; this.label7.Text = "Next State Index:"; // // label6 // this.label6.Location = new System.Drawing.Point(64, 48); this.label6.Name = "label6"; this.label6.Size = new System.Drawing.Size(16, 16); this.label6.TabIndex = 6; this.label6.Text = "Y:"; // // label5 // this.label5.Location = new System.Drawing.Point(8, 48); this.label5.Name = "label5"; this.label5.Size = new System.Drawing.Size(16, 16); this.label5.TabIndex = 5; this.label5.Text = "X:"; // // label4 // this.label4.Location = new System.Drawing.Point(8, 16); this.label4.Name = "label4"; this.label4.Size = new System.Drawing.Size(112, 23); this.label4.TabIndex = 4; this.label4.Text = "New Player Position:"; // // textBoxTransitionX // this.textBoxTransitionX.Location = new System.Drawing.Point(24, 40); this.textBoxTransitionX.Name = "textBoxTransitionX"; this.textBoxTransitionX.Size = new System.Drawing.Size(24, 20); this.textBoxTransitionX.TabIndex = 3; this.textBoxTransitionX.Text = ""; // // textBoxTransitionNext // this.textBoxTransitionNext.Location = new System.Drawing.Point(216, 40); this.textBoxTransitionNext.Name = "textBoxTransitionNext"; this.textBoxTransitionNext.Size = new System.Drawing.Size(24, 20); this.textBoxTransitionNext.TabIndex = 2; this.textBoxTransitionNext.Text = ""; // // textBoxTransitionY // this.textBoxTransitionY.Location = new System.Drawing.Point(80, 40); this.textBoxTransitionY.Name = "textBoxTransitionY"; this.textBoxTransitionY.Size = new System.Drawing.Size(24, 20); this.textBoxTransitionY.TabIndex = 1; this.textBoxTransitionY.Text = ""; // // groupBoxZoomFactor // this.groupBoxZoomFactor.Controls.Add(this.textBoxZoomFactor); this.groupBoxZoomFactor.Controls.Add(this.label11); this.groupBoxZoomFactor.Location = new System.Drawing.Point(8, 536); this.groupBoxZoomFactor.Name = "groupBoxZoomFactor"; this.groupBoxZoomFactor.Size = new System.Drawing.Size(264, 56); this.groupBoxZoomFactor.TabIndex = 19; this.groupBoxZoomFactor.TabStop = false; this.groupBoxZoomFactor.Text = "Zoom Factor"; // // label11 // this.label11.Location = new System.Drawing.Point(8, 24); this.label11.Name = "label11"; this.label11.Size = new System.Drawing.Size(56, 23); this.label11.TabIndex = 1; this.label11.Text = "Zoom to:"; // // textBoxZoomFactor // this.textBoxZoomFactor.Location = new System.Drawing.Point(56, 16); this.textBoxZoomFactor.Name = "textBoxZoomFactor"; this.textBoxZoomFactor.TabIndex = 2; this.textBoxZoomFactor.Text = ""; // // Form1 // this.AutoScaleBaseSize = new System.Drawing.Size(5, 13); this.ClientSize = new System.Drawing.Size(1256, 785); this.Controls.Add(this.groupBoxZoomFactor); this.Controls.Add(this.groupBoxTransitionEditor); this.Controls.Add(this.statusBar1); this.Controls.Add(this.buttonToggleGrid); this.Controls.Add(this.buttonDeleteSelected); this.Controls.Add(this.buttonSelectMode); this.Controls.Add(this.buttonSave); this.Controls.Add(this.groupBox7); this.Controls.Add(this.groupBox6); this.Controls.Add(this.groupBox5); this.Controls.Add(this.groupBox4); this.Controls.Add(this.groupBox3); this.Controls.Add(this.groupBox2); this.Controls.Add(this.groupBox1); this.Controls.Add(this.panelWorkSpace); this.Menu = this.mainMenu1; this.Name = "Form1"; this.Text = "Icarus Level Editor"; this.Resize += new System.EventHandler(this.Form1_Resize); this.Load += new System.EventHandler(this.FormMain_Load); this.panelWorkSpace.ResumeLayout(false); ((System.ComponentModel.ISupportInitialize)(this.statusBarPanel1)).EndInit(); ((System.ComponentModel.ISupportInitialize)(this.statusBarPanel2)).EndInit(); this.groupBox4.ResumeLayout(false); this.groupBox6.ResumeLayout(false); this.groupBox7.ResumeLayout(false); this.groupBoxTransitionEditor.ResumeLayout(false); this.groupBoxZoomFactor.ResumeLayout(false); this.ResumeLayout(false); } #endregion #region Main() /// /// The main entry point for the application. /// [STAThread] static void Main() { Application.Run(new Form1()); } #endregion #region Event Handlers private void FormMain_Load(object sender, System.EventArgs e) { } public void Form1_Resize(object sender, System.EventArgs e) { panelWorkSpace.Size = new Size(this.Size.Width-this.panelWorkSpace.Left-14, this.Size.Height-this.panelWorkSpace.Top-79); } private void pictureBox1_Paint(object sender, System.Windows.Forms.PaintEventArgs e) { Graphics g = e.Graphics; if(bShowGrid) { this.drawGrid(g, e.ClipRectangle, this.iGridSize); } if(bDraggingRect) { g.DrawRectangle(penSelected, rectCurr); } drawCollisionBoxes(level, g); drawWorldObjects(level, g); } private void pictureBox1_MouseDown(object sender, System.Windows.Forms.MouseEventArgs e) { //Only use left mouse button if(e.Button != System.Windows.Forms.MouseButtons.Left) return; iResizingState = isResizing(e.X, e.Y); //Check to see if we are trying to move a box or worldObj if(woCurr != null) { rectTemp.X = woCurr.CollisionBox.BoundingBox.X; rectTemp.Y = woCurr.CollisionBox.BoundingBox.Y; rectTemp.Width = woCurr.CollisionBox.BoundingBoxWidth; rectTemp.Height = woCurr.CollisionBox.BoundingBoxHeight; if(rectTemp.Contains(e.X, e.Y)) { iCurrMode = (int)enumMode.MovingWO; } } else if(cbCurr != null) { rectTemp.X = cbCurr.BoundingBox.X; rectTemp.Y = cbCurr.BoundingBox.Y; rectTemp.Width = cbCurr.BoundingBox.Width; rectTemp.Height = cbCurr.BoundingBox.Height; if(rectTemp.Contains(e.X, e.Y)) { iCurrMode = (int)enumMode.MovingCB; } } if(iResizingState != (int)enumDirection.None) { iCurrMode = (int)enumMode.Resize; } if(iCurrMode == (int)enumMode.Select) { selectBox(e.X, e.Y); } findClosestGridPoint(e.X, e.Y, ref(pntCurr), this.iGridSize); this.rectCurr.X = pntCurr.X; this.rectCurr.Y = pntCurr.Y; bDraggingRect = true; } private void pictureBox1_MouseMove(object sender, System.Windows.Forms.MouseEventArgs e) { //Only use left mouse button if(e.Button != System.Windows.Forms.MouseButtons.Left) return; //Update status bar statusBarPanel2.Text = "X:"+e.X.ToString()+",Y:"+e.Y.ToString(); //Save previous point pntPrev.X = pntCurr.X; pntPrev.Y = pntCurr.Y; //Find nearest grid point findClosestGridPoint(e.X, e.Y, ref(pntCurr), iGridSize); if(bDraggingRect) { //If the grid point is new update the screen if(pntCurr.X != pntPrev.X || pntCurr.Y != pntPrev.Y) { this.rectCurr.Width = this.pntCurr.X - this.rectCurr.X; this.rectCurr.Height = this.pntCurr.Y - this.rectCurr.Y; //TODO: Be more specific with invalidation request pictureBox1.Invalidate(); } //pictureBox1.Invalidate(); } if(iCurrMode == (int)enumMode.MovingWO) { //Don't show temp rect while moving WO bDraggingRect = false; //Movement in Y if(pntCurr.Y != pntPrev.Y) { woCurr.Location.y += pntCurr.Y - pntPrev.Y; //TODO: Be more specific with invalidation request pictureBox1.Invalidate(); } //Movement in X if(pntCurr.X != pntPrev.X) { woCurr.Location.x += pntCurr.X - pntPrev.X; //TODO: Be more specific with invalidation request pictureBox1.Invalidate(); } } else if(iCurrMode == (int)enumMode.MovingCB) { //don't show temp rect while moving CB bDraggingRect = false; //Movement in Y if(pntCurr.Y != pntPrev.Y) { cbCurr.BoundingBox.Y += pntCurr.Y - pntPrev.Y; cbCurr.setSpecial(); //TODO: Be more specific with invalidation request pictureBox1.Invalidate(); } //Movement in X if(pntCurr.X != pntPrev.X) { cbCurr.BoundingBox.X += pntCurr.X - pntPrev.X; cbCurr.setSpecial(); //TODO: Be more specific with invalidation request pictureBox1.Invalidate(); } } else if(iCurrMode == (int)enumMode.Resize) { //Don't show temp rectangle while resizing bDraggingRect = false; //Resize if(iResizingState == (int)enumDirection.Up) { if(pntCurr.Y != pntPrev.Y) { if(cbCurr.BoundingBox.Y > pntCurr.Y) { cbCurr.BoundingBox.Height += (cbCurr.BoundingBox.Y - pntCurr.Y); } else { cbCurr.BoundingBox.Height -= (pntCurr.Y - cbCurr.BoundingBox.Y); } cbCurr.BoundingBox.Y = pntCurr.Y; } } else if(iResizingState == (int)enumDirection.Down) { if(pntCurr.Y != pntPrev.Y) { if(cbCurr.BoundingBox.Y + cbCurr.BoundingBox.Height > pntCurr.Y) { cbCurr.BoundingBox.Height -= (cbCurr.BoundingBox.Y + cbCurr.BoundingBox.Height - pntCurr.Y); } else { cbCurr.BoundingBox.Height += (pntCurr.Y - (cbCurr.BoundingBox.Y + cbCurr.BoundingBox.Height)); } } } else if(iResizingState == (int)enumDirection.Left) { if(pntCurr.X != pntPrev.X) { if(cbCurr.BoundingBox.X > pntCurr.X) { cbCurr.BoundingBox.Width += (cbCurr.BoundingBox.X - pntCurr.X); } else { cbCurr.BoundingBox.Width -= (pntCurr.X - cbCurr.BoundingBox.X); } cbCurr.BoundingBox.X = pntCurr.X; } } else if(iResizingState == (int)enumDirection.Right) { if(pntCurr.X != pntPrev.X) { if(cbCurr.BoundingBox.X + cbCurr.BoundingBox.Width > pntCurr.X) { cbCurr.BoundingBox.Width -= (cbCurr.BoundingBox.X + cbCurr.BoundingBox.Width - pntCurr.X); } else { cbCurr.BoundingBox.Width += (pntCurr.X - (cbCurr.BoundingBox.X + cbCurr.BoundingBox.Width)); } } } //setSpecial settings if needed cbCurr.setSpecial(); //TODO: Be more specific with invalidation request pictureBox1.Invalidate(); } } private void pictureBox1_MouseUp(object sender, System.Windows.Forms.MouseEventArgs e) { int i; //Only use left mouse button if(e.Button != System.Windows.Forms.MouseButtons.Left) return; bDraggingRect = false; iResizingState = 0; if(iCurrMode == (int)enumMode.NewWorldObject) { //check index to create at(unless it is Merc, but we can find it anyway) for(i = 1; i < Icarus.Logic.GameEngine.GameSettings.Instance.sv_maxActors; i++) { if(level.CurrStage.actorList[i] == null) { //Check which object to create if(lbWorldObjects.Text.Equals(strWorldObjs[(int)enumWorldObjStrings.Merc])) { level.CurrStage.actorList[level.CurrStage.PlayerActorIndex] = new Icarus.Logic.Physics.PhysicsMerc(); level.CurrStage.actorList[level.CurrStage.PlayerActorIndex].ControllerType = "TuxHunter.Controllers.UserInputController"; //TODO: do not hardcode animation. level.CurrStage.actorList[level.CurrStage.PlayerActorIndex].SetAnimation("merc\\stand_left\\frameset\\stand_left.png", Icarus.Graphics.Animation.AnimationType.LoopForever, 1); level.CurrStage.actorList[level.CurrStage.PlayerActorIndex].Location.x = e.X; level.CurrStage.actorList[level.CurrStage.PlayerActorIndex].Location.y = e.Y; //TODO: Be more specific with invalidation pictureBox1.Invalidate(); break; } else if(lbWorldObjects.Text.Equals(strWorldObjs[(int)enumWorldObjStrings.MovingPlatform])) { level.CurrStage.actorList[i] = new Icarus.Logic.Physics.MovingPlatform(); level.CurrStage.actorList[i].Location.x = e.X; level.CurrStage.actorList[i].Location.y = e.Y; level.CurrStage.actorList[i].ControllerType = "TuxHunter.Controllers.MovingPlatformController"; //TODO: Be more specific with invalidation pictureBox1.Invalidate(); break; } else if(lbWorldObjects.Text.Equals(strWorldObjs[(int)enumWorldObjStrings.MovingPlatformHor])) { level.CurrStage.actorList[i] = new Icarus.Logic.Physics.MovingPlatformHorizontal(); level.CurrStage.actorList[i].Location.x = e.X; level.CurrStage.actorList[i].Location.y = e.Y; ((Icarus.Logic.Physics.MovingPlatformHorizontal)level.CurrStage.actorList[i]).Speed = 2.5; ((Icarus.Logic.Physics.MovingPlatformHorizontal)level.CurrStage.actorList[i]).Distance = 505; level.CurrStage.actorList[i].SetAnimation(@"\moving_platform\platform.png", Icarus.Graphics.Animation.AnimationType.LoopForever, 1); level.CurrStage.actorList[i].CollisionBox = new Icarus.Logic.Physics.CollisionBoxMobile(); ((Icarus.Logic.Physics.CollisionBoxMobile)level.CurrStage.actorList[i].CollisionBox).WO = level.CurrStage.actorList[i]; ((Icarus.Logic.Physics.CollisionBoxMobile)level.CurrStage.actorList[i].CollisionBox).BoundingBox.X = 0; ((Icarus.Logic.Physics.CollisionBoxMobile)level.CurrStage.actorList[i].CollisionBox).BoundingBox.Y = 0; ((Icarus.Logic.Physics.CollisionBoxMobile)level.CurrStage.actorList[i].CollisionBox).BoundingBox.Width = 95; ((Icarus.Logic.Physics.CollisionBoxMobile)level.CurrStage.actorList[i].CollisionBox).BoundingBox.Height = 22; ((Icarus.Logic.Physics.CollisionBoxMobile)level.CurrStage.actorList[i].CollisionBox).BoundingBoxWidth = 95; ((Icarus.Logic.Physics.CollisionBoxMobile)level.CurrStage.actorList[i].CollisionBox).BoundingBoxHeight = 22; level.CurrStage.actorList[i].CBXoffset = 0; level.CurrStage.actorList[i].CBYoffset = 0; pictureBox1.Invalidate(); break; } else if(lbWorldObjects.Text.Equals(strWorldObjs[(int)enumWorldObjStrings.MovingPlatformVer])) { level.CurrStage.actorList[i] = new Icarus.Logic.Physics.MovingPlatformVertical(); level.CurrStage.actorList[i].Location.x = e.X; level.CurrStage.actorList[i].Location.y = e.Y; ((Icarus.Logic.Physics.MovingPlatformVertical)level.CurrStage.actorList[i]).Speed = 3.5; ((Icarus.Logic.Physics.MovingPlatformVertical)level.CurrStage.actorList[i]).Distance = 652; level.CurrStage.actorList[i].SetAnimation(@"\moving_platform\platform.png", Icarus.Graphics.Animation.AnimationType.LoopForever, 1); level.CurrStage.actorList[i].CollisionBox = new Icarus.Logic.Physics.CollisionBoxMobile(); ((Icarus.Logic.Physics.CollisionBoxMobile)level.CurrStage.actorList[i].CollisionBox).WO = level.CurrStage.actorList[i]; ((Icarus.Logic.Physics.CollisionBoxMobile)level.CurrStage.actorList[i].CollisionBox).BoundingBox.X = 0; ((Icarus.Logic.Physics.CollisionBoxMobile)level.CurrStage.actorList[i].CollisionBox).BoundingBox.Y = 0; ((Icarus.Logic.Physics.CollisionBoxMobile)level.CurrStage.actorList[i].CollisionBox).BoundingBox.Width = 95; ((Icarus.Logic.Physics.CollisionBoxMobile)level.CurrStage.actorList[i].CollisionBox).BoundingBox.Height = 22; ((Icarus.Logic.Physics.CollisionBoxMobile)level.CurrStage.actorList[i].CollisionBox).BoundingBoxWidth = 95; ((Icarus.Logic.Physics.CollisionBoxMobile)level.CurrStage.actorList[i].CollisionBox).BoundingBoxHeight = 22; level.CurrStage.actorList[i].CBXoffset = 0; level.CurrStage.actorList[i].CBYoffset = 0; pictureBox1.Invalidate(); break; } else if (lbWorldObjects.Text.Equals(strWorldObjs[(int)enumWorldObjStrings.Tux])) { level.CurrStage.actorList[i] = new Icarus.Logic.Physics.PhysicsTuxRobot(); level.CurrStage.actorList[i].ControllerType = "TuxHunter.Controllers.TuxController"; level.CurrStage.actorList[i].Location.x = e.X; level.CurrStage.actorList[i].Location.y = e.Y; pictureBox1.Invalidate(); break; } else if(lbWorldObjects.Text.Equals(strWorldObjs[(int)enumWorldObjStrings.Geek])) { level.CurrStage.actorList[i] = new Icarus.Logic.Physics.PhysicsGeek(); level.CurrStage.actorList[i].ControllerType = "TuxHunter.Controllers.GeekController"; level.CurrStage.actorList[i].Location.x = e.X; level.CurrStage.actorList[i].Location.y = e.Y; pictureBox1.Invalidate(); break; } else if(lbWorldObjects.Text.Equals(strWorldObjs[(int)enumWorldObjStrings.GNU_Robot])) { level.CurrStage.actorList[i] = new Icarus.Logic.Physics.PhysicsGNURobot(); level.CurrStage.actorList[i].ControllerType = "TuxHunter.Controllers.BotController"; level.CurrStage.actorList[i].Location.x = e.X; level.CurrStage.actorList[i].Location.y = e.Y; pictureBox1.Invalidate(); break; } else if(lbWorldObjects.Text.Equals(strWorldObjs[(int)enumWorldObjStrings.Zoom])) { level.CurrStage.actorList[i] = new Icarus.Logic.Physics.ZoomTrigger(); level.CurrStage.actorList[i].CollisionBox.BoundingBox.X = 0; level.CurrStage.actorList[i].CollisionBox.BoundingBox.Y = 0; level.CurrStage.actorList[i].CollisionBox.BoundingBox.Width = 500; level.CurrStage.actorList[i].CollisionBox.BoundingBox.Height = 500; level.CurrStage.actorList[i].CollisionBox.BoundingBoxWidth = 500; level.CurrStage.actorList[i].CollisionBox.BoundingBoxHeight = 500; level.CurrStage.actorList[i].Location.x = e.X; level.CurrStage.actorList[i].Location.y = e.Y; ((Icarus.Logic.Physics.ZoomTrigger)level.CurrStage.actorList[i]).ZoomTo = (float)Convert.ToDouble(textBoxZoomFactor.Text.Trim()); pictureBox1.Invalidate(); break; } else { //Display Error //Do Nothing return; } } } //Make sure the world obj array wasn't full if(i >= Icarus.Logic.GameEngine.GameSettings.Instance.sv_maxCollisionBoxes) { //TODO: display error //Do nothing return; } } if(iCurrMode == (int)enumMode.NewCollisionBox) { //Determine if a new box should be created. if(rectCurr.Width <= 0 || rectCurr.Height <= 0) { return; } //check index to create at for(i = 0; i < Icarus.Logic.GameEngine.GameSettings.Instance.sv_maxCollisionBoxes; i++) { if(level.CurrStage.CollisionBoxes[i] == null) { //Check which collision object to create //Blank CollisionBox if(lbCollisionBoxes.Text.Equals(strCollisionBoxes[(int)enumCollisionBoxStrings.CollisionBox])) { level.CurrStage.CollisionBoxes[i] = new Icarus.Logic.Physics.CollisionBox(); } //Floor else if(lbCollisionBoxes.Text.Equals(strCollisionBoxes[(int)enumCollisionBoxStrings.CB_Floor])) { level.CurrStage.CollisionBoxes[i] = new Icarus.Logic.Physics.CollisionBoxFloor(); } //Wall else if(((string)(lbCollisionBoxes.Text)).Equals(strCollisionBoxes[(int)enumCollisionBoxStrings.CB_Wall])) { level.CurrStage.CollisionBoxes[i] = new Icarus.Logic.Physics.CollisionBoxWall(); } //Slope floor neg else if(((string)(lbCollisionBoxes.Text)).Equals(strCollisionBoxes[(int)enumCollisionBoxStrings.CB_Floor_NegSlope])) { level.CurrStage.CollisionBoxes[i] = new Icarus.Logic.Physics.CollisionBoxSlopeBL(); } //Slope floor pos else if(((string)(lbCollisionBoxes.Text)).Equals(strCollisionBoxes[(int)enumCollisionBoxStrings.CB_Floor_PosSlope])) { level.CurrStage.CollisionBoxes[i] = new Icarus.Logic.Physics.CollisionBoxSlopeBR(); } //Slope Ceiling Neg else if(((string)(lbCollisionBoxes.Text)).Equals(strCollisionBoxes[(int)enumCollisionBoxStrings.CB_Ceiling_NegSlope])) { level.CurrStage.CollisionBoxes[i] = new Icarus.Logic.Physics.CollisionBoxSlopeTR(); } //Slope Ceiling Pos else if(((string)(lbCollisionBoxes.Text)).Equals(strCollisionBoxes[(int)enumCollisionBoxStrings.CB_Ceiling_PosSlope])) { level.CurrStage.CollisionBoxes[i] = new Icarus.Logic.Physics.CollisionBoxSlopeTL(); } else if(((string)(lbCollisionBoxes.Text)).Equals(strCollisionBoxes[(int)enumCollisionBoxStrings.Transition])) { level.CurrStage.CollisionBoxes[i] = new Icarus.Logic.Physics.CollisionBoxTransition(); } else if(((string)(lbCollisionBoxes.Text)).Equals(strCollisionBoxes[(int)enumCollisionBoxStrings.Transition100])) { level.CurrStage.CollisionBoxes[i] = new Icarus.Logic.Physics.CollisionBoxTransition(); ((Icarus.Logic.Physics.CollisionBoxTransition)level.CurrStage.CollisionBoxes[i]).Health = 100; } else { //Display Error //Do Nothing return; } //Set the collisionbox's bounding area level.CurrStage.CollisionBoxes[i].BoundingBox.X = rectCurr.X; level.CurrStage.CollisionBoxes[i].BoundingBox.Y = rectCurr.Y; level.CurrStage.CollisionBoxes[i].BoundingBox.Width = rectCurr.Width; level.CurrStage.CollisionBoxes[i].BoundingBox.Height = rectCurr.Height; //Call setSpecial incase it was a prefab CollisionBox level.CurrStage.CollisionBoxes[i].setSpecial(); break; } } //Make sure collision box array wasn't full if(i >= Icarus.Logic.GameEngine.GameSettings.Instance.sv_maxCollisionBoxes) { //TODO: display error //Do nothing return; } //Redraw new rectangle rectTemp.X = rectCurr.X; rectTemp.Y = rectCurr.Y; rectTemp.Width = rectCurr.Width+1; rectTemp.Height = rectCurr.Height+1; pictureBox1.Invalidate(rectTemp); } else if(iCurrMode == (int)enumMode.Resize) { iResizingState = 0; iCurrMode = (int)enumMode.Select; } else if(iCurrMode == (int)enumMode.MovingCB) { iCurrMode = (int)enumMode.Select; } else if(iCurrMode == (int)enumMode.MovingWO) { iCurrMode = (int)enumMode.Select; } else if(iCurrMode == (int)enumMode.Select) { if(cbCurr != null) { if(cbCurr.GetType().Equals(typeof(Icarus.Logic.Physics.CollisionBoxTransition))) { groupBoxTransitionEditor.Visible = true; } else { groupBoxTransitionEditor.Visible = false; } } } //Reset rectCurr rectCurr.X = 0; rectCurr.Y = 0; rectCurr.Width = 0; rectCurr.Height = 0; } private void menuItemSaveAs_Click(object sender, System.EventArgs e) { //TODO: Check to make sure each stage has a default merc location saveFileDialog1.Filter = "Level files (*.xml)|*.xml" ; saveFileDialog1.FilterIndex = 1 ; saveFileDialog1.RestoreDirectory = true ; if(saveFileDialog1.ShowDialog() == DialogResult.OK) { strLevelPath = saveFileDialog1.FileName; //Change current index to 0 for saving int i = level.CurrentStageIndex; level.CurrentStageIndex = 0; Icarus.Logic.GameEngine.LevelLoader.Instance.SaveLevelXML(strLevelPath, level); //Change current index back level.CurrentStageIndex = i; } } private void menuItemAddStage_Click(object sender, System.EventArgs e) { int i; //Make sure there is room for another stage for(i = 0; i < Icarus.Logic.GameEngine.GameSettings.Instance.sv_maxStages; i++) { if(level.Stages[i] == null) break; } if(i >= Icarus.Logic.GameEngine.GameSettings.Instance.sv_maxStages) { //TODO: pop up message with error MessageBox.Show("This level has the maximum number of stages :-(", "Limit Reached", MessageBoxButtons.OK, MessageBoxIcon.Stop); //Do Nothing. Quota full. return; } //Display StageEdit Form FormStageEdit formStageEdit = new FormStageEdit(); formStageEdit.Stage = new Icarus.Logic.Stage(); formStageEdit.ShowDialog(); //set information from form level.Stages[i] = formStageEdit.Stage; level.CurrStage = level.Stages[i]; //set image. Bitmap MyImage = level.CurrStage.GetBackgroundAt(level.CurrStage.GetBackgroundCount() - 1).Animation.CurrentFrame.getFrameImage(); pictureBox1.SizeMode = PictureBoxSizeMode.Normal ; pictureBox1.ClientSize = new Size(MyImage.Size.Width, MyImage.Size.Height); pictureBox1.Image = (Image) MyImage ; populateStageListBox(); } private void populateStageListBox() { lbStages.Items.Clear(); for(int i = 0 ; i < level.Stages.Length; i++) { if(level.Stages[i] == null) break; lbStages.Items.Add(level.Stages[i].StageName); } } private void menuItemRemoveStage_Click(object sender, System.EventArgs e) { buttonDeleteStage_Click(sender, e); } private void menuItemOpen_Click(object sender, System.EventArgs e) { openFileDialog1.Filter = "Level files (*.xml)|*.xml" ; openFileDialog1.FilterIndex = 1 ; openFileDialog1.RestoreDirectory = true ; if(openFileDialog1.ShowDialog() == DialogResult.OK) { strLevelPath = openFileDialog1.FileName; level = Icarus.Logic.GameEngine.LevelLoader.Instance.LoadLevelXML(strLevelPath); level.CurrentStageIndex = 0; Bitmap MyImage = level.CurrStage.GetBackgroundAt(level.CurrStage.GetBackgroundCount() - 1).Animation.CurrentFrame.getFrameImage(); pictureBox1.SizeMode = PictureBoxSizeMode.Normal ; pictureBox1.ClientSize = new Size(MyImage.Size.Width, MyImage.Size.Height); pictureBox1.Image = (Image) MyImage ; //Set stages System.IO.DirectoryInfo di = null; for(int i = 0; i < Icarus.Logic.GameEngine.GameSettings.Instance.sv_maxStages; i++) { if(level.Stages[i] == null) break; di = new System.IO.DirectoryInfo(Icarus.Resources.ResourceManager.Instance.ImagePath+level.Stages[i].GetBackgroundAt(level.CurrStage.GetBackgroundCount() - 1).Animation.FramesetPath); lbStages.Items.Add(di.Name); } } } public void lbCollisionBoxes_TabIndexChanged(object sender, System.EventArgs e) { int i = lbCollisionBoxes.TabIndex; } private void buttonAddStage_Click(object sender, System.EventArgs e) { menuItemAddStage_Click(sender, e); } private void buttonEditImage_Click(object sender, System.EventArgs e) { if(level.CurrStage == null) return; //Display StageEdit Form FormStageEdit formStageEdit = new FormStageEdit(); formStageEdit.Stage = level.CurrStage; formStageEdit.ShowDialog(); //set image. Bitmap MyImage = level.CurrStage.GetBackgroundAt(level.CurrStage.GetBackgroundCount() - 1).Animation.CurrentFrame.getFrameImage(); pictureBox1.SizeMode = PictureBoxSizeMode.Normal ; pictureBox1.ClientSize = new Size(MyImage.Size.Width, MyImage.Size.Height); pictureBox1.Image = (Image) MyImage ; populateStageListBox(); } private void buttonDeleteStage_Click(object sender, System.EventArgs e) { int iNumStages; for(iNumStages = 0; iNumStages < Icarus.Logic.GameEngine.GameSettings.Instance.sv_maxStages; iNumStages++) { if(level.Stages[iNumStages] == null) break; } //Must have a enough stages to delete. if(iNumStages <= 1) { MessageBox.Show("Must have more than one stage to delete a stage.", "Delete error", MessageBoxButtons.OK); return; } //Make sure they wanted to delete the stage. if(DialogResult.No == MessageBox.Show("Are you sure you want to delete this stage?", "Confirm Delete", MessageBoxButtons.YesNo)) { return; } for(int i = 0; i < lbStages.Items.Count; i++) { if(((string)(lbStages.Items[i])).Equals(lbStages.Text)) { //Remove name from list lbStages.Items.Remove(lbStages.Text); //Remove stage from level for(int j = i+1; j < Icarus.Logic.GameEngine.GameSettings.Instance.sv_maxStages - 1; j ++) { level.Stages[j-1] = level.Stages[j]; } level.Stages[Icarus.Logic.GameEngine.GameSettings.Instance.sv_maxStages-1] = null; //Set current stage to first stage in list level.CurrentStageIndex = 0; pictureBox1.Image = level.CurrStage.GetBackgroundAt(level.CurrStage.GetBackgroundCount() - 1).Animation.CurrentFrame.getFrameImage(); break; } } } private void buttonSelectMode_Click(object sender, System.EventArgs e) { iCurrMode = (int)enumMode.Select; } private void lbCollisionBoxes_SelectedIndexChanged(object sender, System.EventArgs e) { iCurrMode = (int)enumMode.NewCollisionBox; } private void lbWorldObjects_SelectedIndexChanged(object sender, System.EventArgs e) { iCurrMode = (int)enumMode.NewWorldObject; } private void lbStages_SelectedIndexChanged(object sender, System.EventArgs e) { int i; for(i = 0; i < Icarus.Logic.GameEngine.GameSettings.Instance.sv_maxStages; i++) { if(i >= lbStages.Items.Count) break; if(((string)(lbStages.Items[i])).Equals(lbStages.Text)) { //Set current stage level.CurrentStageIndex = i; //Change bitmap Bitmap MyImage = level.CurrStage.GetBackgroundAt(level.CurrStage.GetBackgroundCount() - 1).Animation.CurrentFrame.getFrameImage(); pictureBox1.SizeMode = PictureBoxSizeMode.Normal ; pictureBox1.ClientSize = new Size(MyImage.Size.Width, MyImage.Size.Height); pictureBox1.Image = (Image) MyImage ; break; } } } private void buttonSave_Click(object sender, System.EventArgs e) { if(strLevelPath != null) { //Change current index to 0 for saving int i = level.CurrentStageIndex; level.CurrentStageIndex = 0; Icarus.Logic.GameEngine.LevelLoader.Instance.SaveLevelXML(strLevelPath, level); //Change current index back level.CurrentStageIndex = i; } else//Show save as { menuItemSaveAs_Click(sender, e); } } private void buttonDeleteSelected_Click(object sender, System.EventArgs e) { if(woCurr != null) { deleteWO(woCurr); } else if(cbCurr != null) { deleteCB(cbCurr); } } private void buttonToggleGrid_Click(object sender, System.EventArgs e) { if(bShowGrid) bShowGrid = false; else bShowGrid = true; pictureBox1.Invalidate(); } private void menuItemToggleGrid_Click(object sender, System.EventArgs e) { if(bShowGrid) bShowGrid = false; else bShowGrid = true; pictureBox1.Invalidate(); } private void buttonTransitionSet_Click(object sender, System.EventArgs e) { if(cbCurr.GetType().Equals(typeof(Icarus.Logic.Physics.CollisionBoxTransition))) { ((Icarus.Logic.Physics.CollisionBoxTransition)cbCurr).X = Convert.ToInt32(textBoxTransitionX.Text.Trim()); ((Icarus.Logic.Physics.CollisionBoxTransition)cbCurr).Y = Convert.ToInt32(textBoxTransitionY.Text.Trim()); ((Icarus.Logic.Physics.CollisionBoxTransition)cbCurr).XViewCenter = Convert.ToInt32(textBoxXviewcenter.Text.Trim()); ((Icarus.Logic.Physics.CollisionBoxTransition)cbCurr).YViewCenter = Convert.ToInt32(textBoxYveiwcenter.Text.Trim()); ((Icarus.Logic.Physics.CollisionBoxTransition)cbCurr).NextStage = Convert.ToInt32(textBoxTransitionNext.Text.Trim()); } } private void menuItemExit_Click(object sender, System.EventArgs e) { if(DialogResult.Yes == MessageBox.Show("Are you sure you want to Exit?", "Confirm Exit", MessageBoxButtons.YesNo)) { Application.Exit(); } } #endregion #region Other Methods private void deleteCB(Icarus.Logic.Physics.CollisionBox cb) { int i; for(i = 0; i < Icarus.Logic.GameEngine.GameSettings.Instance.sv_maxCollisionBoxes; i++) { if(level.CurrStage.CollisionBoxes[i] == null) break; if(level.CurrStage.CollisionBoxes[i].Equals(cb)) { for(int j = i+1; j < Icarus.Logic.GameEngine.GameSettings.Instance.sv_maxCollisionBoxes; j++) { level.CurrStage.CollisionBoxes[j-1] = level.CurrStage.CollisionBoxes[j]; } level.CurrStage.CollisionBoxes[Icarus.Logic.GameEngine.GameSettings.Instance.sv_maxCollisionBoxes-1] = null; cbCurr = null; //TODO: Be more specific with invalidation pictureBox1.Invalidate(); } } } private void deleteWO(Icarus.Logic.WorldObject wo) { int i; for(i = 0; i < Icarus.Logic.GameEngine.GameSettings.Instance.sv_maxActors; i++) { if(level.CurrStage.actorList[i] == null) break; if(level.CurrStage.actorList[i].Equals(wo)) { for(int j = i+1; j < Icarus.Logic.GameEngine.GameSettings.Instance.sv_maxActors; j++) { level.CurrStage.actorList[j-1] = level.CurrStage.actorList[j]; } level.CurrStage.actorList[Icarus.Logic.GameEngine.GameSettings.Instance.sv_maxActors-1] = null; woCurr = null; //TODO: Be more specific with invalidation pictureBox1.Invalidate(); } } } private void drawCollisionBoxes(Icarus.Logic.Level level, Graphics g) { //Might not have added a stage yet if(level.CurrStage == null) return; //Draw boxes for(int i = 0; i < Icarus.Logic.GameEngine.GameSettings.Instance.sv_maxCollisionBoxes; i++) { if(level.CurrStage.CollisionBoxes[i] == null) break; rectTemp.X = level.CurrStage.CollisionBoxes[i].BoundingBox.X; rectTemp.Y = level.CurrStage.CollisionBoxes[i].BoundingBox.Y; rectTemp.Width = level.CurrStage.CollisionBoxes[i].BoundingBox.Width; rectTemp.Height = level.CurrStage.CollisionBoxes[i].BoundingBox.Height; if(!level.CurrStage.CollisionBoxes[i].Equals(cbCurr)) { g.DrawLine(penUnselected, rectTemp.X, rectTemp.Y, rectTemp.X+rectTemp.Width, rectTemp.Y+rectTemp.Height); g.DrawLine(penUnselected, rectTemp.X+rectTemp.Width, rectTemp.Y, rectTemp.X, rectTemp.Y+rectTemp.Height); g.DrawRectangle(penUnselected, rectTemp); } } //Draw the selected box if(cbCurr != null) { rectTemp.X = cbCurr.BoundingBox.X; rectTemp.Y = cbCurr.BoundingBox.Y; rectTemp.Width = cbCurr.BoundingBox.Width; rectTemp.Height = cbCurr.BoundingBox.Height; //Draw bounding box g.DrawRectangle(penSelected, rectTemp); //Draw internal shapes drawInternalBoxes(cbCurr, g); int iTmp = iResizeBoxSize/2; //Draw dragging Boxes rectResizeTop.X = ((cbCurr.BoundingBox.X + cbCurr.BoundingBox.X + cbCurr.BoundingBox.Width)/2) - iTmp; rectResizeTop.Y = cbCurr.BoundingBox.Y-iTmp; rectResizeBottom.X = rectResizeTop.X; rectResizeBottom.Y = cbCurr.BoundingBox.Y + cbCurr.BoundingBox.Height - iTmp; rectResizeLeft.X = cbCurr.BoundingBox.X - iTmp; rectResizeLeft.Y = ((cbCurr.BoundingBox.Y + cbCurr.BoundingBox.Y + cbCurr.BoundingBox.Height)/2) - iTmp; rectResizeRight.X = cbCurr.BoundingBox.X + cbCurr.BoundingBox.Width - iTmp; rectResizeRight.Y = rectResizeLeft.Y; g.DrawRectangle(penSelected, rectResizeTop); g.DrawRectangle(penSelected, rectResizeBottom); g.DrawRectangle(penSelected, rectResizeLeft); g.DrawRectangle(penSelected, rectResizeRight); //g.DrawLine(penUnselected, rectTemp.X, rectTemp.Y, rectTemp.X+rectTemp.Width, rectTemp.Y+rectTemp.Height); //g.DrawLine(penUnselected, rectTemp.X+rectTemp.Width, rectTemp.Y, rectTemp.X, rectTemp.Y+rectTemp.Height); } } private void findClosestGridPoint(int iX, int iY, ref Point result, int iSize) { if(iX % iSize > iSize / 2) { //Shift right to nearest point result.X = iX + (iSize - iX % iSize); } else { //Shift left to nearest point result.X = iX - (iX % iSize); } if(iY % iSize > iSize / 2) { //Shift down to nearest point result.Y = iY + (iSize - iY % iSize); } else { //Shift up to nearest point result.Y = iY - (iY % iSize); } } private int isResizing(int iX, int iY) { if(rectResizeTop.Contains(iX, iY)) { return (int)enumDirection.Up; } else if(rectResizeBottom.Contains(iX, iY)) { return (int)enumDirection.Down; } else if(rectResizeLeft.Contains(iX, iY)) { return (int)enumDirection.Left; } else if(rectResizeRight.Contains(iX, iY)) { return (int)enumDirection.Right; } return (int)enumDirection.None; } private void selectBox(int iX, int iY) { int i; //Check to see if we are selecting a world object for(i = 0; i < Icarus.Logic.GameEngine.GameSettings.Instance.sv_maxActors; i++) { if(level.CurrStage.actorList[i] == null) { woCurr = null; break; } rectTemp.X = level.CurrStage.actorList[i].CollisionBox.BoundingBox.X; rectTemp.Y = level.CurrStage.actorList[i].CollisionBox.BoundingBox.Y; rectTemp.Width = level.CurrStage.actorList[i].CollisionBox.BoundingBoxWidth; rectTemp.Height = level.CurrStage.actorList[i].CollisionBox.BoundingBoxHeight; if(rectTemp.Contains(iX, iY)) { woCurr = level.CurrStage.actorList[i]; cbCurr = null;//Make sure the other is no longer selected pictureBox1.Invalidate(); return; } } if(i == Icarus.Logic.GameEngine.GameSettings.Instance.sv_maxActors) { woCurr = null; } //Check to see if we are selecging a collision box for(i = 0; i < Icarus.Logic.GameEngine.GameSettings.Instance.sv_maxCollisionBoxes; i++) { if(level.CurrStage.CollisionBoxes[i] == null) { //Break if we hit the end of the list cbCurr = null; break; } rectTemp.X = level.CurrStage.CollisionBoxes[i].BoundingBox.X; rectTemp.Y = level.CurrStage.CollisionBoxes[i].BoundingBox.Y; rectTemp.Width = level.CurrStage.CollisionBoxes[i].BoundingBox.Width; rectTemp.Height = level.CurrStage.CollisionBoxes[i].BoundingBox.Height; if(rectTemp.Contains(iX, iY)) { //Skip the current selected box if(cbCurr != null && cbCurr.Equals(level.CurrStage.CollisionBoxes[i])) continue; //Set new current collision box cbCurr = level.CurrStage.CollisionBoxes[i]; woCurr = null;//Make sure the other is no longer selected break; } } //Redraw it pictureBox1.Invalidate(); } private void drawInternalBoxes(Icarus.Logic.Physics.CollisionBox cb, Graphics g) { for(int i = 0; i < Icarus.Logic.GameEngine.GameSettings.Instance.sv_maxInternalRects; i++) { if(cb.RectArray[i] == null) break; rectTemp.X = cb.RectArray[i].X; rectTemp.Y = cb.RectArray[i].Y; rectTemp.Width = cb.RectArray[i].Width; rectTemp.Height = cb.RectArray[i].Height; g.DrawRectangle(penInternal, rectTemp); } for(int i = 0; i < Icarus.Logic.GameEngine.GameSettings.Instance.sv_maxInternalTris; i++) { if(cb.TriArray[i] == null) break; drawTriangle(cb.TriArray[i], g); } } private void drawTriangle(Icarus.Logic.Physics.Triangle tri, Graphics g) { g.DrawLine(penInternal, tri.P1.x, tri.P1.y, tri.P2.x, tri.P2.y); g.DrawLine(penInternal, tri.P2.x, tri.P2.y, tri.P3.x, tri.P3.y); g.DrawLine(penInternal, tri.P3.x, tri.P3.y, tri.P1.x, tri.P1.y); } private void drawWorldObjects(Icarus.Logic.Level level, Graphics g) { //Make sure a stage has been set if(level.CurrStage == null) return; for(int i = 0; i < Icarus.Logic.GameEngine.GameSettings.Instance.sv_maxActors; i++) { //Make sure we have something to draw if(level.CurrStage.actorList[i] == null) break; if(level.CurrStage.actorList[i].Equals(woCurr)) { continue; } //For now we just draw an ellipse rectTemp.X = level.CurrStage.actorList[i].CollisionBox.BoundingBox.X; rectTemp.Y = level.CurrStage.actorList[i].CollisionBox.BoundingBox.Y; rectTemp.Width = level.CurrStage.actorList[i].CollisionBox.BoundingBoxWidth; rectTemp.Height = level.CurrStage.actorList[i].CollisionBox.BoundingBoxHeight; g.DrawEllipse(penWorldObj, rectTemp); //Draw child objs drawWorldObjectChild(level.CurrStage.actorList[i], g); } //Draw current world object if(woCurr != null) { rectTemp.X = woCurr.CollisionBox.BoundingBox.X; rectTemp.Y = woCurr.CollisionBox.BoundingBox.Y; rectTemp.Width = woCurr.CollisionBox.BoundingBoxWidth; rectTemp.Height = woCurr.CollisionBox.BoundingBoxHeight; g.DrawEllipse(penSelected, rectTemp); //Draw child objs drawWorldObjectChild(woCurr, g); } } /// /// Recursively draw world object collision boxes /// /// private void drawWorldObjectChild(Icarus.Logic.WorldObject wo, Graphics g) { Icarus.Logic.WorldObject woChild; for(int i = 0; i < wo.Children.Length; i++) { woChild = wo.Children[i]; rectTemp.X = woChild.CollisionBox.BoundingBox.X; rectTemp.Y = woChild.CollisionBox.BoundingBox.Y; rectTemp.Width = woChild.CollisionBox.BoundingBoxWidth; rectTemp.Height = woChild.CollisionBox.BoundingBoxHeight; g.DrawEllipse(penWorldObjChild, rectTemp); drawWorldObjectChild(woChild, g); } } private void drawGrid(Graphics g, Rectangle rectClip, int iSize) { int i, j; //Draw vertical lines for(i = rectClip.X + (iSize - rectClip.X % iSize); i < pictureBox1.Width; i+=iSize) { g.DrawLine(penGrid, i, 0, i, this.pictureBox1.Height); } //Draw horizontal lines for(j = rectClip.Y + (iSize - rectClip.Y % iSize); j < pictureBox1.Height; j+=iSize) { g.DrawLine(penGrid, 0, j, this.pictureBox1.Width, j); } } #endregion } }