Again, thanks to Alondria for:

Added: LinkNum to SceneObjectPart
Added: Bunch-o settings of LinkNum in SceneObjectGroup
Added: llGetNumberOfPrims()
Added: llGetLinkNumber()
Added: llGetLinkKey()
Added: llGetLinkName() (and change to string return type)
afrisby
Charles Krinke 2007-12-17 02:30:03 +00:00
parent 413fcc5709
commit 8e8c26acac
5 changed files with 71 additions and 20 deletions

View File

@ -67,7 +67,7 @@ namespace OpenSim.Region.Environment.Scenes
/// </summary> /// </summary>
public int PrimCount public int PrimCount
{ {
get { return 1; } get { return m_parts.Count; }
} }
public LLQuaternion GroupRotation public LLQuaternion GroupRotation
@ -240,8 +240,9 @@ namespace OpenSim.Region.Environment.Scenes
m_scene = scene; m_scene = scene;
part.SetParent(this); part.SetParent(this);
part.ParentID = 0; part.ParentID = 0;
part.LinkNum = 0;
m_parts.Add(part.UUID, part); m_parts.Add(part.UUID, part);
SetPartAsRoot(part); SetPartAsRoot(part);
RegionHandle = regionHandle; RegionHandle = regionHandle;
@ -267,7 +268,7 @@ namespace OpenSim.Region.Environment.Scenes
reader.ReadStartElement("SceneObjectGroup"); reader.ReadStartElement("SceneObjectGroup");
reader.ReadStartElement("RootPart"); reader.ReadStartElement("RootPart");
m_rootPart = SceneObjectPart.FromXml(reader); m_rootPart = SceneObjectPart.FromXml(reader);
AddPart(m_rootPart);
reader.ReadEndElement(); reader.ReadEndElement();
while (reader.Read()) while (reader.Read())
@ -293,7 +294,7 @@ namespace OpenSim.Region.Environment.Scenes
reader.Close(); reader.Close();
sr.Close(); sr.Close();
AddPart(m_rootPart);
m_rootPart.LocalID = m_scene.PrimIDAllocate(); m_rootPart.LocalID = m_scene.PrimIDAllocate();
m_rootPart.ParentID = 0; m_rootPart.ParentID = 0;
@ -318,6 +319,10 @@ namespace OpenSim.Region.Environment.Scenes
reader.ReadStartElement("SceneObjectGroup"); reader.ReadStartElement("SceneObjectGroup");
m_rootPart = SceneObjectPart.FromXml(reader); m_rootPart = SceneObjectPart.FromXml(reader);
m_rootPart.SetParent(this);
m_parts.Add(m_rootPart.UUID, m_rootPart);
m_rootPart.ParentID = 0;
m_rootPart.LinkNum = 0;
reader.Read(); reader.Read();
bool more = true; bool more = true;
@ -346,9 +351,7 @@ namespace OpenSim.Region.Environment.Scenes
} }
reader.Close(); reader.Close();
sr.Close(); sr.Close();
m_rootPart.SetParent(this);
m_parts.Add(m_rootPart.UUID, m_rootPart);
m_rootPart.ParentID = 0;
UpdateParentIDs(); UpdateParentIDs();
ScheduleGroupForFullUpdate(); ScheduleGroupForFullUpdate();
@ -431,6 +434,7 @@ namespace OpenSim.Region.Environment.Scenes
LLVector3 rootOffset = new LLVector3(0, 0, 0); LLVector3 rootOffset = new LLVector3(0, 0, 0);
SceneObjectPart newPart = SceneObjectPart newPart =
new SceneObjectPart(m_regionHandle, this, ownerID, localID, shape, pos, rot, rootOffset); new SceneObjectPart(m_regionHandle, this, ownerID, localID, shape, pos, rot, rootOffset);
newPart.LinkNum = m_parts.Count;
m_parts.Add(newPart.UUID, newPart); m_parts.Add(newPart.UUID, newPart);
SetPartAsRoot(newPart); SetPartAsRoot(newPart);
@ -586,6 +590,7 @@ namespace OpenSim.Region.Environment.Scenes
{ {
SceneObjectPart newPart = part.Copy(m_scene.PrimIDAllocate(), OwnerID, GroupID); SceneObjectPart newPart = part.Copy(m_scene.PrimIDAllocate(), OwnerID, GroupID);
newPart.SetParent(this); newPart.SetParent(this);
newPart.LinkNum = m_parts.Count;
m_parts.Add(newPart.UUID, newPart); m_parts.Add(newPart.UUID, newPart);
SetPartAsRoot(newPart); SetPartAsRoot(newPart);
} }
@ -615,6 +620,7 @@ namespace OpenSim.Region.Environment.Scenes
{ {
SceneObjectPart newPart = part.Copy(m_scene.PrimIDAllocate(), OwnerID, GroupID); SceneObjectPart newPart = part.Copy(m_scene.PrimIDAllocate(), OwnerID, GroupID);
newPart.SetParent(this); newPart.SetParent(this);
newPart.LinkNum = m_parts.Count;
m_parts.Add(newPart.UUID, newPart); m_parts.Add(newPart.UUID, newPart);
SetPartAsNonRoot(newPart); SetPartAsNonRoot(newPart);
} }
@ -627,6 +633,7 @@ namespace OpenSim.Region.Environment.Scenes
foreach (SceneObjectPart part in partsList) foreach (SceneObjectPart part in partsList)
{ {
part.UUID = LLUUID.Random(); part.UUID = LLUUID.Random();
part.LinkNum = m_parts.Count;
m_parts.Add(part.UUID, part); m_parts.Add(part.UUID, part);
} }
} }
@ -769,6 +776,23 @@ namespace OpenSim.Region.Environment.Scenes
#region SceneGroupPart Methods #region SceneGroupPart Methods
/// <summary>
/// Get the child part by LinkNum
/// </summary>
/// <param name="linknum"></param>
/// <returns>null if no child part with that linknum or child part</returns>
public SceneObjectPart GetLinkNumPart(int linknum)
{
foreach (SceneObjectPart part in m_parts.Values)
{
if (part.LinkNum == linknum)
{
return part;
}
}
return null;
}
/// <summary> /// <summary>
/// Get a child part with a given UUID /// Get a child part with a given UUID
/// </summary> /// </summary>
@ -868,6 +892,7 @@ namespace OpenSim.Region.Environment.Scenes
Quaternion newRot = parentRot.Inverse() * oldRot; Quaternion newRot = parentRot.Inverse() * oldRot;
linkPart.RotationOffset = new LLQuaternion(newRot.x, newRot.y, newRot.z, newRot.w); linkPart.RotationOffset = new LLQuaternion(newRot.x, newRot.y, newRot.z, newRot.w);
linkPart.ParentID = m_rootPart.LocalID; linkPart.ParentID = m_rootPart.LocalID;
linkPart.LinkNum = m_parts.Count;
m_parts.Add(linkPart.UUID, linkPart); m_parts.Add(linkPart.UUID, linkPart);
linkPart.SetParent(this); linkPart.SetParent(this);
@ -979,6 +1004,7 @@ namespace OpenSim.Region.Environment.Scenes
{ {
part.SetParent(this); part.SetParent(this);
part.ParentID = m_rootPart.LocalID; part.ParentID = m_rootPart.LocalID;
part.LinkNum = m_parts.Count;
m_parts.Add(part.UUID, part); m_parts.Add(part.UUID, part);
Vector3 axiomOldPos = new Vector3(part.OffsetPosition.X, part.OffsetPosition.Y, part.OffsetPosition.Z); Vector3 axiomOldPos = new Vector3(part.OffsetPosition.X, part.OffsetPosition.Y, part.OffsetPosition.Z);
@ -1612,6 +1638,7 @@ namespace OpenSim.Region.Environment.Scenes
public void AddPart(SceneObjectPart part) public void AddPart(SceneObjectPart part)
{ {
part.SetParent(this); part.SetParent(this);
part.LinkNum = m_parts.Count;
m_parts.Add(part.UUID, part); m_parts.Add(part.UUID, part);
} }

View File

@ -364,6 +364,13 @@ namespace OpenSim.Region.Environment.Scenes
set { m_touchName = value; } set { m_touchName = value; }
} }
private int m_linkNum = 0;
public int LinkNum
{
get { return m_linkNum; }
set { m_linkNum = value; }
}
private byte m_clickAction = 0; private byte m_clickAction = 0;
public byte ClickAction public byte ClickAction
{ {

View File

@ -268,7 +268,7 @@ namespace OpenSim.Region.ScriptEngine.Common
//wiki: key llGetLinkKey(integer linknum) //wiki: key llGetLinkKey(integer linknum)
string llGetLinkKey(int linknum); string llGetLinkKey(int linknum);
//wiki: llGetLinkName(integer linknum) //wiki: llGetLinkName(integer linknum)
void llGetLinkName(int linknum); string llGetLinkName(int linknum);
//wiki: integer llGetInventoryNumber(integer type) //wiki: integer llGetInventoryNumber(integer type)
int llGetInventoryNumber(int type); int llGetInventoryNumber(int type);
//wiki: string llGetInventoryName(integer type, integer number) //wiki: string llGetInventoryName(integer type, integer number)

View File

@ -860,9 +860,9 @@ namespace OpenSim.Region.ScriptEngine.DotNetEngine.Compiler.LSL
return m_LSL_Functions.llGetLinkKey(linknum); return m_LSL_Functions.llGetLinkKey(linknum);
} }
public void llGetLinkName(int linknum) public string llGetLinkName(int linknum)
{ {
m_LSL_Functions.llGetLinkName(linknum); return m_LSL_Functions.llGetLinkName(linknum);
} }
public int llGetInventoryNumber(int type) public int llGetInventoryNumber(int type)
@ -2122,4 +2122,4 @@ namespace OpenSim.Region.ScriptEngine.DotNetEngine.Compiler.LSL
public vector ZERO_VECTOR = new vector(0, 0, 0); public vector ZERO_VECTOR = new vector(0, 0, 0);
public rotation ZERO_ROTATION = new rotation(0, 0, 0, 0); public rotation ZERO_ROTATION = new rotation(0, 0, 0, 0);
} }
} }

