public void AddRoom(TDSRoom mRoom) { foreach (var tuple in Rooms.Keys.Where(x => x.Item1 == mRoom.X && x.Item2 == mRoom.Y)) { Rooms[tuple] = mRoom; return; } Rooms.Add(new Tuple<int, int>(mRoom.X, mRoom.Y), mRoom); }
public static TDSRoom InputCreateRoomBox(TDSRoom currentRoom) { var form = new Form(); var westRadioButton = new RadioButton {Text = "To the west", Enabled = false}; var eastRadioButton = new RadioButton {Text = "To the east", Enabled = false}; var northRadioButton = new RadioButton {Text = "To the north", Enabled = false}; var southRadioButton = new RadioButton {Text = "To the south", Enabled = false}; var isRequiredCheckBox = new CheckBox {Text = "Is required", Checked = true}; var isSecretCheckBox = new CheckBox {Text = "Is secret", Checked = false}; var doneButton = new Button {Text = "OK"}; form.Text = "Create new room"; form.ClientSize = new Size(396, 200); form.Controls.AddRange(new Control[] { westRadioButton, eastRadioButton, northRadioButton, southRadioButton, isRequiredCheckBox, isSecretCheckBox, doneButton }); form.FormBorderStyle = FormBorderStyle.FixedDialog; form.StartPosition = FormStartPosition.CenterScreen; form.MinimizeBox = false; form.MaximizeBox = false; westRadioButton.SetBounds(25, 25, 100, 25); eastRadioButton.SetBounds(25, 50, 100, 25); northRadioButton.SetBounds(25, 75, 100, 25); southRadioButton.SetBounds(25, 100, 100, 25); isRequiredCheckBox.SetBounds(125, 25, 100, 25); isSecretCheckBox.SetBounds(125, 50, 100, 25); doneButton.SetBounds(125, 100, 100, 25); if (currentRoom.Level.GetRoom(currentRoom.X - 1, currentRoom.Y) == null) westRadioButton.Enabled = true; if (currentRoom.Level.GetRoom(currentRoom.X + 1, currentRoom.Y) == null) eastRadioButton.Enabled = true; if (currentRoom.Level.GetRoom(currentRoom.X, currentRoom.Y - 1) == null) northRadioButton.Enabled = true; if (currentRoom.Level.GetRoom(currentRoom.X, currentRoom.Y + 1) == null) southRadioButton.Enabled = true; TDSRoom result = null; var resultX = 0; var resultY = 0; doneButton.Click += (e, sender) => { if (westRadioButton.Checked) resultX = -1; if (eastRadioButton.Checked) resultX = 1; if (northRadioButton.Checked) resultY = -1; if (southRadioButton.Checked) resultY = 1; result = TDSControl.CreateRoom(currentRoom.Level, currentRoom.X + resultX, currentRoom.Y + resultY, isRequiredCheckBox.Checked, isSecretCheckBox.Checked); form.Close(); }; form.ShowDialog(); return result; }
private TDGInstance CreateInstance(TDSRoom mRoom, bool mTemporary = false) { var result = new TDGInstance(this, mTemporary); TDLFactory.Instance = result; // Initialize field and pathfinder result.Initialize(mRoom.Level.RoomWidth, mRoom.Level.RoomHeight); // Refresh texture size, if instance isn't temporary if (!mTemporary) RefreshGFX(TDUtils.TileSize*result.Width, TDUtils.TileSize*result.Height); // Fill the instance with floor for (var iY = 0; iY < result.Height; iY++) for (var iX = 0; iX < result.Width; iX++) { TDLFactory.Tile = result.GetTile(iX, iY); result.AddEntity(TDLFactory.Floor()); } // Get all tiles from the editor tilemanager and create corrispondent entities foreach (var tileManagerEntity in mRoom.TileManager.Entities) { var methodInfo = tileManagerEntity.Outline.MethodInfo; var parameterValues = new object[tileManagerEntity.Parameters.Count]; for (var i = 0; i < tileManagerEntity.Parameters.Count; i++) parameterValues[i] = tileManagerEntity.Parameters[i].Value; TDLFactory.Tile = result.GetTile(tileManagerEntity.Tile.X, tileManagerEntity.Tile.Y); var invokedEntity = (Entity) methodInfo.Invoke(null, parameterValues); result.AddEntity(invokedEntity); // If the room was cleared previously and the entity is required, destroy it instantly // This means that if the player returns to the room after it was cleared, there are no mobs if (mRoom.IsClear && invokedEntity.HasTag(TDLTags.RequiredKill)) invokedEntity.Destroy(); } result.CalculatePathmaps(); return result; }