For ScenePresence collision events, instead of creating a new CollisionEventsThisFrame every time we need to send some new ones, reuse the existing one instead.
This assumes that the listener is using the data synchronously, which is currently the case.remove-scene-viewer
							parent
							
								
									7b6b36cee9
								
							
						
					
					
						commit
						5d37f0471e
					
				| 
						 | 
				
			
			@ -2248,6 +2248,7 @@ namespace OpenSim.Region.Framework.Scenes
 | 
			
		|||
                            });
 | 
			
		||||
                        }
 | 
			
		||||
                    }
 | 
			
		||||
 | 
			
		||||
                    if (colliding.Count > 0)
 | 
			
		||||
                    {
 | 
			
		||||
                        StartCollidingMessage.Colliders = colliding;
 | 
			
		||||
| 
						 | 
				
			
			@ -2255,10 +2256,11 @@ namespace OpenSim.Region.Framework.Scenes
 | 
			
		|||
                        if (m_parentGroup.Scene == null)
 | 
			
		||||
                            return;
 | 
			
		||||
 | 
			
		||||
                        if (m_parentGroup.PassCollision == true)
 | 
			
		||||
                        {
 | 
			
		||||
                            //TODO: Add pass to root prim!
 | 
			
		||||
                        }
 | 
			
		||||
//                        if (m_parentGroup.PassCollision == true)
 | 
			
		||||
//                        {
 | 
			
		||||
//                            //TODO: Add pass to root prim!
 | 
			
		||||
//                        }
 | 
			
		||||
 | 
			
		||||
                        m_parentGroup.Scene.EventManager.TriggerScriptCollidingStart(LocalId, StartCollidingMessage);
 | 
			
		||||
                    }
 | 
			
		||||
                }
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -113,6 +113,14 @@ namespace OpenSim.Region.Physics.Manager
 | 
			
		|||
                    m_objCollisionList[localID] = contact;
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// Clear added collision events.
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        public void Clear()
 | 
			
		||||
        {
 | 
			
		||||
            m_objCollisionList.Clear();
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public abstract class PhysicsActor
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1235,11 +1235,9 @@ namespace OpenSim.Region.Physics.OdePlugin
 | 
			
		|||
        {
 | 
			
		||||
            if (m_eventsubscription > m_requestedUpdateFrequency)
 | 
			
		||||
            {
 | 
			
		||||
                if (CollisionEventsThisFrame != null)
 | 
			
		||||
                {
 | 
			
		||||
                    base.SendCollisionUpdate(CollisionEventsThisFrame);
 | 
			
		||||
                }
 | 
			
		||||
                CollisionEventsThisFrame = new CollisionEventUpdate();
 | 
			
		||||
                base.SendCollisionUpdate(CollisionEventsThisFrame);
 | 
			
		||||
 | 
			
		||||
                CollisionEventsThisFrame.Clear();
 | 
			
		||||
                m_eventsubscription = 0;
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in New Issue