Beispiel #1
0
        protected override IEnumerable <bool> E_Draw()
        {
            for (int frame = 0; ; frame++)
            {
                if (DDInput.A.GetInput() == 1)                 // ? ジャンプ押下
                {
                    break;
                }

                //int koma = frame;
                int koma = frame / 2;
                //int koma = frame / 3;

                if (Ground.I.Picture2.Tewi_ジャンプ中攻撃.Length <= koma)
                {
                    break;
                }

                double x          = Game.I.Player.X;
                double y          = Game.I.Player.Y;
                double xZoom      = Game.I.Player.FacingLeft ? -1.0 : 1.0;
                bool   facingLeft = Game.I.Player.FacingLeft;

                if (frame == 0)
                {
                    // TODO: 当たり判定設定
                }

                AttackCommon.ProcPlayer_移動();
                AttackCommon.ProcPlayer_Fall();

                AttackCommon.ProcPlayer_側面();
                AttackCommon.ProcPlayer_脳天();

                if (AttackCommon.ProcPlayer_接地())
                {
                    break;
                }

                DDDraw.SetTaskList(Game.I.Player.Draw_EL);
                DDDraw.DrawBegin(
                    Ground.I.Picture2.Tewi_ジャンプ中攻撃[koma],
                    x - DDGround.ICamera.X,
                    y - DDGround.ICamera.Y
                    );
                DDDraw.DrawZoom_X(xZoom);
                DDDraw.DrawEnd();
                DDDraw.Reset();

                yield return(true);
            }
        }
Beispiel #2
0
        protected override IEnumerable <bool> E_Draw()
        {
            for (int frame = 0; ; frame++)
            {
                if (1 <= frame && DDInput.B.GetInput() == 1)                 // ? 再発砲
                {
                    frame = 0;
                }

                double x          = Game.I.Player.X;
                double y          = Game.I.Player.Y;
                double xZoom      = Game.I.Player.FacingLeft ? -1.0 : 1.0;
                bool   facingLeft = Game.I.Player.FacingLeft;

                if (frame == 0)
                {
                    Game.I.Shots.Add(new Shot_ほむら滞空攻撃(
                                         x + 50.0 * xZoom,
                                         y - 18.0,
                                         facingLeft
                                         ));
                }

                int koma = Math.Min((frame + 15) / 4, Ground.I.Picture2.ほむら滞空攻撃.Length - 1);

                AttackCommon.ProcPlayer_移動();
                AttackCommon.ProcPlayer_Fall();

                AttackCommon.ProcPlayer_側面();
                AttackCommon.ProcPlayer_脳天();

                if (AttackCommon.ProcPlayer_接地())
                {
                    break;
                }

                DDDraw.SetTaskList(Game.I.Player.Draw_EL);
                DDDraw.DrawBegin(
                    Ground.I.Picture2.ほむら滞空攻撃[koma],
                    x - DDGround.ICamera.X,
                    y - DDGround.ICamera.Y
                    );
                DDDraw.DrawZoom_X(xZoom);
                DDDraw.DrawEnd();
                DDDraw.Reset();

                yield return(true);
            }
        }
