diff options
Diffstat (limited to 'OpenSim/Region/Framework/Scenes')
-rw-r--r-- | OpenSim/Region/Framework/Scenes/Animation/ScenePresenceAnimator.cs | 13 | ||||
-rw-r--r-- | OpenSim/Region/Framework/Scenes/EventManager.cs | 172 | ||||
-rw-r--r-- | OpenSim/Region/Framework/Scenes/Scene.Inventory.cs | 3 | ||||
-rw-r--r-- | OpenSim/Region/Framework/Scenes/Scene.cs | 49 | ||||
-rw-r--r-- | OpenSim/Region/Framework/Scenes/SceneGraph.cs | 11 | ||||
-rw-r--r-- | OpenSim/Region/Framework/Scenes/SceneObjectGroup.cs | 139 | ||||
-rw-r--r-- | OpenSim/Region/Framework/Scenes/SceneObjectPart.cs | 342 | ||||
-rw-r--r-- | OpenSim/Region/Framework/Scenes/SceneObjectPartInventory.cs | 6 | ||||
-rw-r--r-- | OpenSim/Region/Framework/Scenes/ScenePresence.cs | 92 | ||||
-rw-r--r-- | OpenSim/Region/Framework/Scenes/UndoState.cs | 79 |
10 files changed, 706 insertions, 200 deletions
diff --git a/OpenSim/Region/Framework/Scenes/Animation/ScenePresenceAnimator.cs b/OpenSim/Region/Framework/Scenes/Animation/ScenePresenceAnimator.cs index fd526eb..712dcc7 100644 --- a/OpenSim/Region/Framework/Scenes/Animation/ScenePresenceAnimator.cs +++ b/OpenSim/Region/Framework/Scenes/Animation/ScenePresenceAnimator.cs | |||
@@ -418,15 +418,12 @@ namespace OpenSim.Region.Framework.Scenes.Animation | |||
418 | { | 418 | { |
419 | if (m_scenePresence.IsChildAgent) | 419 | if (m_scenePresence.IsChildAgent) |
420 | return; | 420 | return; |
421 | |||
422 | UUID[] animIDs; | ||
423 | int[] sequenceNums; | ||
424 | UUID[] objectIDs; | ||
425 | 421 | ||
426 | m_animations.GetArrays(out animIDs, out sequenceNums, out objectIDs); | 422 | m_scenePresence.Scene.ForEachScenePresence( |
427 | 423 | delegate(ScenePresence SP) | |
428 | m_scenePresence.ControllingClient.SendAnimations( | 424 | { |
429 | animIDs, sequenceNums, m_scenePresence.ControllingClient.AgentId, objectIDs); | 425 | SP.Animator.SendAnimPack(); |
426 | }); | ||
430 | } | 427 | } |
431 | 428 | ||
432 | /// <summary> | 429 | /// <summary> |
diff --git a/OpenSim/Region/Framework/Scenes/EventManager.cs b/OpenSim/Region/Framework/Scenes/EventManager.cs index 9f74b2a..57e1c37 100644 --- a/OpenSim/Region/Framework/Scenes/EventManager.cs +++ b/OpenSim/Region/Framework/Scenes/EventManager.cs | |||
@@ -209,7 +209,7 @@ namespace OpenSim.Region.Framework.Scenes | |||
209 | /// Triggered when an object or attachment enters a scene | 209 | /// Triggered when an object or attachment enters a scene |
210 | /// </summary> | 210 | /// </summary> |
211 | public event OnIncomingSceneObjectDelegate OnIncomingSceneObject; | 211 | public event OnIncomingSceneObjectDelegate OnIncomingSceneObject; |
212 | public delegate void OnIncomingSceneObjectDelegate(SceneObjectGroup so); | 212 | public delegate void OnIncomingSceneObjectDelegate(SceneObjectGroup so); |
213 | 213 | ||
214 | public delegate void NewInventoryItemUploadComplete(UUID avatarID, UUID assetID, string name, int userlevel); | 214 | public delegate void NewInventoryItemUploadComplete(UUID avatarID, UUID assetID, string name, int userlevel); |
215 | 215 | ||
@@ -413,7 +413,7 @@ namespace OpenSim.Region.Framework.Scenes | |||
413 | } | 413 | } |
414 | } | 414 | } |
415 | } | 415 | } |
416 | } | 416 | } |
417 | 417 | ||
418 | public void TriggerGetScriptRunning(IClientAPI controllingClient, UUID objectID, UUID itemID) | 418 | public void TriggerGetScriptRunning(IClientAPI controllingClient, UUID objectID, UUID itemID) |
419 | { | 419 | { |
@@ -433,7 +433,7 @@ namespace OpenSim.Region.Framework.Scenes | |||
433 | e.Message, e.StackTrace); | 433 | e.Message, e.StackTrace); |
434 | } | 434 | } |
435 | } | 435 | } |
436 | } | 436 | } |
437 | } | 437 | } |
438 | 438 | ||
439 | public void TriggerOnScriptChangedEvent(uint localID, uint change) | 439 | public void TriggerOnScriptChangedEvent(uint localID, uint change) |
@@ -454,7 +454,7 @@ namespace OpenSim.Region.Framework.Scenes | |||
454 | e.Message, e.StackTrace); | 454 | e.Message, e.StackTrace); |
455 | } | 455 | } |
456 | } | 456 | } |
457 | } | 457 | } |
458 | } | 458 | } |
459 | 459 | ||
460 | public void TriggerOnClientMovement(ScenePresence avatar) | 460 | public void TriggerOnClientMovement(ScenePresence avatar) |
@@ -475,7 +475,7 @@ namespace OpenSim.Region.Framework.Scenes | |||
475 | e.Message, e.StackTrace); | 475 | e.Message, e.StackTrace); |
476 | } | 476 | } |
477 | } | 477 | } |
478 | } | 478 | } |
479 | } | 479 | } |
480 | 480 | ||
481 | public void TriggerPermissionError(UUID user, string reason) | 481 | public void TriggerPermissionError(UUID user, string reason) |
@@ -496,7 +496,7 @@ namespace OpenSim.Region.Framework.Scenes | |||
496 | e.Message, e.StackTrace); | 496 | e.Message, e.StackTrace); |
497 | } | 497 | } |
498 | } | 498 | } |
499 | } | 499 | } |
500 | } | 500 | } |
501 | 501 | ||
502 | public void TriggerOnPluginConsole(string[] args) | 502 | public void TriggerOnPluginConsole(string[] args) |
@@ -517,7 +517,7 @@ namespace OpenSim.Region.Framework.Scenes | |||
517 | e.Message, e.StackTrace); | 517 | e.Message, e.StackTrace); |
518 | } | 518 | } |
519 | } | 519 | } |
520 | } | 520 | } |
521 | } | 521 | } |
522 | 522 | ||
523 | public void TriggerOnFrame() | 523 | public void TriggerOnFrame() |
@@ -538,11 +538,11 @@ namespace OpenSim.Region.Framework.Scenes | |||
538 | e.Message, e.StackTrace); | 538 | e.Message, e.StackTrace); |
539 | } | 539 | } |
540 | } | 540 | } |
541 | } | 541 | } |
542 | } | 542 | } |
543 | 543 | ||
544 | public void TriggerOnNewClient(IClientAPI client) | 544 | public void TriggerOnNewClient(IClientAPI client) |
545 | { | 545 | { |
546 | OnNewClientDelegate handlerNewClient = OnNewClient; | 546 | OnNewClientDelegate handlerNewClient = OnNewClient; |
547 | if (handlerNewClient != null) | 547 | if (handlerNewClient != null) |
548 | { | 548 | { |
@@ -559,10 +559,10 @@ namespace OpenSim.Region.Framework.Scenes | |||
559 | e.Message, e.StackTrace); | 559 | e.Message, e.StackTrace); |
560 | } | 560 | } |
561 | } | 561 | } |
562 | } | 562 | } |
563 | 563 | ||
564 | if (client is IClientCore) | 564 | if (client is IClientCore) |
565 | { | 565 | { |
566 | OnClientConnectCoreDelegate handlerClientConnect = OnClientConnect; | 566 | OnClientConnectCoreDelegate handlerClientConnect = OnClientConnect; |
567 | if (handlerClientConnect != null) | 567 | if (handlerClientConnect != null) |
568 | { | 568 | { |
@@ -579,7 +579,7 @@ namespace OpenSim.Region.Framework.Scenes | |||
579 | e.Message, e.StackTrace); | 579 | e.Message, e.StackTrace); |
580 | } | 580 | } |
581 | } | 581 | } |
582 | } | 582 | } |
583 | } | 583 | } |
584 | } | 584 | } |
585 | 585 | ||
@@ -601,11 +601,11 @@ namespace OpenSim.Region.Framework.Scenes | |||
601 | e.Message, e.StackTrace); | 601 | e.Message, e.StackTrace); |
602 | } | 602 | } |
603 | } | 603 | } |
604 | } | 604 | } |
605 | } | 605 | } |
606 | 606 | ||
607 | public void TriggerOnRemovePresence(UUID agentId) | 607 | public void TriggerOnRemovePresence(UUID agentId) |
608 | { | 608 | { |
609 | OnRemovePresenceDelegate handlerRemovePresence = OnRemovePresence; | 609 | OnRemovePresenceDelegate handlerRemovePresence = OnRemovePresence; |
610 | if (handlerRemovePresence != null) | 610 | if (handlerRemovePresence != null) |
611 | { | 611 | { |
@@ -622,11 +622,11 @@ namespace OpenSim.Region.Framework.Scenes | |||
622 | e.Message, e.StackTrace); | 622 | e.Message, e.StackTrace); |
623 | } | 623 | } |
624 | } | 624 | } |
625 | } | 625 | } |
626 | } | 626 | } |
627 | 627 | ||
628 | public void TriggerOnBackup(IRegionDataStore dstore) | 628 | public void TriggerOnBackup(IRegionDataStore dstore) |
629 | { | 629 | { |
630 | OnBackupDelegate handlerOnAttach = OnBackup; | 630 | OnBackupDelegate handlerOnAttach = OnBackup; |
631 | if (handlerOnAttach != null) | 631 | if (handlerOnAttach != null) |
632 | { | 632 | { |
@@ -643,7 +643,7 @@ namespace OpenSim.Region.Framework.Scenes | |||
643 | e.Message, e.StackTrace); | 643 | e.Message, e.StackTrace); |
644 | } | 644 | } |
645 | } | 645 | } |
646 | } | 646 | } |
647 | } | 647 | } |
648 | 648 | ||
649 | public void TriggerParcelPrimCountUpdate() | 649 | public void TriggerParcelPrimCountUpdate() |
@@ -664,7 +664,7 @@ namespace OpenSim.Region.Framework.Scenes | |||
664 | e.Message, e.StackTrace); | 664 | e.Message, e.StackTrace); |
665 | } | 665 | } |
666 | } | 666 | } |
667 | } | 667 | } |
668 | } | 668 | } |
669 | 669 | ||
670 | public void TriggerMoneyTransfer(Object sender, MoneyTransferArgs args) | 670 | public void TriggerMoneyTransfer(Object sender, MoneyTransferArgs args) |
@@ -685,7 +685,7 @@ namespace OpenSim.Region.Framework.Scenes | |||
685 | e.Message, e.StackTrace); | 685 | e.Message, e.StackTrace); |
686 | } | 686 | } |
687 | } | 687 | } |
688 | } | 688 | } |
689 | } | 689 | } |
690 | 690 | ||
691 | public void TriggerTerrainTick() | 691 | public void TriggerTerrainTick() |
@@ -706,7 +706,7 @@ namespace OpenSim.Region.Framework.Scenes | |||
706 | e.Message, e.StackTrace); | 706 | e.Message, e.StackTrace); |
707 | } | 707 | } |
708 | } | 708 | } |
709 | } | 709 | } |
710 | } | 710 | } |
711 | 711 | ||
712 | public void TriggerParcelPrimCountAdd(SceneObjectGroup obj) | 712 | public void TriggerParcelPrimCountAdd(SceneObjectGroup obj) |
@@ -727,7 +727,7 @@ namespace OpenSim.Region.Framework.Scenes | |||
727 | e.Message, e.StackTrace); | 727 | e.Message, e.StackTrace); |
728 | } | 728 | } |
729 | } | 729 | } |
730 | } | 730 | } |
731 | } | 731 | } |
732 | 732 | ||
733 | public void TriggerObjectBeingRemovedFromScene(SceneObjectGroup obj) | 733 | public void TriggerObjectBeingRemovedFromScene(SceneObjectGroup obj) |
@@ -748,11 +748,11 @@ namespace OpenSim.Region.Framework.Scenes | |||
748 | e.Message, e.StackTrace); | 748 | e.Message, e.StackTrace); |
749 | } | 749 | } |
750 | } | 750 | } |
751 | } | 751 | } |
752 | } | 752 | } |
753 | 753 | ||
754 | public void TriggerShutdown() | 754 | public void TriggerShutdown() |
755 | { | 755 | { |
756 | OnShutdownDelegate handlerShutdown = OnShutdown; | 756 | OnShutdownDelegate handlerShutdown = OnShutdown; |
757 | if (handlerShutdown != null) | 757 | if (handlerShutdown != null) |
758 | { | 758 | { |
@@ -769,11 +769,11 @@ namespace OpenSim.Region.Framework.Scenes | |||
769 | e.Message, e.StackTrace); | 769 | e.Message, e.StackTrace); |
770 | } | 770 | } |
771 | } | 771 | } |
772 | } | 772 | } |
773 | } | 773 | } |
774 | 774 | ||
775 | public void TriggerObjectGrab(uint localID, uint originalID, Vector3 offsetPos, IClientAPI remoteClient, SurfaceTouchEventArgs surfaceArgs) | 775 | public void TriggerObjectGrab(uint localID, uint originalID, Vector3 offsetPos, IClientAPI remoteClient, SurfaceTouchEventArgs surfaceArgs) |
776 | { | 776 | { |
777 | ObjectGrabDelegate handlerObjectGrab = OnObjectGrab; | 777 | ObjectGrabDelegate handlerObjectGrab = OnObjectGrab; |
778 | if (handlerObjectGrab != null) | 778 | if (handlerObjectGrab != null) |
779 | { | 779 | { |
@@ -790,11 +790,11 @@ namespace OpenSim.Region.Framework.Scenes | |||
790 | e.Message, e.StackTrace); | 790 | e.Message, e.StackTrace); |
791 | } | 791 | } |
792 | } | 792 | } |
793 | } | 793 | } |
794 | } | 794 | } |
795 | 795 | ||
796 | public void TriggerObjectGrabbing(uint localID, uint originalID, Vector3 offsetPos, IClientAPI remoteClient, SurfaceTouchEventArgs surfaceArgs) | 796 | public void TriggerObjectGrabbing(uint localID, uint originalID, Vector3 offsetPos, IClientAPI remoteClient, SurfaceTouchEventArgs surfaceArgs) |
797 | { | 797 | { |
798 | ObjectGrabDelegate handlerObjectGrabbing = OnObjectGrabbing; | 798 | ObjectGrabDelegate handlerObjectGrabbing = OnObjectGrabbing; |
799 | if (handlerObjectGrabbing != null) | 799 | if (handlerObjectGrabbing != null) |
800 | { | 800 | { |
@@ -811,11 +811,11 @@ namespace OpenSim.Region.Framework.Scenes | |||
811 | e.Message, e.StackTrace); | 811 | e.Message, e.StackTrace); |
812 | } | 812 | } |
813 | } | 813 | } |
814 | } | 814 | } |
815 | } | 815 | } |
816 | 816 | ||
817 | public void TriggerObjectDeGrab(uint localID, uint originalID, IClientAPI remoteClient, SurfaceTouchEventArgs surfaceArgs) | 817 | public void TriggerObjectDeGrab(uint localID, uint originalID, IClientAPI remoteClient, SurfaceTouchEventArgs surfaceArgs) |
818 | { | 818 | { |
819 | ObjectDeGrabDelegate handlerObjectDeGrab = OnObjectDeGrab; | 819 | ObjectDeGrabDelegate handlerObjectDeGrab = OnObjectDeGrab; |
820 | if (handlerObjectDeGrab != null) | 820 | if (handlerObjectDeGrab != null) |
821 | { | 821 | { |
@@ -832,11 +832,11 @@ namespace OpenSim.Region.Framework.Scenes | |||
832 | e.Message, e.StackTrace); | 832 | e.Message, e.StackTrace); |
833 | } | 833 | } |
834 | } | 834 | } |
835 | } | 835 | } |
836 | } | 836 | } |
837 | 837 | ||
838 | public void TriggerScriptReset(uint localID, UUID itemID) | 838 | public void TriggerScriptReset(uint localID, UUID itemID) |
839 | { | 839 | { |
840 | ScriptResetDelegate handlerScriptReset = OnScriptReset; | 840 | ScriptResetDelegate handlerScriptReset = OnScriptReset; |
841 | if (handlerScriptReset != null) | 841 | if (handlerScriptReset != null) |
842 | { | 842 | { |
@@ -853,11 +853,11 @@ namespace OpenSim.Region.Framework.Scenes | |||
853 | e.Message, e.StackTrace); | 853 | e.Message, e.StackTrace); |
854 | } | 854 | } |
855 | } | 855 | } |
856 | } | 856 | } |
857 | } | 857 | } |
858 | 858 | ||
859 | public void TriggerRezScript(uint localID, UUID itemID, string script, int startParam, bool postOnRez, string engine, int stateSource) | 859 | public void TriggerRezScript(uint localID, UUID itemID, string script, int startParam, bool postOnRez, string engine, int stateSource) |
860 | { | 860 | { |
861 | NewRezScript handlerRezScript = OnRezScript; | 861 | NewRezScript handlerRezScript = OnRezScript; |
862 | if (handlerRezScript != null) | 862 | if (handlerRezScript != null) |
863 | { | 863 | { |
@@ -874,7 +874,7 @@ namespace OpenSim.Region.Framework.Scenes | |||
874 | e.Message, e.StackTrace); | 874 | e.Message, e.StackTrace); |
875 | } | 875 | } |
876 | } | 876 | } |
877 | } | 877 | } |
878 | } | 878 | } |
879 | 879 | ||
880 | public void TriggerStartScript(uint localID, UUID itemID) | 880 | public void TriggerStartScript(uint localID, UUID itemID) |
@@ -895,7 +895,7 @@ namespace OpenSim.Region.Framework.Scenes | |||
895 | e.Message, e.StackTrace); | 895 | e.Message, e.StackTrace); |
896 | } | 896 | } |
897 | } | 897 | } |
898 | } | 898 | } |
899 | } | 899 | } |
900 | 900 | ||
901 | public void TriggerStopScript(uint localID, UUID itemID) | 901 | public void TriggerStopScript(uint localID, UUID itemID) |
@@ -916,11 +916,11 @@ namespace OpenSim.Region.Framework.Scenes | |||
916 | e.Message, e.StackTrace); | 916 | e.Message, e.StackTrace); |
917 | } | 917 | } |
918 | } | 918 | } |
919 | } | 919 | } |
920 | } | 920 | } |
921 | 921 | ||
922 | public void TriggerRemoveScript(uint localID, UUID itemID) | 922 | public void TriggerRemoveScript(uint localID, UUID itemID) |
923 | { | 923 | { |
924 | RemoveScript handlerRemoveScript = OnRemoveScript; | 924 | RemoveScript handlerRemoveScript = OnRemoveScript; |
925 | if (handlerRemoveScript != null) | 925 | if (handlerRemoveScript != null) |
926 | { | 926 | { |
@@ -937,7 +937,7 @@ namespace OpenSim.Region.Framework.Scenes | |||
937 | e.Message, e.StackTrace); | 937 | e.Message, e.StackTrace); |
938 | } | 938 | } |
939 | } | 939 | } |
940 | } | 940 | } |
941 | } | 941 | } |
942 | 942 | ||
943 | public bool TriggerGroupMove(UUID groupID, Vector3 delta) | 943 | public bool TriggerGroupMove(UUID groupID, Vector3 delta) |
@@ -1036,7 +1036,7 @@ namespace OpenSim.Region.Framework.Scenes | |||
1036 | e.Message, e.StackTrace); | 1036 | e.Message, e.StackTrace); |
1037 | } | 1037 | } |
1038 | } | 1038 | } |
1039 | } | 1039 | } |
1040 | } | 1040 | } |
1041 | 1041 | ||
1042 | public void TriggerLandObjectAdded(ILandObject newParcel) | 1042 | public void TriggerLandObjectAdded(ILandObject newParcel) |
@@ -1057,7 +1057,7 @@ namespace OpenSim.Region.Framework.Scenes | |||
1057 | e.Message, e.StackTrace); | 1057 | e.Message, e.StackTrace); |
1058 | } | 1058 | } |
1059 | } | 1059 | } |
1060 | } | 1060 | } |
1061 | } | 1061 | } |
1062 | 1062 | ||
1063 | public void TriggerLandObjectRemoved(UUID globalID) | 1063 | public void TriggerLandObjectRemoved(UUID globalID) |
@@ -1078,7 +1078,7 @@ namespace OpenSim.Region.Framework.Scenes | |||
1078 | e.Message, e.StackTrace); | 1078 | e.Message, e.StackTrace); |
1079 | } | 1079 | } |
1080 | } | 1080 | } |
1081 | } | 1081 | } |
1082 | } | 1082 | } |
1083 | 1083 | ||
1084 | public void TriggerLandObjectUpdated(uint localParcelID, ILandObject newParcel) | 1084 | public void TriggerLandObjectUpdated(uint localParcelID, ILandObject newParcel) |
@@ -1104,7 +1104,7 @@ namespace OpenSim.Region.Framework.Scenes | |||
1104 | e.Message, e.StackTrace); | 1104 | e.Message, e.StackTrace); |
1105 | } | 1105 | } |
1106 | } | 1106 | } |
1107 | } | 1107 | } |
1108 | } | 1108 | } |
1109 | 1109 | ||
1110 | public void TriggerIncomingInstantMessage(GridInstantMessage message) | 1110 | public void TriggerIncomingInstantMessage(GridInstantMessage message) |
@@ -1125,7 +1125,7 @@ namespace OpenSim.Region.Framework.Scenes | |||
1125 | e.Message, e.StackTrace); | 1125 | e.Message, e.StackTrace); |
1126 | } | 1126 | } |
1127 | } | 1127 | } |
1128 | } | 1128 | } |
1129 | } | 1129 | } |
1130 | 1130 | ||
1131 | public void TriggerUnhandledInstantMessage(GridInstantMessage message) | 1131 | public void TriggerUnhandledInstantMessage(GridInstantMessage message) |
@@ -1146,7 +1146,7 @@ namespace OpenSim.Region.Framework.Scenes | |||
1146 | e.Message, e.StackTrace); | 1146 | e.Message, e.StackTrace); |
1147 | } | 1147 | } |
1148 | } | 1148 | } |
1149 | } | 1149 | } |
1150 | } | 1150 | } |
1151 | 1151 | ||
1152 | public void TriggerClientClosed(UUID ClientID, Scene scene) | 1152 | public void TriggerClientClosed(UUID ClientID, Scene scene) |
@@ -1167,7 +1167,7 @@ namespace OpenSim.Region.Framework.Scenes | |||
1167 | e.Message, e.StackTrace); | 1167 | e.Message, e.StackTrace); |
1168 | } | 1168 | } |
1169 | } | 1169 | } |
1170 | } | 1170 | } |
1171 | } | 1171 | } |
1172 | 1172 | ||
1173 | public void TriggerOnMakeChildAgent(ScenePresence presence) | 1173 | public void TriggerOnMakeChildAgent(ScenePresence presence) |
@@ -1188,7 +1188,7 @@ namespace OpenSim.Region.Framework.Scenes | |||
1188 | e.Message, e.StackTrace); | 1188 | e.Message, e.StackTrace); |
1189 | } | 1189 | } |
1190 | } | 1190 | } |
1191 | } | 1191 | } |
1192 | } | 1192 | } |
1193 | 1193 | ||
1194 | public void TriggerOnMakeRootAgent(ScenePresence presence) | 1194 | public void TriggerOnMakeRootAgent(ScenePresence presence) |
@@ -1209,7 +1209,7 @@ namespace OpenSim.Region.Framework.Scenes | |||
1209 | e.Message, e.StackTrace); | 1209 | e.Message, e.StackTrace); |
1210 | } | 1210 | } |
1211 | } | 1211 | } |
1212 | } | 1212 | } |
1213 | } | 1213 | } |
1214 | 1214 | ||
1215 | public void TriggerOnIncomingSceneObject(SceneObjectGroup so) | 1215 | public void TriggerOnIncomingSceneObject(SceneObjectGroup so) |
@@ -1229,12 +1229,12 @@ namespace OpenSim.Region.Framework.Scenes | |||
1229 | "[EVENT MANAGER]: Delegate for TriggerOnIncomingSceneObject failed - continuing. {0} {1}", | 1229 | "[EVENT MANAGER]: Delegate for TriggerOnIncomingSceneObject failed - continuing. {0} {1}", |
1230 | e.Message, e.StackTrace); | 1230 | e.Message, e.StackTrace); |
1231 | } | 1231 | } |
1232 | } | 1232 | } |
1233 | } | 1233 | } |
1234 | } | 1234 | } |
1235 | 1235 | ||
1236 | public void TriggerOnRegisterCaps(UUID agentID, Caps caps) | 1236 | public void TriggerOnRegisterCaps(UUID agentID, Caps caps) |
1237 | { | 1237 | { |
1238 | RegisterCapsEvent handlerRegisterCaps = OnRegisterCaps; | 1238 | RegisterCapsEvent handlerRegisterCaps = OnRegisterCaps; |
1239 | if (handlerRegisterCaps != null) | 1239 | if (handlerRegisterCaps != null) |
1240 | { | 1240 | { |
@@ -1251,7 +1251,7 @@ namespace OpenSim.Region.Framework.Scenes | |||
1251 | e.Message, e.StackTrace); | 1251 | e.Message, e.StackTrace); |
1252 | } | 1252 | } |
1253 | } | 1253 | } |
1254 | } | 1254 | } |
1255 | } | 1255 | } |
1256 | 1256 | ||
1257 | public void TriggerOnDeregisterCaps(UUID agentID, Caps caps) | 1257 | public void TriggerOnDeregisterCaps(UUID agentID, Caps caps) |
@@ -1272,7 +1272,7 @@ namespace OpenSim.Region.Framework.Scenes | |||
1272 | e.Message, e.StackTrace); | 1272 | e.Message, e.StackTrace); |
1273 | } | 1273 | } |
1274 | } | 1274 | } |
1275 | } | 1275 | } |
1276 | } | 1276 | } |
1277 | 1277 | ||
1278 | public void TriggerOnNewInventoryItemUploadComplete(UUID agentID, UUID AssetID, String AssetName, int userlevel) | 1278 | public void TriggerOnNewInventoryItemUploadComplete(UUID agentID, UUID AssetID, String AssetName, int userlevel) |
@@ -1293,7 +1293,7 @@ namespace OpenSim.Region.Framework.Scenes | |||
1293 | e.Message, e.StackTrace); | 1293 | e.Message, e.StackTrace); |
1294 | } | 1294 | } |
1295 | } | 1295 | } |
1296 | } | 1296 | } |
1297 | } | 1297 | } |
1298 | 1298 | ||
1299 | public void TriggerLandBuy(Object sender, LandBuyArgs args) | 1299 | public void TriggerLandBuy(Object sender, LandBuyArgs args) |
@@ -1314,7 +1314,7 @@ namespace OpenSim.Region.Framework.Scenes | |||
1314 | e.Message, e.StackTrace); | 1314 | e.Message, e.StackTrace); |
1315 | } | 1315 | } |
1316 | } | 1316 | } |
1317 | } | 1317 | } |
1318 | } | 1318 | } |
1319 | 1319 | ||
1320 | public void TriggerValidateLandBuy(Object sender, LandBuyArgs args) | 1320 | public void TriggerValidateLandBuy(Object sender, LandBuyArgs args) |
@@ -1335,11 +1335,11 @@ namespace OpenSim.Region.Framework.Scenes | |||
1335 | e.Message, e.StackTrace); | 1335 | e.Message, e.StackTrace); |
1336 | } | 1336 | } |
1337 | } | 1337 | } |
1338 | } | 1338 | } |
1339 | } | 1339 | } |
1340 | 1340 | ||
1341 | public void TriggerAtTargetEvent(uint localID, uint handle, Vector3 targetpos, Vector3 currentpos) | 1341 | public void TriggerAtTargetEvent(uint localID, uint handle, Vector3 targetpos, Vector3 currentpos) |
1342 | { | 1342 | { |
1343 | ScriptAtTargetEvent handlerScriptAtTargetEvent = OnScriptAtTargetEvent; | 1343 | ScriptAtTargetEvent handlerScriptAtTargetEvent = OnScriptAtTargetEvent; |
1344 | if (handlerScriptAtTargetEvent != null) | 1344 | if (handlerScriptAtTargetEvent != null) |
1345 | { | 1345 | { |
@@ -1356,7 +1356,7 @@ namespace OpenSim.Region.Framework.Scenes | |||
1356 | e.Message, e.StackTrace); | 1356 | e.Message, e.StackTrace); |
1357 | } | 1357 | } |
1358 | } | 1358 | } |
1359 | } | 1359 | } |
1360 | } | 1360 | } |
1361 | 1361 | ||
1362 | public void TriggerNotAtTargetEvent(uint localID) | 1362 | public void TriggerNotAtTargetEvent(uint localID) |
@@ -1377,11 +1377,11 @@ namespace OpenSim.Region.Framework.Scenes | |||
1377 | e.Message, e.StackTrace); | 1377 | e.Message, e.StackTrace); |
1378 | } | 1378 | } |
1379 | } | 1379 | } |
1380 | } | 1380 | } |
1381 | } | 1381 | } |
1382 | 1382 | ||
1383 | public void TriggerAtRotTargetEvent(uint localID, uint handle, Quaternion targetrot, Quaternion currentrot) | 1383 | public void TriggerAtRotTargetEvent(uint localID, uint handle, Quaternion targetrot, Quaternion currentrot) |
1384 | { | 1384 | { |
1385 | ScriptAtRotTargetEvent handlerScriptAtRotTargetEvent = OnScriptAtRotTargetEvent; | 1385 | ScriptAtRotTargetEvent handlerScriptAtRotTargetEvent = OnScriptAtRotTargetEvent; |
1386 | if (handlerScriptAtRotTargetEvent != null) | 1386 | if (handlerScriptAtRotTargetEvent != null) |
1387 | { | 1387 | { |
@@ -1398,7 +1398,7 @@ namespace OpenSim.Region.Framework.Scenes | |||
1398 | e.Message, e.StackTrace); | 1398 | e.Message, e.StackTrace); |
1399 | } | 1399 | } |
1400 | } | 1400 | } |
1401 | } | 1401 | } |
1402 | } | 1402 | } |
1403 | 1403 | ||
1404 | public void TriggerNotAtRotTargetEvent(uint localID) | 1404 | public void TriggerNotAtRotTargetEvent(uint localID) |
@@ -1419,7 +1419,7 @@ namespace OpenSim.Region.Framework.Scenes | |||
1419 | e.Message, e.StackTrace); | 1419 | e.Message, e.StackTrace); |
1420 | } | 1420 | } |
1421 | } | 1421 | } |
1422 | } | 1422 | } |
1423 | } | 1423 | } |
1424 | 1424 | ||
1425 | public void TriggerRequestChangeWaterHeight(float height) | 1425 | public void TriggerRequestChangeWaterHeight(float height) |
@@ -1440,7 +1440,7 @@ namespace OpenSim.Region.Framework.Scenes | |||
1440 | e.Message, e.StackTrace); | 1440 | e.Message, e.StackTrace); |
1441 | } | 1441 | } |
1442 | } | 1442 | } |
1443 | } | 1443 | } |
1444 | } | 1444 | } |
1445 | 1445 | ||
1446 | public void TriggerAvatarKill(uint KillerObjectLocalID, ScenePresence DeadAvatar) | 1446 | public void TriggerAvatarKill(uint KillerObjectLocalID, ScenePresence DeadAvatar) |
@@ -1461,7 +1461,7 @@ namespace OpenSim.Region.Framework.Scenes | |||
1461 | e.Message, e.StackTrace); | 1461 | e.Message, e.StackTrace); |
1462 | } | 1462 | } |
1463 | } | 1463 | } |
1464 | } | 1464 | } |
1465 | } | 1465 | } |
1466 | 1466 | ||
1467 | public void TriggerSignificantClientMovement(IClientAPI client) | 1467 | public void TriggerSignificantClientMovement(IClientAPI client) |
@@ -1482,7 +1482,7 @@ namespace OpenSim.Region.Framework.Scenes | |||
1482 | e.Message, e.StackTrace); | 1482 | e.Message, e.StackTrace); |
1483 | } | 1483 | } |
1484 | } | 1484 | } |
1485 | } | 1485 | } |
1486 | } | 1486 | } |
1487 | 1487 | ||
1488 | public void TriggerOnChatFromWorld(Object sender, OSChatMessage chat) | 1488 | public void TriggerOnChatFromWorld(Object sender, OSChatMessage chat) |
@@ -1503,7 +1503,7 @@ namespace OpenSim.Region.Framework.Scenes | |||
1503 | e.Message, e.StackTrace); | 1503 | e.Message, e.StackTrace); |
1504 | } | 1504 | } |
1505 | } | 1505 | } |
1506 | } | 1506 | } |
1507 | } | 1507 | } |
1508 | 1508 | ||
1509 | public void TriggerOnChatFromClient(Object sender, OSChatMessage chat) | 1509 | public void TriggerOnChatFromClient(Object sender, OSChatMessage chat) |
@@ -1524,7 +1524,7 @@ namespace OpenSim.Region.Framework.Scenes | |||
1524 | e.Message, e.StackTrace); | 1524 | e.Message, e.StackTrace); |
1525 | } | 1525 | } |
1526 | } | 1526 | } |
1527 | } | 1527 | } |
1528 | } | 1528 | } |
1529 | 1529 | ||
1530 | public void TriggerOnChatBroadcast(Object sender, OSChatMessage chat) | 1530 | public void TriggerOnChatBroadcast(Object sender, OSChatMessage chat) |
@@ -1545,7 +1545,7 @@ namespace OpenSim.Region.Framework.Scenes | |||
1545 | e.Message, e.StackTrace); | 1545 | e.Message, e.StackTrace); |
1546 | } | 1546 | } |
1547 | } | 1547 | } |
1548 | } | 1548 | } |
1549 | } | 1549 | } |
1550 | 1550 | ||
1551 | internal void TriggerControlEvent(uint p, UUID scriptUUID, UUID avatarID, uint held, uint _changed) | 1551 | internal void TriggerControlEvent(uint p, UUID scriptUUID, UUID avatarID, uint held, uint _changed) |
@@ -1566,7 +1566,7 @@ namespace OpenSim.Region.Framework.Scenes | |||
1566 | e.Message, e.StackTrace); | 1566 | e.Message, e.StackTrace); |
1567 | } | 1567 | } |
1568 | } | 1568 | } |
1569 | } | 1569 | } |
1570 | } | 1570 | } |
1571 | 1571 | ||
1572 | public void TriggerNoticeNoLandDataFromStorage() | 1572 | public void TriggerNoticeNoLandDataFromStorage() |
@@ -1587,7 +1587,7 @@ namespace OpenSim.Region.Framework.Scenes | |||
1587 | e.Message, e.StackTrace); | 1587 | e.Message, e.StackTrace); |
1588 | } | 1588 | } |
1589 | } | 1589 | } |
1590 | } | 1590 | } |
1591 | } | 1591 | } |
1592 | 1592 | ||
1593 | public void TriggerIncomingLandDataFromStorage(List<LandData> landData) | 1593 | public void TriggerIncomingLandDataFromStorage(List<LandData> landData) |
@@ -1608,7 +1608,7 @@ namespace OpenSim.Region.Framework.Scenes | |||
1608 | e.Message, e.StackTrace); | 1608 | e.Message, e.StackTrace); |
1609 | } | 1609 | } |
1610 | } | 1610 | } |
1611 | } | 1611 | } |
1612 | } | 1612 | } |
1613 | 1613 | ||
1614 | public void TriggerSetAllowForcefulBan(bool allow) | 1614 | public void TriggerSetAllowForcefulBan(bool allow) |
@@ -1629,7 +1629,7 @@ namespace OpenSim.Region.Framework.Scenes | |||
1629 | e.Message, e.StackTrace); | 1629 | e.Message, e.StackTrace); |
1630 | } | 1630 | } |
1631 | } | 1631 | } |
1632 | } | 1632 | } |
1633 | } | 1633 | } |
1634 | 1634 | ||
1635 | public void TriggerRequestParcelPrimCountUpdate() | 1635 | public void TriggerRequestParcelPrimCountUpdate() |
@@ -1650,7 +1650,7 @@ namespace OpenSim.Region.Framework.Scenes | |||
1650 | e.Message, e.StackTrace); | 1650 | e.Message, e.StackTrace); |
1651 | } | 1651 | } |
1652 | } | 1652 | } |
1653 | } | 1653 | } |
1654 | } | 1654 | } |
1655 | 1655 | ||
1656 | public void TriggerParcelPrimCountTainted() | 1656 | public void TriggerParcelPrimCountTainted() |
@@ -1671,7 +1671,7 @@ namespace OpenSim.Region.Framework.Scenes | |||
1671 | e.Message, e.StackTrace); | 1671 | e.Message, e.StackTrace); |
1672 | } | 1672 | } |
1673 | } | 1673 | } |
1674 | } | 1674 | } |
1675 | } | 1675 | } |
1676 | 1676 | ||
1677 | // this lets us keep track of nasty script events like timer, etc. | 1677 | // this lets us keep track of nasty script events like timer, etc. |
@@ -1710,7 +1710,7 @@ namespace OpenSim.Region.Framework.Scenes | |||
1710 | e.Message, e.StackTrace); | 1710 | e.Message, e.StackTrace); |
1711 | } | 1711 | } |
1712 | } | 1712 | } |
1713 | } | 1713 | } |
1714 | } | 1714 | } |
1715 | 1715 | ||
1716 | public float GetCurrentTimeAsSunLindenHour() | 1716 | public float GetCurrentTimeAsSunLindenHour() |
@@ -1737,7 +1737,7 @@ namespace OpenSim.Region.Framework.Scenes | |||
1737 | } | 1737 | } |
1738 | 1738 | ||
1739 | public void TriggerOarFileLoaded(Guid requestId, string message) | 1739 | public void TriggerOarFileLoaded(Guid requestId, string message) |
1740 | { | 1740 | { |
1741 | OarFileLoaded handlerOarFileLoaded = OnOarFileLoaded; | 1741 | OarFileLoaded handlerOarFileLoaded = OnOarFileLoaded; |
1742 | if (handlerOarFileLoaded != null) | 1742 | if (handlerOarFileLoaded != null) |
1743 | { | 1743 | { |
@@ -1754,7 +1754,7 @@ namespace OpenSim.Region.Framework.Scenes | |||
1754 | e.Message, e.StackTrace); | 1754 | e.Message, e.StackTrace); |
1755 | } | 1755 | } |
1756 | } | 1756 | } |
1757 | } | 1757 | } |
1758 | } | 1758 | } |
1759 | 1759 | ||
1760 | public void TriggerOarFileSaved(Guid requestId, string message) | 1760 | public void TriggerOarFileSaved(Guid requestId, string message) |
@@ -1775,7 +1775,7 @@ namespace OpenSim.Region.Framework.Scenes | |||
1775 | e.Message, e.StackTrace); | 1775 | e.Message, e.StackTrace); |
1776 | } | 1776 | } |
1777 | } | 1777 | } |
1778 | } | 1778 | } |
1779 | } | 1779 | } |
1780 | 1780 | ||
1781 | public void TriggerEmptyScriptCompileQueue(int numScriptsFailed, string message) | 1781 | public void TriggerEmptyScriptCompileQueue(int numScriptsFailed, string message) |
@@ -1796,7 +1796,7 @@ namespace OpenSim.Region.Framework.Scenes | |||
1796 | e.Message, e.StackTrace); | 1796 | e.Message, e.StackTrace); |
1797 | } | 1797 | } |
1798 | } | 1798 | } |
1799 | } | 1799 | } |
1800 | } | 1800 | } |
1801 | 1801 | ||
1802 | public void TriggerScriptCollidingStart(uint localId, ColliderArgs colliders) | 1802 | public void TriggerScriptCollidingStart(uint localId, ColliderArgs colliders) |
@@ -1817,7 +1817,7 @@ namespace OpenSim.Region.Framework.Scenes | |||
1817 | e.Message, e.StackTrace); | 1817 | e.Message, e.StackTrace); |
1818 | } | 1818 | } |
1819 | } | 1819 | } |
1820 | } | 1820 | } |
1821 | } | 1821 | } |
1822 | 1822 | ||
1823 | public void TriggerScriptColliding(uint localId, ColliderArgs colliders) | 1823 | public void TriggerScriptColliding(uint localId, ColliderArgs colliders) |
@@ -1838,7 +1838,7 @@ namespace OpenSim.Region.Framework.Scenes | |||
1838 | e.Message, e.StackTrace); | 1838 | e.Message, e.StackTrace); |
1839 | } | 1839 | } |
1840 | } | 1840 | } |
1841 | } | 1841 | } |
1842 | } | 1842 | } |
1843 | 1843 | ||
1844 | public void TriggerScriptCollidingEnd(uint localId, ColliderArgs colliders) | 1844 | public void TriggerScriptCollidingEnd(uint localId, ColliderArgs colliders) |
@@ -1859,7 +1859,7 @@ namespace OpenSim.Region.Framework.Scenes | |||
1859 | e.Message, e.StackTrace); | 1859 | e.Message, e.StackTrace); |
1860 | } | 1860 | } |
1861 | } | 1861 | } |
1862 | } | 1862 | } |
1863 | } | 1863 | } |
1864 | 1864 | ||
1865 | public void TriggerScriptLandCollidingStart(uint localId, ColliderArgs colliders) | 1865 | public void TriggerScriptLandCollidingStart(uint localId, ColliderArgs colliders) |
@@ -1880,7 +1880,7 @@ namespace OpenSim.Region.Framework.Scenes | |||
1880 | e.Message, e.StackTrace); | 1880 | e.Message, e.StackTrace); |
1881 | } | 1881 | } |
1882 | } | 1882 | } |
1883 | } | 1883 | } |
1884 | } | 1884 | } |
1885 | 1885 | ||
1886 | public void TriggerScriptLandColliding(uint localId, ColliderArgs colliders) | 1886 | public void TriggerScriptLandColliding(uint localId, ColliderArgs colliders) |
@@ -1901,7 +1901,7 @@ namespace OpenSim.Region.Framework.Scenes | |||
1901 | e.Message, e.StackTrace); | 1901 | e.Message, e.StackTrace); |
1902 | } | 1902 | } |
1903 | } | 1903 | } |
1904 | } | 1904 | } |
1905 | } | 1905 | } |
1906 | 1906 | ||
1907 | public void TriggerScriptLandCollidingEnd(uint localId, ColliderArgs colliders) | 1907 | public void TriggerScriptLandCollidingEnd(uint localId, ColliderArgs colliders) |
@@ -1922,11 +1922,11 @@ namespace OpenSim.Region.Framework.Scenes | |||
1922 | e.Message, e.StackTrace); | 1922 | e.Message, e.StackTrace); |
1923 | } | 1923 | } |
1924 | } | 1924 | } |
1925 | } | 1925 | } |
1926 | } | 1926 | } |
1927 | 1927 | ||
1928 | public void TriggerSetRootAgentScene(UUID agentID, Scene scene) | 1928 | public void TriggerSetRootAgentScene(UUID agentID, Scene scene) |
1929 | { | 1929 | { |
1930 | OnSetRootAgentSceneDelegate handlerSetRootAgentScene = OnSetRootAgentScene; | 1930 | OnSetRootAgentSceneDelegate handlerSetRootAgentScene = OnSetRootAgentScene; |
1931 | if (handlerSetRootAgentScene != null) | 1931 | if (handlerSetRootAgentScene != null) |
1932 | { | 1932 | { |
@@ -1943,7 +1943,7 @@ namespace OpenSim.Region.Framework.Scenes | |||
1943 | e.Message, e.StackTrace); | 1943 | e.Message, e.StackTrace); |
1944 | } | 1944 | } |
1945 | } | 1945 | } |
1946 | } | 1946 | } |
1947 | } | 1947 | } |
1948 | 1948 | ||
1949 | public void TriggerOnRegionUp(GridRegion otherRegion) | 1949 | public void TriggerOnRegionUp(GridRegion otherRegion) |
@@ -1964,7 +1964,7 @@ namespace OpenSim.Region.Framework.Scenes | |||
1964 | e.Message, e.StackTrace); | 1964 | e.Message, e.StackTrace); |
1965 | } | 1965 | } |
1966 | } | 1966 | } |
1967 | } | 1967 | } |
1968 | } | 1968 | } |
1969 | } | 1969 | } |
1970 | } \ No newline at end of file | 1970 | } \ No newline at end of file |
diff --git a/OpenSim/Region/Framework/Scenes/Scene.Inventory.cs b/OpenSim/Region/Framework/Scenes/Scene.Inventory.cs index 7df3e50..c6cee75 100644 --- a/OpenSim/Region/Framework/Scenes/Scene.Inventory.cs +++ b/OpenSim/Region/Framework/Scenes/Scene.Inventory.cs | |||
@@ -585,6 +585,9 @@ namespace OpenSim.Region.Framework.Scenes | |||
585 | m_log.Error("[AGENT INVENTORY]: Failed to find item " + oldItemID.ToString()); | 585 | m_log.Error("[AGENT INVENTORY]: Failed to find item " + oldItemID.ToString()); |
586 | return; | 586 | return; |
587 | } | 587 | } |
588 | |||
589 | if ((item.CurrentPermissions & (uint)PermissionMask.Copy) == 0) | ||
590 | return; | ||
588 | } | 591 | } |
589 | 592 | ||
590 | AssetBase asset = AssetService.Get(item.AssetID.ToString()); | 593 | AssetBase asset = AssetService.Get(item.AssetID.ToString()); |
diff --git a/OpenSim/Region/Framework/Scenes/Scene.cs b/OpenSim/Region/Framework/Scenes/Scene.cs index 2909311..41fd1e1 100644 --- a/OpenSim/Region/Framework/Scenes/Scene.cs +++ b/OpenSim/Region/Framework/Scenes/Scene.cs | |||
@@ -1976,6 +1976,23 @@ namespace OpenSim.Region.Framework.Scenes | |||
1976 | return; | 1976 | return; |
1977 | } | 1977 | } |
1978 | 1978 | ||
1979 | if (grp.RootPart.RETURN_AT_EDGE) | ||
1980 | { | ||
1981 | // We remove the object here | ||
1982 | try | ||
1983 | { | ||
1984 | List<SceneObjectGroup> objects = new List<SceneObjectGroup>(); | ||
1985 | objects.Add(grp); | ||
1986 | SceneObjectGroup[] objectsArray = objects.ToArray(); | ||
1987 | returnObjects(objectsArray, UUID.Zero); | ||
1988 | } | ||
1989 | catch (Exception) | ||
1990 | { | ||
1991 | m_log.Warn("[DATABASE]: exception when trying to return the prim that crossed the border."); | ||
1992 | } | ||
1993 | return; | ||
1994 | } | ||
1995 | |||
1979 | int thisx = (int)RegionInfo.RegionLocX; | 1996 | int thisx = (int)RegionInfo.RegionLocX; |
1980 | int thisy = (int)RegionInfo.RegionLocY; | 1997 | int thisy = (int)RegionInfo.RegionLocY; |
1981 | Vector3 EastCross = new Vector3(0.1f,0,0); | 1998 | Vector3 EastCross = new Vector3(0.1f,0,0); |
@@ -2044,19 +2061,25 @@ namespace OpenSim.Region.Framework.Scenes | |||
2044 | Border crossedBordery = GetCrossedBorder(attemptedPosition + SouthCross, Cardinals.S); | 2061 | Border crossedBordery = GetCrossedBorder(attemptedPosition + SouthCross, Cardinals.S); |
2045 | //(crossedBorderx.BorderLine.Z / (int)Constants.RegionSize) | 2062 | //(crossedBorderx.BorderLine.Z / (int)Constants.RegionSize) |
2046 | 2063 | ||
2047 | if (crossedBordery.BorderLine.Z > 0) | 2064 | try |
2048 | { | 2065 | { |
2049 | pos.Y = ((pos.Y + crossedBordery.BorderLine.Z)); | 2066 | if (crossedBordery.BorderLine.Z > 0) |
2050 | changeY = (int)(crossedBordery.BorderLine.Z / (int)Constants.RegionSize); | 2067 | { |
2051 | } | 2068 | pos.Y = ((pos.Y + crossedBordery.BorderLine.Z)); |
2052 | else | 2069 | changeY = (int)(crossedBordery.BorderLine.Z / (int)Constants.RegionSize); |
2053 | pos.Y = ((pos.Y + Constants.RegionSize)); | 2070 | } |
2071 | else | ||
2072 | pos.Y = ((pos.Y + Constants.RegionSize)); | ||
2054 | 2073 | ||
2055 | newRegionHandle | 2074 | newRegionHandle |
2056 | = Util.UIntsToLong((uint)((thisx - changeX) * Constants.RegionSize), | 2075 | = Util.UIntsToLong((uint)((thisx - changeX) * Constants.RegionSize), |
2057 | (uint)((thisy + changeY) * Constants.RegionSize)); | 2076 | (uint)((thisy + changeY) * Constants.RegionSize)); |
2058 | // x - 1 | 2077 | // x - 1 |
2059 | // y + 1 | 2078 | // y + 1 |
2079 | } | ||
2080 | catch (Exception ex) | ||
2081 | { | ||
2082 | } | ||
2060 | } | 2083 | } |
2061 | else | 2084 | else |
2062 | { | 2085 | { |
@@ -2518,7 +2541,7 @@ namespace OpenSim.Region.Framework.Scenes | |||
2518 | AttachObject( | 2541 | AttachObject( |
2519 | sp.ControllingClient, grp.LocalId, (uint)0, grp.GroupRotation, grp.AbsolutePosition, false); | 2542 | sp.ControllingClient, grp.LocalId, (uint)0, grp.GroupRotation, grp.AbsolutePosition, false); |
2520 | RootPrim.RemFlag(PrimFlags.TemporaryOnRez); | 2543 | RootPrim.RemFlag(PrimFlags.TemporaryOnRez); |
2521 | grp.SendGroupFullUpdate(); | 2544 | grp.SendGroupFullUpdate(); |
2522 | } | 2545 | } |
2523 | else | 2546 | else |
2524 | { | 2547 | { |
@@ -2684,6 +2707,7 @@ namespace OpenSim.Region.Framework.Scenes | |||
2684 | client.OnGrabUpdate += ProcessObjectGrabUpdate; | 2707 | client.OnGrabUpdate += ProcessObjectGrabUpdate; |
2685 | client.OnDeGrabObject += ProcessObjectDeGrab; | 2708 | client.OnDeGrabObject += ProcessObjectDeGrab; |
2686 | client.OnUndo += m_sceneGraph.HandleUndo; | 2709 | client.OnUndo += m_sceneGraph.HandleUndo; |
2710 | client.OnRedo += m_sceneGraph.HandleRedo; | ||
2687 | client.OnObjectDescription += m_sceneGraph.PrimDescription; | 2711 | client.OnObjectDescription += m_sceneGraph.PrimDescription; |
2688 | client.OnObjectDrop += m_sceneGraph.DropObject; | 2712 | client.OnObjectDrop += m_sceneGraph.DropObject; |
2689 | client.OnObjectSaleInfo += ObjectSaleInfo; | 2713 | client.OnObjectSaleInfo += ObjectSaleInfo; |
@@ -2838,6 +2862,7 @@ namespace OpenSim.Region.Framework.Scenes | |||
2838 | client.OnGrabObject -= ProcessObjectGrab; | 2862 | client.OnGrabObject -= ProcessObjectGrab; |
2839 | client.OnDeGrabObject -= ProcessObjectDeGrab; | 2863 | client.OnDeGrabObject -= ProcessObjectDeGrab; |
2840 | client.OnUndo -= m_sceneGraph.HandleUndo; | 2864 | client.OnUndo -= m_sceneGraph.HandleUndo; |
2865 | client.OnRedo -= m_sceneGraph.HandleRedo; | ||
2841 | client.OnObjectDescription -= m_sceneGraph.PrimDescription; | 2866 | client.OnObjectDescription -= m_sceneGraph.PrimDescription; |
2842 | client.OnObjectDrop -= m_sceneGraph.DropObject; | 2867 | client.OnObjectDrop -= m_sceneGraph.DropObject; |
2843 | client.OnObjectSaleInfo -= ObjectSaleInfo; | 2868 | client.OnObjectSaleInfo -= ObjectSaleInfo; |
diff --git a/OpenSim/Region/Framework/Scenes/SceneGraph.cs b/OpenSim/Region/Framework/Scenes/SceneGraph.cs index 1ac061a..321cc45 100644 --- a/OpenSim/Region/Framework/Scenes/SceneGraph.cs +++ b/OpenSim/Region/Framework/Scenes/SceneGraph.cs | |||
@@ -452,6 +452,15 @@ namespace OpenSim.Region.Framework.Scenes | |||
452 | part.Undo(); | 452 | part.Undo(); |
453 | } | 453 | } |
454 | } | 454 | } |
455 | protected internal void HandleRedo(IClientAPI remoteClient, UUID primId) | ||
456 | { | ||
457 | if (primId != UUID.Zero) | ||
458 | { | ||
459 | SceneObjectPart part = m_parentScene.GetSceneObjectPart(primId); | ||
460 | if (part != null) | ||
461 | part.Redo(); | ||
462 | } | ||
463 | } | ||
455 | 464 | ||
456 | protected internal void HandleObjectGroupUpdate( | 465 | protected internal void HandleObjectGroupUpdate( |
457 | IClientAPI remoteClient, UUID GroupID, uint objectLocalID, UUID Garbage) | 466 | IClientAPI remoteClient, UUID GroupID, uint objectLocalID, UUID Garbage) |
@@ -633,7 +642,7 @@ namespace OpenSim.Region.Framework.Scenes | |||
633 | // it get cleaned up | 642 | // it get cleaned up |
634 | // | 643 | // |
635 | group.RootPart.RemFlag(PrimFlags.TemporaryOnRez); | 644 | group.RootPart.RemFlag(PrimFlags.TemporaryOnRez); |
636 | group.HasGroupChanged = false; | 645 | group.HasGroupChanged = false; |
637 | } | 646 | } |
638 | else | 647 | else |
639 | { | 648 | { |
diff --git a/OpenSim/Region/Framework/Scenes/SceneObjectGroup.cs b/OpenSim/Region/Framework/Scenes/SceneObjectGroup.cs index 94e64e4..6357192 100644 --- a/OpenSim/Region/Framework/Scenes/SceneObjectGroup.cs +++ b/OpenSim/Region/Framework/Scenes/SceneObjectGroup.cs | |||
@@ -298,7 +298,16 @@ namespace OpenSim.Region.Framework.Scenes | |||
298 | { | 298 | { |
299 | m_scene.CrossPrimGroupIntoNewRegion(val, this, true); | 299 | m_scene.CrossPrimGroupIntoNewRegion(val, this, true); |
300 | } | 300 | } |
301 | 301 | if (RootPart.GetStatusSandbox()) | |
302 | { | ||
303 | if (Util.GetDistanceTo(RootPart.StatusSandboxPos, value) > 10) | ||
304 | { | ||
305 | RootPart.ScriptSetPhysicsStatus(false); | ||
306 | Scene.SimChat(Utils.StringToBytes("Hit Sandbox Limit"), | ||
307 | ChatTypeEnum.DebugChannel, 0x7FFFFFFF, RootPart.AbsolutePosition, Name, UUID, false); | ||
308 | return; | ||
309 | } | ||
310 | } | ||
302 | lock (m_parts) | 311 | lock (m_parts) |
303 | { | 312 | { |
304 | foreach (SceneObjectPart part in m_parts.Values) | 313 | foreach (SceneObjectPart part in m_parts.Values) |
@@ -398,6 +407,34 @@ namespace OpenSim.Region.Framework.Scenes | |||
398 | } | 407 | } |
399 | } | 408 | } |
400 | 409 | ||
410 | private SceneObjectPart m_PlaySoundMasterPrim = null; | ||
411 | public SceneObjectPart PlaySoundMasterPrim | ||
412 | { | ||
413 | get { return m_PlaySoundMasterPrim; } | ||
414 | set { m_PlaySoundMasterPrim = value; } | ||
415 | } | ||
416 | |||
417 | private List<SceneObjectPart> m_PlaySoundSlavePrims = new List<SceneObjectPart>(); | ||
418 | public List<SceneObjectPart> PlaySoundSlavePrims | ||
419 | { | ||
420 | get { return m_LoopSoundSlavePrims; } | ||
421 | set { m_LoopSoundSlavePrims = value; } | ||
422 | } | ||
423 | |||
424 | private SceneObjectPart m_LoopSoundMasterPrim = null; | ||
425 | public SceneObjectPart LoopSoundMasterPrim | ||
426 | { | ||
427 | get { return m_LoopSoundMasterPrim; } | ||
428 | set { m_LoopSoundMasterPrim = value; } | ||
429 | } | ||
430 | |||
431 | private List<SceneObjectPart> m_LoopSoundSlavePrims = new List<SceneObjectPart>(); | ||
432 | public List<SceneObjectPart> LoopSoundSlavePrims | ||
433 | { | ||
434 | get { return m_LoopSoundSlavePrims; } | ||
435 | set { m_LoopSoundSlavePrims = value; } | ||
436 | } | ||
437 | |||
401 | // The UUID for the Region this Object is in. | 438 | // The UUID for the Region this Object is in. |
402 | public UUID RegionUUID | 439 | public UUID RegionUUID |
403 | { | 440 | { |
@@ -1782,32 +1819,6 @@ namespace OpenSim.Region.Framework.Scenes | |||
1782 | } | 1819 | } |
1783 | } | 1820 | } |
1784 | 1821 | ||
1785 | public void rotLookAt(Quaternion target, float strength, float damping) | ||
1786 | { | ||
1787 | SceneObjectPart rootpart = m_rootPart; | ||
1788 | if (rootpart != null) | ||
1789 | { | ||
1790 | if (IsAttachment) | ||
1791 | { | ||
1792 | /* | ||
1793 | ScenePresence avatar = m_scene.GetScenePresence(rootpart.AttachedAvatar); | ||
1794 | if (avatar != null) | ||
1795 | { | ||
1796 | Rotate the Av? | ||
1797 | } */ | ||
1798 | } | ||
1799 | else | ||
1800 | { | ||
1801 | if (rootpart.PhysActor != null) | ||
1802 | { | ||
1803 | rootpart.PhysActor.APIDTarget = new Quaternion(target.X, target.Y, target.Z, target.W); | ||
1804 | rootpart.PhysActor.APIDStrength = strength; | ||
1805 | rootpart.PhysActor.APIDDamping = damping; | ||
1806 | rootpart.PhysActor.APIDActive = true; | ||
1807 | } | ||
1808 | } | ||
1809 | } | ||
1810 | } | ||
1811 | public void stopLookAt() | 1822 | public void stopLookAt() |
1812 | { | 1823 | { |
1813 | SceneObjectPart rootpart = m_rootPart; | 1824 | SceneObjectPart rootpart = m_rootPart; |
@@ -1966,6 +1977,8 @@ namespace OpenSim.Region.Framework.Scenes | |||
1966 | 1977 | ||
1967 | foreach (SceneObjectPart part in m_parts.Values) | 1978 | foreach (SceneObjectPart part in m_parts.Values) |
1968 | { | 1979 | { |
1980 | if (!IsSelected) | ||
1981 | part.UpdateLookAt(); | ||
1969 | part.SendScheduledUpdates(); | 1982 | part.SendScheduledUpdates(); |
1970 | } | 1983 | } |
1971 | } | 1984 | } |
@@ -2467,11 +2480,14 @@ namespace OpenSim.Region.Framework.Scenes | |||
2467 | { | 2480 | { |
2468 | if (m_rootPart.PhysActor.IsPhysical) | 2481 | if (m_rootPart.PhysActor.IsPhysical) |
2469 | { | 2482 | { |
2470 | Vector3 llmoveforce = pos - AbsolutePosition; | 2483 | if (!m_rootPart.BlockGrab) |
2471 | Vector3 grabforce = llmoveforce; | 2484 | { |
2472 | grabforce = (grabforce / 10) * m_rootPart.PhysActor.Mass; | 2485 | Vector3 llmoveforce = pos - AbsolutePosition; |
2473 | m_rootPart.PhysActor.AddForce(grabforce,true); | 2486 | Vector3 grabforce = llmoveforce; |
2474 | m_scene.PhysicsScene.AddPhysicsActorTaint(m_rootPart.PhysActor); | 2487 | grabforce = (grabforce / 10) * m_rootPart.PhysActor.Mass; |
2488 | m_rootPart.PhysActor.AddForce(grabforce, true); | ||
2489 | m_scene.PhysicsScene.AddPhysicsActorTaint(m_rootPart.PhysActor); | ||
2490 | } | ||
2475 | } | 2491 | } |
2476 | else | 2492 | else |
2477 | { | 2493 | { |
@@ -2827,6 +2843,7 @@ namespace OpenSim.Region.Framework.Scenes | |||
2827 | SceneObjectPart part = GetChildPart(localID); | 2843 | SceneObjectPart part = GetChildPart(localID); |
2828 | if (part != null) | 2844 | if (part != null) |
2829 | { | 2845 | { |
2846 | part.IgnoreUndoUpdate = true; | ||
2830 | if (scale.X > m_scene.m_maxNonphys) | 2847 | if (scale.X > m_scene.m_maxNonphys) |
2831 | scale.X = m_scene.m_maxNonphys; | 2848 | scale.X = m_scene.m_maxNonphys; |
2832 | if (scale.Y > m_scene.m_maxNonphys) | 2849 | if (scale.Y > m_scene.m_maxNonphys) |
@@ -2854,6 +2871,7 @@ namespace OpenSim.Region.Framework.Scenes | |||
2854 | { | 2871 | { |
2855 | if (obPart.UUID != m_rootPart.UUID) | 2872 | if (obPart.UUID != m_rootPart.UUID) |
2856 | { | 2873 | { |
2874 | obPart.IgnoreUndoUpdate = true; | ||
2857 | Vector3 oldSize = new Vector3(obPart.Scale); | 2875 | Vector3 oldSize = new Vector3(obPart.Scale); |
2858 | 2876 | ||
2859 | float f = 1.0f; | 2877 | float f = 1.0f; |
@@ -2913,6 +2931,8 @@ namespace OpenSim.Region.Framework.Scenes | |||
2913 | z *= a; | 2931 | z *= a; |
2914 | } | 2932 | } |
2915 | } | 2933 | } |
2934 | obPart.IgnoreUndoUpdate = false; | ||
2935 | obPart.StoreUndoState(); | ||
2916 | } | 2936 | } |
2917 | } | 2937 | } |
2918 | } | 2938 | } |
@@ -2928,6 +2948,7 @@ namespace OpenSim.Region.Framework.Scenes | |||
2928 | { | 2948 | { |
2929 | foreach (SceneObjectPart obPart in m_parts.Values) | 2949 | foreach (SceneObjectPart obPart in m_parts.Values) |
2930 | { | 2950 | { |
2951 | obPart.IgnoreUndoUpdate = true; | ||
2931 | if (obPart.UUID != m_rootPart.UUID) | 2952 | if (obPart.UUID != m_rootPart.UUID) |
2932 | { | 2953 | { |
2933 | Vector3 currentpos = new Vector3(obPart.OffsetPosition); | 2954 | Vector3 currentpos = new Vector3(obPart.OffsetPosition); |
@@ -2941,6 +2962,8 @@ namespace OpenSim.Region.Framework.Scenes | |||
2941 | obPart.Resize(newSize); | 2962 | obPart.Resize(newSize); |
2942 | obPart.UpdateOffSet(currentpos); | 2963 | obPart.UpdateOffSet(currentpos); |
2943 | } | 2964 | } |
2965 | obPart.IgnoreUndoUpdate = false; | ||
2966 | obPart.StoreUndoState(); | ||
2944 | } | 2967 | } |
2945 | } | 2968 | } |
2946 | 2969 | ||
@@ -2950,6 +2973,8 @@ namespace OpenSim.Region.Framework.Scenes | |||
2950 | m_scene.PhysicsScene.AddPhysicsActorTaint(part.PhysActor); | 2973 | m_scene.PhysicsScene.AddPhysicsActorTaint(part.PhysActor); |
2951 | } | 2974 | } |
2952 | 2975 | ||
2976 | part.IgnoreUndoUpdate = false; | ||
2977 | part.StoreUndoState(); | ||
2953 | HasGroupChanged = true; | 2978 | HasGroupChanged = true; |
2954 | ScheduleGroupForTerseUpdate(); | 2979 | ScheduleGroupForTerseUpdate(); |
2955 | } | 2980 | } |
@@ -2965,13 +2990,26 @@ namespace OpenSim.Region.Framework.Scenes | |||
2965 | /// <param name="pos"></param> | 2990 | /// <param name="pos"></param> |
2966 | public void UpdateGroupPosition(Vector3 pos) | 2991 | public void UpdateGroupPosition(Vector3 pos) |
2967 | { | 2992 | { |
2993 | foreach (SceneObjectPart part in Children.Values) | ||
2994 | { | ||
2995 | part.StoreUndoState(); | ||
2996 | } | ||
2968 | if (m_scene.EventManager.TriggerGroupMove(UUID, pos)) | 2997 | if (m_scene.EventManager.TriggerGroupMove(UUID, pos)) |
2969 | { | 2998 | { |
2970 | if (IsAttachment) | 2999 | if (IsAttachment) |
2971 | { | 3000 | { |
2972 | m_rootPart.AttachedPos = pos; | 3001 | m_rootPart.AttachedPos = pos; |
2973 | } | 3002 | } |
2974 | 3003 | if (RootPart.GetStatusSandbox()) | |
3004 | { | ||
3005 | if (Util.GetDistanceTo(RootPart.StatusSandboxPos, pos) > 10) | ||
3006 | { | ||
3007 | RootPart.ScriptSetPhysicsStatus(false); | ||
3008 | pos = AbsolutePosition; | ||
3009 | Scene.SimChat(Utils.StringToBytes("Hit Sandbox Limit"), | ||
3010 | ChatTypeEnum.DebugChannel, 0x7FFFFFFF, RootPart.AbsolutePosition, Name, UUID, false); | ||
3011 | } | ||
3012 | } | ||
2975 | AbsolutePosition = pos; | 3013 | AbsolutePosition = pos; |
2976 | 3014 | ||
2977 | HasGroupChanged = true; | 3015 | HasGroupChanged = true; |
@@ -2990,7 +3028,10 @@ namespace OpenSim.Region.Framework.Scenes | |||
2990 | public void UpdateSinglePosition(Vector3 pos, uint localID) | 3028 | public void UpdateSinglePosition(Vector3 pos, uint localID) |
2991 | { | 3029 | { |
2992 | SceneObjectPart part = GetChildPart(localID); | 3030 | SceneObjectPart part = GetChildPart(localID); |
2993 | 3031 | foreach (SceneObjectPart parts in Children.Values) | |
3032 | { | ||
3033 | parts.StoreUndoState(); | ||
3034 | } | ||
2994 | if (part != null) | 3035 | if (part != null) |
2995 | { | 3036 | { |
2996 | if (part.UUID == m_rootPart.UUID) | 3037 | if (part.UUID == m_rootPart.UUID) |
@@ -3012,6 +3053,10 @@ namespace OpenSim.Region.Framework.Scenes | |||
3012 | /// <param name="pos"></param> | 3053 | /// <param name="pos"></param> |
3013 | private void UpdateRootPosition(Vector3 pos) | 3054 | private void UpdateRootPosition(Vector3 pos) |
3014 | { | 3055 | { |
3056 | foreach (SceneObjectPart part in Children.Values) | ||
3057 | { | ||
3058 | part.StoreUndoState(); | ||
3059 | } | ||
3015 | Vector3 newPos = new Vector3(pos.X, pos.Y, pos.Z); | 3060 | Vector3 newPos = new Vector3(pos.X, pos.Y, pos.Z); |
3016 | Vector3 oldPos = | 3061 | Vector3 oldPos = |
3017 | new Vector3(AbsolutePosition.X + m_rootPart.OffsetPosition.X, | 3062 | new Vector3(AbsolutePosition.X + m_rootPart.OffsetPosition.X, |
@@ -3055,6 +3100,10 @@ namespace OpenSim.Region.Framework.Scenes | |||
3055 | /// <param name="rot"></param> | 3100 | /// <param name="rot"></param> |
3056 | public void UpdateGroupRotationR(Quaternion rot) | 3101 | public void UpdateGroupRotationR(Quaternion rot) |
3057 | { | 3102 | { |
3103 | foreach (SceneObjectPart parts in Children.Values) | ||
3104 | { | ||
3105 | parts.StoreUndoState(); | ||
3106 | } | ||
3058 | m_rootPart.UpdateRotation(rot); | 3107 | m_rootPart.UpdateRotation(rot); |
3059 | 3108 | ||
3060 | PhysicsActor actor = m_rootPart.PhysActor; | 3109 | PhysicsActor actor = m_rootPart.PhysActor; |
@@ -3075,6 +3124,10 @@ namespace OpenSim.Region.Framework.Scenes | |||
3075 | /// <param name="rot"></param> | 3124 | /// <param name="rot"></param> |
3076 | public void UpdateGroupRotationPR(Vector3 pos, Quaternion rot) | 3125 | public void UpdateGroupRotationPR(Vector3 pos, Quaternion rot) |
3077 | { | 3126 | { |
3127 | foreach (SceneObjectPart parts in Children.Values) | ||
3128 | { | ||
3129 | parts.StoreUndoState(); | ||
3130 | } | ||
3078 | m_rootPart.UpdateRotation(rot); | 3131 | m_rootPart.UpdateRotation(rot); |
3079 | 3132 | ||
3080 | PhysicsActor actor = m_rootPart.PhysActor; | 3133 | PhysicsActor actor = m_rootPart.PhysActor; |
@@ -3098,6 +3151,10 @@ namespace OpenSim.Region.Framework.Scenes | |||
3098 | public void UpdateSingleRotation(Quaternion rot, uint localID) | 3151 | public void UpdateSingleRotation(Quaternion rot, uint localID) |
3099 | { | 3152 | { |
3100 | SceneObjectPart part = GetChildPart(localID); | 3153 | SceneObjectPart part = GetChildPart(localID); |
3154 | foreach (SceneObjectPart parts in Children.Values) | ||
3155 | { | ||
3156 | parts.StoreUndoState(); | ||
3157 | } | ||
3101 | if (part != null) | 3158 | if (part != null) |
3102 | { | 3159 | { |
3103 | if (part.UUID == m_rootPart.UUID) | 3160 | if (part.UUID == m_rootPart.UUID) |
@@ -3128,8 +3185,11 @@ namespace OpenSim.Region.Framework.Scenes | |||
3128 | } | 3185 | } |
3129 | else | 3186 | else |
3130 | { | 3187 | { |
3188 | part.IgnoreUndoUpdate = true; | ||
3131 | part.UpdateRotation(rot); | 3189 | part.UpdateRotation(rot); |
3132 | part.OffsetPosition = pos; | 3190 | part.OffsetPosition = pos; |
3191 | part.IgnoreUndoUpdate = false; | ||
3192 | part.StoreUndoState(); | ||
3133 | } | 3193 | } |
3134 | } | 3194 | } |
3135 | } | 3195 | } |
@@ -3143,6 +3203,7 @@ namespace OpenSim.Region.Framework.Scenes | |||
3143 | Quaternion axRot = rot; | 3203 | Quaternion axRot = rot; |
3144 | Quaternion oldParentRot = m_rootPart.RotationOffset; | 3204 | Quaternion oldParentRot = m_rootPart.RotationOffset; |
3145 | 3205 | ||
3206 | m_rootPart.StoreUndoState(); | ||
3146 | m_rootPart.UpdateRotation(rot); | 3207 | m_rootPart.UpdateRotation(rot); |
3147 | if (m_rootPart.PhysActor != null) | 3208 | if (m_rootPart.PhysActor != null) |
3148 | { | 3209 | { |
@@ -3156,6 +3217,7 @@ namespace OpenSim.Region.Framework.Scenes | |||
3156 | { | 3217 | { |
3157 | if (prim.UUID != m_rootPart.UUID) | 3218 | if (prim.UUID != m_rootPart.UUID) |
3158 | { | 3219 | { |
3220 | prim.IgnoreUndoUpdate = true; | ||
3159 | Vector3 axPos = prim.OffsetPosition; | 3221 | Vector3 axPos = prim.OffsetPosition; |
3160 | axPos *= oldParentRot; | 3222 | axPos *= oldParentRot; |
3161 | axPos *= Quaternion.Inverse(axRot); | 3223 | axPos *= Quaternion.Inverse(axRot); |
@@ -3168,7 +3230,14 @@ namespace OpenSim.Region.Framework.Scenes | |||
3168 | } | 3230 | } |
3169 | } | 3231 | } |
3170 | } | 3232 | } |
3171 | 3233 | foreach (SceneObjectPart childpart in Children.Values) | |
3234 | { | ||
3235 | if (childpart != m_rootPart) | ||
3236 | { | ||
3237 | childpart.IgnoreUndoUpdate = false; | ||
3238 | childpart.StoreUndoState(); | ||
3239 | } | ||
3240 | } | ||
3172 | m_rootPart.ScheduleTerseUpdate(); | 3241 | m_rootPart.ScheduleTerseUpdate(); |
3173 | } | 3242 | } |
3174 | 3243 | ||
diff --git a/OpenSim/Region/Framework/Scenes/SceneObjectPart.cs b/OpenSim/Region/Framework/Scenes/SceneObjectPart.cs index dd797fc..5c283bc 100644 --- a/OpenSim/Region/Framework/Scenes/SceneObjectPart.cs +++ b/OpenSim/Region/Framework/Scenes/SceneObjectPart.cs | |||
@@ -133,6 +133,18 @@ namespace OpenSim.Region.Framework.Scenes | |||
133 | [XmlIgnore] | 133 | [XmlIgnore] |
134 | public bool DIE_AT_EDGE; | 134 | public bool DIE_AT_EDGE; |
135 | 135 | ||
136 | [XmlIgnore] | ||
137 | public bool RETURN_AT_EDGE; | ||
138 | |||
139 | [XmlIgnore] | ||
140 | public bool BlockGrab; | ||
141 | |||
142 | [XmlIgnore] | ||
143 | public bool StatusSandbox; | ||
144 | |||
145 | [XmlIgnore] | ||
146 | public Vector3 StatusSandboxPos; | ||
147 | |||
136 | // TODO: This needs to be persisted in next XML version update! | 148 | // TODO: This needs to be persisted in next XML version update! |
137 | [XmlIgnore] | 149 | [XmlIgnore] |
138 | public readonly int[] PayPrice = {-2,-2,-2,-2,-2}; | 150 | public readonly int[] PayPrice = {-2,-2,-2,-2,-2}; |
@@ -219,6 +231,15 @@ namespace OpenSim.Region.Framework.Scenes | |||
219 | [XmlIgnore] | 231 | [XmlIgnore] |
220 | public Quaternion SpinOldOrientation = Quaternion.Identity; | 232 | public Quaternion SpinOldOrientation = Quaternion.Identity; |
221 | 233 | ||
234 | [XmlIgnore] | ||
235 | public Quaternion m_APIDTarget = Quaternion.Identity; | ||
236 | |||
237 | [XmlIgnore] | ||
238 | public float m_APIDDamp = 0; | ||
239 | |||
240 | [XmlIgnore] | ||
241 | public float m_APIDStrength = 0; | ||
242 | |||
222 | /// <summary> | 243 | /// <summary> |
223 | /// This part's inventory | 244 | /// This part's inventory |
224 | /// </summary> | 245 | /// </summary> |
@@ -233,6 +254,9 @@ namespace OpenSim.Region.Framework.Scenes | |||
233 | public bool Undoing; | 254 | public bool Undoing; |
234 | 255 | ||
235 | [XmlIgnore] | 256 | [XmlIgnore] |
257 | public bool IgnoreUndoUpdate = false; | ||
258 | |||
259 | [XmlIgnore] | ||
236 | private PrimFlags LocalFlags; | 260 | private PrimFlags LocalFlags; |
237 | [XmlIgnore] | 261 | [XmlIgnore] |
238 | private float m_damage = -1.0f; | 262 | private float m_damage = -1.0f; |
@@ -253,6 +277,7 @@ namespace OpenSim.Region.Framework.Scenes | |||
253 | private string m_text = String.Empty; | 277 | private string m_text = String.Empty; |
254 | private string m_touchName = String.Empty; | 278 | private string m_touchName = String.Empty; |
255 | private readonly UndoStack<UndoState> m_undo = new UndoStack<UndoState>(5); | 279 | private readonly UndoStack<UndoState> m_undo = new UndoStack<UndoState>(5); |
280 | private readonly UndoStack<UndoState> m_redo = new UndoStack<UndoState>(5); | ||
256 | private UUID _creatorID; | 281 | private UUID _creatorID; |
257 | 282 | ||
258 | private bool m_passTouches; | 283 | private bool m_passTouches; |
@@ -501,6 +526,27 @@ namespace OpenSim.Region.Framework.Scenes | |||
501 | } | 526 | } |
502 | } | 527 | } |
503 | 528 | ||
529 | [XmlIgnore] | ||
530 | public Quaternion APIDTarget | ||
531 | { | ||
532 | get { return m_APIDTarget; } | ||
533 | set { m_APIDTarget = value; } | ||
534 | } | ||
535 | |||
536 | [XmlIgnore] | ||
537 | public float APIDDamp | ||
538 | { | ||
539 | get { return m_APIDDamp; } | ||
540 | set { m_APIDDamp = value; } | ||
541 | } | ||
542 | |||
543 | [XmlIgnore] | ||
544 | public float APIDStrength | ||
545 | { | ||
546 | get { return m_APIDStrength; } | ||
547 | set { m_APIDStrength = value; } | ||
548 | } | ||
549 | |||
504 | public ulong RegionHandle | 550 | public ulong RegionHandle |
505 | { | 551 | { |
506 | get { return m_regionHandle; } | 552 | get { return m_regionHandle; } |
@@ -512,6 +558,33 @@ namespace OpenSim.Region.Framework.Scenes | |||
512 | get { return m_scriptAccessPin; } | 558 | get { return m_scriptAccessPin; } |
513 | set { m_scriptAccessPin = (int)value; } | 559 | set { m_scriptAccessPin = (int)value; } |
514 | } | 560 | } |
561 | private SceneObjectPart m_PlaySoundMasterPrim = null; | ||
562 | public SceneObjectPart PlaySoundMasterPrim | ||
563 | { | ||
564 | get { return m_PlaySoundMasterPrim; } | ||
565 | set { m_PlaySoundMasterPrim = value; } | ||
566 | } | ||
567 | |||
568 | private List<SceneObjectPart> m_PlaySoundSlavePrims = new List<SceneObjectPart>(); | ||
569 | public List<SceneObjectPart> PlaySoundSlavePrims | ||
570 | { | ||
571 | get { return m_LoopSoundSlavePrims; } | ||
572 | set { m_LoopSoundSlavePrims = value; } | ||
573 | } | ||
574 | |||
575 | private SceneObjectPart m_LoopSoundMasterPrim = null; | ||
576 | public SceneObjectPart LoopSoundMasterPrim | ||
577 | { | ||
578 | get { return m_LoopSoundMasterPrim; } | ||
579 | set { m_LoopSoundMasterPrim = value; } | ||
580 | } | ||
581 | |||
582 | private List<SceneObjectPart> m_LoopSoundSlavePrims = new List<SceneObjectPart>(); | ||
583 | public List<SceneObjectPart> LoopSoundSlavePrims | ||
584 | { | ||
585 | get { return m_LoopSoundSlavePrims; } | ||
586 | set { m_LoopSoundSlavePrims = value; } | ||
587 | } | ||
515 | 588 | ||
516 | [XmlIgnore] | 589 | [XmlIgnore] |
517 | public Byte[] TextureAnimation | 590 | public Byte[] TextureAnimation |
@@ -573,8 +646,6 @@ namespace OpenSim.Region.Framework.Scenes | |||
573 | } | 646 | } |
574 | set | 647 | set |
575 | { | 648 | { |
576 | StoreUndoState(); | ||
577 | |||
578 | m_groupPosition = value; | 649 | m_groupPosition = value; |
579 | 650 | ||
580 | PhysicsActor actor = PhysActor; | 651 | PhysicsActor actor = PhysActor; |
@@ -1401,6 +1472,10 @@ namespace OpenSim.Region.Framework.Scenes | |||
1401 | { | 1472 | { |
1402 | m_undo.Clear(); | 1473 | m_undo.Clear(); |
1403 | } | 1474 | } |
1475 | lock (m_redo) | ||
1476 | { | ||
1477 | m_redo.Clear(); | ||
1478 | } | ||
1404 | StoreUndoState(); | 1479 | StoreUndoState(); |
1405 | } | 1480 | } |
1406 | 1481 | ||
@@ -1711,6 +1786,66 @@ namespace OpenSim.Region.Framework.Scenes | |||
1711 | return m_parentGroup.RootPart.DIE_AT_EDGE; | 1786 | return m_parentGroup.RootPart.DIE_AT_EDGE; |
1712 | } | 1787 | } |
1713 | 1788 | ||
1789 | public bool GetReturnAtEdge() | ||
1790 | { | ||
1791 | if (m_parentGroup == null) | ||
1792 | return false; | ||
1793 | if (m_parentGroup.IsDeleted) | ||
1794 | return false; | ||
1795 | |||
1796 | return m_parentGroup.RootPart.RETURN_AT_EDGE; | ||
1797 | } | ||
1798 | |||
1799 | public void SetReturnAtEdge(bool p) | ||
1800 | { | ||
1801 | if (m_parentGroup == null) | ||
1802 | return; | ||
1803 | if (m_parentGroup.IsDeleted) | ||
1804 | return; | ||
1805 | |||
1806 | m_parentGroup.RootPart.RETURN_AT_EDGE = p; | ||
1807 | } | ||
1808 | |||
1809 | public bool GetBlockGrab() | ||
1810 | { | ||
1811 | if (m_parentGroup == null) | ||
1812 | return false; | ||
1813 | if (m_parentGroup.IsDeleted) | ||
1814 | return false; | ||
1815 | |||
1816 | return m_parentGroup.RootPart.BlockGrab; | ||
1817 | } | ||
1818 | |||
1819 | public void SetBlockGrab(bool p) | ||
1820 | { | ||
1821 | if (m_parentGroup == null) | ||
1822 | return; | ||
1823 | if (m_parentGroup.IsDeleted) | ||
1824 | return; | ||
1825 | |||
1826 | m_parentGroup.RootPart.BlockGrab = p; | ||
1827 | } | ||
1828 | |||
1829 | public void SetStatusSandbox(bool p) | ||
1830 | { | ||
1831 | if (m_parentGroup == null) | ||
1832 | return; | ||
1833 | if (m_parentGroup.IsDeleted) | ||
1834 | return; | ||
1835 | StatusSandboxPos = m_parentGroup.RootPart.AbsolutePosition; | ||
1836 | m_parentGroup.RootPart.StatusSandbox = p; | ||
1837 | } | ||
1838 | |||
1839 | public bool GetStatusSandbox() | ||
1840 | { | ||
1841 | if (m_parentGroup == null) | ||
1842 | return false; | ||
1843 | if (m_parentGroup.IsDeleted) | ||
1844 | return false; | ||
1845 | |||
1846 | return m_parentGroup.RootPart.StatusSandbox; | ||
1847 | } | ||
1848 | |||
1714 | public int GetAxisRotation(int axis) | 1849 | public int GetAxisRotation(int axis) |
1715 | { | 1850 | { |
1716 | //Cannot use ScriptBaseClass constants as no referance to it currently. | 1851 | //Cannot use ScriptBaseClass constants as no referance to it currently. |
@@ -1917,7 +2052,7 @@ namespace OpenSim.Region.Framework.Scenes | |||
1917 | // play the sound. | 2052 | // play the sound. |
1918 | if (startedColliders.Count > 0 && CollisionSound != UUID.Zero && CollisionSoundVolume > 0.0f) | 2053 | if (startedColliders.Count > 0 && CollisionSound != UUID.Zero && CollisionSoundVolume > 0.0f) |
1919 | { | 2054 | { |
1920 | SendSound(CollisionSound.ToString(), CollisionSoundVolume, true, (byte)0); | 2055 | SendSound(CollisionSound.ToString(), CollisionSoundVolume, true, (byte)0, 0, false, false); |
1921 | } | 2056 | } |
1922 | 2057 | ||
1923 | if ((m_parentGroup.RootPart.ScriptEvents & scriptEvents.collision_start) != 0) | 2058 | if ((m_parentGroup.RootPart.ScriptEvents & scriptEvents.collision_start) != 0) |
@@ -2491,9 +2626,8 @@ namespace OpenSim.Region.Framework.Scenes | |||
2491 | List<ScenePresence> avatarts = m_parentGroup.Scene.GetAvatars(); | 2626 | List<ScenePresence> avatarts = m_parentGroup.Scene.GetAvatars(); |
2492 | foreach (ScenePresence p in avatarts) | 2627 | foreach (ScenePresence p in avatarts) |
2493 | { | 2628 | { |
2494 | // TODO: some filtering by distance of avatar | 2629 | if (!(Util.GetDistanceTo(p.AbsolutePosition, AbsolutePosition) >= 100)) |
2495 | 2630 | p.ControllingClient.SendPreLoadSound(objectID, objectID, soundID); | |
2496 | p.ControllingClient.SendPreLoadSound(objectID, objectID, soundID); | ||
2497 | } | 2631 | } |
2498 | } | 2632 | } |
2499 | 2633 | ||
@@ -2554,7 +2688,38 @@ namespace OpenSim.Region.Framework.Scenes | |||
2554 | 2688 | ||
2555 | public void RotLookAt(Quaternion target, float strength, float damping) | 2689 | public void RotLookAt(Quaternion target, float strength, float damping) |
2556 | { | 2690 | { |
2557 | m_parentGroup.rotLookAt(target, strength, damping); | 2691 | rotLookAt(target, strength, damping); |
2692 | } | ||
2693 | |||
2694 | public void rotLookAt(Quaternion target, float strength, float damping) | ||
2695 | { | ||
2696 | if (IsAttachment) | ||
2697 | { | ||
2698 | /* | ||
2699 | ScenePresence avatar = m_scene.GetScenePresence(rootpart.AttachedAvatar); | ||
2700 | if (avatar != null) | ||
2701 | { | ||
2702 | Rotate the Av? | ||
2703 | } */ | ||
2704 | } | ||
2705 | else | ||
2706 | { | ||
2707 | APIDDamp = damping; | ||
2708 | APIDStrength = strength; | ||
2709 | APIDTarget = target; | ||
2710 | } | ||
2711 | } | ||
2712 | |||
2713 | public void startLookAt(Quaternion rot, float damp, float strength) | ||
2714 | { | ||
2715 | APIDDamp = damp; | ||
2716 | APIDStrength = strength; | ||
2717 | APIDTarget = rot; | ||
2718 | } | ||
2719 | |||
2720 | public void stopLookAt() | ||
2721 | { | ||
2722 | APIDTarget = Quaternion.Identity; | ||
2558 | } | 2723 | } |
2559 | 2724 | ||
2560 | /// <summary> | 2725 | /// <summary> |
@@ -2814,7 +2979,7 @@ namespace OpenSim.Region.Framework.Scenes | |||
2814 | /// <param name="volume"></param> | 2979 | /// <param name="volume"></param> |
2815 | /// <param name="triggered"></param> | 2980 | /// <param name="triggered"></param> |
2816 | /// <param name="flags"></param> | 2981 | /// <param name="flags"></param> |
2817 | public void SendSound(string sound, double volume, bool triggered, byte flags) | 2982 | public void SendSound(string sound, double volume, bool triggered, byte flags, float radius, bool useMaster, bool isMaster) |
2818 | { | 2983 | { |
2819 | if (volume > 1) | 2984 | if (volume > 1) |
2820 | volume = 1; | 2985 | volume = 1; |
@@ -2850,10 +3015,51 @@ namespace OpenSim.Region.Framework.Scenes | |||
2850 | ISoundModule soundModule = m_parentGroup.Scene.RequestModuleInterface<ISoundModule>(); | 3015 | ISoundModule soundModule = m_parentGroup.Scene.RequestModuleInterface<ISoundModule>(); |
2851 | if (soundModule != null) | 3016 | if (soundModule != null) |
2852 | { | 3017 | { |
2853 | if (triggered) | 3018 | if (useMaster) |
2854 | soundModule.TriggerSound(soundID, ownerID, objectID, parentID, volume, position, regionHandle); | 3019 | { |
3020 | if (isMaster) | ||
3021 | { | ||
3022 | if (triggered) | ||
3023 | soundModule.TriggerSound(soundID, ownerID, objectID, parentID, volume, position, regionHandle, radius); | ||
3024 | else | ||
3025 | soundModule.PlayAttachedSound(soundID, ownerID, objectID, volume, position, flags, radius); | ||
3026 | ParentGroup.PlaySoundMasterPrim = this; | ||
3027 | ownerID = this._ownerID; | ||
3028 | objectID = this.UUID; | ||
3029 | parentID = this.GetRootPartUUID(); | ||
3030 | position = this.AbsolutePosition; // region local | ||
3031 | regionHandle = this.ParentGroup.Scene.RegionInfo.RegionHandle; | ||
3032 | if (triggered) | ||
3033 | soundModule.TriggerSound(soundID, ownerID, objectID, parentID, volume, position, regionHandle, radius); | ||
3034 | else | ||
3035 | soundModule.PlayAttachedSound(soundID, ownerID, objectID, volume, position, flags, radius); | ||
3036 | foreach (SceneObjectPart prim in ParentGroup.PlaySoundSlavePrims) | ||
3037 | { | ||
3038 | ownerID = prim._ownerID; | ||
3039 | objectID = prim.UUID; | ||
3040 | parentID = prim.GetRootPartUUID(); | ||
3041 | position = prim.AbsolutePosition; // region local | ||
3042 | regionHandle = prim.ParentGroup.Scene.RegionInfo.RegionHandle; | ||
3043 | if (triggered) | ||
3044 | soundModule.TriggerSound(soundID, ownerID, objectID, parentID, volume, position, regionHandle, radius); | ||
3045 | else | ||
3046 | soundModule.PlayAttachedSound(soundID, ownerID, objectID, volume, position, flags, radius); | ||
3047 | } | ||
3048 | ParentGroup.PlaySoundSlavePrims.Clear(); | ||
3049 | ParentGroup.PlaySoundMasterPrim = null; | ||
3050 | } | ||
3051 | else | ||
3052 | { | ||
3053 | ParentGroup.PlaySoundSlavePrims.Add(this); | ||
3054 | } | ||
3055 | } | ||
2855 | else | 3056 | else |
2856 | soundModule.PlayAttachedSound(soundID, ownerID, objectID, volume, position, flags); | 3057 | { |
3058 | if (triggered) | ||
3059 | soundModule.TriggerSound(soundID, ownerID, objectID, parentID, volume, position, regionHandle, radius); | ||
3060 | else | ||
3061 | soundModule.PlayAttachedSound(soundID, ownerID, objectID, volume, position, flags, radius); | ||
3062 | } | ||
2857 | } | 3063 | } |
2858 | } | 3064 | } |
2859 | 3065 | ||
@@ -3156,6 +3362,14 @@ namespace OpenSim.Region.Framework.Scenes | |||
3156 | hasProfileCut = hasDimple; // is it the same thing? | 3362 | hasProfileCut = hasDimple; // is it the same thing? |
3157 | } | 3363 | } |
3158 | 3364 | ||
3365 | public void SetVehicleFlags(int param, bool remove) | ||
3366 | { | ||
3367 | if (PhysActor != null) | ||
3368 | { | ||
3369 | PhysActor.VehicleFlags(param, remove); | ||
3370 | } | ||
3371 | } | ||
3372 | |||
3159 | public void SetGroup(UUID groupID, IClientAPI client) | 3373 | public void SetGroup(UUID groupID, IClientAPI client) |
3160 | { | 3374 | { |
3161 | _groupID = groupID; | 3375 | _groupID = groupID; |
@@ -3260,27 +3474,30 @@ namespace OpenSim.Region.Framework.Scenes | |||
3260 | { | 3474 | { |
3261 | if (!Undoing) | 3475 | if (!Undoing) |
3262 | { | 3476 | { |
3263 | if (m_parentGroup != null) | 3477 | if (!IgnoreUndoUpdate) |
3264 | { | 3478 | { |
3265 | lock (m_undo) | 3479 | if (m_parentGroup != null) |
3266 | { | 3480 | { |
3267 | if (m_undo.Count > 0) | 3481 | lock (m_undo) |
3268 | { | 3482 | { |
3269 | UndoState last = m_undo.Peek(); | 3483 | if (m_undo.Count > 0) |
3270 | if (last != null) | ||
3271 | { | 3484 | { |
3272 | if (last.Compare(this)) | 3485 | UndoState last = m_undo.Peek(); |
3273 | return; | 3486 | if (last != null) |
3487 | { | ||
3488 | if (last.Compare(this)) | ||
3489 | return; | ||
3490 | } | ||
3274 | } | 3491 | } |
3275 | } | ||
3276 | 3492 | ||
3277 | if (m_parentGroup.GetSceneMaxUndo() > 0) | 3493 | if (m_parentGroup.GetSceneMaxUndo() > 0) |
3278 | { | 3494 | { |
3279 | UndoState nUndo = new UndoState(this); | 3495 | UndoState nUndo = new UndoState(this); |
3280 | 3496 | ||
3281 | m_undo.Push(nUndo); | 3497 | m_undo.Push(nUndo); |
3282 | } | 3498 | } |
3283 | 3499 | ||
3500 | } | ||
3284 | } | 3501 | } |
3285 | } | 3502 | } |
3286 | } | 3503 | } |
@@ -3751,11 +3968,36 @@ namespace OpenSim.Region.Framework.Scenes | |||
3751 | lock (m_undo) | 3968 | lock (m_undo) |
3752 | { | 3969 | { |
3753 | if (m_undo.Count > 0) | 3970 | if (m_undo.Count > 0) |
3971 | { | ||
3972 | UndoState nUndo = null; | ||
3973 | if (m_parentGroup.GetSceneMaxUndo() > 0) | ||
3754 | { | 3974 | { |
3755 | UndoState goback = m_undo.Pop(); | 3975 | nUndo = new UndoState(this); |
3756 | if (goback != null) | 3976 | } |
3757 | goback.PlaybackState(this); | 3977 | UndoState goback = m_undo.Pop(); |
3978 | if (goback != null) | ||
3979 | { | ||
3980 | goback.PlaybackState(this); | ||
3981 | if (nUndo != null) | ||
3982 | m_redo.Push(nUndo); | ||
3983 | } | ||
3984 | } | ||
3985 | } | ||
3986 | } | ||
3987 | |||
3988 | public void Redo() | ||
3989 | { | ||
3990 | lock (m_redo) | ||
3991 | { | ||
3992 | if (m_parentGroup.GetSceneMaxUndo() > 0) | ||
3993 | { | ||
3994 | UndoState nUndo = new UndoState(this); | ||
3995 | |||
3996 | m_undo.Push(nUndo); | ||
3758 | } | 3997 | } |
3998 | UndoState gofwd = m_redo.Pop(); | ||
3999 | if (gofwd != null) | ||
4000 | gofwd.PlayfwdState(this); | ||
3759 | } | 4001 | } |
3760 | } | 4002 | } |
3761 | 4003 | ||
@@ -3802,6 +4044,18 @@ namespace OpenSim.Region.Framework.Scenes | |||
3802 | (pos.Z != OffsetPosition.Z)) | 4044 | (pos.Z != OffsetPosition.Z)) |
3803 | { | 4045 | { |
3804 | Vector3 newPos = new Vector3(pos.X, pos.Y, pos.Z); | 4046 | Vector3 newPos = new Vector3(pos.X, pos.Y, pos.Z); |
4047 | |||
4048 | if (ParentGroup.RootPart.GetStatusSandbox()) | ||
4049 | { | ||
4050 | if (Util.GetDistanceTo(ParentGroup.RootPart.StatusSandboxPos, newPos) > 10) | ||
4051 | { | ||
4052 | ParentGroup.RootPart.ScriptSetPhysicsStatus(false); | ||
4053 | newPos = OffsetPosition; | ||
4054 | ParentGroup.Scene.SimChat(Utils.StringToBytes("Hit Sandbox Limit"), | ||
4055 | ChatTypeEnum.DebugChannel, 0x7FFFFFFF, ParentGroup.RootPart.AbsolutePosition, Name, UUID, false); | ||
4056 | } | ||
4057 | } | ||
4058 | |||
3805 | OffsetPosition = newPos; | 4059 | OffsetPosition = newPos; |
3806 | ScheduleTerseUpdate(); | 4060 | ScheduleTerseUpdate(); |
3807 | } | 4061 | } |
@@ -4094,7 +4348,6 @@ namespace OpenSim.Region.Framework.Scenes | |||
4094 | (rot.Z != RotationOffset.Z) || | 4348 | (rot.Z != RotationOffset.Z) || |
4095 | (rot.W != RotationOffset.W)) | 4349 | (rot.W != RotationOffset.W)) |
4096 | { | 4350 | { |
4097 | //StoreUndoState(); | ||
4098 | RotationOffset = rot; | 4351 | RotationOffset = rot; |
4099 | ParentGroup.HasGroupChanged = true; | 4352 | ParentGroup.HasGroupChanged = true; |
4100 | ScheduleTerseUpdate(); | 4353 | ScheduleTerseUpdate(); |
@@ -4278,7 +4531,7 @@ namespace OpenSim.Region.Framework.Scenes | |||
4278 | else | 4531 | else |
4279 | { | 4532 | { |
4280 | // m_log.DebugFormat( | 4533 | // m_log.DebugFormat( |
4281 | // "[SCENE OBJECT PART]: Scheduling part {0} {1} for full update in aggregateScriptEvents()", Name, LocalId); | 4534 | // "[SCENE OBJECT PART]: Scheduling part {0} {1} for full update in aggregateScriptEvents()", Name, LocalId); |
4282 | ScheduleFullUpdate(); | 4535 | ScheduleFullUpdate(); |
4283 | } | 4536 | } |
4284 | } | 4537 | } |
@@ -4396,5 +4649,36 @@ namespace OpenSim.Region.Framework.Scenes | |||
4396 | 4649 | ||
4397 | Inventory.ApplyNextOwnerPermissions(); | 4650 | Inventory.ApplyNextOwnerPermissions(); |
4398 | } | 4651 | } |
4652 | public void UpdateLookAt() | ||
4653 | { | ||
4654 | try | ||
4655 | { | ||
4656 | if (APIDTarget != Quaternion.Identity) | ||
4657 | { | ||
4658 | if (Single.IsNaN(APIDTarget.W) == true) | ||
4659 | { | ||
4660 | APIDTarget = Quaternion.Identity; | ||
4661 | return; | ||
4662 | } | ||
4663 | Quaternion rot = RotationOffset; | ||
4664 | Quaternion dir = (rot - APIDTarget); | ||
4665 | float speed = ((APIDStrength / APIDDamp) * (float)(Math.PI / 180.0f)); | ||
4666 | if (dir.Z > speed) | ||
4667 | { | ||
4668 | rot.Z -= speed; | ||
4669 | } | ||
4670 | if (dir.Z < -speed) | ||
4671 | { | ||
4672 | rot.Z += speed; | ||
4673 | } | ||
4674 | rot.Normalize(); | ||
4675 | UpdateRotation(rot); | ||
4676 | } | ||
4677 | } | ||
4678 | catch (Exception ex) | ||
4679 | { | ||
4680 | m_log.Error("[Physics] " + ex); | ||
4681 | } | ||
4682 | } | ||
4399 | } | 4683 | } |
4400 | } | 4684 | } |
diff --git a/OpenSim/Region/Framework/Scenes/SceneObjectPartInventory.cs b/OpenSim/Region/Framework/Scenes/SceneObjectPartInventory.cs index 298ede9..a555eae 100644 --- a/OpenSim/Region/Framework/Scenes/SceneObjectPartInventory.cs +++ b/OpenSim/Region/Framework/Scenes/SceneObjectPartInventory.cs | |||
@@ -314,7 +314,7 @@ namespace OpenSim.Region.Framework.Scenes | |||
314 | } | 314 | } |
315 | ); | 315 | ); |
316 | } | 316 | } |
317 | } | 317 | } |
318 | 318 | ||
319 | private void RestoreSavedScriptState(UUID oldID, UUID newID) | 319 | private void RestoreSavedScriptState(UUID oldID, UUID newID) |
320 | { | 320 | { |
@@ -579,7 +579,7 @@ namespace OpenSim.Region.Framework.Scenes | |||
579 | m_items.TryGetValue(itemId, out item); | 579 | m_items.TryGetValue(itemId, out item); |
580 | 580 | ||
581 | return item; | 581 | return item; |
582 | } | 582 | } |
583 | 583 | ||
584 | /// <summary> | 584 | /// <summary> |
585 | /// Get inventory items by name. | 585 | /// Get inventory items by name. |
@@ -588,7 +588,7 @@ namespace OpenSim.Region.Framework.Scenes | |||
588 | /// <returns> | 588 | /// <returns> |
589 | /// A list of inventory items with that name. | 589 | /// A list of inventory items with that name. |
590 | /// If no inventory item has that name then an empty list is returned. | 590 | /// If no inventory item has that name then an empty list is returned. |
591 | /// </returns> | 591 | /// </returns> |
592 | public IList<TaskInventoryItem> GetInventoryItems(string name) | 592 | public IList<TaskInventoryItem> GetInventoryItems(string name) |
593 | { | 593 | { |
594 | IList<TaskInventoryItem> items = new List<TaskInventoryItem>(); | 594 | IList<TaskInventoryItem> items = new List<TaskInventoryItem>(); |
diff --git a/OpenSim/Region/Framework/Scenes/ScenePresence.cs b/OpenSim/Region/Framework/Scenes/ScenePresence.cs index 9c7559b..4973663 100644 --- a/OpenSim/Region/Framework/Scenes/ScenePresence.cs +++ b/OpenSim/Region/Framework/Scenes/ScenePresence.cs | |||
@@ -164,6 +164,8 @@ namespace OpenSim.Region.Framework.Scenes | |||
164 | 164 | ||
165 | private Quaternion m_bodyRot= Quaternion.Identity; | 165 | private Quaternion m_bodyRot= Quaternion.Identity; |
166 | 166 | ||
167 | private Quaternion m_bodyRotPrevious = Quaternion.Identity; | ||
168 | |||
167 | private const int LAND_VELOCITYMAG_MAX = 12; | 169 | private const int LAND_VELOCITYMAG_MAX = 12; |
168 | 170 | ||
169 | public bool IsRestrictedToRegion; | 171 | public bool IsRestrictedToRegion; |
@@ -225,7 +227,7 @@ namespace OpenSim.Region.Framework.Scenes | |||
225 | // Agent's Draw distance. | 227 | // Agent's Draw distance. |
226 | protected float m_DrawDistance; | 228 | protected float m_DrawDistance; |
227 | 229 | ||
228 | protected AvatarAppearance m_appearance; | 230 | protected AvatarAppearance m_appearance; |
229 | 231 | ||
230 | // neighbouring regions we have enabled a child agent in | 232 | // neighbouring regions we have enabled a child agent in |
231 | // holds the seed cap for the child agent in that region | 233 | // holds the seed cap for the child agent in that region |
@@ -508,6 +510,12 @@ namespace OpenSim.Region.Framework.Scenes | |||
508 | set { m_bodyRot = value; } | 510 | set { m_bodyRot = value; } |
509 | } | 511 | } |
510 | 512 | ||
513 | public Quaternion PreviousRotation | ||
514 | { | ||
515 | get { return m_bodyRotPrevious; } | ||
516 | set { m_bodyRotPrevious = value; } | ||
517 | } | ||
518 | |||
511 | /// <summary> | 519 | /// <summary> |
512 | /// If this is true, agent doesn't have a representation in this scene. | 520 | /// If this is true, agent doesn't have a representation in this scene. |
513 | /// this is an agent 'looking into' this scene from a nearby scene(region) | 521 | /// this is an agent 'looking into' this scene from a nearby scene(region) |
@@ -640,7 +648,7 @@ namespace OpenSim.Region.Framework.Scenes | |||
640 | #region Constructor(s) | 648 | #region Constructor(s) |
641 | 649 | ||
642 | public ScenePresence() | 650 | public ScenePresence() |
643 | { | 651 | { |
644 | m_sendCourseLocationsMethod = SendCoarseLocationsDefault; | 652 | m_sendCourseLocationsMethod = SendCoarseLocationsDefault; |
645 | CreateSceneViewer(); | 653 | CreateSceneViewer(); |
646 | m_animator = new ScenePresenceAnimator(this); | 654 | m_animator = new ScenePresenceAnimator(this); |
@@ -824,6 +832,31 @@ namespace OpenSim.Region.Framework.Scenes | |||
824 | if (pos.X < 0 || pos.Y < 0 || pos.Z < 0) | 832 | if (pos.X < 0 || pos.Y < 0 || pos.Z < 0) |
825 | { | 833 | { |
826 | Vector3 emergencyPos = new Vector3(((int)Constants.RegionSize * 0.5f), ((int)Constants.RegionSize * 0.5f), 128); | 834 | Vector3 emergencyPos = new Vector3(((int)Constants.RegionSize * 0.5f), ((int)Constants.RegionSize * 0.5f), 128); |
835 | |||
836 | if (pos.X < 0) | ||
837 | { | ||
838 | emergencyPos.X = (int)Constants.RegionSize + pos.X; | ||
839 | if (!(pos.Y < 0)) | ||
840 | emergencyPos.Y = pos.Y; | ||
841 | if (!(pos.Z < 0)) | ||
842 | emergencyPos.X = pos.X; | ||
843 | } | ||
844 | if (pos.Y < 0) | ||
845 | { | ||
846 | emergencyPos.Y = (int)Constants.RegionSize + pos.Y; | ||
847 | if (!(pos.X < 0)) | ||
848 | emergencyPos.X = pos.X; | ||
849 | if (!(pos.Z < 0)) | ||
850 | emergencyPos.Z = pos.Z; | ||
851 | } | ||
852 | if (pos.Z < 0) | ||
853 | { | ||
854 | if (!(pos.X < 0)) | ||
855 | emergencyPos.X = pos.X; | ||
856 | if (!(pos.Y < 0)) | ||
857 | emergencyPos.Y = pos.Y; | ||
858 | //Leave as 128 | ||
859 | } | ||
827 | 860 | ||
828 | m_log.WarnFormat( | 861 | m_log.WarnFormat( |
829 | "[SCENE PRESENCE]: MakeRootAgent() was given an illegal position of {0} for avatar {1}, {2}. Substituting {3}", | 862 | "[SCENE PRESENCE]: MakeRootAgent() was given an illegal position of {0} for avatar {1}, {2}. Substituting {3}", |
@@ -2704,36 +2737,75 @@ namespace OpenSim.Region.Framework.Scenes | |||
2704 | { | 2737 | { |
2705 | // Checks if where it's headed exists a region | 2738 | // Checks if where it's headed exists a region |
2706 | 2739 | ||
2740 | bool needsTransit = false; | ||
2707 | if (m_scene.TestBorderCross(pos2, Cardinals.W)) | 2741 | if (m_scene.TestBorderCross(pos2, Cardinals.W)) |
2708 | { | 2742 | { |
2709 | if (m_scene.TestBorderCross(pos2, Cardinals.S)) | 2743 | if (m_scene.TestBorderCross(pos2, Cardinals.S)) |
2744 | { | ||
2745 | needsTransit = true; | ||
2710 | neighbor = HaveNeighbor(Cardinals.SW, ref fix); | 2746 | neighbor = HaveNeighbor(Cardinals.SW, ref fix); |
2747 | } | ||
2711 | else if (m_scene.TestBorderCross(pos2, Cardinals.N)) | 2748 | else if (m_scene.TestBorderCross(pos2, Cardinals.N)) |
2749 | { | ||
2750 | needsTransit = true; | ||
2712 | neighbor = HaveNeighbor(Cardinals.NW, ref fix); | 2751 | neighbor = HaveNeighbor(Cardinals.NW, ref fix); |
2752 | } | ||
2713 | else | 2753 | else |
2754 | { | ||
2755 | needsTransit = true; | ||
2714 | neighbor = HaveNeighbor(Cardinals.W, ref fix); | 2756 | neighbor = HaveNeighbor(Cardinals.W, ref fix); |
2757 | } | ||
2715 | } | 2758 | } |
2716 | else if (m_scene.TestBorderCross(pos2, Cardinals.E)) | 2759 | else if (m_scene.TestBorderCross(pos2, Cardinals.E)) |
2717 | { | 2760 | { |
2718 | if (m_scene.TestBorderCross(pos2, Cardinals.S)) | 2761 | if (m_scene.TestBorderCross(pos2, Cardinals.S)) |
2762 | { | ||
2763 | needsTransit = true; | ||
2719 | neighbor = HaveNeighbor(Cardinals.SE, ref fix); | 2764 | neighbor = HaveNeighbor(Cardinals.SE, ref fix); |
2765 | } | ||
2720 | else if (m_scene.TestBorderCross(pos2, Cardinals.N)) | 2766 | else if (m_scene.TestBorderCross(pos2, Cardinals.N)) |
2767 | { | ||
2768 | needsTransit = true; | ||
2721 | neighbor = HaveNeighbor(Cardinals.NE, ref fix); | 2769 | neighbor = HaveNeighbor(Cardinals.NE, ref fix); |
2770 | } | ||
2722 | else | 2771 | else |
2772 | { | ||
2773 | needsTransit = true; | ||
2723 | neighbor = HaveNeighbor(Cardinals.E, ref fix); | 2774 | neighbor = HaveNeighbor(Cardinals.E, ref fix); |
2775 | } | ||
2724 | } | 2776 | } |
2725 | else if (m_scene.TestBorderCross(pos2, Cardinals.S)) | 2777 | else if (m_scene.TestBorderCross(pos2, Cardinals.S)) |
2778 | { | ||
2779 | needsTransit = true; | ||
2726 | neighbor = HaveNeighbor(Cardinals.S, ref fix); | 2780 | neighbor = HaveNeighbor(Cardinals.S, ref fix); |
2781 | } | ||
2727 | else if (m_scene.TestBorderCross(pos2, Cardinals.N)) | 2782 | else if (m_scene.TestBorderCross(pos2, Cardinals.N)) |
2783 | { | ||
2784 | needsTransit = true; | ||
2728 | neighbor = HaveNeighbor(Cardinals.N, ref fix); | 2785 | neighbor = HaveNeighbor(Cardinals.N, ref fix); |
2786 | } | ||
2787 | |||
2729 | 2788 | ||
2730 | |||
2731 | // Makes sure avatar does not end up outside region | 2789 | // Makes sure avatar does not end up outside region |
2732 | if (neighbor < 0) | 2790 | if (neighbor <= 0) |
2733 | AbsolutePosition = new Vector3( | 2791 | { |
2734 | AbsolutePosition.X + 3*fix[0], | 2792 | if (!needsTransit) |
2735 | AbsolutePosition.Y + 3*fix[1], | 2793 | { |
2736 | AbsolutePosition.Z); | 2794 | if (m_requestedSitTargetUUID == UUID.Zero) |
2795 | { | ||
2796 | Vector3 pos = AbsolutePosition; | ||
2797 | if (AbsolutePosition.X < 0) | ||
2798 | pos.X += Velocity.X; | ||
2799 | else if (AbsolutePosition.X > Constants.RegionSize) | ||
2800 | pos.X -= Velocity.X; | ||
2801 | if (AbsolutePosition.Y < 0) | ||
2802 | pos.Y += Velocity.Y; | ||
2803 | else if (AbsolutePosition.Y > Constants.RegionSize) | ||
2804 | pos.Y -= Velocity.Y; | ||
2805 | AbsolutePosition = pos; | ||
2806 | } | ||
2807 | } | ||
2808 | } | ||
2737 | else if (neighbor > 0) | 2809 | else if (neighbor > 0) |
2738 | CrossToNewRegion(); | 2810 | CrossToNewRegion(); |
2739 | } | 2811 | } |
@@ -3193,7 +3265,7 @@ namespace OpenSim.Region.Framework.Scenes | |||
3193 | m_physicsActor.OnCollisionUpdate += PhysicsCollisionUpdate; | 3265 | m_physicsActor.OnCollisionUpdate += PhysicsCollisionUpdate; |
3194 | m_physicsActor.OnOutOfBounds += OutOfBoundsCall; // Called for PhysicsActors when there's something wrong | 3266 | m_physicsActor.OnOutOfBounds += OutOfBoundsCall; // Called for PhysicsActors when there's something wrong |
3195 | m_physicsActor.SubscribeEvents(500); | 3267 | m_physicsActor.SubscribeEvents(500); |
3196 | m_physicsActor.LocalID = LocalId; | 3268 | m_physicsActor.LocalID = LocalId; |
3197 | } | 3269 | } |
3198 | 3270 | ||
3199 | private void OutOfBoundsCall(Vector3 pos) | 3271 | private void OutOfBoundsCall(Vector3 pos) |
@@ -3285,7 +3357,7 @@ namespace OpenSim.Region.Framework.Scenes | |||
3285 | } | 3357 | } |
3286 | if (m_health <= 0) | 3358 | if (m_health <= 0) |
3287 | m_scene.EventManager.TriggerAvatarKill(killerObj, this); | 3359 | m_scene.EventManager.TriggerAvatarKill(killerObj, this); |
3288 | } | 3360 | } |
3289 | } | 3361 | } |
3290 | 3362 | ||
3291 | public void setHealthWithUpdate(float health) | 3363 | public void setHealthWithUpdate(float health) |
diff --git a/OpenSim/Region/Framework/Scenes/UndoState.cs b/OpenSim/Region/Framework/Scenes/UndoState.cs index 713ff69..55e407e 100644 --- a/OpenSim/Region/Framework/Scenes/UndoState.cs +++ b/OpenSim/Region/Framework/Scenes/UndoState.cs | |||
@@ -26,6 +26,7 @@ | |||
26 | */ | 26 | */ |
27 | 27 | ||
28 | using OpenMetaverse; | 28 | using OpenMetaverse; |
29 | using OpenSim.Region.Framework.Interfaces; | ||
29 | 30 | ||
30 | namespace OpenSim.Region.Framework.Scenes | 31 | namespace OpenSim.Region.Framework.Scenes |
31 | { | 32 | { |
@@ -35,29 +36,21 @@ namespace OpenSim.Region.Framework.Scenes | |||
35 | public Vector3 Scale = Vector3.Zero; | 36 | public Vector3 Scale = Vector3.Zero; |
36 | public Quaternion Rotation = Quaternion.Identity; | 37 | public Quaternion Rotation = Quaternion.Identity; |
37 | 38 | ||
38 | public UndoState(Vector3 pos, Quaternion rot, Vector3 scale) | ||
39 | { | ||
40 | Position = pos; | ||
41 | Rotation = rot; | ||
42 | Scale = scale; | ||
43 | } | ||
44 | |||
45 | public UndoState(SceneObjectPart part) | 39 | public UndoState(SceneObjectPart part) |
46 | { | 40 | { |
47 | if (part != null) | 41 | if (part != null) |
48 | { | 42 | { |
49 | if (part.ParentID == 0) | 43 | if (part.ParentID == 0) |
50 | { | 44 | { |
51 | Position = part.AbsolutePosition; | 45 | Position = part.ParentGroup.AbsolutePosition; |
52 | Rotation = part.RotationOffset; | 46 | Rotation = part.RotationOffset; |
53 | 47 | Scale = part.Shape.Scale; | |
54 | } | 48 | } |
55 | else | 49 | else |
56 | { | 50 | { |
57 | Position = part.OffsetPosition; | 51 | Position = part.OffsetPosition; |
58 | Rotation = part.RotationOffset; | 52 | Rotation = part.RotationOffset; |
59 | Scale = part.Shape.Scale; | 53 | Scale = part.Shape.Scale; |
60 | |||
61 | } | 54 | } |
62 | } | 55 | } |
63 | } | 56 | } |
@@ -68,7 +61,7 @@ namespace OpenSim.Region.Framework.Scenes | |||
68 | { | 61 | { |
69 | if (part.ParentID == 0) | 62 | if (part.ParentID == 0) |
70 | { | 63 | { |
71 | if (Position == part.AbsolutePosition && Rotation == part.RotationOffset) | 64 | if (Position == part.ParentGroup.AbsolutePosition && Rotation == part.ParentGroup.Rotation) |
72 | return true; | 65 | return true; |
73 | else | 66 | else |
74 | return false; | 67 | return false; |
@@ -93,24 +86,78 @@ namespace OpenSim.Region.Framework.Scenes | |||
93 | 86 | ||
94 | if (part.ParentID == 0) | 87 | if (part.ParentID == 0) |
95 | { | 88 | { |
96 | part.ParentGroup.AbsolutePosition = Position; | 89 | if (Position != Vector3.Zero) |
97 | part.UpdateRotation(Rotation); | 90 | part.ParentGroup.AbsolutePosition = Position; |
91 | part.RotationOffset = Rotation; | ||
92 | if (Scale != Vector3.Zero) | ||
93 | part.Resize(Scale); | ||
98 | part.ParentGroup.ScheduleGroupForTerseUpdate(); | 94 | part.ParentGroup.ScheduleGroupForTerseUpdate(); |
99 | } | 95 | } |
100 | else | 96 | else |
101 | { | 97 | { |
102 | part.OffsetPosition = Position; | 98 | if (Position != Vector3.Zero) |
99 | part.OffsetPosition = Position; | ||
103 | part.UpdateRotation(Rotation); | 100 | part.UpdateRotation(Rotation); |
104 | part.Resize(Scale); | 101 | if (Scale != Vector3.Zero) |
102 | part.Resize(Scale); part.ScheduleTerseUpdate(); | ||
103 | } | ||
104 | part.Undoing = false; | ||
105 | |||
106 | } | ||
107 | } | ||
108 | public void PlayfwdState(SceneObjectPart part) | ||
109 | { | ||
110 | if (part != null) | ||
111 | { | ||
112 | part.Undoing = true; | ||
113 | |||
114 | if (part.ParentID == 0) | ||
115 | { | ||
116 | if (Position != Vector3.Zero) | ||
117 | part.ParentGroup.AbsolutePosition = Position; | ||
118 | if (Rotation != Quaternion.Identity) | ||
119 | part.UpdateRotation(Rotation); | ||
120 | if (Scale != Vector3.Zero) | ||
121 | part.Resize(Scale); | ||
122 | part.ParentGroup.ScheduleGroupForTerseUpdate(); | ||
123 | } | ||
124 | else | ||
125 | { | ||
126 | if (Position != Vector3.Zero) | ||
127 | part.OffsetPosition = Position; | ||
128 | if (Rotation != Quaternion.Identity) | ||
129 | part.UpdateRotation(Rotation); | ||
130 | if (Scale != Vector3.Zero) | ||
131 | part.Resize(Scale); | ||
105 | part.ScheduleTerseUpdate(); | 132 | part.ScheduleTerseUpdate(); |
106 | } | 133 | } |
107 | part.Undoing = false; | 134 | part.Undoing = false; |
108 | 135 | ||
109 | } | 136 | } |
110 | } | 137 | } |
138 | } | ||
139 | public class LandUndoState | ||
140 | { | ||
141 | public ITerrainModule m_terrainModule; | ||
142 | public ITerrainChannel m_terrainChannel; | ||
143 | |||
144 | public LandUndoState(ITerrainModule terrainModule, ITerrainChannel terrainChannel) | ||
145 | { | ||
146 | m_terrainModule = terrainModule; | ||
147 | m_terrainChannel = terrainChannel; | ||
148 | } | ||
149 | |||
150 | public bool Compare(ITerrainChannel terrainChannel) | ||
151 | { | ||
152 | if (m_terrainChannel != terrainChannel) | ||
153 | return false; | ||
154 | else | ||
155 | return false; | ||
156 | } | ||
111 | 157 | ||
112 | public UndoState() | 158 | public void PlaybackState() |
113 | { | 159 | { |
160 | m_terrainModule.UndoTerrain(m_terrainChannel); | ||
114 | } | 161 | } |
115 | } | 162 | } |
116 | } | 163 | } |