//Microsoft .NET Framework using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.ComponentModel; using System.Xml.Serialization; using System.IO; //MUD Engine using MudEngine.FileSystem; using MudEngine.GameManagement; namespace MudEngine.GameObjects { public class BaseObject { [Category("Object Setup")] [Description("The Display Name assigned to this object.")] //Required to refresh Filename property in the editors propertygrid [RefreshProperties(RefreshProperties.All)] public String Name { get { return _Name; } set { _Name = value; if (this.GetType().Name.StartsWith("Base")) Filename = value + "." + this.GetType().Name.Substring("Base".Length); else Filename = value + "." + this.GetType().Name; } } private String _Name; [Category("Object Setup")] [Description("A brief description of this object. The description is displayed to users when they use a command for investigating an object")] public String Description { get; set; } /// /// A detailed description that treats each entry as a seperete line when outputted to the player /// public List DetailedDescription { get; set; } [Category("Object Setup")] [ReadOnly(true)] [Description("The filename of the current object. This is assigned by the engine and not editable.")] public String Filename { //Returns the name of the object + the objects Type as it's extension. //Filenames are generated by the class itself, users can not assign it. get; set; } [Category("Environment Information")] [Description("If a user asks to use his/her senses to investigate an area, this is one of the results that will be displayed. Senses can be used to assist blind characters.")] [DefaultValue("You don't smell anything unsual.")] public String Smell { get; set; } [Category("Environment Information")] [Description("If a user asks to use his/her senses to investigate an area, this is one of the results that will be displayed. Senses can be used to assist blind characters.")] [DefaultValue("You hear nothing of interest.")] public String Listen { get; set; } [Category("Environment Information")] [Description("If a user asks to use his/her senses to investigate an area, this is one of the results that will be displayed. Senses can be used to assist blind characters.")] [DefaultValue("You feel nothing.")] public String Feel { get; set; } public Game ActiveGame { get; set; } /// /// Initializes the base object /// public BaseObject(Game game) { Name = "New " + this.GetType().Name; ActiveGame = game; DetailedDescription = new List(); this.Feel = "You feel nothing."; this.Listen = "You hear nothing of interest."; this.Smell = "You don't smell anything unsual."; this.Name = DefaultName(); this.Filename = DefaultName() + "." + this.GetType().Name; } ~BaseObject() { } private Boolean ShouldSerializeName() { return this.Name != DefaultName(); } private void ResetName() { this.Name = DefaultName(); } private String DefaultName() { return "New " + this.GetType().Name; } #region Public Methods public override String ToString() { return this.Name; } public virtual void OnEnter() { } public virtual void OnExit() { } public virtual void OnCreate() { } public virtual void OnDestroy() { } public virtual void OnEquip() { } public virtual void OnUnequip() { } public virtual void OnMount() { } public virtual void OnDismount() { } public virtual void Save(String path) { if (String.IsNullOrEmpty(path)) return; if (!Directory.Exists(path)) Directory.CreateDirectory(path); String filename = Path.Combine(path, Filename); if (File.Exists(filename)) File.Delete(filename); FileManager.WriteLine(filename, this.Name, "Name"); FileManager.WriteLine(filename, this.Description, "Description"); FileManager.WriteLine(filename, this.Feel, "Feel"); FileManager.WriteLine(filename, this.Listen, "Listen"); FileManager.WriteLine(filename, this.Smell, "Smell"); } public virtual void Load(String filename) { this.Name = FileManager.GetData(filename, "Name"); this.Description = FileManager.GetData(filename, "Description"); this.Feel = FileManager.GetData(filename, "Feel"); this.Listen = FileManager.GetData(filename, "Listen"); this.Smell = FileManager.GetData(filename, "Smell"); } #endregion } }