Beispiel #3
0
        protected override IEnumerable <bool> E_Draw()
        {
            for (int frame = 0; ; frame++)
            {
                int koma = frame / 4;

                if (3 <= koma)
                {
                    break;
                }

                // 移動
                {
                    const double SPEED = 3.0;

                    if (Game.I.Player.FacingLeft)
                    {
                        Game.I.Player.X -= SPEED;
                    }
                    else
                    {
                        Game.I.Player.X += SPEED;
                    }
                }

                AttackCommon.ProcPlayer_側面();

                double xZoom = Game.I.Player.FacingLeft ? -1.0 : 1.0;

                DDDraw.SetTaskList(Game.I.Player.Draw_EL);
                DDDraw.DrawBegin(
                    Ground.I.Picture2.さやか突き[koma],
                    Game.I.Player.X - DDGround.ICamera.X + 30.0 * xZoom,
                    Game.I.Player.Y - DDGround.ICamera.Y
                    );
                DDDraw.DrawZoom_X(xZoom);
                DDDraw.DrawEnd();
                DDDraw.Reset();

                yield return(true);
            }
            for (int frame = 0; frame < 60; frame++)
            {
                if (
                    10 < frame &&
                    DDInput.C.GetInput() <= 0                     // ? 特殊攻撃ボタンを離した。
                    )
                {
                    break;
                }

                int koma = 3 + (frame / 3) % 3;

                // 移動
                {
                    const double SPEED_X = 12.0;
                    const double SPEED_Y = 2.0;

                    if (Game.I.Player.FacingLeft)
                    {
                        Game.I.Player.X -= SPEED_X;
                    }
                    else
                    {
                        Game.I.Player.X += SPEED_X;
                    }

                    if (1 <= DDInput.DIR_8.GetInput())
                    {
                        Game.I.Player.Y -= SPEED_Y;
                    }

                    if (1 <= DDInput.DIR_2.GetInput())
                    {
                        Game.I.Player.Y += SPEED_Y;
                    }
                }

                AttackCommon.ProcPlayer_脳天();
                AttackCommon.ProcPlayer_接地();

                if (AttackCommon.ProcPlayer_側面())
                {
                    break;
                }

                double xZoom = Game.I.Player.FacingLeft ? -1.0 : 1.0;

                Game.I.Shots.Add(new Shot_さやか突き(
                                     Game.I.Player.X + 50.0 * xZoom,
                                     Game.I.Player.Y,
                                     Game.I.Player.FacingLeft
                                     ));

                DDDraw.SetTaskList(Game.I.Player.Draw_EL);
                DDDraw.DrawBegin(
                    Ground.I.Picture2.さやか突き[koma],
                    Game.I.Player.X - DDGround.ICamera.X,
                    Game.I.Player.Y - DDGround.ICamera.Y + 8.0
                    );
                DDDraw.DrawZoom_X(xZoom);
                DDDraw.DrawEnd();
                DDDraw.Reset();

                yield return(true);
            }
            for (int frame = 0; ; frame++)
            {
                int koma = 6 + frame / 2;

                if (10 <= koma)
                {
                    break;
                }

                double xZoom = Game.I.Player.FacingLeft ? -1.0 : 1.0;

                DDDraw.SetTaskList(Game.I.Player.Draw_EL);
                DDDraw.DrawBegin(
                    Ground.I.Picture2.さやか突き[koma],
                    Game.I.Player.X - DDGround.ICamera.X + 30.0 * xZoom,
                    Game.I.Player.Y - DDGround.ICamera.Y
                    );
                DDDraw.DrawZoom_X(xZoom);
                DDDraw.DrawEnd();
                DDDraw.Reset();

                yield return(true);
            }

            // 後処理
            {
                Game.I.Player.YSpeed = 0.0;
            }
        }
