#region Arthea License
/***********************************************************************
* Arthea MUD by R. Jennings (2007) http://arthea.googlecode.com/ *
* By using this code you comply with the Artistic and GPLv2 Licenses. *
***********************************************************************/
#endregion
using System.Text;
using Arthea.Connections.Colors;
using Arthea.Connections.Players;
using Arthea.Continents.Areas.Characters;
using Arthea.Continents.Areas.Rooms.Exits;
namespace Arthea.Commands
{
/// <summary>
/// Implements a look command.
/// </summary>
public class LookCommand : Command
{
#region [rgn] Fields (1)
private static readonly LookCommand instance = new LookCommand();
#endregion [rgn]
#region [rgn] Constructors (1)
/// <summary>
/// Initializes a new instance of the <see cref="LookCommand"/> class.
/// </summary>
private LookCommand() : base("look", "looks at a room, character or item")
{
}
#endregion [rgn]
#region [rgn] Properties (1)
/// <summary>
/// Gets the instance.
/// </summary>
/// <value>The instance.</value>
public static LookCommand Instance
{
get { return instance; }
}
#endregion [rgn]
#region [rgn] Methods (1)
// [rgn] Public Methods (1)
/// <summary>
/// Processes the command for a player.
/// </summary>
/// <param name="player">The player.</param>
/// <param name="argument">The argument.</param>
public override void Process(Player player, String argument)
{
if (!argument)
{
if (player.Room.Name != null)
player.WriteLine(CustomColor.RoomName + "{0}~X", player.Room.Name);
if (player.Room.Description != null)
player.WriteLine(player.Room.Description);
if (player.Room.Exits.Count > 0)
{
player.WriteLine();
StringBuilder buf = new StringBuilder("Exits: [");
foreach (Exit exit in player.Room.Exits.Values)
{
if (!string.IsNullOrEmpty(exit.Keyword))
buf.Append(exit.Keyword);
else
buf.Append(exit.Direction.ToString());
buf.Append(" ");
}
buf.Remove(buf.Length - 1, 1);
buf.Append("]");
player.WriteLine(buf.ToString());
}
player.Room.Items.ShowToPlayer(player, false);
foreach (Character ch in player.Room.Characters)
{
if (ch != player)
player.WriteLine(ch.RoomDescr);
}
return;
}
Character act = player.Room.Characters.FindName(argument);
if (act != null)
{
if (act.Description.Length == 0)
{
player.WriteLine("You don't see anything special about {0}.", act.ShortDescr);
}
else
{
player.WriteLine(act.Description);
}
return;
}
player.WriteLine("You can't seem to find {0}.", argument);
}
#endregion [rgn]
}
/// <summary>
/// Implementation of a auto look command.
/// </summary>
public class AutoLookCommand : Command
{
#region [rgn] Constructors (1)
/// <summary>
/// Initializes a new instance of the <see cref="AutoLookCommand"/> class.
/// </summary>
public AutoLookCommand() : base("autolook", "Automatically look when you hit enter.")
{
}
#endregion [rgn]
#region [rgn] Methods (2)
// [rgn] Public Methods (2)
/// <summary>
/// Gets the instance.
/// </summary>
/// <value>The instance.</value>
public static void Look(Player player)
{
if (player.Config.Has(PlayerConfig.AutoLook))
LookCommand.Instance.Process(player, "");
else
player.DisplayPrompt();
}
/// <summary>
/// Processes the command for a player.
/// </summary>
/// <param name="player">The player.</param>
/// <param name="argument">The argument.</param>
public override void Process(Player player, String argument)
{
player.Config.Toggle(PlayerConfig.AutoLook);
player.WriteLine("Autolook {0}abled.", player.Config.Has(PlayerConfig.AutoLook)
? "en"
: "dis");
}
#endregion [rgn]
}
}