aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/Prim_manager.cs
diff options
context:
space:
mode:
Diffstat (limited to 'Prim_manager.cs')
-rw-r--r--Prim_manager.cs305
1 files changed, 143 insertions, 162 deletions
diff --git a/Prim_manager.cs b/Prim_manager.cs
index 56eccfc..856bffe 100644
--- a/Prim_manager.cs
+++ b/Prim_manager.cs
@@ -133,130 +133,110 @@ namespace OpenSim
133 /// <param name="rotation"></param> 133 /// <param name="rotation"></param>
134 public void UpdatePrimPosition(User_Agent_info User,LLVector3 position,uint LocalID,bool setRotation, LLQuaternion rotation) 134 public void UpdatePrimPosition(User_Agent_info User,LLVector3 position,uint LocalID,bool setRotation, LLQuaternion rotation)
135 { 135 {
136 PrimInfo pri=null; 136 PrimInfo pri=null;
137 foreach (KeyValuePair<libsecondlife.LLUUID,PrimInfo> kp in this.PrimList) 137 foreach (KeyValuePair<libsecondlife.LLUUID,PrimInfo> kp in this.PrimList)
138 { 138 {
139 if(kp.Value.LocalID==LocalID) 139 if(kp.Value.LocalID==LocalID)
140 { 140 {
141 pri=kp.Value; 141 pri=kp.Value;
142 } 142 }
143 } 143 }
144 if(pri==null) 144 if(pri==null)
145 { 145 {
146 return; 146 return;
147 } 147 }
148 uint ID=pri.LocalID; 148 uint ID=pri.LocalID;
149 libsecondlife.LLVector3 pos2=new LLVector3(position.X,position.Y,position.Z); 149 libsecondlife.LLVector3 pos2=new LLVector3(position.X,position.Y,position.Z);
150 libsecondlife.LLQuaternion rotation2; 150 libsecondlife.LLQuaternion rotation2;
151 if(!setRotation) 151 if(!setRotation)
152 { 152 {
153 pri.Position=pos2; 153 pri.Position=pos2;
154 rotation2=new LLQuaternion(pri.Rotation.X,pri.Rotation.Y,pri.Rotation.Z,pri.Rotation.W); 154 rotation2=new LLQuaternion(pri.Rotation.X,pri.Rotation.Y,pri.Rotation.Z,pri.Rotation.W);
155 } 155 }
156 else 156 else
157 { 157 {
158 rotation2=new LLQuaternion(rotation.X,rotation.Y,rotation.Z,rotation.W); 158 rotation2=new LLQuaternion(rotation.X,rotation.Y,rotation.Z,rotation.W);
159 159 pos2=pri.Position;
160 pos2=pri.Position; 160 pri.Rotation=rotation;
161 pri.Rotation=rotation; 161 }
162 } 162 rotation2.W+=1;
163 rotation2.W+=1; 163 rotation2.X+=1;
164 rotation2.X+=1; 164 rotation2.Y+=1;
165 rotation2.Y+=1; 165 rotation2.Z+=1;
166 rotation2.Z+=1; 166
167 167 byte[] bytes=new byte[60];
168 byte[] bytes=new byte[60]; 168
169 169 ImprovedTerseObjectUpdatePacket im=new ImprovedTerseObjectUpdatePacket();
170 ImprovedTerseObjectUpdatePacket im=new ImprovedTerseObjectUpdatePacket(); 170 im.RegionData.RegionHandle=Globals.Instance.RegionHandle;
171 im.RegionData.RegionHandle=Globals.Instance.RegionHandle; 171 im.RegionData.TimeDilation=64096;
172 im.RegionData.TimeDilation=64096; 172 im.ObjectData=new ImprovedTerseObjectUpdatePacket.ObjectDataBlock[1];
173 im.ObjectData=new ImprovedTerseObjectUpdatePacket.ObjectDataBlock[1]; 173 int i=0;
174 int i=0; 174 ImprovedTerseObjectUpdatePacket.ObjectDataBlock dat=new ImprovedTerseObjectUpdatePacket.ObjectDataBlock();
175 ImprovedTerseObjectUpdatePacket.ObjectDataBlock dat=new ImprovedTerseObjectUpdatePacket.ObjectDataBlock(); 175 im.ObjectData[0]=dat;
176 im.ObjectData[0]=dat; 176 dat.TextureEntry=PrimTemplate.TextureEntry;
177 dat.TextureEntry=PrimTemplate.TextureEntry; 177
178 //System.Console.WriteLine("new position is :"+position); 178 bytes[i++] = (byte)(ID % 256);
179 179 bytes[i++] = (byte)((ID >> 8) % 256);
180 bytes[i++] = (byte)(ID % 256); 180 bytes[i++] = (byte)((ID >> 16) % 256);
181 bytes[i++] = (byte)((ID >> 8) % 256); 181 bytes[i++] = (byte)((ID >> 24) % 256);
182 bytes[i++] = (byte)((ID >> 16) % 256); 182 bytes[i++]=0;
183 bytes[i++] = (byte)((ID >> 24) % 256); 183 bytes[i++]=0;//1;
184 bytes[i++]=0;
185 bytes[i++]=0;//1;
186 184
187 // i+=14; 185 byte[] pb=pos2.GetBytes();
188 // bytes[i++]=128; 186 pri.Position=pos2;
189 // bytes[i++]=63; 187 Array.Copy(pb,0,bytes,i,pb.Length);
190 byte[] pb=pos2.GetBytes(); 188 i+=12;
191 pri.Position=pos2; 189 ushort ac=32767;
192 Array.Copy(pb,0,bytes,i,pb.Length);
193 i+=12;
194 ushort ac=32767;
195 190
196 //vel 191 //vel
197 bytes[i++] = (byte)(ac % 256); 192 bytes[i++] = (byte)(ac % 256);
198 bytes[i++] = (byte)((ac >> 8) % 256); 193 bytes[i++] = (byte)((ac >> 8) % 256);
199 bytes[i++] = (byte)(ac % 256); 194 bytes[i++] = (byte)(ac % 256);
200 bytes[i++] = (byte)((ac >> 8) % 256); 195 bytes[i++] = (byte)((ac >> 8) % 256);
201 bytes[i++] = (byte)(ac % 256); 196 bytes[i++] = (byte)(ac % 256);
202 bytes[i++] = (byte)((ac >> 8) % 256); 197 bytes[i++] = (byte)((ac >> 8) % 256);
203 198
204 //accel 199 //accel
205 bytes[i++] = (byte)(ac % 256); 200 bytes[i++] = (byte)(ac % 256);
206 bytes[i++] = (byte)((ac >> 8) % 256); 201 bytes[i++] = (byte)((ac >> 8) % 256);
207 bytes[i++] = (byte)(ac % 256); 202 bytes[i++] = (byte)(ac % 256);
208 bytes[i++] = (byte)((ac >> 8) % 256); 203 bytes[i++] = (byte)((ac >> 8) % 256);
209 bytes[i++] = (byte)(ac % 256); 204 bytes[i++] = (byte)(ac % 256);
210 bytes[i++] = (byte)((ac >> 8) % 256); 205 bytes[i++] = (byte)((ac >> 8) % 256);
211 206
212 //if(setRotation) 207 ushort rw, rx,ry,rz;
213 //{ 208 rw=(ushort)(32768*rotation2.W);
214 209 rx=(ushort)(32768*rotation2.X);
215 ushort rw, rx,ry,rz; 210 ry=(ushort)(32768*rotation2.Y);
216 rw=(ushort)(32768*rotation2.W); 211 rz=(ushort)(32768*rotation2.Z);
217 rx=(ushort)(32768*rotation2.X); 212
218 ry=(ushort)(32768*rotation2.Y); 213 //rot
219 rz=(ushort)(32768*rotation2.Z); 214 bytes[i++] = (byte)(rx % 256);
220 215 bytes[i++] = (byte)((rx >> 8) % 256);
221 //rot 216 bytes[i++] = (byte)(ry % 256);
222 bytes[i++] = (byte)(rx % 256); 217 bytes[i++] = (byte)((ry >> 8) % 256);
223 bytes[i++] = (byte)((rx >> 8) % 256); 218 bytes[i++] = (byte)(rz % 256);
224 bytes[i++] = (byte)(ry % 256); 219 bytes[i++] = (byte)((rz >> 8) % 256);
225 bytes[i++] = (byte)((ry >> 8) % 256); 220 bytes[i++] = (byte)(rw % 256);
226 bytes[i++] = (byte)(rz % 256); 221 bytes[i++] = (byte)((rw >> 8) % 256);
227 bytes[i++] = (byte)((rz >> 8) % 256); 222
228 bytes[i++] = (byte)(rw % 256); 223 //rotation vel
229 bytes[i++] = (byte)((rw >> 8) % 256); 224 bytes[i++] = (byte)(ac % 256);
230 //} 225 bytes[i++] = (byte)((ac >> 8) % 256);
231 /*else 226 bytes[i++] = (byte)(ac % 256);
232 { 227 bytes[i++] = (byte)((ac >> 8) % 256);
233 bytes[i++] = (byte)(ac % 256); 228 bytes[i++] = (byte)(ac % 256);
234 bytes[i++] = (byte)((ac >> 8) % 256); 229 bytes[i++] = (byte)((ac >> 8) % 256);
235 bytes[i++] = (byte)(ac % 256); 230
236 bytes[i++] = (byte)((ac >> 8) % 256); 231 dat.Data=bytes;
237 bytes[i++] = (byte)(ac % 256); 232
238 bytes[i++] = (byte)((ac >> 8) % 256); 233 foreach (KeyValuePair<libsecondlife.LLUUID,AvatarData> kp in Agent_Manager.AgentList)
239 bytes[i++] = (byte)(ac % 256); 234 {
240 bytes[i++] = (byte)((ac >> 8) % 256); 235 if(kp.Value.NetInfo.AgentID!=User.AgentID)
241 }*/ 236 {
242 //rotation vel 237 server.SendPacket(im,true,kp.Value.NetInfo);
243 bytes[i++] = (byte)(ac % 256); 238 }
244 bytes[i++] = (byte)((ac >> 8) % 256); 239 }
245 bytes[i++] = (byte)(ac % 256);
246 bytes[i++] = (byte)((ac >> 8) % 256);
247 bytes[i++] = (byte)(ac % 256);
248 bytes[i++] = (byte)((ac >> 8) % 256);
249
250 dat.Data=bytes;
251 //server.SendPacket(im,true,user);
252 //should send to all users.
253 foreach (KeyValuePair<libsecondlife.LLUUID,AvatarData> kp in Agent_Manager.AgentList)
254 {
255 if(kp.Value.NetInfo.AgentID!=User.AgentID)
256 {
257 server.SendPacket(im,true,kp.Value.NetInfo);
258 }
259 }
260 } 240 }
261 241
262 /// <summary> 242 /// <summary>
@@ -310,49 +290,50 @@ namespace OpenSim
310 public void ReadPrimDatabase(string name,User_Agent_info user) 290 public void ReadPrimDatabase(string name,User_Agent_info user)
311 { 291 {
312 StreamReader SR; 292 StreamReader SR;
313 string line; 293 string line;
314 SR=File.OpenText(name); 294 SR=File.OpenText(name);
315 string [] comp= new string[10]; 295 string [] comp= new string[10];
316 string delimStr = " , "; 296 string delimStr = " , ";
317 char [] delimiter = delimStr.ToCharArray(); 297 char [] delimiter = delimStr.ToCharArray();
318
319 line=SR.ReadLine();
320 while(line!="end")
321 {
322 comp=line.Split(delimiter);
323 if(comp[0]=="ObjPack"){
324 int num=Convert.ToInt32(comp[2]);
325 int start=Convert.ToInt32(comp[1]);
326 ObjectUpdatePacket objupdate=new ObjectUpdatePacket();
327 objupdate.RegionData.RegionHandle=Globals.Instance.RegionHandle;
328 objupdate.RegionData.TimeDilation=64096;
329 objupdate.ObjectData=new libsecondlife.Packets.ObjectUpdatePacket.ObjectDataBlock[num];
330
331 // int count=0;
332 string data_path = System.AppDomain.CurrentDomain.BaseDirectory + @"\data\";
333 for(int cc=0; cc<num; cc++)
334 {
335 string filenam=data_path+@"prim_updates"+start+".dat";
336 int i=0;
337 //FileInfo fInfo = new FileInfo("objectupate"+start+".dat");
338 FileInfo fInfo = new FileInfo(filenam);
339 long numBytes = fInfo.Length;
340 //FileStream fStream = new FileStream("objectupate"+start+".dat", FileMode.Open, FileAccess.Read);
341 FileStream fStream = new FileStream(filenam, FileMode.Open, FileAccess.Read);
342 BinaryReader br = new BinaryReader(fStream);
343 byte [] data1 = br.ReadBytes((int)numBytes);
344 br.Close();
345 fStream.Close();
346 298
347 libsecondlife.Packets.ObjectUpdatePacket.ObjectDataBlock objdata=new libsecondlife.Packets.ObjectUpdatePacket.ObjectDataBlock(data1,ref i);
348 objupdate.ObjectData[cc]=objdata;
349 start++;
350 }
351 server.SendPacket(objupdate,true,user);
352 line=SR.ReadLine(); 299 line=SR.ReadLine();
353 } 300 while(line!="end")
354 } 301 {
355 SR.Close(); 302 comp=line.Split(delimiter);
303 if(comp[0]=="ObjPack")
304 {
305 int num=Convert.ToInt32(comp[2]);
306 int start=Convert.ToInt32(comp[1]);
307 ObjectUpdatePacket objupdate=new ObjectUpdatePacket();
308 objupdate.RegionData.RegionHandle=Globals.Instance.RegionHandle;
309 objupdate.RegionData.TimeDilation=64096;
310 objupdate.ObjectData=new libsecondlife.Packets.ObjectUpdatePacket.ObjectDataBlock[num];
311
312 // int count=0;
313 string data_path = System.AppDomain.CurrentDomain.BaseDirectory + @"\data\";
314 for(int cc=0; cc<num; cc++)
315 {
316 string filenam=data_path+@"prim_updates"+start+".dat";
317 int i=0;
318 //FileInfo fInfo = new FileInfo("objectupate"+start+".dat");
319 FileInfo fInfo = new FileInfo(filenam);
320 long numBytes = fInfo.Length;
321 //FileStream fStream = new FileStream("objectupate"+start+".dat", FileMode.Open, FileAccess.Read);
322 FileStream fStream = new FileStream(filenam, FileMode.Open, FileAccess.Read);
323 BinaryReader br = new BinaryReader(fStream);
324 byte [] data1 = br.ReadBytes((int)numBytes);
325 br.Close();
326 fStream.Close();
327
328 libsecondlife.Packets.ObjectUpdatePacket.ObjectDataBlock objdata=new libsecondlife.Packets.ObjectUpdatePacket.ObjectDataBlock(data1,ref i);
329 objupdate.ObjectData[cc]=objdata;
330 start++;
331 }
332 server.SendPacket(objupdate,true,user);
333 line=SR.ReadLine();
334 }
335 }
336 SR.Close();
356 } 337 }
357 } 338 }
358 339