public override void Update(Scene scene) { var current = this; var nodeManager = scene.NodeManager; var entity = Parent; Point size; if (current.Size == Point.Zero) { current.Size = entity.Size; } size = current.Size; current.collisionBox.UpdateBox(entity.ScenePos + current.Pos, new Vector2(size.X, size.Y)); if (IsStatic(entity)) { return; } var collidableComponents = nodeManager.GetComponents <Collidable>(); foreach (Collidable other in collidableComponents) { if (current != other) { if (current.Mask >= 0 && other.Mask >= 0 && current.Mask == other.Mask) { continue; } var box = current.collisionBox; var collision = box.CheckCollision(other.collisionBox); if (collision != null) { var collisionEvent = new CollisionEvent() { source = entity, target = other.Parent, collision = collision, IsNew = !previousCollisions.Contains(other.Parent) }; currentCollisions.Add(other.Parent); scene.AddEvent(collisionEvent); } } } previousCollisions.Clear(); foreach (var collision in currentCollisions) { previousCollisions.Add(collision); } currentCollisions.Clear(); base.Update(scene); }