Kan-Ed fix series.
XEngine: Change a number of methods to use the new link part method. Fix ALL_SIDES for llSetColor, llSetTexture, llSetAlpha, llSetPrimitiveParams, llGetPrimitiveParams(PRIM_TEXTURE, PRIM_COLOR).0.6.0-stable
parent
553d554e2c
commit
deaf0e3814
|
@ -1052,7 +1052,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
|
|||
}
|
||||
else if (face == -1)
|
||||
{
|
||||
for (uint i = 0; i < llGetNumberOfSides(); i++)
|
||||
for (uint i = 0; i < GetNumberOfSides(part); i++)
|
||||
{
|
||||
if (tex.FaceTextures[i] != null)
|
||||
{
|
||||
|
@ -1085,7 +1085,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
|
|||
}
|
||||
else if (face == -1)
|
||||
{
|
||||
for (uint i = 0; i < 32; i++)
|
||||
for (uint i = 0; i < GetNumberOfSides(part); i++)
|
||||
{
|
||||
if (tex.FaceTextures[i] != null)
|
||||
{
|
||||
|
@ -1209,7 +1209,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
|
|||
}
|
||||
else if (face == -1)
|
||||
{
|
||||
for (int i = 0; i < 32; i++)
|
||||
for (int i = 0; i < GetNumberOfSides(part); i++)
|
||||
{
|
||||
if (tex.FaceTextures[i] != null)
|
||||
{
|
||||
|
@ -3465,14 +3465,20 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
|
|||
public LSL_Types.LSLInteger llGetNumberOfSides()
|
||||
{
|
||||
m_host.AddScriptLPS(1);
|
||||
|
||||
return GetNumberOfSides(m_host);
|
||||
}
|
||||
|
||||
public LSL_Types.LSLInteger GetNumberOfSides(SceneObjectPart part)
|
||||
{
|
||||
int ret = 0;
|
||||
bool hasCut;
|
||||
bool hasHollow;
|
||||
bool hasDimple;
|
||||
bool hasProfileCut;
|
||||
|
||||
int primType = getScriptPrimType(m_host.Shape);
|
||||
hasCutHollowDimpleProfileCut(primType, m_host.Shape, out hasCut, out hasHollow, out hasDimple, out hasProfileCut);
|
||||
int primType = getScriptPrimType(part.Shape);
|
||||
hasCutHollowDimpleProfileCut(primType, part.Shape, out hasCut, out hasHollow, out hasDimple, out hasProfileCut);
|
||||
|
||||
switch (primType)
|
||||
{
|
||||
|
@ -5543,21 +5549,21 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
|
|||
|
||||
public void llSetPrimitiveParams(LSL_Types.list rules)
|
||||
{
|
||||
llSetLinkPrimitiveParams(m_host.LinkNum, rules);
|
||||
SetPrimParams(m_host, rules);
|
||||
}
|
||||
|
||||
public void llSetLinkPrimitiveParams(int linknumber, LSL_Types.list rules)
|
||||
{
|
||||
m_host.AddScriptLPS(1);
|
||||
|
||||
if (m_host.ParentGroup == null)
|
||||
return;
|
||||
List<SceneObjectPart> parts = GetLinkParts(linknumber);
|
||||
|
||||
SceneObjectPart part = m_host.ParentGroup.GetLinkNumPart(linknumber);
|
||||
|
||||
if (part == null)
|
||||
return;
|
||||
foreach (SceneObjectPart part in parts)
|
||||
SetPrimParams(part, rules);
|
||||
}
|
||||
|
||||
private void SetPrimParams(SceneObjectPart part, LSL_Types.list rules)
|
||||
{
|
||||
int idx = 0;
|
||||
|
||||
while (idx < rules.Length)
|
||||
|
@ -6235,20 +6241,36 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
|
|||
return res;
|
||||
|
||||
int face = (int)rules.GetLSLIntegerItem(idx++);
|
||||
if (face == -1)
|
||||
face = 0;
|
||||
|
||||
Primitive.TextureEntry tex = m_host.Shape.Textures;
|
||||
Primitive.TextureEntryFace texface = tex.GetFace((uint)face);
|
||||
if (face == -1) // ALL_SIDES
|
||||
{
|
||||
for (face = 0 ; face < GetNumberOfSides(m_host) ; face++)
|
||||
{
|
||||
Primitive.TextureEntryFace texface = tex.GetFace((uint)face);
|
||||
|
||||
res.Add(new LSL_Types.LSLString(texface.TextureID.ToString()));
|
||||
res.Add(new LSL_Types.Vector3(texface.RepeatU,
|
||||
texface.RepeatV,
|
||||
0));
|
||||
res.Add(new LSL_Types.Vector3(texface.OffsetU,
|
||||
texface.OffsetV,
|
||||
0));
|
||||
res.Add(new LSL_Types.LSLFloat(texface.Rotation));
|
||||
res.Add(new LSL_Types.LSLString(texface.TextureID.ToString()));
|
||||
res.Add(new LSL_Types.Vector3(texface.RepeatU,
|
||||
texface.RepeatV,
|
||||
0));
|
||||
res.Add(new LSL_Types.Vector3(texface.OffsetU,
|
||||
texface.OffsetV,
|
||||
0));
|
||||
res.Add(new LSL_Types.LSLFloat(texface.Rotation));
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
Primitive.TextureEntryFace texface = tex.GetFace((uint)face);
|
||||
|
||||
res.Add(new LSL_Types.LSLString(texface.TextureID.ToString()));
|
||||
res.Add(new LSL_Types.Vector3(texface.RepeatU,
|
||||
texface.RepeatV,
|
||||
0));
|
||||
res.Add(new LSL_Types.Vector3(texface.OffsetU,
|
||||
texface.OffsetV,
|
||||
0));
|
||||
res.Add(new LSL_Types.LSLFloat(texface.Rotation));
|
||||
}
|
||||
break;
|
||||
|
||||
case (int)ScriptBaseClass.PRIM_COLOR:
|
||||
|
@ -6259,14 +6281,25 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
|
|||
|
||||
tex = m_host.Shape.Textures;
|
||||
Color4 texcolor;
|
||||
if (face == -1) // TMP: Until we can determine number of sides, ALL_SIDES (-1) will return default color
|
||||
texcolor = tex.DefaultTexture.RGBA;
|
||||
if (face == -1) // ALL_SIDES
|
||||
{
|
||||
for (face = 0 ; face < GetNumberOfSides(m_host) ; face++)
|
||||
{
|
||||
texcolor = tex.GetFace((uint)face).RGBA;
|
||||
res.Add(new LSL_Types.Vector3((255 - (texcolor.R * 255)) / 255,
|
||||
(255 - (texcolor.G * 255)) / 255,
|
||||
(255 - (texcolor.B * 255)) / 255));
|
||||
res.Add(new LSL_Types.LSLFloat((texcolor.A * 255) / 255));
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
texcolor = tex.GetFace((uint)face).RGBA;
|
||||
res.Add(new LSL_Types.Vector3((255 - (texcolor.R * 255)) / 255,
|
||||
(255 - (texcolor.G * 255)) / 255,
|
||||
(255 - (texcolor.B * 255)) / 255));
|
||||
res.Add(new LSL_Types.LSLFloat((texcolor.A * 255) / 255));
|
||||
res.Add(new LSL_Types.Vector3((255 - (texcolor.R * 255)) / 255,
|
||||
(255 - (texcolor.G * 255)) / 255,
|
||||
(255 - (texcolor.B * 255)) / 255));
|
||||
res.Add(new LSL_Types.LSLFloat((texcolor.A * 255) / 255));
|
||||
}
|
||||
break;
|
||||
|
||||
case (int)ScriptBaseClass.PRIM_BUMP_SHINY:
|
||||
|
|
Loading…
Reference in New Issue