Beispiel #4
0
        protected override IEnumerable <bool> E_Draw()
        {
            const int SHOOTING_FRAME_MAX = 15;
            //const int SHOOTING_FRAME_MAX = 10; // old

            int shootingFrame = 0;             // 0 == 無効, 1~ == 射撃モーション (カウントダウン方式)

            // 梯子の中央に寄せる。
            // -- 複数箇所から new Attack_Ladder() されるので、ここでやるのが妥当
            Game.I.Player.X = GameCommon.ToTablePoint(new D2Point(Game.I.Player.X, 0.0)).X *GameConsts.TILE_W + GameConsts.TILE_W / 2;

            for (int frame = 0; ; frame++)
            {
                if (AttackCommon.CamSlide())
                {
                    goto endPlayer;
                }

                if (DDInput.DIR_8.GetInput() == 0 && 1 <= DDInput.A.GetInput()) // ? 上ボタンを離して、ジャンプボタン押下
                {
                    if (1 <= DDInput.DIR_2.GetInput())                          // ? 下ボタン押下 -> ジャンプしない。
                    {
                        Game.I.Player.JumpFrame = 0;
                        Game.I.Player.JumpCount = 0;

                        Game.I.Player.YSpeed = 0.0;
                    }
                    else                     // ? 下ボタンを離している -> ジャンプする。
                    {
                        Game.I.Player.JumpFrame = 1;
                        Game.I.Player.JumpCount = 1;

                        Game.I.Player.YSpeed = GameConsts.PLAYER_ジャンプ初速度;
                    }

                    // スライディングさせないために滞空状態にする。
                    // -- 入力猶予を考慮して、大きい値を設定する。
                    Game.I.Player.AirborneFrame = SCommon.IMAX / 2;

                    break;
                }

                if (1 <= DDInput.DIR_4.GetInput())
                {
                    Game.I.Player.FacingLeft = true;
                }

                if (1 <= DDInput.DIR_6.GetInput())
                {
                    Game.I.Player.FacingLeft = false;
                }

                // 移動
                if (shootingFrame == 0)                 // 射撃モーション時は移動出来ない。
                {
                    const double SPEED   = 2.5;
                    const double 加速_RATE = 0.5;

                    bool moved = false;

                    if (1 <= DDInput.DIR_8.GetInput())
                    {
                        Game.I.Player.Y -= Math.Min(SPEED, DDInput.DIR_8.GetInput() * 加速_RATE);
                        moved            = true;
                    }
                    if (1 <= DDInput.DIR_2.GetInput())
                    {
                        Game.I.Player.Y += Math.Min(SPEED, DDInput.DIR_2.GetInput() * 加速_RATE);
                        moved            = true;
                    }

                    if (moved)
                    {
                        // none
                    }
                }

                bool 攻撃ボタンを押した瞬間撃つ = Ground.I.ショットのタイミング == Ground.ショットのタイミング_e.ショットボタンを押し下げた時;
                bool shot          = false;

                if (1 <= DDInput.B.GetInput())
                {
                    if (攻撃ボタンを押した瞬間撃つ && DDInput.B.GetInput() == 1)
                    {
                        Game.I.Player.Shoot(1);
                        shot = true;
                    }
                    Game.I.Player.ShotChargePCT++;
                    DDUtils.Minim(ref Game.I.Player.ShotChargePCT, 100);
                }
                else
                {
                    int level     = GameCommon.ShotChargePCTToLevel(Game.I.Player.ShotChargePCT);
                    int chargePct = Game.I.Player.ShotChargePCT;
                    Game.I.Player.ShotChargePCT = 0;

                    if (攻撃ボタンを押した瞬間撃つ ? 2 <= level : 1 <= chargePct)
                    {
                        Game.I.Player.Shoot(level);
                        shot = true;
                    }
                }
                if (shot)
                {
                    shootingFrame = SHOOTING_FRAME_MAX;
                }
                else
                {
                    DDUtils.CountDown(ref shootingFrame);
                }

                //AttackCommon.ProcPlayer_移動();
                //AttackCommon.ProcPlayer_Fall();
                //AttackCommon.ProcPlayer_側面();
                AttackCommon.ProcPlayer_脳天();

                if (AttackCommon.ProcPlayer_接地())
                {
                    Game.I.Player.JumpFrame = 0;
                    Game.I.Player.JumpCount = 0;

                    Game.I.Player.YSpeed = 0.0;

                    break;
                }

                // ? 梯子の下に出た。
                if (
                    Game.I.Map.GetCell(GameCommon.ToTablePoint(new D2Point(Game.I.Player.X, Game.I.Player.Y + GameConsts.TILE_H * 0))).Tile.GetKind() != Tile.Kind_e.LADDER &&
                    Game.I.Map.GetCell(GameCommon.ToTablePoint(new D2Point(Game.I.Player.X, Game.I.Player.Y + GameConsts.TILE_H * 1))).Tile.GetKind() != Tile.Kind_e.LADDER
                    )
                {
                    Game.I.Player.JumpFrame = 0;
                    Game.I.Player.JumpCount = 0;

                    Game.I.Player.YSpeed = 0.0;

                    break;
                }
endPlayer:

                DDPicture picture;
                double xZoom;

                if (1 <= shootingFrame)
                {
                    picture = Ground.I.Picture.Chara_A01_Climb_Attack;
                    xZoom   = Game.I.Player.FacingLeft ? -1.0 : 1.0;
                }
                else
                {
                    if (Game.I.Map.GetCell(GameCommon.ToTablePoint(new D2Point(Game.I.Player.X, Game.I.Player.Y))).Tile.GetKind() == Tile.Kind_e.LADDER)
                    {
                        picture = Ground.I.Picture.Chara_A01_Climb[(int)Game.I.Player.Y / 20 % 2];
                    }
                    else
                    {
                        picture = Ground.I.Picture.Chara_A01_Climb_Top;
                    }

                    xZoom = 1.0;
                }

                double x = Game.I.Player.X;
                double y = Game.I.Player.Y;

                // 整数化
                x = (int)x;
                y = (int)y;

                DDDraw.SetTaskList(Game.I.Player.Draw_EL);
                DDDraw.DrawBegin(
                    picture,
                    x - DDGround.ICamera.X,
                    y - DDGround.ICamera.Y
                    );
                DDDraw.DrawZoom_X(xZoom);
                DDDraw.DrawEnd();
                DDDraw.Reset();

                yield return(true);
            }
        }
