mirror of
https://github.com/opensim/opensim.git
synced 2026-08-05 00:46:02 +08:00
* Continued work on Region layer
* Added Close() to ScenePresence to remove and destroy PhysicsActor
This commit is contained in:
@@ -307,7 +307,7 @@ namespace OpenSim.Region.Environment.Scenes
|
||||
|
||||
float[] terData = Terrain.GetHeights1D();
|
||||
|
||||
Broadcast( delegate( IClientAPI client )
|
||||
Broadcast(delegate(IClientAPI client)
|
||||
{
|
||||
for (int x = 0; x < 16; x++)
|
||||
{
|
||||
@@ -321,7 +321,7 @@ namespace OpenSim.Region.Environment.Scenes
|
||||
}
|
||||
});
|
||||
|
||||
|
||||
|
||||
|
||||
Terrain.ResetTaint();
|
||||
}
|
||||
@@ -369,7 +369,7 @@ namespace OpenSim.Region.Environment.Scenes
|
||||
|
||||
internal void Broadcast(Action<IClientAPI> whatToDo)
|
||||
{
|
||||
m_region.Broadcast( whatToDo );
|
||||
m_region.Broadcast(whatToDo);
|
||||
}
|
||||
/// <summary>
|
||||
///
|
||||
@@ -641,6 +641,7 @@ namespace OpenSim.Region.Environment.Scenes
|
||||
public override void AddNewClient(IClientAPI client, bool child)
|
||||
{
|
||||
SubscribeToClientEvents(client);
|
||||
|
||||
m_estateManager.sendRegionHandshake(client);
|
||||
|
||||
CreateAndAddScenePresence(client, child);
|
||||
@@ -769,33 +770,34 @@ namespace OpenSim.Region.Environment.Scenes
|
||||
|
||||
ScenePresence avatar = GetScenePresence(agentID);
|
||||
|
||||
Broadcast(delegate(IClientAPI client)
|
||||
{
|
||||
client.SendKillObject(avatar.RegionHandle, avatar.LocalId);
|
||||
});
|
||||
|
||||
|
||||
ForEachScenePresence(
|
||||
delegate(ScenePresence presence)
|
||||
{
|
||||
presence.CoarseLocationChange(avatar);
|
||||
presence.ControllingClient.SendKillObject(avatar.RegionHandle, avatar.LocalId);
|
||||
if (presence.PhysicsActor != null)
|
||||
{
|
||||
phyScene.RemoveAvatar(presence.PhysicsActor);
|
||||
presence.PhysicsActor = null;
|
||||
}
|
||||
presence.CoarseLocationChange();
|
||||
});
|
||||
|
||||
lock (m_scenePresences)
|
||||
{
|
||||
if (m_scenePresences.ContainsKey(agentID))
|
||||
{
|
||||
m_scenePresences.Remove(agentID);
|
||||
}
|
||||
m_scenePresences.Remove(agentID);
|
||||
}
|
||||
|
||||
lock (m_region)
|
||||
{
|
||||
m_region.Remove(agentID);
|
||||
}
|
||||
|
||||
lock (Entities)
|
||||
{
|
||||
if (Entities.ContainsKey(agentID))
|
||||
{
|
||||
Entities.Remove(agentID);
|
||||
}
|
||||
Entities.Remove(agentID);
|
||||
}
|
||||
// TODO: Add the removal from physics ?
|
||||
|
||||
avatar.Close();
|
||||
|
||||
// Remove client agent from profile, so new logins will work
|
||||
commsManager.UserServer.clearUserAgent(agentID);
|
||||
|
||||
@@ -45,20 +45,19 @@ namespace OpenSim.Region.Environment.Scenes
|
||||
public void LoadAnims()
|
||||
{
|
||||
//OpenSim.Framework.Console.MainLog.Instance.Verbose("Avatar.cs:LoadAnims() - Loading avatar animations");
|
||||
XmlTextReader reader = new XmlTextReader("data/avataranimations.xml");
|
||||
|
||||
XmlDocument doc = new XmlDocument();
|
||||
doc.Load(reader);
|
||||
foreach (XmlNode nod in doc.DocumentElement.ChildNodes)
|
||||
using( XmlTextReader reader = new XmlTextReader("data/avataranimations.xml") )
|
||||
{
|
||||
if (nod.Attributes["name"] != null)
|
||||
XmlDocument doc = new XmlDocument();
|
||||
doc.Load(reader);
|
||||
foreach (XmlNode nod in doc.DocumentElement.ChildNodes)
|
||||
{
|
||||
AnimsLLUUID.Add(nod.Attributes["name"].Value, nod.InnerText);
|
||||
if (nod.Attributes["name"] != null)
|
||||
{
|
||||
AnimsLLUUID.Add(nod.Attributes["name"].Value, nod.InnerText);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
reader.Close();
|
||||
|
||||
// OpenSim.Framework.Console.MainLog.Instance.Verbose("Loaded " + AnimsLLUUID.Count.ToString() + " animation(s)");
|
||||
|
||||
foreach (KeyValuePair<string, LLUUID> kp in Animations.AnimsLLUUID)
|
||||
@@ -67,5 +66,14 @@ namespace OpenSim.Region.Environment.Scenes
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
internal void Close()
|
||||
{
|
||||
if (m_physicsActor != null)
|
||||
{
|
||||
m_scene.PhysScene.RemoveAvatar( PhysicsActor );
|
||||
m_physicsActor = null;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -627,7 +627,7 @@ namespace OpenSim.Region.Environment.Scenes
|
||||
m_controllingClient.SendCoarseLocationUpdate(CoarseLocations);
|
||||
}
|
||||
|
||||
public void CoarseLocationChange(ScenePresence avatar)
|
||||
public void CoarseLocationChange()
|
||||
{
|
||||
newCoarseLocations = true;
|
||||
}
|
||||
@@ -638,7 +638,7 @@ namespace OpenSim.Region.Environment.Scenes
|
||||
{
|
||||
if (presence != this)
|
||||
{
|
||||
presence.CoarseLocationChange(this);
|
||||
presence.CoarseLocationChange();
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user