From 04dafe4313d5746cdaae0b7eee101494b4707b7e Mon Sep 17 00:00:00 2001 From: UbitUmarov Date: Wed, 20 Apr 2022 14:12:45 +0100 Subject: [PATCH] some cleaup; simplify some animations code --- .../Scenes/Animation/AnimationSet.cs | 23 +++++++++++++++- .../Scenes/Animation/ScenePresenceAnimator.cs | 26 +++++++++---------- .../Shared/Api/Implementation/LSL_Api.cs | 19 ++++---------- 3 files changed, 39 insertions(+), 29 deletions(-) diff --git a/OpenSim/Region/Framework/Scenes/Animation/AnimationSet.cs b/OpenSim/Region/Framework/Scenes/Animation/AnimationSet.cs index 645006f2d9..268c926b5c 100644 --- a/OpenSim/Region/Framework/Scenes/Animation/AnimationSet.cs +++ b/OpenSim/Region/Framework/Scenes/Animation/AnimationSet.cs @@ -179,6 +179,27 @@ namespace OpenSim.Region.Framework.Scenes.Animation return false; } + public void GetAnimationIDsArray(out UUID[] animIDs) + { + lock (m_animations) + { + int j = m_defaultAnimation.AnimID.IsZero() ? 0 : 1; + + int defaultSize = m_animations.Count + j; + animIDs = new UUID[defaultSize]; + + if (j > 0) + { + animIDs[0] = m_defaultAnimation.AnimID; + } + + for (int i = 0; i < m_animations.Count; ++i, ++j) + { + animIDs[j] = m_animations[i].AnimID; + } + } + } + public void GetArrays(out UUID[] animIDs, out int[] sequenceNums, out UUID[] objectIDs) { lock (m_animations) @@ -190,7 +211,7 @@ namespace OpenSim.Region.Framework.Scenes.Animation sequenceNums = new int[defaultSize]; objectIDs = new UUID[defaultSize]; - if (m_defaultAnimation.AnimID.IsNotZero()) + if (j > 0) { animIDs[0] = m_defaultAnimation.AnimID; sequenceNums[0] = m_defaultAnimation.SequenceNum; diff --git a/OpenSim/Region/Framework/Scenes/Animation/ScenePresenceAnimator.cs b/OpenSim/Region/Framework/Scenes/Animation/ScenePresenceAnimator.cs index 722f57a9e0..964acd102f 100644 --- a/OpenSim/Region/Framework/Scenes/Animation/ScenePresenceAnimator.cs +++ b/OpenSim/Region/Framework/Scenes/Animation/ScenePresenceAnimator.cs @@ -80,7 +80,7 @@ namespace OpenSim.Region.Framework.Scenes.Animation public ScenePresenceAnimator(ScenePresence sp) { m_scenePresence = sp; - CurrentMovementAnimation = "CROUCH"; + CurrentMovementAnimation = "STAND"; } public void AddAnimation(UUID animID, UUID objectID) @@ -88,7 +88,7 @@ namespace OpenSim.Region.Framework.Scenes.Animation if (m_scenePresence.IsChildAgent) return; - // m_log.DebugFormat("[SCENE PRESENCE ANIMATOR]: Adding animation {0} for {1}", animID, m_scenePresence.Name); + // m_log.DebugFormat("[SCENE PRESENCE ANIMATOR]: Adding animation {0} for {1}", animID, m_scenePresence.Name); if (m_scenePresence.Scene.DebugAnimations) m_log.DebugFormat( "[SCENE PRESENCE ANIMATOR]: Adding animation {0} {1} for {2}", @@ -111,7 +111,7 @@ namespace OpenSim.Region.Framework.Scenes.Animation if (animID.IsZero()) return; - // m_log.DebugFormat("[SCENE PRESENCE ANIMATOR]: Adding animation {0} {1} for {2}", animID, name, m_scenePresence.Name); + // m_log.DebugFormat("[SCENE PRESENCE ANIMATOR]: Adding animation {0} {1} for {2}", animID, name, m_scenePresence.Name); AddAnimation(animID, objectID); } @@ -154,7 +154,7 @@ namespace OpenSim.Region.Framework.Scenes.Animation m_animations.Remove(animID, false); } if (sendPack) - SendAnimPack(false); + SendAnimPack(); } // Called from scripts @@ -616,13 +616,15 @@ namespace OpenSim.Region.Framework.Scenes.Animation public UUID[] GetAnimationArray() { - UUID[] animIDs; - int[] sequenceNums; - UUID[] objectIDs; - m_animations.GetArrays(out animIDs, out sequenceNums, out objectIDs); + m_animations.GetAnimationIDsArray(out UUID[] animIDs); return animIDs; } + public bool HasAnimation(UUID animID) + { + return m_animations.HasAnimation(animID); + } + public BinBVHAnimation GenerateRandomAnimation() { int rnditerations = 3; @@ -853,7 +855,7 @@ namespace OpenSim.Region.Framework.Scenes.Animation /// /// Send animation information about this avatar to all clients. /// - public void SendAnimPack(bool selfIncluded = true) + public void SendAnimPack() { //m_log.Debug("Sending animation pack to all"); @@ -866,11 +868,7 @@ namespace OpenSim.Region.Framework.Scenes.Animation m_animations.GetArrays(out animIDs, out sequenceNums, out objectIDs); - //SendAnimPack(animIDs, sequenceNums, objectIDs); - //if(selfIncluded) - m_scenePresence.SendAnimPack(animIDs, sequenceNums, objectIDs); - //else - // m_scenePresence.SendAnimPackToOthers(animIDs, sequenceNums, objectIDs); + m_scenePresence.SendAnimPack(animIDs, sequenceNums, objectIDs); } public string GetAnimName(UUID animId) diff --git a/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/LSL_Api.cs b/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/LSL_Api.cs index e815800fc6..3f252070cf 100644 --- a/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/LSL_Api.cs +++ b/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/LSL_Api.cs @@ -6476,6 +6476,8 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api /// AGENT_BUSY /// Remove as they are done /// + static readonly UUID busyAnimation = new UUID("efcf670c-2d18-8128-973a-034ebc806b67"); + public LSL_Integer llGetAgentInfo(LSL_Key id) { @@ -6522,9 +6524,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api flags |= ScriptBaseClass.AGENT_AWAY; } - UUID busy = new UUID("efcf670c-2d18-8128-973a-034ebc806b67"); - UUID[] anims = agent.Animator.GetAnimationArray(); - if (Array.Exists(anims, a => { return a == busy; })) + if(agent.Animator.HasAnimation(busyAnimation)) { flags |= ScriptBaseClass.AGENT_BUSY; } @@ -8071,15 +8071,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api public LSL_Integer llScriptDanger(LSL_Vector pos) { - bool result = World.LSLScriptDanger(m_host, pos); - if (result) - { - return 1; - } - else - { - return 0; - } + return World.LSLScriptDanger(m_host, pos) ? 1 : 0; } public void llDialog(LSL_Key avatar, LSL_String message, LSL_List buttons, int chat_channel) @@ -10917,8 +10909,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api if (av == null || av.IsChildAgent) // only if in the region return new LSL_List(); - UUID[] anims; - anims = av.Animator.GetAnimationArray(); + UUID[] anims = av.Animator.GetAnimationArray(); LSL_List l = new LSL_List(); foreach (UUID foo in anims) l.Add(new LSL_Key(foo.ToString()));