/// <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; }
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); }
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; }