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(); return new LSL_List();
} }
if(!stexID.IsZero()) if(stexID.IsNotZero())
{ {
part.Shape.ProjectionEntry = true; part.Shape.ProjectionEntry = true;
part.Shape.ProjectionTextureUUID = stexID; part.Shape.ProjectionTextureUUID = stexID;
@@ -10575,10 +10575,6 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
else if(part.Shape.ProjectionEntry) else if(part.Shape.ProjectionEntry)
{ {
part.Shape.ProjectionEntry = false; 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.ParentGroup.HasGroupChanged = true;
part.ScheduleFullUpdate(); part.ScheduleFullUpdate();

View File

@@ -3995,31 +3995,43 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
/// </summary> /// </summary>
public void osSetProjectionParams(LSL_Key prim, LSL_Integer llprojection, LSL_Key texture, LSL_Float fov, LSL_Float focus, LSL_Float amb) 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(UUID.TryParse(prim, out UUID pID) && pID.IsNotZero())
if (prim == ScriptBaseClass.NULL_KEY)
{ {
obj = m_host; SceneObjectPart obj = World.GetSceneObjectPart(pID);
SetProjectionParams(obj, llprojection, texture, fov, focus, amb);
} }
else else
{ SetProjectionParams(m_host, llprojection, texture, fov, focus, amb);
obj = World.GetSceneObjectPart(new UUID(prim));
if (obj == null)
return;
}
SetProjectionParams(obj, 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) private void SetProjectionParams(SceneObjectPart obj, LSL_Integer llprojection, LSL_Key texture, LSL_Float fov, LSL_Float focus, LSL_Float amb)
{ {
bool projection = llprojection != 0; if(obj == null || obj.IsDeleted || obj.Shape == null)
obj.Shape.ProjectionEntry = projection; return;
obj.Shape.ProjectionTextureUUID = new UUID(texture);
obj.Shape.ProjectionFOV = (float)fov;
obj.Shape.ProjectionFocus = (float)focus;
obj.Shape.ProjectionAmbiance = (float)amb;
obj.ParentGroup.HasGroupChanged = true; if(llprojection != 0)
obj.ScheduleFullUpdate(); {
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> /// <summary>