diff options
-rw-r--r-- | OpenSim/Data/NHibernate/LLQuaternionUserType.cs | 116 | ||||
-rw-r--r-- | OpenSim/Data/NHibernate/Resources/AssetBase.hbm.xml | 1 | ||||
-rw-r--r-- | OpenSim/Data/NHibernate/Resources/RegionStore.hbm.xml | 71 | ||||
-rw-r--r-- | OpenSim/Region/Environment/Scenes/SceneObjectPart.cs | 28 |
4 files changed, 187 insertions, 29 deletions
diff --git a/OpenSim/Data/NHibernate/LLQuaternionUserType.cs b/OpenSim/Data/NHibernate/LLQuaternionUserType.cs new file mode 100644 index 0000000..c4f3136 --- /dev/null +++ b/OpenSim/Data/NHibernate/LLQuaternionUserType.cs | |||
@@ -0,0 +1,116 @@ | |||
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 OpenSim 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.Data; | ||
30 | using libsecondlife; | ||
31 | using NHibernate; | ||
32 | using NHibernate.SqlTypes; | ||
33 | using NHibernate.UserTypes; | ||
34 | |||
35 | namespace OpenSim.Data.NHibernate | ||
36 | { | ||
37 | [Serializable] | ||
38 | public class LLQuaternionUserType: IUserType | ||
39 | { | ||
40 | public object Assemble(object cached, object owner) | ||
41 | { | ||
42 | return cached; | ||
43 | } | ||
44 | |||
45 | bool IUserType.Equals(object quat1, object quat2) | ||
46 | { | ||
47 | return quat1.Equals(quat2); | ||
48 | } | ||
49 | |||
50 | public object DeepCopy(object quat) | ||
51 | { | ||
52 | // silly libsecondlife having no copy constructor | ||
53 | LLQuaternion q = (LLQuaternion) quat; | ||
54 | return new LLQuaternion(q.X, q.Y, q.Z, q.W); | ||
55 | } | ||
56 | |||
57 | public object Disassemble(object quat) | ||
58 | { | ||
59 | return quat; | ||
60 | } | ||
61 | |||
62 | public int GetHashCode(object quat) | ||
63 | { | ||
64 | return (quat == null) ? 0 : quat.GetHashCode(); | ||
65 | } | ||
66 | |||
67 | public bool IsMutable | ||
68 | { | ||
69 | get { return false; } | ||
70 | } | ||
71 | |||
72 | public object NullSafeGet(IDataReader rs, string[] names, object owner) | ||
73 | { | ||
74 | object quat = null; | ||
75 | |||
76 | int x = rs.GetOrdinal(names[0]); | ||
77 | int y = rs.GetOrdinal(names[1]); | ||
78 | int z = rs.GetOrdinal(names[2]); | ||
79 | int w = rs.GetOrdinal(names[3]); | ||
80 | if (!rs.IsDBNull(x)) | ||
81 | { | ||
82 | quat = new LLQuaternion((Single)rs[x], (Single)rs[y], (Single)rs[z], (Single)rs[w]); | ||
83 | } | ||
84 | return quat; | ||
85 | } | ||
86 | |||
87 | public void NullSafeSet(IDbCommand cmd, object obj, int index) | ||
88 | { | ||
89 | LLQuaternion quat = (LLQuaternion)obj; | ||
90 | ((IDataParameter)cmd.Parameters[index]).Value = quat.X; | ||
91 | ((IDataParameter)cmd.Parameters[index + 1]).Value = quat.Y; | ||
92 | ((IDataParameter)cmd.Parameters[index + 2]).Value = quat.Z; | ||
93 | ((IDataParameter)cmd.Parameters[index + 3]).Value = quat.W; | ||
94 | } | ||
95 | |||
96 | public object Replace(object original, object target, object owner) | ||
97 | { | ||
98 | return original; | ||
99 | } | ||
100 | |||
101 | public Type ReturnedType | ||
102 | { | ||
103 | get { return typeof(LLQuaternion); } | ||
104 | } | ||
105 | |||
106 | public SqlType[] SqlTypes | ||
107 | { | ||
108 | get { return new SqlType [] { | ||
109 | NHibernateUtil.Single.SqlType, | ||
110 | NHibernateUtil.Single.SqlType, | ||
111 | NHibernateUtil.Single.SqlType, | ||
112 | NHibernateUtil.Single.SqlType | ||
113 | }; } | ||
114 | } | ||
115 | } | ||
116 | } | ||
diff --git a/OpenSim/Data/NHibernate/Resources/AssetBase.hbm.xml b/OpenSim/Data/NHibernate/Resources/AssetBase.hbm.xml index 60fc146..f6b648a 100644 --- a/OpenSim/Data/NHibernate/Resources/AssetBase.hbm.xml +++ b/OpenSim/Data/NHibernate/Resources/AssetBase.hbm.xml | |||
@@ -5,7 +5,6 @@ | |||
5 | <generator class="assigned" /> | 5 | <generator class="assigned" /> |
6 | </id> | 6 | </id> |
7 | <property name="Type" type="System.SByte" /> | 7 | <property name="Type" type="System.SByte" /> |
8 | <property name="InvType" type="System.SByte" /> | ||
9 | <property name="Name" type="String" length="64" /> | 8 | <property name="Name" type="String" length="64" /> |
10 | <property name="Description" type="String" length="64" /> | 9 | <property name="Description" type="String" length="64" /> |
11 | <property name="Local" type="boolean" /> | 10 | <property name="Local" type="boolean" /> |
diff --git a/OpenSim/Data/NHibernate/Resources/RegionStore.hbm.xml b/OpenSim/Data/NHibernate/Resources/RegionStore.hbm.xml index 17f7a49..a443a8f 100644 --- a/OpenSim/Data/NHibernate/Resources/RegionStore.hbm.xml +++ b/OpenSim/Data/NHibernate/Resources/RegionStore.hbm.xml | |||
@@ -29,34 +29,49 @@ | |||
29 | <column name="PositionY" /> | 29 | <column name="PositionY" /> |
30 | <column name="PositionZ" /> | 30 | <column name="PositionZ" /> |
31 | </property> | 31 | </property> |
32 | 32 | ||
33 | <property name="GroupPosition.X" column="GroupPositionX" type="Single" /> | 33 | <property name="GroupPosition" type="OpenSim.Data.NHibernate.LLVector3UserType, OpenSim.Data.NHibernate" > |
34 | <property name="GroupPosition.Y" column="GroupPositionY" type="Single" /> | 34 | <column name="GroupPositionX" /> |
35 | <property name="GroupPosition.Z" column="GroupPositionZ" type="Single" /> | 35 | <column name="GroupPositionY" /> |
36 | <column name="GroupPositionZ" /> | ||
37 | </property> | ||
38 | |||
39 | <property name="Velocity" type="OpenSim.Data.NHibernate.LLVector3UserType, OpenSim.Data.NHibernate" > | ||
40 | <column name="VelocityX" /> | ||
41 | <column name="VelocityY" /> | ||
42 | <column name="VelocityZ" /> | ||
43 | </property> | ||
44 | |||
45 | <property name="AngularVelocity" type="OpenSim.Data.NHibernate.LLVector3UserType, OpenSim.Data.NHibernate" > | ||
46 | <column name="AngularVelocityX" /> | ||
47 | <column name="AngularVelocityY" /> | ||
48 | <column name="AngularVelocityZ" /> | ||
49 | </property> | ||
50 | |||
51 | <property name="Acceleration" type="OpenSim.Data.NHibernate.LLVector3UserType, OpenSim.Data.NHibernate" > | ||
52 | <column name="AccelerationX" /> | ||
53 | <column name="AccelerationY" /> | ||
54 | <column name="AccelerationZ" /> | ||
55 | </property> | ||
56 | |||
57 | <property name="SitTargetPositionLL" type="OpenSim.Data.NHibernate.LLVector3UserType, OpenSim.Data.NHibernate" > | ||
58 | <column name="SitTargetPosX" /> | ||
59 | <column name="SitTargetPosY" /> | ||
60 | <column name="SitTargetPosZ" /> | ||
61 | </property> | ||
62 | |||
63 | <property name="RotationOffset" type="OpenSim.Data.NHibernate.LLQuaternionUserType, OpenSim.Data.NHibernate" > | ||
64 | <column name="RotationX" /> | ||
65 | <column name="RotationY" /> | ||
66 | <column name="RotationZ" /> | ||
67 | <column name="RotationW" /> | ||
68 | </property> | ||
36 | 69 | ||
37 | <property name="Velocity.X" column="VelocityX" type="Single" /> | 70 | <property name="SitTargetOrientationLL" type="OpenSim.Data.NHibernate.LLQuaternionUserType, OpenSim.Data.NHibernate" > |
38 | <property name="Velocity.Y" column="VelocityY" type="Single" /> | 71 | <column name="SitTargetOrientX" /> |
39 | <property name="Velocity.Z" column="VelocityZ" type="Single" /> | 72 | <column name="SitTargetOrientY" /> |
40 | 73 | <column name="SitTargetOrientZ" /> | |
41 | <property name="AngularVelocity.X" column="AngularVelocityX" type="Single" /> | 74 | <column name="SitTargetOrientW" /> |
42 | <property name="AngularVelocity.Y" column="AngularVelocityY" type="Single" /> | 75 | </property> |
43 | <property name="AngularVelocity.Z" column="AngularVelocityZ" type="Single" /> | ||
44 | |||
45 | <property name="Acceleration.X" column="AccelerationX" type="Single" /> | ||
46 | <property name="Acceleration.Y" column="AccelerationY" type="Single" /> | ||
47 | <property name="Acceleration.Z" column="AccelerationZ" type="Single" /> | ||
48 | |||
49 | <property name="Rotation.X" column="RotationX" type="Single" /> | ||
50 | <property name="Rotation.Y" column="RotationY" type="Single" /> | ||
51 | <property name="Rotation.Z" column="RotationZ" type="Single" /> | ||
52 | <property name="Rotation.W" column="RotationW" type="Single" /> | ||
53 | |||
54 | <property name="sitTargetPos.X" column="sitTargetPosX" type="Single" /> | ||
55 | <property name="sitTargetPos.Y" column="sitTargetPosY" type="Single" /> | ||
56 | <property name="sitTargetPos.Z" column="sitTargetPosZ" type="Single" /> | ||
57 | <property name="SiteTargetOrient.X" column="SiteTargetOrientX" type="Single" /> | ||
58 | <property name="SiteTargetOrient.Y" column="SiteTargetOrientY" type="Single" /> | ||
59 | <property name="SiteTargetOrient.Z" column="SiteTargetOrientZ" type="Single" /> | ||
60 | <property name="SiteTargetOrient.W" column="SiteTargetOrientW" type="Single" /> | ||
61 | </class> | 76 | </class> |
62 | </hibernate-mapping> \ No newline at end of file | 77 | </hibernate-mapping> \ No newline at end of file |
diff --git a/OpenSim/Region/Environment/Scenes/SceneObjectPart.cs b/OpenSim/Region/Environment/Scenes/SceneObjectPart.cs index 3f5e618..5b92a8d 100644 --- a/OpenSim/Region/Environment/Scenes/SceneObjectPart.cs +++ b/OpenSim/Region/Environment/Scenes/SceneObjectPart.cs | |||
@@ -776,13 +776,41 @@ namespace OpenSim.Region.Environment.Scenes | |||
776 | public Quaternion SitTargetOrientation | 776 | public Quaternion SitTargetOrientation |
777 | { | 777 | { |
778 | get { return m_sitTargetOrientation; } | 778 | get { return m_sitTargetOrientation; } |
779 | set { m_sitTargetOrientation = value; } | ||
779 | } | 780 | } |
780 | 781 | ||
782 | |||
781 | public Vector3 SitTargetPosition | 783 | public Vector3 SitTargetPosition |
782 | { | 784 | { |
783 | get { return m_sitTargetPosition; } | 785 | get { return m_sitTargetPosition; } |
786 | set { m_sitTargetPosition = value; } | ||
787 | } | ||
788 | |||
789 | // This sort of sucks, but I'm adding these in to make some of | ||
790 | // the mappings more consistant. | ||
791 | public LLVector3 SitTargetPositionLL | ||
792 | { | ||
793 | get { return new LLVector3(m_sitTargetPosition.x, m_sitTargetPosition.y,m_sitTargetPosition.z); } | ||
794 | set { m_sitTargetPosition = new Vector3(value.X, value.Y, value.Z); } | ||
784 | } | 795 | } |
785 | 796 | ||
797 | public LLQuaternion SitTargetOrientationLL | ||
798 | { | ||
799 | get | ||
800 | { | ||
801 | return new LLQuaternion( | ||
802 | m_sitTargetOrientation.x, | ||
803 | m_sitTargetOrientation.y, | ||
804 | m_sitTargetOrientation.z, | ||
805 | m_sitTargetOrientation.w | ||
806 | ); | ||
807 | } | ||
808 | |||
809 | set { m_sitTargetOrientation = new Quaternion(value.X, value.Y, value.Z, value.W); } | ||
810 | } | ||
811 | |||
812 | |||
813 | |||
786 | public bool Stopped | 814 | public bool Stopped |
787 | { | 815 | { |
788 | get { | 816 | get { |