muddesigner/Mud Designer/MudEngine/GameObjects/Environment/Zone.cs
Scionwest_cp d5ebbe186f Major Changes:
- Finalized Adding/Removing Zones from within Realms (their Rooms included.)
 - Finalized Deleting objects.
 - Rooms can now be loaded and edited after Saving.

Minor Changes:
 - Code Optimizations
 - Object Property organizing improved.
2010-01-19 15:08:19 -08:00

136 lines
4.1 KiB
C#

using System;
using System.IO;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.ComponentModel;
using System.Xml.Serialization;
using System.Drawing.Design;
using MudDesigner.MudEngine.FileSystem;
using MudDesigner.MudEngine.GameObjects;
using MudDesigner.MudEngine.UITypeEditors;
namespace MudDesigner.MudEngine.GameObjects.Environment
{
[XmlInclude(typeof(Room))]
public class Zone : BaseObject
{
[Category("Environment Information")]
[DefaultValue(0)]
[Description("The amount to drain each stat by if StatDrain is enabled.")]
public int StatDrainAmount
{
get;
set;
}
[Category("Environment Information")]
[Description("Enable or Disable the ability for draining stats while traversing.")]
[DefaultValue(false)]
public bool StatDrain
{
get;
set;
}
[ReadOnly(true)]
[Category("Environment Information")]
[Description("The Realm that this Zone is assigned to. It is not required to be contained within a Realm.")]
public string Realm
{
get;
set;
}
[Category("Environment Information")]
[Description("Determins if the Player can be attacked within this Room or not.")]
[DefaultValue(false)]
public bool IsSafe
{
get;
set;
}
[Category("Environment Information")]
[EditorAttribute(typeof(UIRoomEditor), typeof(UITypeEditor))]
[Description("Collection of Rooms that have been created. Editing the Rooms Collection lets you manage the Zones rooms.")]
public List<Room> Rooms { get; set; }
public Zone()
{
Rooms = new List<Room>();
IsSafe = false;
Realm = "No Realm Associated.";
}
/// <summary>
///
/// </summary>
/// <param name="RoomName"></param>
/// <returns></returns>
public Room GetRoomByName(string name)
{
var filterQuery =
from room in Rooms
where room.Name == name
select room;
foreach (var room in filterQuery)
return room;
return null;
}
/// <summary>
///
/// </summary>
/// <param name="RoomName"></param>
/// <returns></returns>
public Room GetRoomByFilename(string filename)
{
var filterQuery =
from room in Rooms
where room.Filename == filename
select room;
foreach (var room in filterQuery)
return room;
return null;
}
/// <summary>
/// Clears out the Zones room collection and re-builds it.
/// This is a time consuming process if there are a large amount of
/// of rooms, use sparingly.
/// </summary>
public void RefreshRoomList()
{
Rooms = new List<Room>();
//Create our collection of Rooms.
string realmPath = Path.Combine(FileManager.GetDataPath(SaveDataTypes.Realms), this.Realm);
string zonePath = Path.Combine(realmPath, this.Name);
//incase the zone hasn't been saved yet.
if (!Directory.Exists(zonePath))
return;
//Zone exists, so it's already been saved.
string[] rooms = Directory.GetFiles(zonePath, "*.room");
//Clear the existing collection of Rooms
this.Rooms.Clear();
//Build a new one based off of the files
foreach (string file in rooms)
{
Room r = new Room();
r = (Room)FileManager.Load(file, r);
this.Rooms.Add(r);
}
//Save the re-built Room collection
this.Save(Path.Combine(zonePath, this.Filename));
}
}
}