diff options
Diffstat (limited to 'OpenSim/Region/Environment/Scenes/Primitive.cs')
-rw-r--r-- | OpenSim/Region/Environment/Scenes/Primitive.cs | 16 |
1 files changed, 12 insertions, 4 deletions
diff --git a/OpenSim/Region/Environment/Scenes/Primitive.cs b/OpenSim/Region/Environment/Scenes/Primitive.cs index 4bb43d2..53314e3 100644 --- a/OpenSim/Region/Environment/Scenes/Primitive.cs +++ b/OpenSim/Region/Environment/Scenes/Primitive.cs | |||
@@ -139,7 +139,7 @@ namespace OpenSim.Region.Environment.Scenes | |||
139 | this.m_isRootPrim = isRoot; | 139 | this.m_isRootPrim = isRoot; |
140 | this.m_RootParent = rootObject; | 140 | this.m_RootParent = rootObject; |
141 | 141 | ||
142 | this.CreateFromPacket(ownerID, localID, pos, shape); | 142 | this.CreateFromShape(ownerID, localID, pos, shape); |
143 | this.Rotation = Axiom.Math.Quaternion.Identity; | 143 | this.Rotation = Axiom.Math.Quaternion.Identity; |
144 | } | 144 | } |
145 | 145 | ||
@@ -164,14 +164,22 @@ namespace OpenSim.Region.Environment.Scenes | |||
164 | dupe.m_Parent = parent; | 164 | dupe.m_Parent = parent; |
165 | dupe.m_RootParent = rootParent; | 165 | dupe.m_RootParent = rootParent; |
166 | // TODO: Copy this properly. | 166 | // TODO: Copy this properly. |
167 | dupe.m_Shape = this.m_Shape; | 167 | dupe.m_Shape = this.m_Shape.Copy(); |
168 | 168 | dupe.children = new List<EntityBase>(); | |
169 | uint newLocalID = this.m_world.PrimIDAllocate(); | 169 | uint newLocalID = this.m_world.PrimIDAllocate(); |
170 | dupe.uuid = LLUUID.Random(); | ||
170 | dupe.LocalId = newLocalID; | 171 | dupe.LocalId = newLocalID; |
171 | 172 | ||
172 | dupe.Scale = new LLVector3(this.Scale.X, this.Scale.Y, this.Scale.Z); | 173 | dupe.Scale = new LLVector3(this.Scale.X, this.Scale.Y, this.Scale.Z); |
173 | dupe.Rotation = new Quaternion(this.Rotation.w, this.Rotation.x, this.Rotation.y, this.Rotation.z); | 174 | dupe.Rotation = new Quaternion(this.Rotation.w, this.Rotation.x, this.Rotation.y, this.Rotation.z); |
174 | dupe.Pos = new LLVector3(this.Pos.X, this.Pos.Y, this.Pos.Z); | 175 | dupe.Pos = new LLVector3(this.Pos.X, this.Pos.Y, this.Pos.Z); |
176 | rootParent.AddChildToList(dupe); | ||
177 | |||
178 | foreach (Primitive prim in this.children) | ||
179 | { | ||
180 | Primitive primClone = prim.Copy(this, rootParent); | ||
181 | dupe.children.Add(primClone); | ||
182 | } | ||
175 | 183 | ||
176 | return dupe; | 184 | return dupe; |
177 | } | 185 | } |
@@ -210,7 +218,7 @@ namespace OpenSim.Region.Environment.Scenes | |||
210 | /// <param name="addPacket"></param> | 218 | /// <param name="addPacket"></param> |
211 | /// <param name="ownerID"></param> | 219 | /// <param name="ownerID"></param> |
212 | /// <param name="localID"></param> | 220 | /// <param name="localID"></param> |
213 | public void CreateFromPacket(LLUUID ownerID, uint localID, LLVector3 pos, PrimitiveBaseShape shape) | 221 | public void CreateFromShape(LLUUID ownerID, uint localID, LLVector3 pos, PrimitiveBaseShape shape) |
214 | { | 222 | { |
215 | this.CreationDate = (Int32)(DateTime.UtcNow - new DateTime(1970, 1, 1)).TotalSeconds; | 223 | this.CreationDate = (Int32)(DateTime.UtcNow - new DateTime(1970, 1, 1)).TotalSeconds; |
216 | this.OwnerID = ownerID; | 224 | this.OwnerID = ownerID; |