From 398fe1ffe6406bf0d09b7f737695fad4a627a653 Mon Sep 17 00:00:00 2001 From: UbitUmarov Date: Sun, 22 May 2022 16:54:19 +0100 Subject: [PATCH] change again, on disable leave parameters as they where; add values check to osSetProjectionParams --- .../Shared/Api/Implementation/LSL_Api.cs | 6 +-- .../Shared/Api/Implementation/OSSL_Api.cs | 46 ++++++++++++------- 2 files changed, 30 insertions(+), 22 deletions(-) diff --git a/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/LSL_Api.cs b/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/LSL_Api.cs index d2e38404fd..8748867436 100644 --- a/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/LSL_Api.cs +++ b/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/LSL_Api.cs @@ -10561,7 +10561,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api return new LSL_List(); } - if(!stexID.IsZero()) + if(stexID.IsNotZero()) { part.Shape.ProjectionEntry = true; part.Shape.ProjectionTextureUUID = stexID; @@ -10575,10 +10575,6 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api else if(part.Shape.ProjectionEntry) { part.Shape.ProjectionEntry = false; - part.Shape.ProjectionTextureUUID = UUID.Zero; - part.Shape.ProjectionFOV = 0f; - part.Shape.ProjectionFocus = 0f; - part.Shape.ProjectionAmbiance = 0f; part.ParentGroup.HasGroupChanged = true; part.ScheduleFullUpdate(); diff --git a/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/OSSL_Api.cs b/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/OSSL_Api.cs index 9685bfadb0..b22279e577 100644 --- a/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/OSSL_Api.cs +++ b/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/OSSL_Api.cs @@ -3995,31 +3995,43 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api /// public void osSetProjectionParams(LSL_Key prim, LSL_Integer llprojection, LSL_Key texture, LSL_Float fov, LSL_Float focus, LSL_Float amb) { - SceneObjectPart obj = null; - if (prim == ScriptBaseClass.NULL_KEY) + if(UUID.TryParse(prim, out UUID pID) && pID.IsNotZero()) { - obj = m_host; + SceneObjectPart obj = World.GetSceneObjectPart(pID); + SetProjectionParams(obj, llprojection, texture, fov, focus, amb); } else - { - obj = World.GetSceneObjectPart(new UUID(prim)); - if (obj == null) - return; - } - SetProjectionParams(obj, llprojection, texture, fov, focus, amb); + SetProjectionParams(m_host, llprojection, texture, fov, focus, amb); } private void SetProjectionParams(SceneObjectPart obj, LSL_Integer llprojection, LSL_Key texture, LSL_Float fov, LSL_Float focus, LSL_Float amb) { - bool projection = llprojection != 0; - obj.Shape.ProjectionEntry = projection; - obj.Shape.ProjectionTextureUUID = new UUID(texture); - obj.Shape.ProjectionFOV = (float)fov; - obj.Shape.ProjectionFocus = (float)focus; - obj.Shape.ProjectionAmbiance = (float)amb; + if(obj == null || obj.IsDeleted || obj.Shape == null) + return; - obj.ParentGroup.HasGroupChanged = true; - obj.ScheduleFullUpdate(); + if(llprojection != 0) + { + if (!UUID.TryParse(texture, out UUID texID)) + return; + + obj.Shape.ProjectionEntry = true; + obj.Shape.ProjectionTextureUUID = texID; + obj.Shape.ProjectionFOV = Util.Clamp((float)fov, 0, 3.0f); + obj.Shape.ProjectionFocus = Util.Clamp((float)focus, 0, 20.0f); + obj.Shape.ProjectionAmbiance = Util.Clamp((float)amb, 0, 1.0f); + + obj.ParentGroup.HasGroupChanged = true; + obj.ScheduleFullUpdate(); + return; + } + + if(obj.Shape.ProjectionEntry) + { + obj.Shape.ProjectionEntry = false; + + obj.ParentGroup.HasGroupChanged = true; + obj.ScheduleFullUpdate(); + } } ///