change again, on disable leave parameters as they where; add values check to osSetProjectionParams

This commit is contained in:
UbitUmarov
2022-05-22 16:54:19 +01:00
parent c843cc2b16
commit 398fe1ffe6
2 changed files with 30 additions and 22 deletions

View File

@@ -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();

View File

@@ -3995,31 +3995,43 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
/// </summary>
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();
}
}
/// <summary>