diff options
Diffstat (limited to 'src/world/Primitive.cs')
-rw-r--r-- | src/world/Primitive.cs | 101 |
1 files changed, 91 insertions, 10 deletions
diff --git a/src/world/Primitive.cs b/src/world/Primitive.cs index 6029f76..0d7d951 100644 --- a/src/world/Primitive.cs +++ b/src/world/Primitive.cs | |||
@@ -15,6 +15,7 @@ namespace OpenSim.world | |||
15 | protected PrimData primData; | 15 | protected PrimData primData; |
16 | protected bool newPrimFlag; | 16 | protected bool newPrimFlag; |
17 | protected bool updateFlag; | 17 | protected bool updateFlag; |
18 | protected bool dirtyFlag; | ||
18 | protected ObjectUpdatePacket OurPacket; | 19 | protected ObjectUpdatePacket OurPacket; |
19 | 20 | ||
20 | public bool UpdateFlag | 21 | public bool UpdateFlag |
@@ -28,7 +29,18 @@ namespace OpenSim.world | |||
28 | updateFlag = value; | 29 | updateFlag = value; |
29 | } | 30 | } |
30 | } | 31 | } |
31 | 32 | public LLVector3 Scale | |
33 | { | ||
34 | set | ||
35 | { | ||
36 | this.primData.Scale = value; | ||
37 | this.dirtyFlag = true; | ||
38 | } | ||
39 | get | ||
40 | { | ||
41 | return this.primData.Scale; | ||
42 | } | ||
43 | } | ||
32 | public Primitive() | 44 | public Primitive() |
33 | { | 45 | { |
34 | mesh_cutbegin = 0.0f; | 46 | mesh_cutbegin = 0.0f; |
@@ -70,6 +82,13 @@ namespace OpenSim.world | |||
70 | } | 82 | } |
71 | this.updateFlag = false; | 83 | this.updateFlag = false; |
72 | } | 84 | } |
85 | else if(this.dirtyFlag) | ||
86 | { | ||
87 | foreach(OpenSimClient client in OpenSim_Main.sim.ClientThreads.Values) { | ||
88 | UpdateClient(client); | ||
89 | } | ||
90 | this.dirtyFlag = false; | ||
91 | } | ||
73 | 92 | ||
74 | } | 93 | } |
75 | 94 | ||
@@ -77,9 +96,58 @@ namespace OpenSim.world | |||
77 | { | 96 | { |
78 | byte[] pb = this.position.GetBytes(); | 97 | byte[] pb = this.position.GetBytes(); |
79 | Array.Copy(pb, 0, OurPacket.ObjectData[0].ObjectData, 0, pb.Length); | 98 | Array.Copy(pb, 0, OurPacket.ObjectData[0].ObjectData, 0, pb.Length); |
99 | OurPacket.ObjectData[0].OwnerID = this.primData.OwnerID; | ||
100 | OurPacket.ObjectData[0].PCode = this.primData.PCode; | ||
101 | OurPacket.ObjectData[0].PathBegin = this.primData.PathBegin; | ||
102 | OurPacket.ObjectData[0].PathEnd = this.primData.PathEnd; | ||
103 | OurPacket.ObjectData[0].PathScaleX = this.primData.PathScaleX; | ||
104 | OurPacket.ObjectData[0].PathScaleY = this.primData.PathScaleY; | ||
105 | OurPacket.ObjectData[0].PathShearX = this.primData.PathShearX; | ||
106 | OurPacket.ObjectData[0].PathShearY = this.primData.PathShearY; | ||
107 | OurPacket.ObjectData[0].PathSkew = this.primData.PathSkew; | ||
108 | OurPacket.ObjectData[0].ProfileBegin = this.primData.ProfileBegin; | ||
109 | OurPacket.ObjectData[0].ProfileEnd = this.primData.ProfileEnd; | ||
110 | OurPacket.ObjectData[0].Scale = this.primData.Scale; | ||
111 | OurPacket.ObjectData[0].PathCurve = this.primData.PathCurve; | ||
112 | OurPacket.ObjectData[0].ProfileCurve = this.primData.ProfileCurve; | ||
113 | OurPacket.ObjectData[0].ParentID = 0; | ||
114 | OurPacket.ObjectData[0].ProfileHollow = this.primData.ProfileHollow; | ||
115 | //finish off copying rest of shape data | ||
116 | OurPacket.ObjectData[0].PathRadiusOffset = this.primData.PathRadiusOffset; | ||
117 | OurPacket.ObjectData[0].PathRevolutions = this.primData.PathRevolutions; | ||
118 | OurPacket.ObjectData[0].PathTaperX = this.primData.PathTaperX; | ||
119 | OurPacket.ObjectData[0].PathTaperY = this.primData.PathTaperY; | ||
120 | OurPacket.ObjectData[0].PathTwist = this.primData.PathTwist; | ||
121 | OurPacket.ObjectData[0].PathTwistBegin= this.primData.PathTwistBegin; | ||
122 | |||
80 | RemoteClient.OutPacket(OurPacket); | 123 | RemoteClient.OutPacket(OurPacket); |
81 | } | 124 | } |
82 | 125 | ||
126 | public void UpdateShape(ObjectShapePacket.ObjectDataBlock addPacket) | ||
127 | { | ||
128 | this.primData.PathBegin = addPacket.PathBegin; | ||
129 | this.primData.PathEnd = addPacket.PathEnd; | ||
130 | this.primData.PathScaleX = addPacket.PathScaleX; | ||
131 | this.primData.PathScaleY = addPacket.PathScaleY; | ||
132 | this.primData.PathShearX = addPacket.PathShearX; | ||
133 | this.primData.PathShearY = addPacket.PathShearY; | ||
134 | this.primData.PathSkew = addPacket.PathSkew; | ||
135 | this.primData.ProfileBegin = addPacket.ProfileBegin; | ||
136 | this.primData.ProfileEnd = addPacket.ProfileEnd; | ||
137 | this.primData.PathCurve = addPacket.PathCurve; | ||
138 | this.primData.ProfileCurve = addPacket.ProfileCurve; | ||
139 | this.primData.ProfileHollow = addPacket.ProfileHollow; | ||
140 | |||
141 | this.primData.PathRadiusOffset = addPacket.PathRadiusOffset; | ||
142 | this.primData.PathRevolutions = addPacket.PathRevolutions; | ||
143 | this.primData.PathTaperX = addPacket.PathTaperX; | ||
144 | this.primData.PathTaperY = addPacket.PathTaperY; | ||
145 | this.primData.PathTwist = addPacket.PathTwist; | ||
146 | this.primData.PathTwistBegin =addPacket.PathTwistBegin; | ||
147 | this.dirtyFlag = true; | ||
148 | |||
149 | } | ||
150 | |||
83 | public void CreateFromPacket( ObjectAddPacket addPacket, LLUUID agentID, uint localID) | 151 | public void CreateFromPacket( ObjectAddPacket addPacket, LLUUID agentID, uint localID) |
84 | { | 152 | { |
85 | ObjectUpdatePacket objupdate = new ObjectUpdatePacket(); | 153 | ObjectUpdatePacket objupdate = new ObjectUpdatePacket(); |
@@ -124,6 +192,13 @@ namespace OpenSim.world | |||
124 | PData.ParentID = objupdate.ObjectData[0].ParentID = 0; | 192 | PData.ParentID = objupdate.ObjectData[0].ParentID = 0; |
125 | PData.ProfileHollow = objupdate.ObjectData[0].ProfileHollow = addPacket.ObjectData.ProfileHollow; | 193 | PData.ProfileHollow = objupdate.ObjectData[0].ProfileHollow = addPacket.ObjectData.ProfileHollow; |
126 | 194 | ||
195 | PData.PathRadiusOffset = objupdate.ObjectData[0].PathRadiusOffset = addPacket.ObjectData.PathRadiusOffset; | ||
196 | PData.PathRevolutions = objupdate.ObjectData[0].PathRevolutions = addPacket.ObjectData.PathRevolutions; | ||
197 | PData.PathTaperX = objupdate.ObjectData[0].PathTaperX = addPacket.ObjectData.PathTaperX; | ||
198 | PData.PathTaperY = objupdate.ObjectData[0].PathTaperY = addPacket.ObjectData.PathTaperY; | ||
199 | PData.PathTwist = objupdate.ObjectData[0].PathTwist = addPacket.ObjectData.PathTwist; | ||
200 | PData.PathTwistBegin = objupdate.ObjectData[0].PathTwistBegin = addPacket.ObjectData.PathTwistBegin; | ||
201 | |||
127 | //finish off copying rest of shape data | 202 | //finish off copying rest of shape data |
128 | 203 | ||
129 | objupdate.ObjectData[0].ID = (uint)(localID); | 204 | objupdate.ObjectData[0].ID = (uint)(localID); |
@@ -143,7 +218,7 @@ namespace OpenSim.world | |||
143 | this.OurPacket = objupdate; | 218 | this.OurPacket = objupdate; |
144 | } | 219 | } |
145 | 220 | ||
146 | public void CreateFromStorage(PrimStorage store) | 221 | public void CreateFromStorage(PrimData store) |
147 | { | 222 | { |
148 | //need to clean this up as it shares a lot of code with CreateFromPacket() | 223 | //need to clean this up as it shares a lot of code with CreateFromPacket() |
149 | ObjectUpdatePacket objupdate = new ObjectUpdatePacket(); | 224 | ObjectUpdatePacket objupdate = new ObjectUpdatePacket(); |
@@ -151,7 +226,7 @@ namespace OpenSim.world | |||
151 | objupdate.RegionData.TimeDilation = 64096; | 226 | objupdate.RegionData.TimeDilation = 64096; |
152 | objupdate.ObjectData = new libsecondlife.Packets.ObjectUpdatePacket.ObjectDataBlock[1]; | 227 | objupdate.ObjectData = new libsecondlife.Packets.ObjectUpdatePacket.ObjectDataBlock[1]; |
153 | 228 | ||
154 | this.primData = store.Data; | 229 | this.primData = store; |
155 | objupdate.ObjectData[0] = new ObjectUpdatePacket.ObjectDataBlock(); | 230 | objupdate.ObjectData[0] = new ObjectUpdatePacket.ObjectDataBlock(); |
156 | objupdate.ObjectData[0].PSBlock = new byte[0]; | 231 | objupdate.ObjectData[0].PSBlock = new byte[0]; |
157 | objupdate.ObjectData[0].ExtraParams = new byte[1]; | 232 | objupdate.ObjectData[0].ExtraParams = new byte[1]; |
@@ -187,6 +262,12 @@ namespace OpenSim.world | |||
187 | objupdate.ObjectData[0].ParentID = 0; | 262 | objupdate.ObjectData[0].ParentID = 0; |
188 | objupdate.ObjectData[0].ProfileHollow = this.primData.ProfileHollow; | 263 | objupdate.ObjectData[0].ProfileHollow = this.primData.ProfileHollow; |
189 | //finish off copying rest of shape data | 264 | //finish off copying rest of shape data |
265 | objupdate.ObjectData[0].PathRadiusOffset = this.primData.PathRadiusOffset; | ||
266 | objupdate.ObjectData[0].PathRevolutions = this.primData.PathRevolutions; | ||
267 | objupdate.ObjectData[0].PathTaperX = this.primData.PathTaperX; | ||
268 | objupdate.ObjectData[0].PathTaperY = this.primData.PathTaperY; | ||
269 | objupdate.ObjectData[0].PathTwist = this.primData.PathTwist; | ||
270 | objupdate.ObjectData[0].PathTwistBegin= this.primData.PathTwistBegin; | ||
190 | 271 | ||
191 | objupdate.ObjectData[0].ID = (uint)store.LocalID; | 272 | objupdate.ObjectData[0].ID = (uint)store.LocalID; |
192 | objupdate.ObjectData[0].FullID = store.FullID; | 273 | objupdate.ObjectData[0].FullID = store.FullID; |
@@ -203,6 +284,7 @@ namespace OpenSim.world | |||
203 | this.localid = objupdate.ObjectData[0].ID; | 284 | this.localid = objupdate.ObjectData[0].ID; |
204 | this.position = pos1; | 285 | this.position = pos1; |
205 | this.OurPacket = objupdate; | 286 | this.OurPacket = objupdate; |
287 | |||
206 | } | 288 | } |
207 | public ImprovedTerseObjectUpdatePacket.ObjectDataBlock CreateImprovedBlock() | 289 | public ImprovedTerseObjectUpdatePacket.ObjectDataBlock CreateImprovedBlock() |
208 | { | 290 | { |
@@ -272,13 +354,12 @@ namespace OpenSim.world | |||
272 | 354 | ||
273 | public override void BackUp() | 355 | public override void BackUp() |
274 | { | 356 | { |
275 | PrimStorage pStore = new PrimStorage(); | 357 | |
276 | pStore.Data = this.primData; | 358 | this.primData.FullID = this.uuid; |
277 | pStore.FullID = this.uuid; | 359 | this.primData.LocalID = this.localid; |
278 | pStore.LocalID = this.localid; | 360 | this.primData.Position = this.position; |
279 | pStore.Position = this.position; | 361 | this.primData.Rotation = new LLQuaternion(this.rotation.x, this.rotation.y, this.rotation.z , this.rotation.w); |
280 | pStore.Rotation = new LLQuaternion(this.rotation.x, this.rotation.y, this.rotation.z , this.rotation.w); | 362 | OpenSim_Main.local_world.localStorage.StorePrim(this.primData); |
281 | OpenSim_Main.local_world.localStorage.StorePrim(pStore); | ||
282 | } | 363 | } |
283 | } | 364 | } |
284 | 365 | ||