using System;
using System.Threading;
using System.Collections;
using Holo.Managers;
using Holo.Virtual.Rooms;
namespace Holo.Virtual.Users
{
///
/// Represents a virtual user in a virtual room.
///
public class virtualRoomUser
{
///
/// The database ID of the user.
///
internal int userID;
///
/// The ID of the virtual room where the user is in.
///
internal int roomID;
///
/// The ID of the user in the virtual room.
///
internal int roomUID;
///
/// The X position of the user in the virtual room.
///
internal int X;
///
/// The Y position of the user in the virtual room.
///
internal int Y;
///
/// The height of the user in the virtual room.
///
internal double H;
///
/// The rotation of the user's head in the virtual room.
///
internal byte Z1;
///
/// The rotation of the user's body in the virtual room.
///
internal byte Z2;
///
/// The X position where the user wants to walk to. If not walking, -1.
///
internal int goalX;
///
/// The Y position where the user wants to walk to. If not walking, -1.
///
internal int goalY;
///
/// Specifies if the user can walk.
///
internal bool walkLock;
///
/// Specifies if the user is on his way of leaving the room after clicking the door.
///
internal bool walkDoor;
///
/// Guestroom only. Specifies if the user has voted on the guestroom already.
///
internal bool hasVoted;
/// The room user ID (rUID) of the virtual user where this virtual user is currently trading items with. If not trading, then this value is -1.
///
internal int _tradePartnerRoomUID = -1;
///
/// Swimming pools only. Specifies the swimming pool outfit.
///
internal string swimOutfit;
///
/// Is person diving or not?
///
internal bool Diving = false;
///
/// not used yet, for the queue
///
internal bool InQueue = false;
///
/// Gamelobbies only. Specifies the amount of gamepoints that this user has for the game in the current gamelobby.
///
internal int gamePoints;
///
/// The parent virtual user of this room user.
///
internal virtualUser User;
///
/// The status manager of this room user.
///
internal virtualRoomUserStatusManager statusManager;
///
/// Indicates if the room user is currently typing a chat message.
///
internal bool isTyping;
///
/// Indicates if the room user is able to use the special teleport cast, which allows him to teleport around the room.
///
internal bool SPECIAL_TELEPORTABLE = false;
private delegate void walkSleepPointer();
///
/// Initializes a virtual room user.
///
/// The database ID of the virtual user of this room user object.
/// The database ID of the room where the room user is in.
/// The ID that identifies the room user in the virtual room.
/// The parent vittual user of this room user.
/// The status manager of this room user.
internal virtualRoomUser(int userID, int roomID, int roomUID, virtualUser User, virtualRoomUserStatusManager statusManager)
{
this.userID = userID;
this.roomID = roomID;
this.roomUID = roomUID;
this.User = User;
this.statusManager = statusManager;
}
///
/// The virtualRoom object that represents the room where this room user is in.
///
internal virtualRoom Room
{
get
{
return roomManager.getRoom(roomID);
}
}
///
/// Refreshes the status of this room user in the virtual room.
///
internal void Refresh()
{
Room.Refresh(this);
}
///
/// Returns the details string for this room user, containing username etc.
///
internal string detailsString
{
get
{
string petTransformAdd = "";
string petTransformFigure = User._Figure;
if (User._isPet == true)
{
petTransformAdd = "7ui1";
petTransformFigure = User._petType + " 000 " + User._petColour;
}
string s = "i:" + roomUID + Convert.ToChar(13) + "a:" + userID + Convert.ToChar(13) + "n:" + petTransformAdd + User._Username + Convert.ToChar(13) + "f:" + petTransformFigure + Convert.ToChar(13) + "l:" + X + " " + Y + " " + H + Convert.ToChar(13);
if (User._Mission != "") { s += "c:" + User._Mission + Convert.ToChar(13); }
else { s += "c:" + " Habbx.ORG FTW!" + Convert.ToChar(13); }
string szNotify = "";
for (int x = 0; x < User._Badges.Count; x++)
{
if (User._badgeSlotIDs[x] > 0) // Badge enabled
{
szNotify += User._badgeSlotIDs[x];
szNotify += ":";
szNotify += User._Badges[x];
szNotify += ",";
}
}
//Out.WritePlain(szNotify);
if (szNotify != "")
{ s += "b:" + szNotify + Convert.ToChar(13);}
if (swimOutfit != "") { s += "p:" + swimOutfit + Convert.ToChar(13); }
if (User._groupID > 0) { s += "g:" + User._groupID + Convert.ToChar(13) + "t:" + (int)User._groupMemberRank + Convert.ToChar(13); }
return s;
}
}
///
/// Returns the action string for this room user, containing position, movements, statuses etc.
///
internal string statusString
{
get
{
return roomUID + " " + X + "," + Y + "," + H.ToString().Replace(",",".") + "," + Z1 + "," + Z2 + "/" + statusManager.ToString();
}
}
}
}