protected virtual void CollisionDetection() { List <Object> collided = Level.CollidedWith(this); foreach (Object obj in collided) { this.CollisionResponse(obj); obj.CollisionResponse(this); } }
public override void Update(GameTime gameTime) { if (type == BlockType.MovableBlock) { movableBlock.Update(gameTime); } if (blockInfo != null && blockInfo.Moving == true) { List <Object> collided = Level.CollidedWith(this); List <Object> above = new List <Object>(); foreach (Object obj in collided) { Location location = LocationOf(obj); if (location == Location.ABOVE) { above.Add(obj); } } if (blockInfo.Positive) { position += blockInfo.Speed; foreach (Object obj in above) { obj.Position += blockInfo.Speed; } } else { position -= blockInfo.Speed; foreach (Object obj in above) { obj.Position -= blockInfo.Speed; } } // out of bound if (position.X < blockInfo.LeftBound || position.X > blockInfo.RightBound || position.Y < blockInfo.TopBound || position.Y > blockInfo.BottomBound) { blockInfo.Moving = false; } CollisionDetection(); } }