コード例 #1
0
        private void HandleSolidBlockCollision(Block collidingBlock)
        {
            _hasLandedOnBlock      = true;
            _isSmashingSmashBlocks = false;

            if (collidingBlock.HasBeenLandedOnSquarely(WorldPosition))
            {
                _motionEngine.PlayerIsOnGround = true;
                _didNotLandSafely = false;

                if (_motionEngine.Delta.Y > 0)
                {
                    WorldPosition -= new Vector2(0.0f, WorldPosition.Y - (collidingBlock.TopSurfaceY - Body_Collision_Radius));
                    bool specialBlock = false;

                    SpringBlock launcher = collidingBlock as SpringBlock;
                    if (launcher != null)
                    {
                        HandleSpringBlockLaunch(launcher); specialBlock = true;
                    }

                    if (!specialBlock)
                    {
                        IceBlock ice = collidingBlock as IceBlock;
                        if (ice != null)
                        {
                            HandleIceBlockImpact(); specialBlock = true;
                        }
                    }

                    if (!specialBlock)
                    {
                        BombBlock bomb = collidingBlock as BombBlock;
                        if (bomb != null)
                        {
                            HandleBombBlockImpact(bomb);
                        }
                    }
                }
            }
            else if ((CornerHasBeenClipped(collidingBlock.LeftSurfaceX, collidingBlock.TopSurfaceY)) ||
                     (CornerHasBeenClipped(collidingBlock.RightSurfaceX, collidingBlock.TopSurfaceY)))
            {
                _hasLandedOnBlock = false;
            }
            else if ((FacingAwayFromBlock(collidingBlock)) && (WorldPosition.Y < collidingBlock.WorldPosition.Y))
            {
                if (Math.Abs(WorldPosition.X - (collidingBlock.WorldPosition.X + (collidingBlock.CollisionBoundingBox.Width / 2.0f))) < Rear_Edge_Clip_Tolerance)
                {
                    _motionEngine.PlayerIsOnGround = true;
                }
                _didNotLandSafely = false;
            }
        }
コード例 #2
0
 public void WireUpBombBlockBlastColliders(Scene.ObjectRegistrationHandler registerObject)
 {
     for (int x = 0; x < MapDimensions.X; x++)
     {
         for (int y = 0; y < MapDimensions.Y; y++)
         {
             BombBlock block = GetTile(x, y) as BombBlock;
             if (block != null)
             {
                 _bombBlocks.Add(block);
                 registerObject(block.BlastCollider);
             }
         }
     }
 }
コード例 #3
0
 private void HandleBombBlockImpact(BombBlock bomb)
 {
     bomb.TriggerByImpact();
 }