mirror of
https://github.com/opensim/opensim.git
synced 2026-08-01 06:06:06 +08:00
Adds osDrawPolygon to OSSL. Works a little different then other OS Drawing functions, this one has no start and end point, but a number of points that will form the desired polygon. Only FilledPolygon implemented so far.
* Also added some LSL transparent type conversion, as it's done in LSL scripting (string to integer, float to string, etc)
This commit is contained in:
@@ -833,6 +833,25 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
|
||||
return drawList;
|
||||
}
|
||||
|
||||
public string osDrawFilledPolygon(string drawList, LSL_List x, LSL_List y)
|
||||
{
|
||||
CheckThreatLevel(ThreatLevel.None, "osDrawFilledPolygon");
|
||||
|
||||
m_host.AddScriptLPS(1);
|
||||
|
||||
if (x.Length != y.Length || x.Length < 3)
|
||||
{
|
||||
return "";
|
||||
}
|
||||
drawList += "FillPolygon " + x.GetLSLStringItem(0) + "," + y.GetLSLStringItem(0);
|
||||
for (int i = 1; i < x.Length; i++)
|
||||
{
|
||||
drawList += "," + x.GetLSLStringItem(i) + "," + y.GetLSLStringItem(i);
|
||||
}
|
||||
drawList += "; ";
|
||||
return drawList;
|
||||
}
|
||||
|
||||
public string osSetFontSize(string drawList, int fontSize)
|
||||
{
|
||||
CheckThreatLevel(ThreatLevel.None, "osSetFontSize");
|
||||
|
||||
@@ -97,6 +97,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api.Interfaces
|
||||
string osDrawEllipse(string drawList, int width, int height);
|
||||
string osDrawRectangle(string drawList, int width, int height);
|
||||
string osDrawFilledRectangle(string drawList, int width, int height);
|
||||
string osDrawFilledPolygon(string drawList, LSL_List x, LSL_List y);
|
||||
string osSetFontSize(string drawList, int fontSize);
|
||||
string osSetPenSize(string drawList, int penSize);
|
||||
string osSetPenColour(string drawList, string colour);
|
||||
|
||||
@@ -267,6 +267,11 @@ namespace OpenSim.Region.ScriptEngine.Shared.ScriptBase
|
||||
return m_OSSL_Functions.osDrawFilledRectangle(drawList, width, height);
|
||||
}
|
||||
|
||||
public string osDrawFilledPolygon(string drawList, LSL_List x, LSL_List y)
|
||||
{
|
||||
return m_OSSL_Functions.osDrawFilledPolygon(drawList, x, y);
|
||||
}
|
||||
|
||||
public string osSetFontSize(string drawList, int fontSize)
|
||||
{
|
||||
return m_OSSL_Functions.osSetFontSize(drawList, fontSize);
|
||||
|
||||
@@ -439,6 +439,13 @@ namespace OpenSim.Region.ScriptEngine.Shared
|
||||
|
||||
set {m_data = value; }
|
||||
}
|
||||
// Function to obtain LSL type from an index. This is needed
|
||||
// because LSL lists allow for multiple types, and safely
|
||||
// iterating in them requires a type check.
|
||||
public Type GetLSLListItemType(int itemIndex)
|
||||
{
|
||||
return m_data[itemIndex].GetType();
|
||||
}
|
||||
|
||||
// Member functions to obtain item as specific types.
|
||||
// For cases where implicit conversions would apply if items
|
||||
@@ -465,6 +472,10 @@ namespace OpenSim.Region.ScriptEngine.Shared
|
||||
{
|
||||
return new LSL_Types.LSLFloat((Double)m_data[itemIndex]);
|
||||
}
|
||||
else if (m_data[itemIndex] is LSL_Types.LSLString)
|
||||
{
|
||||
return new LSL_Types.LSLFloat(m_data[itemIndex].ToString());
|
||||
}
|
||||
else
|
||||
{
|
||||
return (LSL_Types.LSLFloat)m_data[itemIndex];
|
||||
@@ -481,20 +492,32 @@ namespace OpenSim.Region.ScriptEngine.Shared
|
||||
{
|
||||
return new LSL_Types.LSLString((string)m_data[itemIndex]);
|
||||
}
|
||||
else if (m_data[itemIndex] is LSL_Types.LSLFloat)
|
||||
{
|
||||
return new LSL_Types.LSLString((LSLFloat)m_data[itemIndex]);
|
||||
}
|
||||
else if (m_data[itemIndex] is LSL_Types.LSLInteger)
|
||||
{
|
||||
return new LSL_Types.LSLString((LSLInteger)m_data[itemIndex]);
|
||||
}
|
||||
else
|
||||
{
|
||||
return (LSL_Types.LSLString)m_data[itemIndex];
|
||||
return (LSL_Types.LSLString)m_data[itemIndex];
|
||||
}
|
||||
}
|
||||
|
||||
public LSL_Types.LSLInteger GetLSLIntegerItem(int itemIndex)
|
||||
{
|
||||
if (m_data[itemIndex] is LSL_Types.LSLInteger)
|
||||
return (LSL_Types.LSLInteger)m_data[itemIndex];
|
||||
else if (m_data[itemIndex] is Int32)
|
||||
return new LSLInteger((int)m_data[itemIndex]);
|
||||
else
|
||||
throw new InvalidCastException();
|
||||
if (m_data[itemIndex] is LSL_Types.LSLInteger)
|
||||
return (LSL_Types.LSLInteger)m_data[itemIndex];
|
||||
if (m_data[itemIndex] is LSL_Types.LSLFloat)
|
||||
return new LSLInteger((int)m_data[itemIndex]);
|
||||
else if (m_data[itemIndex] is Int32)
|
||||
return new LSLInteger((int)m_data[itemIndex]);
|
||||
else if (m_data[itemIndex] is LSL_Types.LSLString)
|
||||
return new LSLInteger((string)m_data[itemIndex]);
|
||||
else
|
||||
throw new InvalidCastException();
|
||||
}
|
||||
|
||||
public LSL_Types.Vector3 GetVector3Item(int itemIndex)
|
||||
@@ -1331,6 +1354,12 @@ namespace OpenSim.Region.ScriptEngine.Shared
|
||||
m_string=s;
|
||||
}
|
||||
|
||||
public LSLString(LSLInteger i)
|
||||
{
|
||||
string s = String.Format("{0}", i);
|
||||
m_string = s;
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
#region Operators
|
||||
|
||||
Reference in New Issue
Block a user