diff options
Diffstat (limited to 'OpenSim/Region/Framework')
-rw-r--r-- | OpenSim/Region/Framework/Interfaces/IRegionReadyModule.cs | 38 | ||||
-rw-r--r-- | OpenSim/Region/Framework/Interfaces/IScriptModule.cs | 13 | ||||
-rw-r--r-- | OpenSim/Region/Framework/Scenes/SceneObjectPart.cs | 64 |
3 files changed, 81 insertions, 34 deletions
diff --git a/OpenSim/Region/Framework/Interfaces/IRegionReadyModule.cs b/OpenSim/Region/Framework/Interfaces/IRegionReadyModule.cs new file mode 100644 index 0000000..aa4a757 --- /dev/null +++ b/OpenSim/Region/Framework/Interfaces/IRegionReadyModule.cs | |||
@@ -0,0 +1,38 @@ | |||
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 | |||
29 | using System; | ||
30 | |||
31 | namespace OpenSim.Region.Framework.Interfaces | ||
32 | { | ||
33 | public interface IRegionReadyModule | ||
34 | { | ||
35 | void OarLoadingAlert(string msg); | ||
36 | } | ||
37 | } | ||
38 | |||
diff --git a/OpenSim/Region/Framework/Interfaces/IScriptModule.cs b/OpenSim/Region/Framework/Interfaces/IScriptModule.cs index 9d68eb4..2d6758b 100644 --- a/OpenSim/Region/Framework/Interfaces/IScriptModule.cs +++ b/OpenSim/Region/Framework/Interfaces/IScriptModule.cs | |||
@@ -31,8 +31,21 @@ using OpenMetaverse; | |||
31 | 31 | ||
32 | namespace OpenSim.Region.Framework.Interfaces | 32 | namespace OpenSim.Region.Framework.Interfaces |
33 | { | 33 | { |
34 | public delegate void ScriptRemoved(UUID script); | ||
35 | public delegate void ObjectRemoved(UUID prim); | ||
36 | |||
34 | public interface IScriptModule: INonSharedRegionModule | 37 | public interface IScriptModule: INonSharedRegionModule |
35 | { | 38 | { |
39 | /// <summary> | ||
40 | /// Triggered when a script is removed from the script module. | ||
41 | /// </summary> | ||
42 | event ScriptRemoved OnScriptRemoved; | ||
43 | |||
44 | /// <summary> | ||
45 | /// Triggered when an object is removed via the script module. | ||
46 | /// </summary> | ||
47 | event ObjectRemoved OnObjectRemoved; | ||
48 | |||
36 | string ScriptEngineName { get; } | 49 | string ScriptEngineName { get; } |
37 | 50 | ||
38 | string GetXMLState(UUID itemID); | 51 | string GetXMLState(UUID itemID); |
diff --git a/OpenSim/Region/Framework/Scenes/SceneObjectPart.cs b/OpenSim/Region/Framework/Scenes/SceneObjectPart.cs index 193ef0d..c9a8832 100644 --- a/OpenSim/Region/Framework/Scenes/SceneObjectPart.cs +++ b/OpenSim/Region/Framework/Scenes/SceneObjectPart.cs | |||
@@ -226,11 +226,10 @@ namespace OpenSim.Region.Framework.Scenes | |||
226 | 226 | ||
227 | public Quaternion SpinOldOrientation = Quaternion.Identity; | 227 | public Quaternion SpinOldOrientation = Quaternion.Identity; |
228 | 228 | ||
229 | public Quaternion m_APIDTarget = Quaternion.Identity; | 229 | protected int m_APIDIterations = 0; |
230 | 230 | protected Quaternion m_APIDTarget = Quaternion.Identity; | |
231 | public float m_APIDDamp = 0; | 231 | protected float m_APIDDamp = 0; |
232 | 232 | protected float m_APIDStrength = 0; | |
233 | public float m_APIDStrength = 0; | ||
234 | 233 | ||
235 | /// <summary> | 234 | /// <summary> |
236 | /// This part's inventory | 235 | /// This part's inventory |
@@ -578,22 +577,21 @@ namespace OpenSim.Region.Framework.Scenes | |||
578 | } | 577 | } |
579 | } | 578 | } |
580 | 579 | ||
581 | 580 | protected Quaternion APIDTarget | |
582 | public Quaternion APIDTarget | ||
583 | { | 581 | { |
584 | get { return m_APIDTarget; } | 582 | get { return m_APIDTarget; } |
585 | set { m_APIDTarget = value; } | 583 | set { m_APIDTarget = value; } |
586 | } | 584 | } |
587 | 585 | ||
588 | 586 | ||
589 | public float APIDDamp | 587 | protected float APIDDamp |
590 | { | 588 | { |
591 | get { return m_APIDDamp; } | 589 | get { return m_APIDDamp; } |
592 | set { m_APIDDamp = value; } | 590 | set { m_APIDDamp = value; } |
593 | } | 591 | } |
594 | 592 | ||
595 | 593 | ||
596 | public float APIDStrength | 594 | protected float APIDStrength |
597 | { | 595 | { |
598 | get { return m_APIDStrength; } | 596 | get { return m_APIDStrength; } |
599 | set { m_APIDStrength = value; } | 597 | set { m_APIDStrength = value; } |
@@ -2768,17 +2766,26 @@ namespace OpenSim.Region.Framework.Scenes | |||
2768 | APIDDamp = damping; | 2766 | APIDDamp = damping; |
2769 | APIDStrength = strength; | 2767 | APIDStrength = strength; |
2770 | APIDTarget = target; | 2768 | APIDTarget = target; |
2769 | |||
2770 | if (APIDStrength <= 0) | ||
2771 | { | ||
2772 | m_log.WarnFormat("[SceneObjectPart] Invalid rotation strength {0}",APIDStrength); | ||
2773 | return; | ||
2774 | } | ||
2775 | |||
2776 | m_APIDIterations = 1 + (int)(Math.PI * APIDStrength); | ||
2771 | } | 2777 | } |
2778 | |||
2779 | // Necessary to get the lookat deltas applied | ||
2780 | ParentGroup.QueueForUpdateCheck(); | ||
2772 | } | 2781 | } |
2773 | 2782 | ||
2774 | public void startLookAt(Quaternion rot, float damp, float strength) | 2783 | public void StartLookAt(Quaternion target, float strength, float damping) |
2775 | { | 2784 | { |
2776 | APIDDamp = damp; | 2785 | RotLookAt(target,strength,damping); |
2777 | APIDStrength = strength; | ||
2778 | APIDTarget = rot; | ||
2779 | } | 2786 | } |
2780 | 2787 | ||
2781 | public void stopLookAt() | 2788 | public void StopLookAt() |
2782 | { | 2789 | { |
2783 | APIDTarget = Quaternion.Identity; | 2790 | APIDTarget = Quaternion.Identity; |
2784 | } | 2791 | } |
@@ -3468,13 +3475,6 @@ namespace OpenSim.Region.Framework.Scenes | |||
3468 | } | 3475 | } |
3469 | } | 3476 | } |
3470 | 3477 | ||
3471 | public void StopLookAt() | ||
3472 | { | ||
3473 | ParentGroup.stopLookAt(); | ||
3474 | |||
3475 | ParentGroup.ScheduleGroupForTerseUpdate(); | ||
3476 | } | ||
3477 | |||
3478 | /// <summary> | 3478 | /// <summary> |
3479 | /// Set the text displayed for this part. | 3479 | /// Set the text displayed for this part. |
3480 | /// </summary> | 3480 | /// </summary> |
@@ -4790,24 +4790,20 @@ namespace OpenSim.Region.Framework.Scenes | |||
4790 | { | 4790 | { |
4791 | if (APIDTarget != Quaternion.Identity) | 4791 | if (APIDTarget != Quaternion.Identity) |
4792 | { | 4792 | { |
4793 | if (Single.IsNaN(APIDTarget.W) == true) | 4793 | if (m_APIDIterations <= 1) |
4794 | { | 4794 | { |
4795 | UpdateRotation(APIDTarget); | ||
4795 | APIDTarget = Quaternion.Identity; | 4796 | APIDTarget = Quaternion.Identity; |
4796 | return; | 4797 | return; |
4797 | } | 4798 | } |
4798 | Quaternion rot = RotationOffset; | 4799 | |
4799 | Quaternion dir = (rot - APIDTarget); | 4800 | Quaternion rot = Quaternion.Slerp(RotationOffset,APIDTarget,1.0f/(float)m_APIDIterations); |
4800 | float speed = ((APIDStrength / APIDDamp) * (float)(Math.PI / 180.0f)); | ||
4801 | if (dir.Z > speed) | ||
4802 | { | ||
4803 | rot.Z -= speed; | ||
4804 | } | ||
4805 | if (dir.Z < -speed) | ||
4806 | { | ||
4807 | rot.Z += speed; | ||
4808 | } | ||
4809 | rot.Normalize(); | ||
4810 | UpdateRotation(rot); | 4801 | UpdateRotation(rot); |
4802 | |||
4803 | m_APIDIterations--; | ||
4804 | |||
4805 | // This ensures that we'll check this object on the next iteration | ||
4806 | ParentGroup.QueueForUpdateCheck(); | ||
4811 | } | 4807 | } |
4812 | } | 4808 | } |
4813 | catch (Exception ex) | 4809 | catch (Exception ex) |