OpenSim
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Events Macros
RegionSettings.cs
Go to the documentation of this file.
1 /*
2  * Copyright (c) Contributors, http://opensimulator.org/
3  * See CONTRIBUTORS.TXT for a full list of copyright holders.
4  *
5  * Redistribution and use in source and binary forms, with or without
6  * modification, are permitted provided that the following conditions are met:
7  * * Redistributions of source code must retain the above copyright
8  * notice, this list of conditions and the following disclaimer.
9  * * Redistributions in binary form must reproduce the above copyright
10  * notice, this list of conditions and the following disclaimer in the
11  * documentation and/or other materials provided with the distribution.
12  * * Neither the name of the OpenSimulator Project nor the
13  * names of its contributors may be used to endorse or promote products
14  * derived from this software without specific prior written permission.
15  *
16  * THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``AS IS'' AND ANY
17  * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
18  * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
19  * DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY
20  * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
21  * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
22  * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
23  * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
24  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
25  * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
26  */
27 
28 using System;
29 using System.Collections.Generic;
30 using System.IO;
31 using OpenMetaverse;
32 using System.Runtime.Serialization;
33 
34 namespace OpenSim.Framework
35 {
36  public struct SpawnPoint
37  {
38  public float Yaw;
39  public float Pitch;
40  public float Distance;
41 
42  public void SetLocation(Vector3 pos, Quaternion rot, Vector3 point)
43  {
44  // The point is an absolute position, so we need the relative
45  // location to the spawn point
46  Vector3 offset = point - pos;
47  Distance = Vector3.Mag(offset);
48 
49  // Next we need to rotate this vector into the spawn point's
50  // coordinate system
51  rot.W = -rot.W;
52  offset = offset * rot;
53 
54  Vector3 dir = Vector3.Normalize(offset);
55 
56  // Get the bearing (yaw)
57  Yaw = (float)Math.Atan2(dir.Y, dir.X);
58 
59  // Get the elevation (pitch)
60  Pitch = (float)-Math.Atan2(dir.Z, Math.Sqrt(dir.X * dir.X + dir.Y * dir.Y));
61  }
62 
63  public Vector3 GetLocation(Vector3 pos, Quaternion rot)
64  {
65  Quaternion y = Quaternion.CreateFromEulers(0, 0, Yaw);
66  Quaternion p = Quaternion.CreateFromEulers(0, Pitch, 0);
67 
68  Vector3 dir = new Vector3(1, 0, 0) * p * y;
69  Vector3 offset = dir * (float)Distance;
70 
71  offset *= rot;
72 
73  return pos + offset;
74  }
75 
80  public override string ToString()
81  {
82  return string.Format("{0},{1},{2}", Yaw, Pitch, Distance);
83  }
84 
89  public static SpawnPoint Parse(string str)
90  {
91  string[] parts = str.Split(',');
92  if (parts.Length != 3)
93  throw new ArgumentException("Invalid string: " + str);
94 
95  SpawnPoint sp = new SpawnPoint();
96  sp.Yaw = float.Parse(parts[0]);
97  sp.Pitch = float.Parse(parts[1]);
98  sp.Distance = float.Parse(parts[2]);
99  return sp;
100  }
101  }
102 
103  public class RegionSettings
104  {
105  public delegate void SaveDelegate(RegionSettings rs);
106 
107  public event SaveDelegate OnSave;
108 
112  public static readonly UUID DEFAULT_TERRAIN_TEXTURE_1 = new UUID("b8d3965a-ad78-bf43-699b-bff8eca6c975");
113  public static readonly UUID DEFAULT_TERRAIN_TEXTURE_2 = new UUID("abb783e6-3e93-26c0-248a-247666855da3");
114  public static readonly UUID DEFAULT_TERRAIN_TEXTURE_3 = new UUID("179cdabd-398a-9b6b-1391-4dc333ba321f");
115  public static readonly UUID DEFAULT_TERRAIN_TEXTURE_4 = new UUID("beb169c7-11ea-fff2-efe5-0f24dc881df2");
116 
117  public void Save()
118  {
119  if (OnSave != null)
120  OnSave(this);
121  }
122 
123  private UUID m_RegionUUID = UUID.Zero;
124 
125  public UUID RegionUUID
126  {
127  get { return m_RegionUUID; }
128  set { m_RegionUUID = value; }
129  }
130 
131  private bool m_BlockTerraform = false;
132 
133  public bool BlockTerraform
134  {
135  get { return m_BlockTerraform; }
136  set { m_BlockTerraform = value; }
137  }
138 
139  private bool m_BlockFly = false;
140 
141  public bool BlockFly
142  {
143  get { return m_BlockFly; }
144  set { m_BlockFly = value; }
145  }
146 
147  private bool m_AllowDamage = false;
148 
149  public bool AllowDamage
150  {
151  get { return m_AllowDamage; }
152  set { m_AllowDamage = value; }
153  }
154 
155  private bool m_RestrictPushing = false;
156 
157  public bool RestrictPushing
158  {
159  get { return m_RestrictPushing; }
160  set { m_RestrictPushing = value; }
161  }
162 
163  private bool m_AllowLandResell = true;
164 
165  public bool AllowLandResell
166  {
167  get { return m_AllowLandResell; }
168  set { m_AllowLandResell = value; }
169  }
170 
171  private bool m_AllowLandJoinDivide = true;
172 
173  public bool AllowLandJoinDivide
174  {
175  get { return m_AllowLandJoinDivide; }
176  set { m_AllowLandJoinDivide = value; }
177  }
178 
179  private bool m_BlockShowInSearch = false;
180 
181  public bool BlockShowInSearch
182  {
183  get { return m_BlockShowInSearch; }
184  set { m_BlockShowInSearch = value; }
185  }
186 
187  private int m_AgentLimit = 40;
188 
189  public int AgentLimit
190  {
191  get { return m_AgentLimit; }
192  set { m_AgentLimit = value; }
193  }
194 
195  private double m_ObjectBonus = 1.0;
196 
197  public double ObjectBonus
198  {
199  get { return m_ObjectBonus; }
200  set { m_ObjectBonus = value; }
201  }
202 
203  private int m_Maturity = 0;
204 
205  public int Maturity
206  {
207  get { return m_Maturity; }
208  set { m_Maturity = value; }
209  }
210 
211  private bool m_DisableScripts = false;
212 
213  public bool DisableScripts
214  {
215  get { return m_DisableScripts; }
216  set { m_DisableScripts = value; }
217  }
218 
219  private bool m_DisableCollisions = false;
220 
221  public bool DisableCollisions
222  {
223  get { return m_DisableCollisions; }
224  set { m_DisableCollisions = value; }
225  }
226 
227  private bool m_DisablePhysics = false;
228 
229  public bool DisablePhysics
230  {
231  get { return m_DisablePhysics; }
232  set { m_DisablePhysics = value; }
233  }
234 
235  private UUID m_TerrainTexture1 = UUID.Zero;
236 
237  public UUID TerrainTexture1
238  {
239  get { return m_TerrainTexture1; }
240  set
241  {
242  if (value == UUID.Zero)
243  m_TerrainTexture1 = DEFAULT_TERRAIN_TEXTURE_1;
244  else
245  m_TerrainTexture1 = value;
246  }
247  }
248 
249  private UUID m_TerrainTexture2 = UUID.Zero;
250 
251  public UUID TerrainTexture2
252  {
253  get { return m_TerrainTexture2; }
254  set
255  {
256  if (value == UUID.Zero)
257  m_TerrainTexture2 = DEFAULT_TERRAIN_TEXTURE_2;
258  else
259  m_TerrainTexture2 = value;
260  }
261  }
262 
263  private UUID m_TerrainTexture3 = UUID.Zero;
264 
265  public UUID TerrainTexture3
266  {
267  get { return m_TerrainTexture3; }
268  set
269  {
270  if (value == UUID.Zero)
271  m_TerrainTexture3 = DEFAULT_TERRAIN_TEXTURE_3;
272  else
273  m_TerrainTexture3 = value;
274  }
275  }
276 
277  private UUID m_TerrainTexture4 = UUID.Zero;
278 
279  public UUID TerrainTexture4
280  {
281  get { return m_TerrainTexture4; }
282  set
283  {
284  if (value == UUID.Zero)
285  m_TerrainTexture4 = DEFAULT_TERRAIN_TEXTURE_4;
286  else
287  m_TerrainTexture4 = value;
288  }
289  }
290 
291  private double m_Elevation1NW = 10;
292 
293  public double Elevation1NW
294  {
295  get { return m_Elevation1NW; }
296  set { m_Elevation1NW = value; }
297  }
298 
299  private double m_Elevation2NW = 60;
300 
301  public double Elevation2NW
302  {
303  get { return m_Elevation2NW; }
304  set { m_Elevation2NW = value; }
305  }
306 
307  private double m_Elevation1NE = 10;
308 
309  public double Elevation1NE
310  {
311  get { return m_Elevation1NE; }
312  set { m_Elevation1NE = value; }
313  }
314 
315  private double m_Elevation2NE = 60;
316 
317  public double Elevation2NE
318  {
319  get { return m_Elevation2NE; }
320  set { m_Elevation2NE = value; }
321  }
322 
323  private double m_Elevation1SE = 10;
324 
325  public double Elevation1SE
326  {
327  get { return m_Elevation1SE; }
328  set { m_Elevation1SE = value; }
329  }
330 
331  private double m_Elevation2SE = 60;
332 
333  public double Elevation2SE
334  {
335  get { return m_Elevation2SE; }
336  set { m_Elevation2SE = value; }
337  }
338 
339  private double m_Elevation1SW = 10;
340 
341  public double Elevation1SW
342  {
343  get { return m_Elevation1SW; }
344  set { m_Elevation1SW = value; }
345  }
346 
347  private double m_Elevation2SW = 60;
348 
349  public double Elevation2SW
350  {
351  get { return m_Elevation2SW; }
352  set { m_Elevation2SW = value; }
353  }
354 
355  private double m_WaterHeight = 20;
356 
357  public double WaterHeight
358  {
359  get { return m_WaterHeight; }
360  set { m_WaterHeight = value; }
361  }
362 
363  private double m_TerrainRaiseLimit = 100;
364 
365  public double TerrainRaiseLimit
366  {
367  get { return m_TerrainRaiseLimit; }
368  set { m_TerrainRaiseLimit = value; }
369  }
370 
371  private double m_TerrainLowerLimit = -100;
372 
373  public double TerrainLowerLimit
374  {
375  get { return m_TerrainLowerLimit; }
376  set { m_TerrainLowerLimit = value; }
377  }
378 
379  private bool m_UseEstateSun = true;
380 
381  public bool UseEstateSun
382  {
383  get { return m_UseEstateSun; }
384  set { m_UseEstateSun = value; }
385  }
386 
387  private bool m_Sandbox = false;
388 
389  public bool Sandbox
390  {
391  get { return m_Sandbox; }
392  set { m_Sandbox = value; }
393  }
394 
395  private Vector3 m_SunVector;
396 
397  public Vector3 SunVector
398  {
399  get { return m_SunVector; }
400  set { m_SunVector = value; }
401  }
402 
403  private UUID m_ParcelImageID;
404 
405  public UUID ParcelImageID
406  {
407  get { return m_ParcelImageID; }
408  set { m_ParcelImageID = value; }
409  }
410 
411  private UUID m_TerrainImageID;
412 
413  public UUID TerrainImageID
414  {
415  get { return m_TerrainImageID; }
416  set { m_TerrainImageID = value; }
417  }
418 
419  private bool m_FixedSun = false;
420 
421  public bool FixedSun
422  {
423  get { return m_FixedSun; }
424  set { m_FixedSun = value; }
425  }
426 
427  private double m_SunPosition = 0.0;
428 
429  public double SunPosition
430  {
431  get { return m_SunPosition; }
432  set { m_SunPosition = value; }
433  }
434 
435  private UUID m_Covenant = UUID.Zero;
436 
437  public UUID Covenant
438  {
439  get { return m_Covenant; }
440  set { m_Covenant = value; }
441  }
442 
443  private int m_CovenantChanged = 0;
444 
445  public int CovenantChangedDateTime
446  {
447  get { return m_CovenantChanged; }
448  set { m_CovenantChanged = value; }
449  }
450 
451  private int m_LoadedCreationDateTime;
452  public int LoadedCreationDateTime
453  {
454  get { return m_LoadedCreationDateTime; }
455  set { m_LoadedCreationDateTime = value; }
456  }
457 
458  public String LoadedCreationDate
459  {
460  get
461  {
462  TimeSpan ts = new TimeSpan(0, 0, LoadedCreationDateTime);
463  DateTime stamp = new DateTime(1970, 1, 1) + ts;
464  return stamp.ToLongDateString();
465  }
466  }
467 
468  public String LoadedCreationTime
469  {
470  get
471  {
472  TimeSpan ts = new TimeSpan(0, 0, LoadedCreationDateTime);
473  DateTime stamp = new DateTime(1970, 1, 1) + ts;
474  return stamp.ToLongTimeString();
475  }
476  }
477 
478  private String m_LoadedCreationID;
479  public String LoadedCreationID
480  {
481  get { return m_LoadedCreationID; }
482  set { m_LoadedCreationID = value; }
483  }
484 
485  private bool m_GodBlockSearch = false;
486  public bool GodBlockSearch
487  {
488  get { return m_GodBlockSearch; }
489  set { m_GodBlockSearch = value; }
490  }
491 
492  private bool m_Casino = false;
493  public bool Casino
494  {
495  get { return m_Casino; }
496  set { m_Casino = value; }
497  }
498 
499  // Telehub support
500  private bool m_TelehubEnabled = false;
501  public bool HasTelehub
502  {
503  get { return m_TelehubEnabled; }
504  set { m_TelehubEnabled = value; }
505  }
506 
510  public UUID TelehubObject { get; set; }
511 
515  public List<SpawnPoint> l_SpawnPoints = new List<SpawnPoint>();
516 
517  // Add a SpawnPoint
518  // ** These are not region coordinates **
519  // They are relative to the Telehub coordinates
520  //
521  public void AddSpawnPoint(SpawnPoint point)
522  {
523  l_SpawnPoints.Add(point);
524  }
525 
526  // Remove a SpawnPoint
527  public void RemoveSpawnPoint(int point_index)
528  {
529  l_SpawnPoints.RemoveAt(point_index);
530  }
531 
532  // Return the List of SpawnPoints
533  public List<SpawnPoint> SpawnPoints()
534  {
535  return l_SpawnPoints;
536 
537  }
538 
539  // Clear the SpawnPoints List of all entries
540  public void ClearSpawnPoints()
541  {
542  l_SpawnPoints.Clear();
543  }
544  }
545 }
void RemoveSpawnPoint(int point_index)
static SpawnPoint Parse(string str)
Generate a SpawnPoint from a string
void SetLocation(Vector3 pos, Quaternion rot, Vector3 point)
void AddSpawnPoint(SpawnPoint point)
Vector3 GetLocation(Vector3 pos, Quaternion rot)
override string ToString()
Returns a string representation of this SpawnPoint.
List< SpawnPoint > SpawnPoints()