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
}
}