From f66b58cf00d4dcbd9d11030809bf9766330966f2 Mon Sep 17 00:00:00 2001 From: UbitUmarov Date: Wed, 10 Sep 2014 19:30:57 +0100 Subject: [PATCH] *TEST* add movement states SIT and SITGROUND. ScenePresence on SIT, SITGROUND or STAND, sets directly the state, and desired sitAnimation for default sits --- .../Scenes/Animation/ScenePresenceAnimator.cs | 49 +++++++++++++------ .../Region/Framework/Scenes/ScenePresence.cs | 28 ++++++++--- .../Shared/Api/Implementation/LSL_Api.cs | 34 +++++++------ 3 files changed, 74 insertions(+), 37 deletions(-) diff --git a/OpenSim/Region/Framework/Scenes/Animation/ScenePresenceAnimator.cs b/OpenSim/Region/Framework/Scenes/Animation/ScenePresenceAnimator.cs index bbc5745f98..4d1d913bf8 100644 --- a/OpenSim/Region/Framework/Scenes/Animation/ScenePresenceAnimator.cs +++ b/OpenSim/Region/Framework/Scenes/Animation/ScenePresenceAnimator.cs @@ -200,21 +200,28 @@ namespace OpenSim.Region.Framework.Scenes.Animation if (overridenAnim != UUID.Zero) { m_animations.SetDefaultAnimation(overridenAnim, m_scenePresence.ControllingClient.NextAnimationSequenceNumber, m_scenePresence.UUID); - m_scenePresence.SendScriptEventToAttachments("changed", new Object[] { (int)Changed.ANIMATION}); + m_scenePresence.SendScriptEventToAttachments("changed", new Object[] { (int)Changed.ANIMATION }); SendAnimPack(); ret = true; } - else if (m_animations.TrySetDefaultAnimation( - anim, m_scenePresence.ControllingClient.NextAnimationSequenceNumber, m_scenePresence.UUID)) + else { -// m_log.DebugFormat( -// "[SCENE PRESENCE ANIMATOR]: Updating movement animation to {0} for {1}", -// anim, m_scenePresence.Name); + // translate sit and sitground state animations + if (anim == "SIT" || anim == "SITGROUND") + anim = m_scenePresence.sitAnimation; - // 16384 is CHANGED_ANIMATION - m_scenePresence.SendScriptEventToAttachments("changed", new Object[] { (int)Changed.ANIMATION}); - SendAnimPack(); - ret = true; + if (m_animations.TrySetDefaultAnimation( + anim, m_scenePresence.ControllingClient.NextAnimationSequenceNumber, m_scenePresence.UUID)) + { + // m_log.DebugFormat( + // "[SCENE PRESENCE ANIMATOR]: Updating movement animation to {0} for {1}", + // anim, m_scenePresence.Name); + + // 16384 is CHANGED_ANIMATION + m_scenePresence.SendScriptEventToAttachments("changed", new Object[] { (int)Changed.ANIMATION }); + SendAnimPack(); + ret = true; + } } } else @@ -236,6 +243,11 @@ namespace OpenSim.Region.Framework.Scenes.Animation const float JUMP_PERIOD = 800f; #region Inputs + if (m_scenePresence.SitGround) + return "SITGROUND"; + if (m_scenePresence.ParentID != 0 || m_scenePresence.ParentUUID != UUID.Zero) + return "SIT"; + AgentManager.ControlFlags controlFlags = (AgentManager.ControlFlags)m_scenePresence.AgentControlFlags; PhysicsActor actor = m_scenePresence.PhysicsActor; @@ -491,15 +503,20 @@ namespace OpenSim.Region.Framework.Scenes.Animation public bool ForceUpdateMovementAnimations() { - // m_log.DebugFormat("[SCENE PRESENCE ANIMATOR]: Updating movement animations for {0}", m_scenePresence.Name); - - bool ret = false; lock (m_animations) { - string newMovementAnimation = DetermineMovementAnimation(); - ret = TrySetMovementAnimation(newMovementAnimation); + CurrentMovementAnimation = DetermineMovementAnimation(); + return TrySetMovementAnimation(CurrentMovementAnimation); + } + } + + public bool SetMovementAnimations(string motionState) + { + lock (m_animations) + { + CurrentMovementAnimation = motionState; + return TrySetMovementAnimation(CurrentMovementAnimation); } - return ret; } public UUID[] GetAnimationArray() diff --git a/OpenSim/Region/Framework/Scenes/ScenePresence.cs b/OpenSim/Region/Framework/Scenes/ScenePresence.cs index 5da92f9eaa..fd1bab6615 100644 --- a/OpenSim/Region/Framework/Scenes/ScenePresence.cs +++ b/OpenSim/Region/Framework/Scenes/ScenePresence.cs @@ -243,7 +243,7 @@ namespace OpenSim.Region.Framework.Scenes /// Server Side Animation Override /// public MovementAnimationOverrides Overrides { get; private set; } - + public String sitAnimation = "SIT"; /// /// Attachments recorded on this avatar. /// @@ -2779,7 +2779,11 @@ namespace OpenSim.Region.Framework.Scenes SendAvatarDataToAllAgents(); } - Animator.TrySetMovementAnimation("STAND"); + // reset to default sitAnimation + sitAnimation = "SIT"; + +// Animator.TrySetMovementAnimation("STAND"); + Animator.SetMovementAnimations("STAND"); TriggerScenePresenceUpdated(); } @@ -3058,11 +3062,18 @@ namespace OpenSim.Region.Framework.Scenes SendAvatarDataToAllAgents(); +/* if(status == 3) Animator.TrySetMovementAnimation("SIT_GROUND"); else Animator.TrySetMovementAnimation("SIT"); +*/ + if (status == 3) + sitAnimation = "SIT_GROUND"; + else + sitAnimation = "SIT"; + Animator.SetMovementAnimations("SIT"); part.ParentGroup.TriggerScriptChangedEvent(Changed.LINK); } @@ -3164,12 +3175,13 @@ namespace OpenSim.Region.Framework.Scenes SendAvatarDataToAllAgents(); - String sitAnimation = "SIT"; + sitAnimation = "SIT"; if (!String.IsNullOrEmpty(part.SitAnimation)) { sitAnimation = part.SitAnimation; } - Animator.TrySetMovementAnimation(sitAnimation); +// Animator.TrySetMovementAnimation(sitAnimation); + Animator.SetMovementAnimations("SIT"); TriggerScenePresenceUpdated(); } } @@ -3181,10 +3193,14 @@ namespace OpenSim.Region.Framework.Scenes // m_updateCount = 0; // Kill animation update burst so that the SIT_G.. will stick.. m_AngularVelocity = Vector3.Zero; - Animator.TrySetMovementAnimation("SIT_GROUND_CONSTRAINED"); - TriggerScenePresenceUpdated(); + sitAnimation = "SIT_GROUND_CONSTRAINED"; +// Animator.TrySetMovementAnimation("SIT_GROUND_CONSTRAINED"); +// TriggerScenePresenceUpdated(); SitGround = true; RemoveFromPhysicalScene(); + + Animator.SetMovementAnimations("SITGROUND"); + TriggerScenePresenceUpdated(); } /// diff --git a/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/LSL_Api.cs b/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/LSL_Api.cs index 755646f190..ca682d397b 100644 --- a/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/LSL_Api.cs +++ b/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/LSL_Api.cs @@ -132,25 +132,29 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api private Dictionary MovementAnimationsForLSL = new Dictionary { + {"CROUCH", "Crouching"}, + {"CROUCHWALK", "CrouchWalking"}, + {"FALLDOWN", "Falling Down"}, {"FLY", "Flying"}, {"FLYSLOW", "FlyingSlow"}, + {"HOVER", "Hovering"}, {"HOVER_UP", "Hovering Up"}, {"HOVER_DOWN", "Hovering Down"}, - {"HOVER", "Hovering"}, - {"LAND", "Landing"}, - {"FALLDOWN", "Falling Down"}, - {"PREJUMP", "PreJumping"}, {"JUMP", "Jumping"}, - {"STANDUP", "Standing Up"}, - {"SOFT_LAND", "Soft Landing"}, - {"STAND", "Standing"}, - {"CROUCHWALK", "CrouchWalking"}, + {"LAND", "Landing"}, + {"PREJUMP", "PreJumping"}, {"RUN", "Running"}, - {"WALK", "Walking"}, - {"CROUCH", "Crouching"}, + {"SIT","Sitting"}, + {"SITGROUND","Sitting on Ground"}, + {"STAND", "Standing"}, + {"STANDUP", "Standing Up"}, + {"STRIDE","Striding"}, + {"SOFT_LAND", "Soft Landing"}, {"TURNLEFT", "Turning Left"}, - {"TURNRIGHT", "Turning Right"} + {"TURNRIGHT", "Turning Right"}, + {"WALK", "Walking"} }; + //An array of HTTP/1.1 headers that are not allowed to be used //as custom headers by llHTTPRequest. private string[] HttpStandardHeaders = @@ -4884,10 +4888,10 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api { if (presence != null) { - if (presence.SitGround) - return "Sitting on Ground"; - if (presence.ParentID != 0 || presence.ParentUUID != UUID.Zero) - return "Sitting"; +// if (presence.SitGround) +// return "Sitting on Ground"; +// if (presence.ParentID != 0 || presence.ParentUUID != UUID.Zero) +// return "Sitting"; string movementAnimation = presence.Animator.CurrentMovementAnimation; string lslMovementAnimation;