コード例 #1
0
ファイル: Collidable.cs プロジェクト: stratts/Wisp
        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);
        }