View File

@ -1128,7 +1128,11 @@ namespace OpenSim.Region.ScriptEngine.DotNetEngine.Compiler
public void llTargetOmega(LSL_Types.Vector3 axis, double spinrate, double gain) public void llTargetOmega(LSL_Types.Vector3 axis, double spinrate, double gain)
{ {
NotImplemented("llTargetOmega"); m_host.RotationalVelocity = new LLVector3((float)(axis.x * spinrate), (float)(axis.y * spinrate), (float)(axis.z * spinrate));
m_host.AngularVelocity = new LLVector3((float)(axis.x * spinrate), (float)(axis.y * spinrate), (float)(axis.z * spinrate));
m_host.ScheduleTerseUpdate();
m_host.SendTerseUpdateToAllClients();
//NotImplemented("llTargetOmega");
} }
public int llGetStartParameter() public int llGetStartParameter()
@ -1161,8 +1165,7 @@ namespace OpenSim.Region.ScriptEngine.DotNetEngine.Compiler
public int llGetLinkNumber() public int llGetLinkNumber()
{ {
NotImplemented("llGetLinkNumber"); return m_host.LinkNum;
return 0;
} }
public void llSetLinkColor(int linknumber, LSL_Types.Vector3 color, int face) public void llSetLinkColor(int linknumber, LSL_Types.Vector3 color, int face)
@ -1187,13 +1190,28 @@ namespace OpenSim.Region.ScriptEngine.DotNetEngine.Compiler
public string llGetLinkKey(int linknum) public string llGetLinkKey(int linknum)
{ {
NotImplemented("llGetLinkKey"); SceneObjectPart part = m_host.ParentGroup.GetLinkNumPart(linknum);
return ""; if (part != null)
{
return part.UUID.ToStringHyphenated();
}
else
{
return "00000000-0000-0000-0000-000000000000";
}
} }
public void llGetLinkName(int linknum) public string llGetLinkName(int linknum)
{ {
NotImplemented("llGetLinkName"); SceneObjectPart part = m_host.ParentGroup.GetLinkNumPart(linknum);
if (part != null)
{
return part.Name;
}
else
{
return "00000000-0000-0000-0000-000000000000";
}
} }
public int llGetInventoryNumber(int type) public int llGetInventoryNumber(int type)
@ -2194,8 +2212,7 @@ namespace OpenSim.Region.ScriptEngine.DotNetEngine.Compiler
public int llGetNumberOfPrims() public int llGetNumberOfPrims()
{ {
NotImplemented("llGetNumberOfPrims"); return m_host.ParentGroup.PrimCount;
return 0;
} }
public string llGetNumberOfNotecardLines(string name) public string llGetNumberOfNotecardLines(string name)