From 7da8fcfea9b67363603d19eaf7e20969d96cd1d1 Mon Sep 17 00:00:00 2001 From: Scionwest_cp Date: Tue, 8 Dec 2009 20:28:52 -0800 Subject: [PATCH] - Rooms can now be linked together via the Doorway Manager. Use the Doorway manager for linking rooms even if they are contained within the same Zone as the same zone reverse door install is not implemented yet. - TravelDirections now contains a TravelDirections.GetTravelDirectionValue which converts a string representing a direction into the corresponding AvailableTravelDirections enum value. --- .../Editors/DoorwayManager.Designer.cs | 321 ++++++++++++++++++ Mud Designer/Editors/DoorwayManager.cs | 174 ++++++++++ Mud Designer/Editors/DoorwayManager.resx | 120 +++++++ Mud Designer/Editors/ZoneBuilder.cs | 96 +++++- Mud Designer/Editors/ZoneBuilder.designer.cs | 196 ++++++++++- Mud Designer/Editors/ZoneBuilder.resx | 14 + Mud Designer/Mud Designer.csproj | 47 +++ .../Environment/TravelDirections.cs | 19 +- 8 files changed, 984 insertions(+), 3 deletions(-) create mode 100644 Mud Designer/Editors/DoorwayManager.Designer.cs create mode 100644 Mud Designer/Editors/DoorwayManager.cs create mode 100644 Mud Designer/Editors/DoorwayManager.resx diff --git a/Mud Designer/Editors/DoorwayManager.Designer.cs b/Mud Designer/Editors/DoorwayManager.Designer.cs new file mode 100644 index 0000000..f9ee0a6 --- /dev/null +++ b/Mud Designer/Editors/DoorwayManager.Designer.cs @@ -0,0 +1,321 @@ +namespace MudDesigner.Editors +{ + partial class DoorwayManager + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #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() + { + this.groupBox1 = new System.Windows.Forms.GroupBox(); + this.lstRealms = new System.Windows.Forms.ListBox(); + this.groupBox2 = new System.Windows.Forms.GroupBox(); + this.lstZones = new System.Windows.Forms.ListBox(); + this.groupBox3 = new System.Windows.Forms.GroupBox(); + this.lstRooms = new System.Windows.Forms.ListBox(); + this.groupBox4 = new System.Windows.Forms.GroupBox(); + this.propertyRoom = new System.Windows.Forms.PropertyGrid(); + this.groupBox5 = new System.Windows.Forms.GroupBox(); + this.btnSelectDoorway = new System.Windows.Forms.Button(); + this.label1 = new System.Windows.Forms.Label(); + this.btnEast = new System.Windows.Forms.Button(); + this.btnWest = new System.Windows.Forms.Button(); + this.btnDown = new System.Windows.Forms.Button(); + this.btnSouth = new System.Windows.Forms.Button(); + this.btnNorth = new System.Windows.Forms.Button(); + this.btnUp = new System.Windows.Forms.Button(); + this.progressBar1 = new System.Windows.Forms.ProgressBar(); + this.groupBox1.SuspendLayout(); + this.groupBox2.SuspendLayout(); + this.groupBox3.SuspendLayout(); + this.groupBox4.SuspendLayout(); + this.groupBox5.SuspendLayout(); + this.SuspendLayout(); + // + // groupBox1 + // + this.groupBox1.Controls.Add(this.lstRealms); + this.groupBox1.Location = new System.Drawing.Point(0, 0); + this.groupBox1.Name = "groupBox1"; + this.groupBox1.Size = new System.Drawing.Size(170, 155); + this.groupBox1.TabIndex = 0; + this.groupBox1.TabStop = false; + this.groupBox1.Text = "Available Realms"; + // + // lstRealms + // + this.lstRealms.Dock = System.Windows.Forms.DockStyle.Fill; + this.lstRealms.FormattingEnabled = true; + this.lstRealms.Location = new System.Drawing.Point(3, 16); + this.lstRealms.Name = "lstRealms"; + this.lstRealms.Size = new System.Drawing.Size(164, 134); + this.lstRealms.TabIndex = 0; + this.lstRealms.SelectedIndexChanged += new System.EventHandler(this.lstRealms_SelectedIndexChanged); + // + // groupBox2 + // + this.groupBox2.Controls.Add(this.lstZones); + this.groupBox2.Location = new System.Drawing.Point(0, 161); + this.groupBox2.Name = "groupBox2"; + this.groupBox2.Size = new System.Drawing.Size(170, 286); + this.groupBox2.TabIndex = 1; + this.groupBox2.TabStop = false; + this.groupBox2.Text = "Zones contained within Realm"; + // + // lstZones + // + this.lstZones.Dock = System.Windows.Forms.DockStyle.Fill; + this.lstZones.FormattingEnabled = true; + this.lstZones.Location = new System.Drawing.Point(3, 16); + this.lstZones.Name = "lstZones"; + this.lstZones.Size = new System.Drawing.Size(164, 264); + this.lstZones.TabIndex = 0; + this.lstZones.SelectedIndexChanged += new System.EventHandler(this.lstZones_SelectedIndexChanged); + // + // groupBox3 + // + this.groupBox3.Controls.Add(this.lstRooms); + this.groupBox3.Location = new System.Drawing.Point(173, 0); + this.groupBox3.Name = "groupBox3"; + this.groupBox3.Size = new System.Drawing.Size(182, 221); + this.groupBox3.TabIndex = 2; + this.groupBox3.TabStop = false; + this.groupBox3.Text = "Available Rooms"; + // + // lstRooms + // + this.lstRooms.Dock = System.Windows.Forms.DockStyle.Fill; + this.lstRooms.FormattingEnabled = true; + this.lstRooms.Location = new System.Drawing.Point(3, 16); + this.lstRooms.Name = "lstRooms"; + this.lstRooms.Size = new System.Drawing.Size(176, 199); + this.lstRooms.TabIndex = 0; + this.lstRooms.SelectedIndexChanged += new System.EventHandler(this.lstRooms_SelectedIndexChanged); + // + // groupBox4 + // + this.groupBox4.Controls.Add(this.propertyRoom); + this.groupBox4.Location = new System.Drawing.Point(176, 221); + this.groupBox4.Name = "groupBox4"; + this.groupBox4.Size = new System.Drawing.Size(182, 226); + this.groupBox4.TabIndex = 3; + this.groupBox4.TabStop = false; + this.groupBox4.Text = "Room Property Preview"; + // + // propertyRoom + // + this.propertyRoom.Dock = System.Windows.Forms.DockStyle.Fill; + this.propertyRoom.Enabled = false; + this.propertyRoom.HelpVisible = false; + this.propertyRoom.Location = new System.Drawing.Point(3, 16); + this.propertyRoom.Name = "propertyRoom"; + this.propertyRoom.Size = new System.Drawing.Size(176, 207); + this.propertyRoom.TabIndex = 0; + this.propertyRoom.ToolbarVisible = false; + // + // groupBox5 + // + this.groupBox5.Controls.Add(this.btnSelectDoorway); + this.groupBox5.Controls.Add(this.label1); + this.groupBox5.Controls.Add(this.btnEast); + this.groupBox5.Controls.Add(this.btnWest); + this.groupBox5.Controls.Add(this.btnDown); + this.groupBox5.Controls.Add(this.btnSouth); + this.groupBox5.Controls.Add(this.btnNorth); + this.groupBox5.Controls.Add(this.btnUp); + this.groupBox5.Location = new System.Drawing.Point(358, 0); + this.groupBox5.Name = "groupBox5"; + this.groupBox5.Size = new System.Drawing.Size(383, 447); + this.groupBox5.TabIndex = 4; + this.groupBox5.TabStop = false; + this.groupBox5.Text = "Doorway Designer"; + // + // btnSelectDoorway + // + this.btnSelectDoorway.Location = new System.Drawing.Point(256, 421); + this.btnSelectDoorway.Name = "btnSelectDoorway"; + this.btnSelectDoorway.Size = new System.Drawing.Size(118, 23); + this.btnSelectDoorway.TabIndex = 15; + this.btnSelectDoorway.Text = "Select Doorway"; + this.btnSelectDoorway.UseVisualStyleBackColor = true; + this.btnSelectDoorway.Click += new System.EventHandler(this.btnSelectDoorway_Click); + // + // label1 + // + this.label1.AutoSize = true; + this.label1.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.label1.Location = new System.Drawing.Point(3, 428); + this.label1.Name = "label1"; + this.label1.Size = new System.Drawing.Size(114, 13); + this.label1.TabIndex = 14; + this.label1.Text = "Selected Doorway:"; + // + // btnEast + // + this.btnEast.BackColor = System.Drawing.Color.Gray; + this.btnEast.FlatAppearance.BorderSize = 2; + this.btnEast.FlatAppearance.MouseOverBackColor = System.Drawing.Color.FromArgb(((int)(((byte)(224)))), ((int)(((byte)(224)))), ((int)(((byte)(224))))); + this.btnEast.FlatStyle = System.Windows.Forms.FlatStyle.Flat; + this.btnEast.Font = new System.Drawing.Font("Microsoft Sans Serif", 9.75F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.btnEast.Location = new System.Drawing.Point(256, 161); + this.btnEast.Name = "btnEast"; + this.btnEast.Size = new System.Drawing.Size(118, 93); + this.btnEast.TabIndex = 13; + this.btnEast.Text = "East"; + this.btnEast.UseVisualStyleBackColor = false; + this.btnEast.Click += new System.EventHandler(this.button_Click); + // + // btnWest + // + this.btnWest.BackColor = System.Drawing.Color.Gray; + this.btnWest.FlatAppearance.BorderSize = 2; + this.btnWest.FlatAppearance.MouseOverBackColor = System.Drawing.Color.FromArgb(((int)(((byte)(224)))), ((int)(((byte)(224)))), ((int)(((byte)(224))))); + this.btnWest.FlatStyle = System.Windows.Forms.FlatStyle.Flat; + this.btnWest.Font = new System.Drawing.Font("Microsoft Sans Serif", 9.75F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.btnWest.Location = new System.Drawing.Point(6, 161); + this.btnWest.Name = "btnWest"; + this.btnWest.Size = new System.Drawing.Size(118, 93); + this.btnWest.TabIndex = 12; + this.btnWest.Text = "West"; + this.btnWest.UseVisualStyleBackColor = false; + this.btnWest.Click += new System.EventHandler(this.button_Click); + // + // btnDown + // + this.btnDown.BackColor = System.Drawing.Color.Gray; + this.btnDown.FlatAppearance.BorderSize = 2; + this.btnDown.FlatAppearance.MouseOverBackColor = System.Drawing.Color.FromArgb(((int)(((byte)(224)))), ((int)(((byte)(224)))), ((int)(((byte)(224))))); + this.btnDown.FlatStyle = System.Windows.Forms.FlatStyle.Flat; + this.btnDown.Font = new System.Drawing.Font("Microsoft Sans Serif", 9.75F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.btnDown.Location = new System.Drawing.Point(132, 353); + this.btnDown.Name = "btnDown"; + this.btnDown.Size = new System.Drawing.Size(118, 51); + this.btnDown.TabIndex = 11; + this.btnDown.Text = "Down"; + this.btnDown.UseVisualStyleBackColor = false; + this.btnDown.Click += new System.EventHandler(this.button_Click); + // + // btnSouth + // + this.btnSouth.BackColor = System.Drawing.Color.Gray; + this.btnSouth.FlatAppearance.BorderSize = 2; + this.btnSouth.FlatAppearance.MouseOverBackColor = System.Drawing.Color.FromArgb(((int)(((byte)(224)))), ((int)(((byte)(224)))), ((int)(((byte)(224))))); + this.btnSouth.FlatStyle = System.Windows.Forms.FlatStyle.Flat; + this.btnSouth.Font = new System.Drawing.Font("Microsoft Sans Serif", 9.75F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.btnSouth.Location = new System.Drawing.Point(132, 261); + this.btnSouth.Name = "btnSouth"; + this.btnSouth.Size = new System.Drawing.Size(118, 86); + this.btnSouth.TabIndex = 10; + this.btnSouth.Text = "South"; + this.btnSouth.UseVisualStyleBackColor = false; + this.btnSouth.Click += new System.EventHandler(this.button_Click); + // + // btnNorth + // + this.btnNorth.BackColor = System.Drawing.Color.Gray; + this.btnNorth.FlatAppearance.BorderSize = 2; + this.btnNorth.FlatAppearance.MouseOverBackColor = System.Drawing.Color.FromArgb(((int)(((byte)(224)))), ((int)(((byte)(224)))), ((int)(((byte)(224))))); + this.btnNorth.FlatStyle = System.Windows.Forms.FlatStyle.Flat; + this.btnNorth.Font = new System.Drawing.Font("Microsoft Sans Serif", 9.75F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.btnNorth.Location = new System.Drawing.Point(132, 69); + this.btnNorth.Name = "btnNorth"; + this.btnNorth.Size = new System.Drawing.Size(118, 86); + this.btnNorth.TabIndex = 9; + this.btnNorth.Text = "North"; + this.btnNorth.UseVisualStyleBackColor = false; + this.btnNorth.Click += new System.EventHandler(this.button_Click); + // + // btnUp + // + this.btnUp.BackColor = System.Drawing.Color.Gray; + this.btnUp.FlatAppearance.BorderSize = 2; + this.btnUp.FlatAppearance.MouseOverBackColor = System.Drawing.Color.FromArgb(((int)(((byte)(224)))), ((int)(((byte)(224)))), ((int)(((byte)(224))))); + this.btnUp.FlatStyle = System.Windows.Forms.FlatStyle.Flat; + this.btnUp.Font = new System.Drawing.Font("Microsoft Sans Serif", 9.75F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.btnUp.Location = new System.Drawing.Point(132, 12); + this.btnUp.Name = "btnUp"; + this.btnUp.Size = new System.Drawing.Size(118, 51); + this.btnUp.TabIndex = 8; + this.btnUp.Text = "Up"; + this.btnUp.UseVisualStyleBackColor = false; + this.btnUp.Click += new System.EventHandler(this.button_Click); + // + // progressBar1 + // + this.progressBar1.Dock = System.Windows.Forms.DockStyle.Bottom; + this.progressBar1.Location = new System.Drawing.Point(0, 426); + this.progressBar1.Name = "progressBar1"; + this.progressBar1.Size = new System.Drawing.Size(744, 23); + this.progressBar1.TabIndex = 5; + this.progressBar1.Visible = false; + // + // DoorwayManager + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size(744, 449); + this.Controls.Add(this.progressBar1); + 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.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedSingle; + this.MaximizeBox = false; + this.MinimizeBox = false; + this.Name = "DoorwayManager"; + this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen; + this.Text = "Doorway Manager"; + this.groupBox1.ResumeLayout(false); + this.groupBox2.ResumeLayout(false); + this.groupBox3.ResumeLayout(false); + this.groupBox4.ResumeLayout(false); + this.groupBox5.ResumeLayout(false); + this.groupBox5.PerformLayout(); + this.ResumeLayout(false); + + } + + #endregion + + private System.Windows.Forms.GroupBox groupBox1; + private System.Windows.Forms.ListBox lstRealms; + private System.Windows.Forms.GroupBox groupBox2; + private System.Windows.Forms.ListBox lstZones; + private System.Windows.Forms.GroupBox groupBox3; + private System.Windows.Forms.ListBox lstRooms; + private System.Windows.Forms.GroupBox groupBox4; + private System.Windows.Forms.PropertyGrid propertyRoom; + private System.Windows.Forms.GroupBox groupBox5; + private System.Windows.Forms.Button btnEast; + private System.Windows.Forms.Button btnWest; + private System.Windows.Forms.Button btnDown; + private System.Windows.Forms.Button btnSouth; + private System.Windows.Forms.Button btnNorth; + private System.Windows.Forms.Button btnUp; + private System.Windows.Forms.Label label1; + private System.Windows.Forms.Button btnSelectDoorway; + private System.Windows.Forms.ProgressBar progressBar1; + } +} \ No newline at end of file diff --git a/Mud Designer/Editors/DoorwayManager.cs b/Mud Designer/Editors/DoorwayManager.cs new file mode 100644 index 0000000..c278c16 --- /dev/null +++ b/Mud Designer/Editors/DoorwayManager.cs @@ -0,0 +1,174 @@ +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Data; +using System.Drawing; +using System.Linq; +using System.Text; +using System.Windows.Forms; +using System.IO; + +using MudDesigner.MudEngine.FileSystem; +using MudDesigner.MudEngine.GameManagement; +using MudDesigner.MudEngine.GameObjects; +using MudDesigner.MudEngine.GameObjects.Environment; + +namespace MudDesigner.Editors +{ + public partial class DoorwayManager : Form + { + internal List rooms; + internal List zones; + internal List realms; + internal Room linkedRoom = new Room(); + internal Zone linkedZone = new Zone(); + internal Realm linkedRealm = new Realm(); + internal AvailableTravelDirections TravelDirection = AvailableTravelDirections.None; + + public DoorwayManager(AvailableTravelDirections TravelDirection) + { + InitializeComponent(); + realms = new List(); + rooms = new List(); + zones = new List(); + + //set the window title to show the room being connected to + //along with the travel direction + this.Text += ": " + Program.Room.Name + "->" + TravelDirection.ToString(); + + //get the realm paths, and find all the realm files + string realmRoot = FileManager.GetDataPath(SaveDataTypes.Realms); + string[] realmFiles = Directory.GetFiles(realmRoot, "*.realm", SearchOption.AllDirectories); + + //loop through each realm file found, load the realm + ///and place it in the realm collection + foreach (string file in realmFiles) + { + Realm r = new Realm(); + r = (Realm)FileManager.Load(file, r); + realms.Add(r); + lstRealms.Items.Add(r.Name); + } + } + + private void lstRealms_SelectedIndexChanged(object sender, EventArgs e) + { + if (lstRealms.SelectedIndex == -1) + return; + + string realmPath = Path.Combine(FileManager.GetDataPath(SaveDataTypes.Realms), lstRealms.SelectedItem.ToString()); + string[] files = Directory.GetFiles(realmPath, "*.zone", SearchOption.AllDirectories); + + //only show the progress bar if there is a large + //number of zones to load. + progressBar1.Value = 0; + if (files.Length > 0) + progressBar1.Visible = true; + + progressBar1.Maximum = files.Length * 2; + + foreach (string file in files) + { + Zone z = new Zone(); + z = (Zone)FileManager.Load(file, z); + zones.Add(z); + lstZones.Items.Add(z.Name); + progressBar1.Increment(1); + } + + foreach (Realm realm in realms) + { + if (realm.Name == lstRealms.SelectedItem.ToString()) + { + linkedRealm = realm; + break; + } + progressBar1.Increment(1); + } + + progressBar1.Visible = false; + } + + private void lstZones_SelectedIndexChanged(object sender, EventArgs e) + { + if (lstZones.SelectedIndex == -1) + return; + + string realmPath = Path.Combine(FileManager.GetDataPath(SaveDataTypes.Realms), lstRealms.SelectedItem.ToString()); + string zonePath = Path.Combine(realmPath, lstZones.SelectedItem.ToString()); + string[] files = Directory.GetFiles(zonePath, "*.room"); + + //only show the progress bar if there is a large number + //of rooms to load + progressBar1.Value = 0; + if (files.Length > 0) + progressBar1.Visible = true; + + progressBar1.Maximum = files.Length * 2; + + foreach (string file in files) + { + Room r = new Room(); + r = (Room)FileManager.Load(file, r); + rooms.Add(r); + lstRooms.Items.Add(r.Name); + progressBar1.Increment(1); + } + + foreach (Zone zone in zones) + { + if (zone.Name == lstZones.SelectedItem.ToString()) + { + linkedZone = zone; + break; + } + progressBar1.Increment(1); + } + progressBar1.Visible = false; + } + + private void lstRooms_SelectedIndexChanged(object sender, EventArgs e) + { + if (lstRooms.SelectedIndex == -1) + return; + + foreach (Room room in rooms) + { + if (room.Name == lstRooms.SelectedItem.ToString()) + { + linkedRoom = room; + break; + } + } + + propertyRoom.SelectedObject = linkedRoom; + } + + private void button_Click(object sender, EventArgs e) + { + Button button = (Button)sender; + TravelDirection = TravelDirections.GetTravelDirectionValue(button.Text); + label1.Text = "Selected Doorway: " + TravelDirection.ToString(); + } + + private void btnSelectDoorway_Click(object sender, EventArgs e) + { + if (TravelDirection == AvailableTravelDirections.None) + { + MessageBox.Show("You must select a doorway to link with.", + "Doorway Manager", MessageBoxButtons.OK, MessageBoxIcon.Exclamation); + return; + } + + //Make sure we have all of our environments selected + if (lstRooms.SelectedIndex == -1) + { + MessageBox.Show("You must select a Realm, Zone and Room prior to selecting this doorway.", + "Doorway Manager", MessageBoxButtons.OK, MessageBoxIcon.Exclamation); + return; + } + + this.Close(); + } + } +} diff --git a/Mud Designer/Editors/DoorwayManager.resx b/Mud Designer/Editors/DoorwayManager.resx new file mode 100644 index 0000000..ff31a6d --- /dev/null +++ b/Mud Designer/Editors/DoorwayManager.resx @@ -0,0 +1,120 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/Mud Designer/Editors/ZoneBuilder.cs b/Mud Designer/Editors/ZoneBuilder.cs index 07c7d0d..00cf6ff 100644 --- a/Mud Designer/Editors/ZoneBuilder.cs +++ b/Mud Designer/Editors/ZoneBuilder.cs @@ -24,6 +24,9 @@ namespace MudDesigner.Editors bool IsRealmLoaded = false; bool IsZoneLoaded = false; bool IsCreatingZone = false; + bool IsRoomLoaded = false; + bool IsCreatingRoom = false; + List _Zones = new List(); public ZoneBuilder() @@ -98,7 +101,6 @@ namespace MudDesigner.Editors //Zone is in 'create' mode, and has not been saved/loaded fully yet. IsZoneLoaded = false; IsCreatingZone = true; - //Reset our room, as we are creating a new zone, there will be no rooms. propertyRoom.SelectedObject = null; lstRooms.Items.Clear(); @@ -174,6 +176,8 @@ namespace MudDesigner.Editors this.Text = "Zone Builder: (" + Program.Realm.Name + ")"; IsRealmLoaded = true; + IsZoneLoaded = false; + IsRoomLoaded = false; //realm is loaded, now clear out the list of zones & rooms and show the zones contained //within the new realm @@ -245,6 +249,7 @@ namespace MudDesigner.Editors propertyZone.SelectedObject = Program.Zone; IsZoneLoaded = true; IsCreatingZone = false; + IsRoomLoaded = false; } private void btnNewRoom_Click(object sender, EventArgs e) @@ -268,10 +273,20 @@ namespace MudDesigner.Editors Program.Room = new Room(); Program.Room.Zone = Program.Zone.Name; propertyRoom.SelectedObject = Program.Room; + IsRoomLoaded = false; + IsCreatingRoom = true; } private void btnSaveRoom_Click(object sender, EventArgs e) { + if (!IsRoomLoaded) + { + if (!IsCreatingRoom) + { + MessageBox.Show("You must create a new Room in order to save.", "Zone Builder", MessageBoxButtons.OK); + return; + } + } //Get the realm, zone & room path setup first string realmPath = System.IO.Path.Combine(FileManager.GetDataPath(SaveDataTypes.Realms), Program.Realm.Name); string zonePath = Path.Combine(realmPath, Program.Zone.Name); @@ -291,6 +306,9 @@ namespace MudDesigner.Editors //add it to the list box if it isn't already there if (!lstRooms.Items.Contains(Program.Room.Name)) lstRooms.Items.Add(Program.Room.Name); + + IsRoomLoaded = true; + IsCreatingRoom = false; } private void btnLoadRoom_Click(object sender, EventArgs e) @@ -334,6 +352,82 @@ namespace MudDesigner.Editors } propertyRoom.SelectedObject = Program.Room; + IsRoomLoaded = true; + IsCreatingRoom = false; + } + + private void doorwayMenuStrip_Opening(object sender, CancelEventArgs e) + { + if (sender is ContextMenuStrip) + { + ContextMenuStrip mnu = (ContextMenuStrip)sender; + Button btn = (Button)mnu.SourceControl; + mnuInstallDoor.Text = "Install " + btn.Text + " doorway."; + + } + } + + private void installDoorwayToAnotherZoneToolStripMenuItem_Click(object sender, EventArgs e) + { + if (!IsRoomLoaded) + { + MessageBox.Show("You must load a Room prior to any doorway installation attempts.", + "Zone Builder", MessageBoxButtons.OK, MessageBoxIcon.Exclamation); + return; + } + + //Split the menus text into an array, since the menu + //is dynamically generating it's text, depending on the + //button it is right clicked over. + string[] menuWords = mnuInstallDoor.Text.Split(' '); + + //Create an array of all available travel directions + AvailableTravelDirections travelDirection = new AvailableTravelDirections(); + Array values = Enum.GetValues(typeof(AvailableTravelDirections)); + + //Loop through each word in the menu, until we find a word + //that matches a travel direction. + foreach (string word in menuWords) + { + foreach (int value in values) + { + //get a copy of the current travel direction in the array + string displayName = Enum.GetName(typeof(AvailableTravelDirections), value); + + //check if the current travel direction matches the current word in + //the context menu + if (displayName == word) + { + //If we have a match, store the travel direction so + //we can use it on our Doorway manager + travelDirection = (AvailableTravelDirections)Enum.Parse(typeof(AvailableTravelDirections), displayName); + } + } + } + + //Instance a new Doorway manager + DoorwayManager form = new DoorwayManager(travelDirection); + form.Show(); + this.Hide(); + + while (form.Created) + Application.DoEvents(); + + this.Show(); + + Control[] controls = this.Controls.Find("btn" + travelDirection.ToString(), true); + + controls[0].Text = travelDirection.ToString() + "\nInstalled"; + Help.SetToolTip(controls[0], travelDirection.ToString() + " Doorway Installed.\n\n" + + form.linkedRealm.Name + "->" + form.linkedZone.Name + "->" + form.linkedRoom.Name); + + Door door = new Door(travelDirection); + Door.ConnectedRoom d = new Door.ConnectedRoom(); + d.Realm = form.linkedRealm.Name; + d.Room = form.linkedRoom.Name; + d.Zone = form.linkedZone.Name; + door.TravelRoom = d; + Program.Room.InstalledDoors.Add(door); } } } diff --git a/Mud Designer/Editors/ZoneBuilder.designer.cs b/Mud Designer/Editors/ZoneBuilder.designer.cs index 11e9c33..1e8ae2d 100644 --- a/Mud Designer/Editors/ZoneBuilder.designer.cs +++ b/Mud Designer/Editors/ZoneBuilder.designer.cs @@ -29,6 +29,7 @@ private void InitializeComponent() { this.components = new System.ComponentModel.Container(); + System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(ZoneBuilder)); this.containerMain = new System.Windows.Forms.SplitContainer(); this.groupBox1 = new System.Windows.Forms.GroupBox(); this.lstZones = new System.Windows.Forms.ListBox(); @@ -56,6 +57,20 @@ this.btnDeleteRoom = new System.Windows.Forms.Button(); this.btnNewRoom = new System.Windows.Forms.Button(); this.tabPage2 = new System.Windows.Forms.TabPage(); + this.groupBox8 = new System.Windows.Forms.GroupBox(); + this.btnEast = new System.Windows.Forms.Button(); + this.doorwayMenuStrip = new System.Windows.Forms.ContextMenuStrip(this.components); + this.mnuInstallDoor = new System.Windows.Forms.ToolStripMenuItem(); + this.installDoorwayToAnotherZoneToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.toolStripMenuItem1 = new System.Windows.Forms.ToolStripSeparator(); + this.installReverseDoorwayToSelectedRoomToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.toolStripMenuItem2 = new System.Windows.Forms.ToolStripSeparator(); + this.mnuClearDoorway = new System.Windows.Forms.ToolStripMenuItem(); + this.btnWest = new System.Windows.Forms.Button(); + this.btnDown = new System.Windows.Forms.Button(); + this.btnSouth = new System.Windows.Forms.Button(); + this.btnNorth = new System.Windows.Forms.Button(); + this.btnUp = new System.Windows.Forms.Button(); this.Help = new System.Windows.Forms.ToolTip(this.components); this.containerMain.Panel1.SuspendLayout(); this.containerMain.Panel2.SuspendLayout(); @@ -71,6 +86,9 @@ this.groupBox7.SuspendLayout(); this.groupBox6.SuspendLayout(); this.groupBox5.SuspendLayout(); + this.tabPage2.SuspendLayout(); + this.groupBox8.SuspendLayout(); + this.doorwayMenuStrip.SuspendLayout(); this.SuspendLayout(); // // containerMain @@ -361,6 +379,7 @@ // // tabPage2 // + this.tabPage2.Controls.Add(this.groupBox8); this.tabPage2.Location = new System.Drawing.Point(4, 22); this.tabPage2.Name = "tabPage2"; this.tabPage2.Padding = new System.Windows.Forms.Padding(3); @@ -369,9 +388,167 @@ this.tabPage2.Text = "Room Doorways"; this.tabPage2.UseVisualStyleBackColor = true; // + // groupBox8 + // + this.groupBox8.Controls.Add(this.btnEast); + this.groupBox8.Controls.Add(this.btnWest); + this.groupBox8.Controls.Add(this.btnDown); + this.groupBox8.Controls.Add(this.btnSouth); + this.groupBox8.Controls.Add(this.btnNorth); + this.groupBox8.Controls.Add(this.btnUp); + this.groupBox8.Dock = System.Windows.Forms.DockStyle.Fill; + this.groupBox8.Location = new System.Drawing.Point(3, 3); + this.groupBox8.Name = "groupBox8"; + this.groupBox8.Size = new System.Drawing.Size(458, 407); + this.groupBox8.TabIndex = 0; + this.groupBox8.TabStop = false; + this.groupBox8.Text = "Available Travel Directions"; + // + // btnEast + // + this.btnEast.BackColor = System.Drawing.Color.Gray; + this.btnEast.ContextMenuStrip = this.doorwayMenuStrip; + this.btnEast.FlatAppearance.BorderSize = 2; + this.btnEast.FlatAppearance.MouseOverBackColor = System.Drawing.Color.FromArgb(((int)(((byte)(224)))), ((int)(((byte)(224)))), ((int)(((byte)(224))))); + this.btnEast.FlatStyle = System.Windows.Forms.FlatStyle.Flat; + this.btnEast.Font = new System.Drawing.Font("Microsoft Sans Serif", 9.75F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.btnEast.Location = new System.Drawing.Point(334, 159); + this.btnEast.Name = "btnEast"; + this.btnEast.Size = new System.Drawing.Size(118, 93); + this.btnEast.TabIndex = 7; + this.btnEast.Text = "East"; + this.btnEast.UseVisualStyleBackColor = false; + // + // doorwayMenuStrip + // + this.doorwayMenuStrip.Items.AddRange(new System.Windows.Forms.ToolStripItem[] { + this.mnuInstallDoor, + this.toolStripMenuItem2, + this.mnuClearDoorway}); + this.doorwayMenuStrip.Name = "doorwayMenuStrip"; + this.doorwayMenuStrip.Size = new System.Drawing.Size(162, 76); + this.doorwayMenuStrip.Opening += new System.ComponentModel.CancelEventHandler(this.doorwayMenuStrip_Opening); + // + // mnuInstallDoor + // + this.mnuInstallDoor.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { + this.installDoorwayToAnotherZoneToolStripMenuItem, + this.toolStripMenuItem1, + this.installReverseDoorwayToSelectedRoomToolStripMenuItem}); + this.mnuInstallDoor.Name = "mnuInstallDoor"; + this.mnuInstallDoor.Size = new System.Drawing.Size(161, 22); + this.mnuInstallDoor.Text = "Install New Door"; + // + // installDoorwayToAnotherZoneToolStripMenuItem + // + this.installDoorwayToAnotherZoneToolStripMenuItem.Name = "installDoorwayToAnotherZoneToolStripMenuItem"; + this.installDoorwayToAnotherZoneToolStripMenuItem.Size = new System.Drawing.Size(293, 22); + this.installDoorwayToAnotherZoneToolStripMenuItem.Text = "Install Doorway to another Zone"; + this.installDoorwayToAnotherZoneToolStripMenuItem.ToolTipText = "Opens the Doorway Manager giving you the ability\r\nto link a Room located in a dif" + + "ferent Zone or Realm."; + this.installDoorwayToAnotherZoneToolStripMenuItem.Click += new System.EventHandler(this.installDoorwayToAnotherZoneToolStripMenuItem_Click); + // + // toolStripMenuItem1 + // + this.toolStripMenuItem1.Name = "toolStripMenuItem1"; + this.toolStripMenuItem1.Size = new System.Drawing.Size(290, 6); + // + // installReverseDoorwayToSelectedRoomToolStripMenuItem + // + this.installReverseDoorwayToSelectedRoomToolStripMenuItem.Name = "installReverseDoorwayToSelectedRoomToolStripMenuItem"; + this.installReverseDoorwayToSelectedRoomToolStripMenuItem.Size = new System.Drawing.Size(293, 22); + this.installReverseDoorwayToSelectedRoomToolStripMenuItem.Text = "Install Reverse Doorway to selected Room"; + this.installReverseDoorwayToSelectedRoomToolStripMenuItem.ToolTipText = resources.GetString("installReverseDoorwayToSelectedRoomToolStripMenuItem.ToolTipText"); + // + // toolStripMenuItem2 + // + this.toolStripMenuItem2.Name = "toolStripMenuItem2"; + this.toolStripMenuItem2.Size = new System.Drawing.Size(158, 6); + // + // mnuClearDoorway + // + this.mnuClearDoorway.Name = "mnuClearDoorway"; + this.mnuClearDoorway.Size = new System.Drawing.Size(161, 22); + this.mnuClearDoorway.Text = "Clear Doorway"; + // + // btnWest + // + this.btnWest.BackColor = System.Drawing.Color.Gray; + this.btnWest.ContextMenuStrip = this.doorwayMenuStrip; + this.btnWest.FlatAppearance.BorderSize = 2; + this.btnWest.FlatAppearance.MouseOverBackColor = System.Drawing.Color.FromArgb(((int)(((byte)(224)))), ((int)(((byte)(224)))), ((int)(((byte)(224))))); + this.btnWest.FlatStyle = System.Windows.Forms.FlatStyle.Flat; + this.btnWest.Font = new System.Drawing.Font("Microsoft Sans Serif", 9.75F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.btnWest.Location = new System.Drawing.Point(6, 159); + this.btnWest.Name = "btnWest"; + this.btnWest.Size = new System.Drawing.Size(118, 93); + this.btnWest.TabIndex = 6; + this.btnWest.Text = "West"; + this.btnWest.UseVisualStyleBackColor = false; + // + // btnDown + // + this.btnDown.BackColor = System.Drawing.Color.Gray; + this.btnDown.ContextMenuStrip = this.doorwayMenuStrip; + this.btnDown.FlatAppearance.BorderSize = 2; + this.btnDown.FlatAppearance.MouseOverBackColor = System.Drawing.Color.FromArgb(((int)(((byte)(224)))), ((int)(((byte)(224)))), ((int)(((byte)(224))))); + this.btnDown.FlatStyle = System.Windows.Forms.FlatStyle.Flat; + this.btnDown.Font = new System.Drawing.Font("Microsoft Sans Serif", 9.75F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.btnDown.Location = new System.Drawing.Point(166, 350); + this.btnDown.Name = "btnDown"; + this.btnDown.Size = new System.Drawing.Size(118, 51); + this.btnDown.TabIndex = 5; + this.btnDown.Text = "Down"; + this.btnDown.UseVisualStyleBackColor = false; + // + // btnSouth + // + this.btnSouth.BackColor = System.Drawing.Color.Gray; + this.btnSouth.ContextMenuStrip = this.doorwayMenuStrip; + this.btnSouth.FlatAppearance.BorderSize = 2; + this.btnSouth.FlatAppearance.MouseOverBackColor = System.Drawing.Color.FromArgb(((int)(((byte)(224)))), ((int)(((byte)(224)))), ((int)(((byte)(224))))); + this.btnSouth.FlatStyle = System.Windows.Forms.FlatStyle.Flat; + this.btnSouth.Font = new System.Drawing.Font("Microsoft Sans Serif", 9.75F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.btnSouth.Location = new System.Drawing.Point(166, 258); + this.btnSouth.Name = "btnSouth"; + this.btnSouth.Size = new System.Drawing.Size(118, 86); + this.btnSouth.TabIndex = 4; + this.btnSouth.Text = "South"; + this.btnSouth.UseVisualStyleBackColor = false; + // + // btnNorth + // + this.btnNorth.BackColor = System.Drawing.Color.Gray; + this.btnNorth.ContextMenuStrip = this.doorwayMenuStrip; + this.btnNorth.FlatAppearance.BorderSize = 2; + this.btnNorth.FlatAppearance.MouseOverBackColor = System.Drawing.Color.FromArgb(((int)(((byte)(224)))), ((int)(((byte)(224)))), ((int)(((byte)(224))))); + this.btnNorth.FlatStyle = System.Windows.Forms.FlatStyle.Flat; + this.btnNorth.Font = new System.Drawing.Font("Microsoft Sans Serif", 9.75F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.btnNorth.Location = new System.Drawing.Point(166, 67); + this.btnNorth.Name = "btnNorth"; + this.btnNorth.Size = new System.Drawing.Size(118, 86); + this.btnNorth.TabIndex = 3; + this.btnNorth.Text = "North"; + this.btnNorth.UseVisualStyleBackColor = false; + // + // btnUp + // + this.btnUp.BackColor = System.Drawing.Color.Gray; + this.btnUp.ContextMenuStrip = this.doorwayMenuStrip; + this.btnUp.FlatAppearance.BorderSize = 2; + this.btnUp.FlatAppearance.MouseOverBackColor = System.Drawing.Color.FromArgb(((int)(((byte)(224)))), ((int)(((byte)(224)))), ((int)(((byte)(224))))); + this.btnUp.FlatStyle = System.Windows.Forms.FlatStyle.Flat; + this.btnUp.Font = new System.Drawing.Font("Microsoft Sans Serif", 9.75F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.btnUp.Location = new System.Drawing.Point(166, 10); + this.btnUp.Name = "btnUp"; + this.btnUp.Size = new System.Drawing.Size(118, 51); + this.btnUp.TabIndex = 0; + this.btnUp.Text = "Up"; + this.btnUp.UseVisualStyleBackColor = false; + // // Help // - this.Help.AutoPopDelay = 5000; + this.Help.AutoPopDelay = 12000; this.Help.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(255)))), ((int)(((byte)(255)))), ((int)(((byte)(128))))); this.Help.InitialDelay = 1000; this.Help.IsBalloon = true; @@ -404,6 +581,9 @@ this.groupBox7.ResumeLayout(false); this.groupBox6.ResumeLayout(false); this.groupBox5.ResumeLayout(false); + this.tabPage2.ResumeLayout(false); + this.groupBox8.ResumeLayout(false); + this.doorwayMenuStrip.ResumeLayout(false); this.ResumeLayout(false); } @@ -438,6 +618,20 @@ private System.Windows.Forms.ListBox lstRooms; private System.Windows.Forms.GroupBox groupBox7; private System.Windows.Forms.PropertyGrid propertyRoom; + private System.Windows.Forms.GroupBox groupBox8; + private System.Windows.Forms.Button btnUp; + private System.Windows.Forms.Button btnNorth; + private System.Windows.Forms.Button btnDown; + private System.Windows.Forms.Button btnSouth; + private System.Windows.Forms.Button btnWest; + private System.Windows.Forms.Button btnEast; + private System.Windows.Forms.ContextMenuStrip doorwayMenuStrip; + private System.Windows.Forms.ToolStripMenuItem mnuInstallDoor; + private System.Windows.Forms.ToolStripSeparator toolStripMenuItem2; + private System.Windows.Forms.ToolStripMenuItem mnuClearDoorway; + private System.Windows.Forms.ToolStripMenuItem installDoorwayToAnotherZoneToolStripMenuItem; + private System.Windows.Forms.ToolStripSeparator toolStripMenuItem1; + private System.Windows.Forms.ToolStripMenuItem installReverseDoorwayToSelectedRoomToolStripMenuItem; } } \ No newline at end of file diff --git a/Mud Designer/Editors/ZoneBuilder.resx b/Mud Designer/Editors/ZoneBuilder.resx index f077234..30b7354 100644 --- a/Mud Designer/Editors/ZoneBuilder.resx +++ b/Mud Designer/Editors/ZoneBuilder.resx @@ -120,4 +120,18 @@ 17, 17 + + 94, 17 + + + Automatically links the currently loaded Room & its Doorway +to the opposite doorway contained within the currently selected +room. This option is only available for Rooms within the same Zone. + +Example: Reverse North doorway would be South doorway. + +Note that the currently selected room is what will be linked to, +it does not need to be loaded in order to be linked. Loading it will +unload the currently loaded room. + \ No newline at end of file diff --git a/Mud Designer/Mud Designer.csproj b/Mud Designer/Mud Designer.csproj index dc26a23..95a7919 100644 --- a/Mud Designer/Mud Designer.csproj +++ b/Mud Designer/Mud Designer.csproj @@ -12,6 +12,21 @@ Mud Designer v3.5 512 + publish\ + true + Disk + false + Foreground + 7 + Days + false + false + true + 0 + 1.0.0.%2a + false + false + true true @@ -52,6 +67,12 @@ + + Form + + + DoorwayManager.cs + Form @@ -112,6 +133,10 @@ CurrencyEditor.cs Designer + + DoorwayManager.cs + Designer + ExistingRealms.cs Designer @@ -154,6 +179,28 @@ + + + False + .NET Framework 2.0 %28x86%29 + false + + + False + .NET Framework 3.0 %28x86%29 + false + + + False + .NET Framework 3.5 + true + + + False + Windows Installer 3.1 + true + +