예제 #1
0
        /// <summary>
        /// Ctor used for unit tests only
        /// </summary>
        public ScenePresence(Scene currentRegion, float drawDistance, IClientAPI mockClient)
        {
            m_scene = currentRegion;

            if (DefaultTexture == null)
            {
                Primitive.TextureEntry textu = AvatarAppearance.GetDefaultTexture();
                DefaultTexture = textu.GetBytes();
            }

            m_remotePresences = new AvatarRemotePresences(currentRegion, this);
            m_DrawDistance = drawDistance;
            m_controllingClient = mockClient;
        }
예제 #2
0
        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);
        }
예제 #3
0
        public void Close()
        {
            m_remotePresences.OnScenePresenceClosed();
            m_remotePresences = null;

            List<SceneObjectGroup> attList = GetAttachments();

            // Save and Delete attachments from scene only if we're a root and not a bot
            if (!IsChildAgent)
            {
                foreach (SceneObjectGroup grp in attList)
                {
                    if (IsBot)
                        m_scene.DeleteAttachment(grp);
                    else
                        m_scene.SaveAndDeleteAttachment(null, grp, grp.GetFromItemID(), grp.OwnerID);
                }
            }

            lock (m_attachments)
            {
                m_attachments.Clear();
            }
            
            RemoveFromPhysicalScene();

            if (!IsBot)
                m_scene.CommsManager.UserService.UnmakeLocalUser(m_uuid); 
            
            m_closed = true;

            ClearSceneView();
            SceneView.ClearAllTracking();
            m_sceneView = null; // free the reference
            m_controllingClient = null;
        }