remove now duplicated shape code from LSL_Api.cs
parent
3863cd1d23
commit
ecc068fbe0
|
@ -3029,8 +3029,8 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
bool hasDimple;
|
bool hasDimple;
|
||||||
bool hasProfileCut;
|
bool hasProfileCut;
|
||||||
|
|
||||||
PrimType primType = getScriptPrimType();
|
PrimType primType = GetScriptPrimType();
|
||||||
hasCutHollowDimpleProfileCut(primType, Shape, out hasCut, out hasHollow, out hasDimple, out hasProfileCut);
|
HasCutHollowDimpleProfileCut(primType, Shape, out hasCut, out hasHollow, out hasDimple, out hasProfileCut);
|
||||||
|
|
||||||
switch (primType)
|
switch (primType)
|
||||||
{
|
{
|
||||||
|
@ -3085,7 +3085,7 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <param name="primShape"></param>
|
/// <param name="primShape"></param>
|
||||||
/// <returns></returns>
|
/// <returns></returns>
|
||||||
public PrimType getScriptPrimType()
|
public PrimType GetScriptPrimType()
|
||||||
{
|
{
|
||||||
if (Shape.SculptEntry)
|
if (Shape.SculptEntry)
|
||||||
return PrimType.SCULPT;
|
return PrimType.SCULPT;
|
||||||
|
@ -3129,7 +3129,7 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
/// <param name="hasHollow"></param>
|
/// <param name="hasHollow"></param>
|
||||||
/// <param name="hasDimple"></param>
|
/// <param name="hasDimple"></param>
|
||||||
/// <param name="hasProfileCut"></param>
|
/// <param name="hasProfileCut"></param>
|
||||||
protected static void hasCutHollowDimpleProfileCut(PrimType primType, PrimitiveBaseShape shape, out bool hasCut, out bool hasHollow,
|
protected static void HasCutHollowDimpleProfileCut(PrimType primType, PrimitiveBaseShape shape, out bool hasCut, out bool hasHollow,
|
||||||
out bool hasDimple, out bool hasProfileCut)
|
out bool hasDimple, out bool hasProfileCut)
|
||||||
{
|
{
|
||||||
if (primType == PrimType.BOX
|
if (primType == PrimType.BOX
|
||||||
|
|
|
@ -1330,44 +1330,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
|
||||||
{
|
{
|
||||||
m_host.AddScriptLPS(1);
|
m_host.AddScriptLPS(1);
|
||||||
|
|
||||||
SetColor(m_host, color, face);
|
m_host.SetFaceColor(new Vector3((float)color.x, (float)color.y, (float)color.z), face);
|
||||||
}
|
|
||||||
|
|
||||||
protected void SetColor(SceneObjectPart part, LSL_Vector color, int face)
|
|
||||||
{
|
|
||||||
Primitive.TextureEntry tex = part.Shape.Textures;
|
|
||||||
Color4 texcolor;
|
|
||||||
if (face >= 0 && face < GetNumberOfSides(part))
|
|
||||||
{
|
|
||||||
texcolor = tex.CreateFace((uint)face).RGBA;
|
|
||||||
texcolor.R = Util.Clip((float)color.x, 0.0f, 1.0f);
|
|
||||||
texcolor.G = Util.Clip((float)color.y, 0.0f, 1.0f);
|
|
||||||
texcolor.B = Util.Clip((float)color.z, 0.0f, 1.0f);
|
|
||||||
tex.FaceTextures[face].RGBA = texcolor;
|
|
||||||
part.UpdateTexture(tex);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
else if (face == ScriptBaseClass.ALL_SIDES)
|
|
||||||
{
|
|
||||||
for (uint i = 0; i < GetNumberOfSides(part); i++)
|
|
||||||
{
|
|
||||||
if (tex.FaceTextures[i] != null)
|
|
||||||
{
|
|
||||||
texcolor = tex.FaceTextures[i].RGBA;
|
|
||||||
texcolor.R = Util.Clip((float)color.x, 0.0f, 1.0f);
|
|
||||||
texcolor.G = Util.Clip((float)color.y, 0.0f, 1.0f);
|
|
||||||
texcolor.B = Util.Clip((float)color.z, 0.0f, 1.0f);
|
|
||||||
tex.FaceTextures[i].RGBA = texcolor;
|
|
||||||
}
|
|
||||||
texcolor = tex.DefaultTexture.RGBA;
|
|
||||||
texcolor.R = Util.Clip((float)color.x, 0.0f, 1.0f);
|
|
||||||
texcolor.G = Util.Clip((float)color.y, 0.0f, 1.0f);
|
|
||||||
texcolor.B = Util.Clip((float)color.z, 0.0f, 1.0f);
|
|
||||||
tex.DefaultTexture.RGBA = texcolor;
|
|
||||||
}
|
|
||||||
part.UpdateTexture(tex);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public void SetTexGen(SceneObjectPart part, int face,int style)
|
public void SetTexGen(SceneObjectPart part, int face,int style)
|
||||||
|
@ -1378,7 +1341,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
|
||||||
if (style == (int)ScriptBaseClass.PRIM_TEXGEN_PLANAR)
|
if (style == (int)ScriptBaseClass.PRIM_TEXGEN_PLANAR)
|
||||||
textype = MappingType.Planar;
|
textype = MappingType.Planar;
|
||||||
|
|
||||||
if (face >= 0 && face < GetNumberOfSides(part))
|
if (face >= 0 && face < part.GetNumberOfSides())
|
||||||
{
|
{
|
||||||
tex.CreateFace((uint) face);
|
tex.CreateFace((uint) face);
|
||||||
tex.FaceTextures[face].TexMapType = textype;
|
tex.FaceTextures[face].TexMapType = textype;
|
||||||
|
@ -1387,7 +1350,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
|
||||||
}
|
}
|
||||||
else if (face == ScriptBaseClass.ALL_SIDES)
|
else if (face == ScriptBaseClass.ALL_SIDES)
|
||||||
{
|
{
|
||||||
for (uint i = 0; i < GetNumberOfSides(part); i++)
|
for (uint i = 0; i < part.GetNumberOfSides(); i++)
|
||||||
{
|
{
|
||||||
if (tex.FaceTextures[i] != null)
|
if (tex.FaceTextures[i] != null)
|
||||||
{
|
{
|
||||||
|
@ -1403,7 +1366,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
|
||||||
public void SetGlow(SceneObjectPart part, int face, float glow)
|
public void SetGlow(SceneObjectPart part, int face, float glow)
|
||||||
{
|
{
|
||||||
Primitive.TextureEntry tex = part.Shape.Textures;
|
Primitive.TextureEntry tex = part.Shape.Textures;
|
||||||
if (face >= 0 && face < GetNumberOfSides(part))
|
if (face >= 0 && face < part.GetNumberOfSides())
|
||||||
{
|
{
|
||||||
tex.CreateFace((uint) face);
|
tex.CreateFace((uint) face);
|
||||||
tex.FaceTextures[face].Glow = glow;
|
tex.FaceTextures[face].Glow = glow;
|
||||||
|
@ -1412,7 +1375,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
|
||||||
}
|
}
|
||||||
else if (face == ScriptBaseClass.ALL_SIDES)
|
else if (face == ScriptBaseClass.ALL_SIDES)
|
||||||
{
|
{
|
||||||
for (uint i = 0; i < GetNumberOfSides(part); i++)
|
for (uint i = 0; i < part.GetNumberOfSides(); i++)
|
||||||
{
|
{
|
||||||
if (tex.FaceTextures[i] != null)
|
if (tex.FaceTextures[i] != null)
|
||||||
{
|
{
|
||||||
|
@ -1450,7 +1413,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
|
||||||
}
|
}
|
||||||
|
|
||||||
Primitive.TextureEntry tex = part.Shape.Textures;
|
Primitive.TextureEntry tex = part.Shape.Textures;
|
||||||
if (face >= 0 && face < GetNumberOfSides(part))
|
if (face >= 0 && face < part.GetNumberOfSides())
|
||||||
{
|
{
|
||||||
tex.CreateFace((uint) face);
|
tex.CreateFace((uint) face);
|
||||||
tex.FaceTextures[face].Shiny = sval;
|
tex.FaceTextures[face].Shiny = sval;
|
||||||
|
@ -1460,7 +1423,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
|
||||||
}
|
}
|
||||||
else if (face == ScriptBaseClass.ALL_SIDES)
|
else if (face == ScriptBaseClass.ALL_SIDES)
|
||||||
{
|
{
|
||||||
for (uint i = 0; i < GetNumberOfSides(part); i++)
|
for (uint i = 0; i < part.GetNumberOfSides(); i++)
|
||||||
{
|
{
|
||||||
if (tex.FaceTextures[i] != null)
|
if (tex.FaceTextures[i] != null)
|
||||||
{
|
{
|
||||||
|
@ -1478,7 +1441,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
|
||||||
public void SetFullBright(SceneObjectPart part, int face, bool bright)
|
public void SetFullBright(SceneObjectPart part, int face, bool bright)
|
||||||
{
|
{
|
||||||
Primitive.TextureEntry tex = part.Shape.Textures;
|
Primitive.TextureEntry tex = part.Shape.Textures;
|
||||||
if (face >= 0 && face < GetNumberOfSides(part))
|
if (face >= 0 && face < part.GetNumberOfSides())
|
||||||
{
|
{
|
||||||
tex.CreateFace((uint) face);
|
tex.CreateFace((uint) face);
|
||||||
tex.FaceTextures[face].Fullbright = bright;
|
tex.FaceTextures[face].Fullbright = bright;
|
||||||
|
@ -1487,7 +1450,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
|
||||||
}
|
}
|
||||||
else if (face == ScriptBaseClass.ALL_SIDES)
|
else if (face == ScriptBaseClass.ALL_SIDES)
|
||||||
{
|
{
|
||||||
for (uint i = 0; i < GetNumberOfSides(part); i++)
|
for (uint i = 0; i < part.GetNumberOfSides(); i++)
|
||||||
{
|
{
|
||||||
if (tex.FaceTextures[i] != null)
|
if (tex.FaceTextures[i] != null)
|
||||||
{
|
{
|
||||||
|
@ -1514,11 +1477,11 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
|
||||||
{
|
{
|
||||||
int i;
|
int i;
|
||||||
double sum = 0.0;
|
double sum = 0.0;
|
||||||
for (i = 0 ; i < GetNumberOfSides(part) ; i++)
|
for (i = 0 ; i < part.GetNumberOfSides(); i++)
|
||||||
sum += (double)tex.GetFace((uint)i).RGBA.A;
|
sum += (double)tex.GetFace((uint)i).RGBA.A;
|
||||||
return sum;
|
return sum;
|
||||||
}
|
}
|
||||||
if (face >= 0 && face < GetNumberOfSides(part))
|
if (face >= 0 && face < part.GetNumberOfSides())
|
||||||
{
|
{
|
||||||
return (double)tex.GetFace((uint)face).RGBA.A;
|
return (double)tex.GetFace((uint)face).RGBA.A;
|
||||||
}
|
}
|
||||||
|
@ -1546,7 +1509,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
|
||||||
{
|
{
|
||||||
Primitive.TextureEntry tex = part.Shape.Textures;
|
Primitive.TextureEntry tex = part.Shape.Textures;
|
||||||
Color4 texcolor;
|
Color4 texcolor;
|
||||||
if (face >= 0 && face < GetNumberOfSides(part))
|
if (face >= 0 && face < part.GetNumberOfSides())
|
||||||
{
|
{
|
||||||
texcolor = tex.CreateFace((uint)face).RGBA;
|
texcolor = tex.CreateFace((uint)face).RGBA;
|
||||||
texcolor.A = Util.Clip((float)alpha, 0.0f, 1.0f);
|
texcolor.A = Util.Clip((float)alpha, 0.0f, 1.0f);
|
||||||
|
@ -1556,7 +1519,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
|
||||||
}
|
}
|
||||||
else if (face == ScriptBaseClass.ALL_SIDES)
|
else if (face == ScriptBaseClass.ALL_SIDES)
|
||||||
{
|
{
|
||||||
for (int i = 0; i < GetNumberOfSides(part); i++)
|
for (int i = 0; i < part.GetNumberOfSides(); i++)
|
||||||
{
|
{
|
||||||
if (tex.FaceTextures[i] != null)
|
if (tex.FaceTextures[i] != null)
|
||||||
{
|
{
|
||||||
|
@ -1661,7 +1624,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
|
||||||
{
|
{
|
||||||
int i;
|
int i;
|
||||||
|
|
||||||
for (i = 0 ; i < GetNumberOfSides(part) ; i++)
|
for (i = 0 ; i < part.GetNumberOfSides(); i++)
|
||||||
{
|
{
|
||||||
texcolor = tex.GetFace((uint)i).RGBA;
|
texcolor = tex.GetFace((uint)i).RGBA;
|
||||||
rgb.x += texcolor.R;
|
rgb.x += texcolor.R;
|
||||||
|
@ -1669,13 +1632,13 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
|
||||||
rgb.z += texcolor.B;
|
rgb.z += texcolor.B;
|
||||||
}
|
}
|
||||||
|
|
||||||
rgb.x /= (float)GetNumberOfSides(part);
|
rgb.x /= (float)part.GetNumberOfSides();
|
||||||
rgb.y /= (float)GetNumberOfSides(part);
|
rgb.y /= (float)part.GetNumberOfSides();
|
||||||
rgb.z /= (float)GetNumberOfSides(part);
|
rgb.z /= (float)part.GetNumberOfSides();
|
||||||
|
|
||||||
return rgb;
|
return rgb;
|
||||||
}
|
}
|
||||||
if (face >= 0 && face < GetNumberOfSides(part))
|
if (face >= 0 && face < part.GetNumberOfSides())
|
||||||
{
|
{
|
||||||
texcolor = tex.GetFace((uint)face).RGBA;
|
texcolor = tex.GetFace((uint)face).RGBA;
|
||||||
rgb.x = texcolor.R;
|
rgb.x = texcolor.R;
|
||||||
|
@ -1722,7 +1685,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
|
||||||
|
|
||||||
Primitive.TextureEntry tex = part.Shape.Textures;
|
Primitive.TextureEntry tex = part.Shape.Textures;
|
||||||
|
|
||||||
if (face >= 0 && face < GetNumberOfSides(part))
|
if (face >= 0 && face < part.GetNumberOfSides())
|
||||||
{
|
{
|
||||||
Primitive.TextureEntryFace texface = tex.CreateFace((uint)face);
|
Primitive.TextureEntryFace texface = tex.CreateFace((uint)face);
|
||||||
texface.TextureID = textureID;
|
texface.TextureID = textureID;
|
||||||
|
@ -1732,7 +1695,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
|
||||||
}
|
}
|
||||||
else if (face == ScriptBaseClass.ALL_SIDES)
|
else if (face == ScriptBaseClass.ALL_SIDES)
|
||||||
{
|
{
|
||||||
for (uint i = 0; i < GetNumberOfSides(part); i++)
|
for (uint i = 0; i < part.GetNumberOfSides(); i++)
|
||||||
{
|
{
|
||||||
if (tex.FaceTextures[i] != null)
|
if (tex.FaceTextures[i] != null)
|
||||||
{
|
{
|
||||||
|
@ -1756,7 +1719,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
|
||||||
protected void ScaleTexture(SceneObjectPart part, double u, double v, int face)
|
protected void ScaleTexture(SceneObjectPart part, double u, double v, int face)
|
||||||
{
|
{
|
||||||
Primitive.TextureEntry tex = part.Shape.Textures;
|
Primitive.TextureEntry tex = part.Shape.Textures;
|
||||||
if (face >= 0 && face < GetNumberOfSides(part))
|
if (face >= 0 && face < part.GetNumberOfSides())
|
||||||
{
|
{
|
||||||
Primitive.TextureEntryFace texface = tex.CreateFace((uint)face);
|
Primitive.TextureEntryFace texface = tex.CreateFace((uint)face);
|
||||||
texface.RepeatU = (float)u;
|
texface.RepeatU = (float)u;
|
||||||
|
@ -1767,7 +1730,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
|
||||||
}
|
}
|
||||||
if (face == ScriptBaseClass.ALL_SIDES)
|
if (face == ScriptBaseClass.ALL_SIDES)
|
||||||
{
|
{
|
||||||
for (int i = 0; i < GetNumberOfSides(part); i++)
|
for (int i = 0; i < part.GetNumberOfSides(); i++)
|
||||||
{
|
{
|
||||||
if (tex.FaceTextures[i] != null)
|
if (tex.FaceTextures[i] != null)
|
||||||
{
|
{
|
||||||
|
@ -1792,7 +1755,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
|
||||||
protected void OffsetTexture(SceneObjectPart part, double u, double v, int face)
|
protected void OffsetTexture(SceneObjectPart part, double u, double v, int face)
|
||||||
{
|
{
|
||||||
Primitive.TextureEntry tex = part.Shape.Textures;
|
Primitive.TextureEntry tex = part.Shape.Textures;
|
||||||
if (face >= 0 && face < GetNumberOfSides(part))
|
if (face >= 0 && face < part.GetNumberOfSides())
|
||||||
{
|
{
|
||||||
Primitive.TextureEntryFace texface = tex.CreateFace((uint)face);
|
Primitive.TextureEntryFace texface = tex.CreateFace((uint)face);
|
||||||
texface.OffsetU = (float)u;
|
texface.OffsetU = (float)u;
|
||||||
|
@ -1803,7 +1766,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
|
||||||
}
|
}
|
||||||
if (face == ScriptBaseClass.ALL_SIDES)
|
if (face == ScriptBaseClass.ALL_SIDES)
|
||||||
{
|
{
|
||||||
for (int i = 0; i < GetNumberOfSides(part); i++)
|
for (int i = 0; i < part.GetNumberOfSides(); i++)
|
||||||
{
|
{
|
||||||
if (tex.FaceTextures[i] != null)
|
if (tex.FaceTextures[i] != null)
|
||||||
{
|
{
|
||||||
|
@ -1828,7 +1791,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
|
||||||
protected void RotateTexture(SceneObjectPart part, double rotation, int face)
|
protected void RotateTexture(SceneObjectPart part, double rotation, int face)
|
||||||
{
|
{
|
||||||
Primitive.TextureEntry tex = part.Shape.Textures;
|
Primitive.TextureEntry tex = part.Shape.Textures;
|
||||||
if (face >= 0 && face < GetNumberOfSides(part))
|
if (face >= 0 && face < part.GetNumberOfSides())
|
||||||
{
|
{
|
||||||
Primitive.TextureEntryFace texface = tex.CreateFace((uint)face);
|
Primitive.TextureEntryFace texface = tex.CreateFace((uint)face);
|
||||||
texface.Rotation = (float)rotation;
|
texface.Rotation = (float)rotation;
|
||||||
|
@ -1838,7 +1801,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
|
||||||
}
|
}
|
||||||
if (face == ScriptBaseClass.ALL_SIDES)
|
if (face == ScriptBaseClass.ALL_SIDES)
|
||||||
{
|
{
|
||||||
for (int i = 0; i < GetNumberOfSides(part); i++)
|
for (int i = 0; i < part.GetNumberOfSides(); i++)
|
||||||
{
|
{
|
||||||
if (tex.FaceTextures[i] != null)
|
if (tex.FaceTextures[i] != null)
|
||||||
{
|
{
|
||||||
|
@ -1864,7 +1827,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
|
||||||
{
|
{
|
||||||
face = 0;
|
face = 0;
|
||||||
}
|
}
|
||||||
if (face >= 0 && face < GetNumberOfSides(part))
|
if (face >= 0 && face < part.GetNumberOfSides())
|
||||||
{
|
{
|
||||||
Primitive.TextureEntryFace texface;
|
Primitive.TextureEntryFace texface;
|
||||||
texface = tex.GetFace((uint)face);
|
texface = tex.GetFace((uint)face);
|
||||||
|
@ -3414,7 +3377,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
|
||||||
List<SceneObjectPart> parts = GetLinkParts(linknumber);
|
List<SceneObjectPart> parts = GetLinkParts(linknumber);
|
||||||
|
|
||||||
foreach (SceneObjectPart part in parts)
|
foreach (SceneObjectPart part in parts)
|
||||||
SetColor(part, color, face);
|
part.SetFaceColor(new Vector3((float)color.x, (float)color.y, (float)color.z), face);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void llCreateLink(string target, int parent)
|
public void llCreateLink(string target, int parent)
|
||||||
|
@ -4271,127 +4234,11 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
// this function to understand which shape it is (taken from meshmerizer)
|
|
||||||
// quite useful can be used by meshmerizer to have a centralized point of understanding the shape
|
|
||||||
// except that it refers to scripting constants
|
|
||||||
public int getScriptPrimType(PrimitiveBaseShape primShape)
|
|
||||||
{
|
|
||||||
if (primShape.SculptEntry)
|
|
||||||
return ScriptBaseClass.PRIM_TYPE_SCULPT;
|
|
||||||
if ((primShape.ProfileCurve & 0x07) == (byte)ProfileShape.Square)
|
|
||||||
{
|
|
||||||
if (primShape.PathCurve == (byte)Extrusion.Straight)
|
|
||||||
return ScriptBaseClass.PRIM_TYPE_BOX;
|
|
||||||
else if (primShape.PathCurve == (byte)Extrusion.Curve1)
|
|
||||||
return ScriptBaseClass.PRIM_TYPE_TUBE;
|
|
||||||
}
|
|
||||||
else if ((primShape.ProfileCurve & 0x07) == (byte)ProfileShape.Circle)
|
|
||||||
{
|
|
||||||
if (primShape.PathCurve == (byte)Extrusion.Straight)
|
|
||||||
return ScriptBaseClass.PRIM_TYPE_CYLINDER;
|
|
||||||
// ProfileCurve seems to combine hole shape and profile curve so we need to only compare against the lower 3 bits
|
|
||||||
else if (primShape.PathCurve == (byte)Extrusion.Curve1)
|
|
||||||
return ScriptBaseClass.PRIM_TYPE_TORUS;
|
|
||||||
}
|
|
||||||
else if ((primShape.ProfileCurve & 0x07) == (byte)ProfileShape.HalfCircle)
|
|
||||||
{
|
|
||||||
if (primShape.PathCurve == (byte)Extrusion.Curve1 || primShape.PathCurve == (byte)Extrusion.Curve2)
|
|
||||||
return ScriptBaseClass.PRIM_TYPE_SPHERE;
|
|
||||||
}
|
|
||||||
else if ((primShape.ProfileCurve & 0x07) == (byte)ProfileShape.EquilateralTriangle)
|
|
||||||
{
|
|
||||||
if (primShape.PathCurve == (byte)Extrusion.Straight)
|
|
||||||
return ScriptBaseClass.PRIM_TYPE_PRISM;
|
|
||||||
else if (primShape.PathCurve == (byte)Extrusion.Curve1)
|
|
||||||
return ScriptBaseClass.PRIM_TYPE_RING;
|
|
||||||
}
|
|
||||||
return ScriptBaseClass.PRIM_TYPE_BOX;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Helper functions to understand if object has cut, hollow, dimple, and other affecting number of faces
|
|
||||||
protected void hasCutHollowDimpleProfileCut(int primType, PrimitiveBaseShape shape, out bool hasCut, out bool hasHollow,
|
|
||||||
out bool hasDimple, out bool hasProfileCut)
|
|
||||||
{
|
|
||||||
if (primType == ScriptBaseClass.PRIM_TYPE_BOX
|
|
||||||
||
|
|
||||||
primType == ScriptBaseClass.PRIM_TYPE_CYLINDER
|
|
||||||
||
|
|
||||||
primType == ScriptBaseClass.PRIM_TYPE_PRISM)
|
|
||||||
|
|
||||||
hasCut = (shape.ProfileBegin > 0) || (shape.ProfileEnd > 0);
|
|
||||||
else
|
|
||||||
hasCut = (shape.PathBegin > 0) || (shape.PathEnd > 0);
|
|
||||||
|
|
||||||
hasHollow = shape.ProfileHollow > 0;
|
|
||||||
hasDimple = (shape.ProfileBegin > 0) || (shape.ProfileEnd > 0); // taken from llSetPrimitiveParms
|
|
||||||
hasProfileCut = hasDimple; // is it the same thing?
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
public LSL_Integer llGetNumberOfSides()
|
public LSL_Integer llGetNumberOfSides()
|
||||||
{
|
{
|
||||||
m_host.AddScriptLPS(1);
|
m_host.AddScriptLPS(1);
|
||||||
|
|
||||||
return GetNumberOfSides(m_host);
|
return m_host.GetNumberOfSides();
|
||||||
}
|
|
||||||
|
|
||||||
protected int GetNumberOfSides(SceneObjectPart part)
|
|
||||||
{
|
|
||||||
int ret = 0;
|
|
||||||
bool hasCut;
|
|
||||||
bool hasHollow;
|
|
||||||
bool hasDimple;
|
|
||||||
bool hasProfileCut;
|
|
||||||
|
|
||||||
int primType = getScriptPrimType(part.Shape);
|
|
||||||
hasCutHollowDimpleProfileCut(primType, part.Shape, out hasCut, out hasHollow, out hasDimple, out hasProfileCut);
|
|
||||||
|
|
||||||
switch (primType)
|
|
||||||
{
|
|
||||||
case ScriptBaseClass.PRIM_TYPE_BOX:
|
|
||||||
ret = 6;
|
|
||||||
if (hasCut) ret += 2;
|
|
||||||
if (hasHollow) ret += 1;
|
|
||||||
break;
|
|
||||||
case ScriptBaseClass.PRIM_TYPE_CYLINDER:
|
|
||||||
ret = 3;
|
|
||||||
if (hasCut) ret += 2;
|
|
||||||
if (hasHollow) ret += 1;
|
|
||||||
break;
|
|
||||||
case ScriptBaseClass.PRIM_TYPE_PRISM:
|
|
||||||
ret = 5;
|
|
||||||
if (hasCut) ret += 2;
|
|
||||||
if (hasHollow) ret += 1;
|
|
||||||
break;
|
|
||||||
case ScriptBaseClass.PRIM_TYPE_SPHERE:
|
|
||||||
ret = 1;
|
|
||||||
if (hasCut) ret += 2;
|
|
||||||
if (hasDimple) ret += 2;
|
|
||||||
if (hasHollow) ret += 3; // Emulate lsl on secondlife (according to documentation it should have added only +1)
|
|
||||||
break;
|
|
||||||
case ScriptBaseClass.PRIM_TYPE_TORUS:
|
|
||||||
ret = 1;
|
|
||||||
if (hasCut) ret += 2;
|
|
||||||
if (hasProfileCut) ret += 2;
|
|
||||||
if (hasHollow) ret += 1;
|
|
||||||
break;
|
|
||||||
case ScriptBaseClass.PRIM_TYPE_TUBE:
|
|
||||||
ret = 4;
|
|
||||||
if (hasCut) ret += 2;
|
|
||||||
if (hasProfileCut) ret += 2;
|
|
||||||
if (hasHollow) ret += 1;
|
|
||||||
break;
|
|
||||||
case ScriptBaseClass.PRIM_TYPE_RING:
|
|
||||||
ret = 3;
|
|
||||||
if (hasCut) ret += 2;
|
|
||||||
if (hasProfileCut) ret += 2;
|
|
||||||
if (hasHollow) ret += 1;
|
|
||||||
break;
|
|
||||||
case ScriptBaseClass.PRIM_TYPE_SCULPT:
|
|
||||||
ret = 1;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
return ret;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* The new / changed functions were tested with the following LSL script:
|
/* The new / changed functions were tested with the following LSL script:
|
||||||
|
@ -4588,7 +4435,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
|
||||||
{
|
{
|
||||||
face = 0;
|
face = 0;
|
||||||
}
|
}
|
||||||
if (face >= 0 && face < GetNumberOfSides(part))
|
if (face >= 0 && face < part.GetNumberOfSides())
|
||||||
{
|
{
|
||||||
offset.x = tex.GetFace((uint)face).OffsetU;
|
offset.x = tex.GetFace((uint)face).OffsetU;
|
||||||
offset.y = tex.GetFace((uint)face).OffsetV;
|
offset.y = tex.GetFace((uint)face).OffsetV;
|
||||||
|
@ -4629,7 +4476,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
|
||||||
{
|
{
|
||||||
face = 0;
|
face = 0;
|
||||||
}
|
}
|
||||||
if (face >= 0 && face < GetNumberOfSides(part))
|
if (face >= 0 && face < part.GetNumberOfSides())
|
||||||
{
|
{
|
||||||
return tex.GetFace((uint)face).Rotation;
|
return tex.GetFace((uint)face).Rotation;
|
||||||
}
|
}
|
||||||
|
@ -7019,10 +6866,11 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
|
||||||
LSL_Vector color=rules.GetVector3Item(idx++);
|
LSL_Vector color=rules.GetVector3Item(idx++);
|
||||||
double alpha=(double)rules.GetLSLFloatItem(idx++);
|
double alpha=(double)rules.GetLSLFloatItem(idx++);
|
||||||
|
|
||||||
SetColor(part, color, face);
|
part.SetFaceColor(new Vector3((float)color.x, (float)color.y, (float)color.z), face);
|
||||||
SetAlpha(part, alpha, face);
|
SetAlpha(part, alpha, face);
|
||||||
|
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case (int)ScriptBaseClass.PRIM_FLEXIBLE:
|
case (int)ScriptBaseClass.PRIM_FLEXIBLE:
|
||||||
if (remain < 7)
|
if (remain < 7)
|
||||||
return;
|
return;
|
||||||
|
@ -7038,6 +6886,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
|
||||||
SetFlexi(part, flexi, softness, gravity, friction, wind, tension, force);
|
SetFlexi(part, flexi, softness, gravity, friction, wind, tension, force);
|
||||||
|
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case (int)ScriptBaseClass.PRIM_POINT_LIGHT:
|
case (int)ScriptBaseClass.PRIM_POINT_LIGHT:
|
||||||
if (remain < 5)
|
if (remain < 5)
|
||||||
return;
|
return;
|
||||||
|
@ -7050,6 +6899,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
|
||||||
SetPointLight(part, light, lightcolor, intensity, radius, falloff);
|
SetPointLight(part, light, lightcolor, intensity, radius, falloff);
|
||||||
|
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case (int)ScriptBaseClass.PRIM_GLOW:
|
case (int)ScriptBaseClass.PRIM_GLOW:
|
||||||
if (remain < 2)
|
if (remain < 2)
|
||||||
return;
|
return;
|
||||||
|
@ -7059,6 +6909,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
|
||||||
SetGlow(part, face, glow);
|
SetGlow(part, face, glow);
|
||||||
|
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case (int)ScriptBaseClass.PRIM_BUMP_SHINY:
|
case (int)ScriptBaseClass.PRIM_BUMP_SHINY:
|
||||||
if (remain < 3)
|
if (remain < 3)
|
||||||
return;
|
return;
|
||||||
|
@ -7069,6 +6920,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
|
||||||
SetShiny(part, face, shiny, bump);
|
SetShiny(part, face, shiny, bump);
|
||||||
|
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case (int)ScriptBaseClass.PRIM_FULLBRIGHT:
|
case (int)ScriptBaseClass.PRIM_FULLBRIGHT:
|
||||||
if (remain < 2)
|
if (remain < 2)
|
||||||
return;
|
return;
|
||||||
|
@ -7076,6 +6928,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
|
||||||
bool st = rules.GetLSLIntegerItem(idx++);
|
bool st = rules.GetLSLIntegerItem(idx++);
|
||||||
SetFullBright(part, face , st);
|
SetFullBright(part, face , st);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case (int)ScriptBaseClass.PRIM_MATERIAL:
|
case (int)ScriptBaseClass.PRIM_MATERIAL:
|
||||||
if (remain < 1)
|
if (remain < 1)
|
||||||
return;
|
return;
|
||||||
|
@ -7085,6 +6938,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
|
||||||
|
|
||||||
part.Material = Convert.ToByte(mat);
|
part.Material = Convert.ToByte(mat);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case (int)ScriptBaseClass.PRIM_PHANTOM:
|
case (int)ScriptBaseClass.PRIM_PHANTOM:
|
||||||
if (remain < 1)
|
if (remain < 1)
|
||||||
return;
|
return;
|
||||||
|
@ -7099,6 +6953,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
|
||||||
|
|
||||||
part.ScriptSetPhantomStatus(phantom);
|
part.ScriptSetPhantomStatus(phantom);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case (int)ScriptBaseClass.PRIM_PHYSICS:
|
case (int)ScriptBaseClass.PRIM_PHYSICS:
|
||||||
if (remain < 1)
|
if (remain < 1)
|
||||||
return;
|
return;
|
||||||
|
@ -7112,6 +6967,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
|
||||||
|
|
||||||
part.ScriptSetPhysicsStatus(physics);
|
part.ScriptSetPhysicsStatus(physics);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case (int)ScriptBaseClass.PRIM_TEMP_ON_REZ:
|
case (int)ScriptBaseClass.PRIM_TEMP_ON_REZ:
|
||||||
if (remain < 1)
|
if (remain < 1)
|
||||||
return;
|
return;
|
||||||
|
@ -7379,7 +7235,6 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
|
||||||
|
|
||||||
public LSL_List GetLinkPrimitiveParams(SceneObjectPart part, LSL_List rules)
|
public LSL_List GetLinkPrimitiveParams(SceneObjectPart part, LSL_List rules)
|
||||||
{
|
{
|
||||||
|
|
||||||
LSL_List res = new LSL_List();
|
LSL_List res = new LSL_List();
|
||||||
int idx=0;
|
int idx=0;
|
||||||
while (idx < rules.Length)
|
while (idx < rules.Length)
|
||||||
|
@ -7441,7 +7296,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
|
||||||
case (int)ScriptBaseClass.PRIM_TYPE:
|
case (int)ScriptBaseClass.PRIM_TYPE:
|
||||||
// implementing box
|
// implementing box
|
||||||
PrimitiveBaseShape Shape = part.Shape;
|
PrimitiveBaseShape Shape = part.Shape;
|
||||||
int primType = getScriptPrimType(part.Shape);
|
int primType = (int)part.GetScriptPrimType();
|
||||||
res.Add(new LSL_Integer(primType));
|
res.Add(new LSL_Integer(primType));
|
||||||
double topshearx = (double)(sbyte)Shape.PathShearX / 100.0; // Fix negative values for PathShearX
|
double topshearx = (double)(sbyte)Shape.PathShearX / 100.0; // Fix negative values for PathShearX
|
||||||
double topsheary = (double)(sbyte)Shape.PathShearY / 100.0; // and PathShearY.
|
double topsheary = (double)(sbyte)Shape.PathShearY / 100.0; // and PathShearY.
|
||||||
|
@ -7521,7 +7376,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
|
||||||
Primitive.TextureEntry tex = part.Shape.Textures;
|
Primitive.TextureEntry tex = part.Shape.Textures;
|
||||||
if (face == ScriptBaseClass.ALL_SIDES)
|
if (face == ScriptBaseClass.ALL_SIDES)
|
||||||
{
|
{
|
||||||
for (face = 0 ; face < GetNumberOfSides(part) ; face++)
|
for (face = 0 ; face < part.GetNumberOfSides() ; face++)
|
||||||
{
|
{
|
||||||
Primitive.TextureEntryFace texface = tex.GetFace((uint)face);
|
Primitive.TextureEntryFace texface = tex.GetFace((uint)face);
|
||||||
|
|
||||||
|
@ -7537,7 +7392,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
if (face >= 0 && face < GetNumberOfSides(part))
|
if (face >= 0 && face < part.GetNumberOfSides())
|
||||||
{
|
{
|
||||||
Primitive.TextureEntryFace texface = tex.GetFace((uint)face);
|
Primitive.TextureEntryFace texface = tex.GetFace((uint)face);
|
||||||
|
|
||||||
|
@ -7563,7 +7418,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
|
||||||
Color4 texcolor;
|
Color4 texcolor;
|
||||||
if (face == ScriptBaseClass.ALL_SIDES)
|
if (face == ScriptBaseClass.ALL_SIDES)
|
||||||
{
|
{
|
||||||
for (face = 0 ; face < GetNumberOfSides(part) ; face++)
|
for (face = 0 ; face < part.GetNumberOfSides() ; face++)
|
||||||
{
|
{
|
||||||
texcolor = tex.GetFace((uint)face).RGBA;
|
texcolor = tex.GetFace((uint)face).RGBA;
|
||||||
res.Add(new LSL_Vector(texcolor.R,
|
res.Add(new LSL_Vector(texcolor.R,
|
||||||
|
|
Loading…
Reference in New Issue