/// <summary>
        /// Constructor
        /// </summary>
        public DataController()
        {
            // create lists
            RoomObjects = new RoomObjectList(300);
            RoomObjectsFiltered = new RoomObjectListFiltered(RoomObjects);
            Projectiles = new ProjectileList(50);
            OnlinePlayers = new OnlinePlayerList(200);
            InventoryObjects = new InventoryObjectList(100);
            AvatarCondition = new StatNumericList(5);
            AvatarAttributes = new StatNumericList(10);
            AvatarSkills = new SkillList(100);
            AvatarSpells = new SkillList(100);
            RoomBuffs = new ObjectBaseList<ObjectBase>(30);
            AvatarBuffs = new ObjectBaseList<ObjectBase>(30);
            SpellObjects = new SpellObjectList(100);
            BackgroundOverlays = new BackgroundOverlayList(5);
            PlayerOverlays = new ObjectBaseList<PlayerOverlay>(10);
            ChatMessages = new BaseList<ChatMessage>(101);
            GameMessageLog = new BaseList<GameMessage>(100);
            VisitedTargets = new List<RoomObject>(50);
            ClickedTargets = new List<uint>(50);
            ActionButtons = new ActionButtonList();
            IgnoreList = new List<string>(20);
            ChatCommandHistory = new List<string>(20);

            // attach some listeners
            RoomObjects.ListChanged += OnRoomObjectsListChanged;
            Projectiles.ListChanged += OnProjectilesListChanged;
            ChatMessages.ListChanged += OnChatMessagesListChanged;

            // make some lists sorted
            OnlinePlayers.SortByName();
            AvatarSkills.SortByResourceName();
            AvatarSpells.SortByResourceName();
            SpellObjects.SortByName();

            // create single data objects
            Effects = new Effects();
            RoomInformation = new RoomInfo();
            LightShading = new LightShading(0, new SpherePosition(0, 0));
            BackgroundMusic = new PlayMusic();
            GuildInfo = new GuildInfo();
            GuildShieldInfo = new GuildShieldInfo();
            GuildAskData = new GuildAskData();
            DiplomacyInfo = new DiplomacyInfo();
            LookObject = new ObjectInfo();
            LookPlayer = new PlayerInfo();
            NewsGroup = new NewsGroup();
            Trade = new TradeInfo();
            Buy = new BuyInfo();
            WelcomeInfo = new WelcomeInfo();
            CharCreationInfo = new CharCreationInfo();
            ObjectContents = new ObjectContents();
            StatChangeInfo = new StatChangeInfo();

            // some values
            ChatMessagesMaximum = 100;
            ChatCommandHistoryMaximum = 20;
            ChatCommandHistoryIndex = -1;
            AvatarObject = null;
            IsResting = false;
            SelfTarget = false;
            IsNextAttackApplyCastOnHighlightedObject = false;
            AvatarID = UInt32.MaxValue;
            TargetID = UInt32.MaxValue;
            ViewerPosition = V3.ZERO;
            UIMode = UIMode.None;
        }