Beispiel #5
0
        protected override IEnumerable <bool> E_Draw()
        {
            DDGround.EL.Add(SCommon.Supplier(Effects.スライディング(Game.I.Player.X, Game.I.Player.Y + 20.0)));

            for (int frame = 0; ; frame++)
            {
                if (10 < frame)                                                         // ? 最低持続時間経過
                {
                    if (AttackCommon.GetPlayer_側面(4) != 3)                              // ? ここは立ち上がれる場所である。
                    {
                        if (DDInput.A.GetInput() <= 0 || DDInput.DIR_2.GetInput() <= 0) // ? 下・ジャンプボタン少なくともどちらかを離している。
                        {
                            break;
                        }
                    }
                }

                if (AttackCommon.GetPlayer_側面(2) != 0)                 // ? 壁に当たっている。
                {
                    if (AttackCommon.GetPlayer_側面(4) != 3)             // ? ここは立ち上がれる場所である。
                    {
                        if (DDInput.A.GetInput() == 1)                 // ? ジャンプボタンを押した。
                        {
                            break;
                        }
                    }
                }

                if (1 <= DDInput.DIR_4.GetInput())
                {
                    Game.I.Player.FacingLeft = true;
                }

                if (1 <= DDInput.DIR_6.GetInput())
                {
                    Game.I.Player.FacingLeft = false;
                }

                // 移動
                {
                    const double SPEED = 10.0;

                    if (Game.I.Player.FacingLeft)
                    {
                        Game.I.Player.X -= SPEED;
                    }
                    else
                    {
                        Game.I.Player.X += SPEED;
                    }
                }

                //AttackCommon.ProcPlayer_移動();
                AttackCommon.ProcPlayer_Fall();
                AttackCommon.ProcPlayer_側面(2);
                AttackCommon.ProcPlayer_脳天();

                if (!AttackCommon.ProcPlayer_接地())
                {
                    //Game.I.Player.AirborneFrame = 1; // 崖の淵に立ってしまわないように滞空状態にする。
                    Game.I.Player.AirborneFrame = SCommon.IMAX / 2;                     // ジャンプしてしまわないように十分大きな値を設定する。
                    break;
                }

                double xZoom = Game.I.Player.FacingLeft ? -1.0 : 1.0;

                DDDraw.SetTaskList(Game.I.Player.Draw_EL);
                DDDraw.DrawBegin(
                    Ground.I.Picture.Chara_A01_Sliding,
                    Game.I.Player.X - DDGround.ICamera.X,
                    Game.I.Player.Y - DDGround.ICamera.Y
                    );
                DDDraw.DrawZoom_X(xZoom);
                DDDraw.DrawEnd();
                DDDraw.Reset();

                yield return(true);
            }
        }