コード例 #1
0
        public void Handle(ICollidable player, ICollidable solidBlock, CollisionDirection.DirectionTag direction)
        {
            if (typeof(IMario).IsInstanceOfType(player) && typeof(SolidBlock).IsInstanceOfType(solidBlock))
            {
                this.player     = (IMario)player;
                this.solidBlock = (SolidBlock)solidBlock;
                Console.WriteLine(this.solidBlock.Physics.xPosition + " " + this.solidBlock.Physics.yPosition);
                switch (direction)
                {
                case CollisionDirection.DirectionTag.Top:
                    this.player.SetYPosition(this.solidBlock.GetTopSide() - player.GetHeight());
                    this.player.Ground();
                    break;

                case CollisionDirection.DirectionTag.Bottom:
                    this.player.SetYPosition(this.solidBlock.GetBottomSide() + 1);
                    break;

                case CollisionDirection.DirectionTag.Left:
                    this.player.SetXPosition(this.solidBlock.GetLeftSide() - player.GetWidth());
                    break;

                case CollisionDirection.DirectionTag.Right:
                    this.player.SetXPosition(this.solidBlock.GetRightSide() + 1);
                    break;

                default:
                    Console.WriteLine("Unexpected Direction Received in Collision.PlayerWithQuestionBlock");
                    break;
                }
            }
        }
コード例 #2
0
        public void Handle(ICollidable player, ICollidable solidBlock, CollisionDirection.DirectionTag direction)
        {
            if (typeof(IMario).IsInstanceOfType(player) && typeof(SolidBlock).IsInstanceOfType(solidBlock))
            {
                this.player     = (IMario)player;
                this.solidBlock = (SolidBlock)solidBlock;
                Console.WriteLine(this.solidBlock.Physics.xPosition + " " + this.solidBlock.Physics.yPosition);
                switch (direction)
                {
                case CollisionDirection.DirectionTag.Top:
                    this.player.SetYPosition(this.solidBlock.GetTopSide() - player.GetHeight());
                    this.player.Ground();
                    break;

                case CollisionDirection.DirectionTag.Bottom:
                    ((GameObject)player).Physics.yVelocity = 0;
                    this.player.StopJumping();
                    this.player.SetYPosition(this.solidBlock.GetBottomSide() + 1);
                    break;

                case CollisionDirection.DirectionTag.Left:
                    this.player.SetXPosition(this.solidBlock.GetLeftSide() - player.GetWidth());
                    break;

                case CollisionDirection.DirectionTag.Right:
                    this.player.SetXPosition(this.solidBlock.GetRightSide() + 1);
                    break;

                default:
                    Console.WriteLine(Config.GetCollisionResolutionException() + GetType().ToString());
                    break;
                }
            }
        }
コード例 #3
0
ファイル: RoomLoader.cs プロジェクト: johnfleming123/Zelda
        void addBlock(String line)
        {
            String[] split = line.Split(',');
            IObject  block;
            //Debug.WriteLine(split[0]);
            float x = ((Int32.Parse(split[1]) - 1) * blockBaseDimension * blockSizeMod) + screenX + (2 * blockBaseDimension * blockSizeMod);
            float y = ((Int32.Parse(split[2]) - 1) * blockBaseDimension * blockSizeMod) + screenY + (2 * blockBaseDimension * blockSizeMod);

            switch (split[0])
            {
            case "bluesandblock":
                block = new BlueSandBlock(sprites["tileset"], new Vector2(x, y));
                break;

            case "dragonblock":
                block = new DragonBlock(sprites["tileset"], new Vector2(x, y));
                break;

            case "dungeonblock":
                block = new DungeonBlock(sprites["tileset"], new Vector2(x, y));
                break;

            case "pushableblock":
                block = new PushableBlock(sprites["tileset"], new Vector2(x, y), split[3]);
                break;

            case "stairsblock":
                block = new StairsBlock(sprites["tileset"], new Vector2(x, y));
                break;

            case "fireblock":
                block = new FireBlock(sprites["fire"], new Vector2(x + 8, y));
                break;

            case "fishblock":
                block = new FishBlock(sprites["tileset"], new Vector2(x, y));
                break;

            case "solidblock":
                Color c = Color.Transparent;
                if (split[3] == "blue")
                {
                    c = Color.Blue;
                }
                block = new SolidBlock(sprites["Backgrounds"], new Vector2(x, y), c);
                break;

            default:
                block = new DungeonBlock(sprites["tileset"], new Vector2(x, y));
                break;
            }
            Blocks.Add(block);
        }