From 864871f490e8026c2c440a5cb3ffcd5ad2a94285 Mon Sep 17 00:00:00 2001 From: UbitUmarov Date: Fri, 5 May 2023 11:45:17 +0100 Subject: [PATCH] a few changes --- .../Shared/Api/Implementation/LSL_Api.cs | 15 +++--- .../Shared/Api/Implementation/OSSL_Api.cs | 49 ++++++++++++++----- 2 files changed, 45 insertions(+), 19 deletions(-) diff --git a/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/LSL_Api.cs b/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/LSL_Api.cs index dc21473b9c..ce8e258870 100644 --- a/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/LSL_Api.cs +++ b/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/LSL_Api.cs @@ -5436,6 +5436,8 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api { if (item is LSL_Integer LSL_Integeritem) return LSL_Integeritem; + if (item is int LSL_Intitem) + return new LSL_Integer(LSL_Intitem); if (item is LSL_Float LSL_Floatitem) return new LSL_Integer(LSL_Floatitem.value); return new LSL_Integer(item.ToString()); @@ -5461,11 +5463,10 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api return 0; // valid keys seem to get parsed as integers then converted to floats - if (item is LSL_Key) + if (item is LSL_Key lslk) { - string s = item.ToString(); - if(UUID.TryParse(s, out UUID _)) - return Convert.ToDouble(new LSL_Integer(s).value); + if(UUID.TryParse(lslk.m_string, out UUID _)) + return Convert.ToDouble(new LSL_Integer(lslk.m_string).value); // we can't do this because a string is also a LSL_Key for now :( //else // return 0; @@ -5473,10 +5474,12 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api try { - if (item is LSL_Integer intitem) - return new LSL_Float(intitem.value); if (item is LSL_Float floatitem) return floatitem; + if (item is LSL_Integer intitem) + return new LSL_Float(intitem.value); + if (item is int LSL_Intitem) + return new LSL_Float(LSL_Intitem); if (item is LSL_String lstringitem) { Match m = Regex.Match(lstringitem.m_string, "^\\s*(-?\\+?[,0-9]+\\.?[0-9]*)"); diff --git a/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/OSSL_Api.cs b/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/OSSL_Api.cs index 5b1be6c4f9..b3b9643f98 100644 --- a/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/OSSL_Api.cs +++ b/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/OSSL_Api.cs @@ -1417,25 +1417,48 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api { CheckThreatLevel(); - return osSetPenColor(drawList, color, (LSL_Float)1.0); + byte argbR = Utils.FloatZeroOneToByte((float)color.x); + byte argbG = Utils.FloatZeroOneToByte((float)color.y); + byte argbB = Utils.FloatZeroOneToByte((float)color.z); + + StringBuilder sb = new(19); + sb.Append("PenColor FF"); + sb.Append(Utils.charHighNibbleToHexChar(argbR)); + sb.Append(Utils.charLowNibbleToHexChar(argbR)); + sb.Append(Utils.charHighNibbleToHexChar(argbG)); + sb.Append(Utils.charLowNibbleToHexChar(argbG)); + sb.Append(Utils.charHighNibbleToHexChar(argbB)); + sb.Append(Utils.charLowNibbleToHexChar(argbB)); + sb.Append("; "); + + drawList += sb.ToString(); + return drawList; } public string osSetPenColor(string drawList, LSL_Types.Vector3 color, LSL_Float alpha) { - CheckThreatLevel() ; + CheckThreatLevel(); - int argbA = (int) (Util.Clamp ((float)alpha, 0f, 1f) * 255f); - int argbR = (int) (Util.Clamp ((float)color.x, 0f, 1f) * 255f); - int argbG = (int) (Util.Clamp ((float)color.y, 0f, 1f) * 255f); - int argbB = (int) (Util.Clamp ((float)color.z, 0f, 1f) * 255f); - - StringBuilder hexColorBuilder = new StringBuilder(); - hexColorBuilder.Append(argbA.ToString("X2")); - hexColorBuilder.Append(argbR.ToString("X2")); - hexColorBuilder.Append(argbG.ToString("X2")); - hexColorBuilder.Append(argbB.ToString("X2")); + byte argbA = Utils.FloatZeroOneToByte((float)alpha); + byte argbR = Utils.FloatZeroOneToByte((float)color.x); + byte argbG = Utils.FloatZeroOneToByte((float)color.y); + byte argbB = Utils.FloatZeroOneToByte((float)color.z); - return osSetPenColor(drawList, hexColorBuilder.ToString()); + StringBuilder sb = new(19); + sb.Append("PenColor "); + sb.Append(Utils.charHighNibbleToHexChar(argbA)); + sb.Append(Utils.charLowNibbleToHexChar(argbA)); + sb.Append(Utils.charHighNibbleToHexChar(argbR)); + sb.Append(Utils.charLowNibbleToHexChar(argbR)); + sb.Append(Utils.charHighNibbleToHexChar(argbG)); + sb.Append(Utils.charLowNibbleToHexChar(argbG)); + sb.Append(Utils.charHighNibbleToHexChar(argbB)); + sb.Append(Utils.charLowNibbleToHexChar(argbB)); + sb.Append(';'); + sb.Append(' '); + + drawList += sb.ToString(); + return drawList; } // Deprecated