From ddc2f2ccd3566a9a4a3631c872979aa6830dbcfe Mon Sep 17 00:00:00 2001 From: UbitUmarov Date: Sun, 28 Aug 2016 08:45:09 +0100 Subject: mantis: 8008 unscripted child prim collisions didn't trigger scripted root prim collision events; collision sounds had incorrect aggregateevents call and default sounds where muted. Future optimization needed and Testing --- OpenSim/Region/Framework/Scenes/SceneObjectGroup.cs | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) (limited to 'OpenSim/Region/Framework/Scenes/SceneObjectGroup.cs') diff --git a/OpenSim/Region/Framework/Scenes/SceneObjectGroup.cs b/OpenSim/Region/Framework/Scenes/SceneObjectGroup.cs index 9b7374c..b7c5b6b 100644 --- a/OpenSim/Region/Framework/Scenes/SceneObjectGroup.cs +++ b/OpenSim/Region/Framework/Scenes/SceneObjectGroup.cs @@ -2112,6 +2112,12 @@ namespace OpenSim.Region.Framework.Scenes d.AddActiveScripts(count); } + private const scriptEvents PhysicsNeeedSubsEvents = ( + scriptEvents.collision | scriptEvents.collision_start | scriptEvents.collision_end | + scriptEvents.land_collision | scriptEvents.land_collision_start | scriptEvents.land_collision_end); + + private scriptEvents lastRootPartPhysEvents = 0; + public void aggregateScriptEvents() { PrimFlags objectflagupdate = (PrimFlags)RootPart.GetEffectiveObjectFlags(); @@ -2148,6 +2154,20 @@ namespace OpenSim.Region.Framework.Scenes m_scene.RemoveGroupTarget(this); } + scriptEvents rootPartPhysEvents = RootPart.AggregateScriptEvents; + rootPartPhysEvents &= PhysicsNeeedSubsEvents; + if (rootPartPhysEvents != lastRootPartPhysEvents) + { + lastRootPartPhysEvents = rootPartPhysEvents; + for (int i = 0; i < parts.Length; i++) + { + SceneObjectPart part = parts[i]; + if (part == null) + continue; + part.UpdatePhysicsSubscribedEvents(); + } + } + ScheduleGroupForFullUpdate(); } -- cgit v1.1