0001199: [PATCH] Add support for default animations

From Melanie...   Thanks Melanie!  











































.
0.6.0-stable
Teravus Ovares 2008-05-11 21:27:12 +00:00
parent 8f26427055
commit a01b415d6c
5 changed files with 90 additions and 8 deletions

View File

@ -914,6 +914,7 @@ namespace OpenSim.Framework
void SendSunPos(LLVector3 sunPos, LLVector3 sunVel, ulong CurrentTime, uint SecondsPerSunCycle, uint SecondsPerYear, float OrbitalPosition); void SendSunPos(LLVector3 sunPos, LLVector3 sunVel, ulong CurrentTime, uint SecondsPerSunCycle, uint SecondsPerYear, float OrbitalPosition);
void SendViewerTime(int phase); void SendViewerTime(int phase);
LLUUID GetDefaultAnimation(string name);
void SendAvatarProperties(LLUUID avatarID, string aboutText, string bornOn, string charterMember, string flAbout, void SendAvatarProperties(LLUUID avatarID, string aboutText, string bornOn, string charterMember, string flAbout,
uint flags, LLUUID flImageID, LLUUID imageID, string profileURL, LLUUID partnerID); uint flags, LLUUID flImageID, LLUUID imageID, string profileURL, LLUUID partnerID);

View File

@ -96,6 +96,9 @@ namespace OpenSim.Region.ClientStack.LindenUDP
private byte[] m_channelVersion = Helpers.StringToField("OpenSimulator 0.5"); // Dummy value needed by libSL private byte[] m_channelVersion = Helpers.StringToField("OpenSimulator 0.5"); // Dummy value needed by libSL
private Dictionary<string, LLUUID> m_defaultAnimations = new Dictionary<string, LLUUID>();
/* protected variables */ /* protected variables */
protected static Dictionary<PacketType, PacketMethod> PacketHandlers = protected static Dictionary<PacketType, PacketMethod> PacketHandlers =
@ -326,6 +329,9 @@ namespace OpenSim.Region.ClientStack.LindenUDP
m_channelVersion = Helpers.StringToField(scene.GetSimulatorVersion()); m_channelVersion = Helpers.StringToField(scene.GetSimulatorVersion());
InitDefaultAnimations();
m_scene = scene; m_scene = scene;
m_assetCache = assetCache; m_assetCache = assetCache;
@ -3097,6 +3103,16 @@ namespace OpenSim.Region.ClientStack.LindenUDP
OutPacket(scriptQuestion, ThrottleOutPacketType.Task); OutPacket(scriptQuestion, ThrottleOutPacketType.Task);
} }
private void InitDefaultAnimations()
{
}
public LLUUID GetDefaultAnimation(string name)
{
if(m_defaultAnimations.ContainsKey(name))
return m_defaultAnimations[name];
return LLUUID.Zero;
}
protected virtual bool Logout(IClientAPI client, Packet packet) protected virtual bool Logout(IClientAPI client, Packet packet)
{ {

View File

@ -1156,6 +1156,63 @@ namespace OpenSim.Region.Environment.Scenes
} }
} }
} }
public void AddAnimation(string name)
{
if(m_isChildAgent)
return;
// Don't let this animation become the movement animation
if(m_animations.Count < 1)
SetMovementAnimation(Animations.AnimsLLUUID["STAND"]);
LLUUID animID=m_controllingClient.GetDefaultAnimation(name);
if(animID == LLUUID.Zero)
return;
if (!m_animations.Contains(animID))
{
m_animations.Add(animID);
m_animationSeqs.Add(m_controllingClient.NextAnimationSequenceNumber);
SendAnimPack();
}
}
public void RemoveAnimation(string name)
{
if(m_isChildAgent)
return;
LLUUID animID=m_controllingClient.GetDefaultAnimation(name);
if(animID == LLUUID.Zero)
return;
if (m_animations.Contains(animID))
{
if (m_animations[0] == animID)
{
SetMovementAnimation(Animations.AnimsLLUUID["STAND"]);
}
else
{
// What a HACK!! Anim list really needs to be an object!
int idx;
for(idx=0;idx < m_animations.Count;idx++)
{
if(m_animations[idx] == animID)
{
int seq=m_animationSeqs[idx];
m_animations.Remove(animID);
m_animationSeqs.Remove(seq);
SendAnimPack();
break;
}
}
}
}
}
public void HandleStartAnim(IClientAPI remoteClient, LLUUID animID) public void HandleStartAnim(IClientAPI remoteClient, LLUUID animID)
{ {

View File

@ -449,6 +449,11 @@ namespace OpenSim.Region.Examples.SimpleModule
{ {
} }
public LLUUID GetDefaultAnimation(string name)
{
return LLUUID.Zero;
}
public void SendTakeControls(int controls, bool passToAgent, bool TakeControls) public void SendTakeControls(int controls, bool passToAgent, bool TakeControls)
{ {
} }

View File

@ -2136,15 +2136,15 @@ namespace OpenSim.Region.ScriptEngine.Common
if ((m_host.TaskInventory[invItemID].PermsMask & BuiltIn_Commands_BaseClass.PERMISSION_TRIGGER_ANIMATION) != 0) if ((m_host.TaskInventory[invItemID].PermsMask & BuiltIn_Commands_BaseClass.PERMISSION_TRIGGER_ANIMATION) != 0)
{ {
// Do NOT try to parse LLUUID, animations cannot be triggered by ID
LLUUID animID=InventoryKey(anim, (int)AssetType.Animation);
if (animID == LLUUID.Zero)
return;
if (World.m_innerScene.ScenePresences.ContainsKey(m_host.TaskInventory[invItemID].PermsGranter)) if (World.m_innerScene.ScenePresences.ContainsKey(m_host.TaskInventory[invItemID].PermsGranter))
{ {
ScenePresence presence = World.m_innerScene.ScenePresences[m_host.TaskInventory[invItemID].PermsGranter]; ScenePresence presence = World.m_innerScene.ScenePresences[m_host.TaskInventory[invItemID].PermsGranter];
presence.AddAnimation(animID); // Do NOT try to parse LLUUID, animations cannot be triggered by ID
LLUUID animID=InventoryKey(anim, (int)AssetType.Animation);
if (animID == LLUUID.Zero)
presence.AddAnimation(anim);
else
presence.AddAnimation(animID);
} }
} }
} }
@ -2170,12 +2170,15 @@ namespace OpenSim.Region.ScriptEngine.Common
} }
if (animID == LLUUID.Zero) if (animID == LLUUID.Zero)
return; return;
if (World.m_innerScene.ScenePresences.ContainsKey(m_host.TaskInventory[invItemID].PermsGranter)) if (World.m_innerScene.ScenePresences.ContainsKey(m_host.TaskInventory[invItemID].PermsGranter))
{ {
ScenePresence presence = World.m_innerScene.ScenePresences[m_host.TaskInventory[invItemID].PermsGranter]; ScenePresence presence = World.m_innerScene.ScenePresences[m_host.TaskInventory[invItemID].PermsGranter];
presence.RemoveAnimation(animID); if (animID == LLUUID.Zero)
presence.RemoveAnimation(anim);
else
presence.RemoveAnimation(animID);
} }
} }
} }