private ScenePresence(IClientAPI client, Scene world, RegionInfo reginfo)
        {
            m_regionHandle = reginfo.RegionHandle;
            m_controllingClient = client;
            Firstname = m_controllingClient.FirstName;
            Lastname = m_controllingClient.LastName;
            m_name = String.Format("{0} {1}", Firstname, Lastname);
            m_scene = world;
            m_uuid = client.AgentId;
            m_regionInfo = reginfo;
            m_localId = m_scene.AllocateLocalId();

            m_useFlySlow = m_scene.m_useFlySlow;
            m_usePreJump = m_scene.m_usePreJump;

            IGroupsModule gm = m_scene.RequestModuleInterface<IGroupsModule>();
            if (gm != null)
                m_grouptitle = gm.GetGroupTitle(m_uuid);

            m_scriptEngines = m_scene.RequestModuleInterfaces<IScriptModule>();

            ISceneViewModule sceneViewModule = m_scene.RequestModuleInterface<ISceneViewModule>();
            if (sceneViewModule != null)
                m_sceneView = sceneViewModule.CreateSceneView(this);
            else
                m_log.Warn("[SCENE PRESENCE]: Failed to create a scene view");

            SetAgentPositionInfo(null, true, m_controllingClient.StartPos, null, Vector3.Zero, m_velocity);

            m_animPersistUntil = 0;
            
            RegisterToEvents();
            SetDirectionVectors();
            SetDirectionFlags();

            m_remotePresences = new AvatarRemotePresences(world, this);
            m_connection = world.ConnectionManager.GetConnection(this.UUID);
            if (m_connection != null)   // can be null for bots which don't have a LLCV
                m_connection.ScenePresence = this;

            // Prime (cache) the user's group list.
            m_scene.UserGroupsGet(this.UUID);
        }