Ejemplo n.º 1
0
        private Block CreateBlock(XElement node)
        {
            Block newBlock = new Block();
            newBlock.WorldPosition = new Vector2((float)node.Attribute("x"), (float)node.Attribute("y"));
            newBlock.Texture = TextureManager.Textures[node.Attribute("texture").Value];

            return newBlock;
        }
Ejemplo n.º 2
0
 private void HandleBlockCollision(Block collidingBlock)
 {
     if (collidingBlock is ObstructionBlock) { HandleObstructionBlockCollision((ObstructionBlock)collidingBlock); }
     else if (collidingBlock is SmashBlock) { HandleSmashBlockCollision((SmashBlock)collidingBlock); }
     else { HandleSolidBlockCollision(collidingBlock); }
 }
Ejemplo n.º 3
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;
            }
        }
Ejemplo n.º 4
0
 private bool FacingAwayFromBlock(Block collidingBlock)
 {
     if ((_motionEngine.IsMovingLeft) && (WorldPosition.X < collidingBlock.WorldPosition.X)) { return true; }
     if ((!_motionEngine.IsMovingLeft) && (WorldPosition.X > collidingBlock.WorldPosition.X)) { return true; }
     return false;
 }