corrade-vassal – Blame information for rev 1

Subversion Repositories:
Rev:
Rev Author Line No. Line
1 vero 1 /*
2 * Copyright (c) 2006-2014, openmetaverse.org
3 * All rights reserved.
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 *
8 * - Redistributions of source code must retain the above copyright notice, this
9 * list of conditions and the following disclaimer.
10 * - Neither the name of the openmetaverse.org nor the names
11 * of its contributors may be used to endorse or promote products derived from
12 * this software without specific prior written permission.
13 *
14 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
15 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
16 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
17 * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
18 * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
19 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
20 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
21 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
22 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
23 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
24 * POSSIBILITY OF SUCH DAMAGE.
25 */
26  
27 using System;
28 using OpenMetaverse;
29  
30 namespace OpenMetaverse.Assets
31 {
32 /// <summary>
33 /// Represents a Landmark with RegionID and Position vector
34 /// </summary>
35 public class AssetLandmark : Asset
36 {
37 /// <summary>Override the base classes AssetType</summary>
38 public override AssetType AssetType { get { return AssetType.Landmark; } }
39  
40 /// <summary>UUID of the Landmark target region</summary>
41 public UUID RegionID = UUID.Zero;
42 /// <summary> Local position of the target </summary>
43 public Vector3 Position = Vector3.Zero;
44  
45 /// <summary>Construct an Asset of type Landmark</summary>
46 public AssetLandmark() { }
47  
48 /// <summary>
49 /// Construct an Asset object of type Landmark
50 /// </summary>
51 /// <param name="assetID">A unique <see cref="UUID"/> specific to this asset</param>
52 /// <param name="assetData">A byte array containing the raw asset data</param>
53 public AssetLandmark(UUID assetID, byte[] assetData)
54 : base(assetID, assetData)
55 {
56 }
57  
58 /// <summary>
59 /// Encode the raw contents of a string with the specific Landmark format
60 /// </summary>
61 public override void Encode()
62 {
63 string temp = "Landmark version 2\n";
64 temp += "region_id " + RegionID + "\n";
65 temp += String.Format(Utils.EnUsCulture, "local_pos {0:0.00} {1:0.00} {2:0.00}\n", Position.X, Position.Y, Position.Z);
66 AssetData = Utils.StringToBytes(temp);
67 }
68  
69 /// <summary>
70 /// Decode the raw asset data, populating the RegionID and Position
71 /// </summary>
72 /// <returns>true if the AssetData was successfully decoded to a UUID and Vector</returns>
73 public override bool Decode()
74 {
75 String text = Utils.BytesToString(AssetData);
76 if (text.ToLower().Contains("landmark version 2"))
77 {
78 RegionID = new UUID(text.Substring(text.IndexOf("region_id") + 10, 36));
79 String vecDelim = " ";
80 String[] vecStrings = text.Substring(text.IndexOf("local_pos") + 10).Split(vecDelim.ToCharArray());
81 if (vecStrings.Length == 3)
82 {
83 Position = new Vector3(float.Parse(vecStrings[0], System.Globalization.CultureInfo.InvariantCulture), float.Parse(vecStrings[1], System.Globalization.CultureInfo.InvariantCulture), float.Parse(vecStrings[2], System.Globalization.CultureInfo.InvariantCulture));
84 return true;
85 }
86 }
87 return false;
88 }
89 }
90 }