コード例 #1
0
        public override void Update()
        {
            if (Input.Pressed(Mouse.Button.Right))
            {
                World.Remove(hat);

                if (hat is NoHat)
                {
                    hat = new Ninja(this);
                }
                else
                {
                    hat = new NoHat(this);
                }

                World.Add(hat);
            }


            //Movement
            if (!isHurt)
            {
                if (Input.Pressed(Keyboard.Key.Space) && physics.velocity.Y == 0)
                {
                    physics.velocity.Y += jumpForce;
                    bodySprites.Play("Jump");
                    if (!isAttacking)
                    {
                        faceSprites.Play("Jump");
                    }
                }

                if (Input.Check(Keyboard.Key.A))
                {
                    physics.velocity.X -= this.speed;
                }
                if (Input.Check(Keyboard.Key.D))
                {
                    physics.velocity.X += this.speed;
                }

                if (Input.Check(Keyboard.Key.S))
                {
                    if (!isDucking)
                    {
                        bodySprites.Play("Duck");
                    }
                    isDucking = true;
                }
                else
                {
                    if (isDucking)
                    {
                        bodySprites.Play("Stand");
                    }
                    isDucking = false;
                }

                //Attack
                if (Input.Pressed(Mouse.Button.Left))
                {
                    string nextAnim = hat.attackStart();
                    if (nextAnim != "")
                    {
                        faceSprites.Play(nextAnim);
                    }
                    isAttacking = true;
                }
                else if (Input.Released(Mouse.Button.Left))
                {
                    faceSprites.Play("Release");
                }
            }

            base.Update();

            //Animation stuff
            if (!isHurt)
            {
                //Flippin' stuffs
                if (physics.velocity.X > 0)
                {
                    bodySprites.FlippedX = false;
                    faceSprites.FlippedX = false;
                    Hat.hatmap.FlippedX  = false;
                }
                else if (physics.velocity.X < 0)
                {
                    bodySprites.FlippedX = true;
                    faceSprites.FlippedX = true;
                    Hat.hatmap.FlippedX  = true;
                }

                //Ground
                if (physics.isGrounded)
                {
                    if (isDucking)
                    {
                        //Idle
                        if (physics.velocity.X == 0)
                        {
                            bodySprites.Play("DuckIdle");
                        }
                        //Run
                        else
                        {
                            bodySprites.Play("DuckShuffle", false);
                        }
                    }
                    else
                    {
                        //Idle
                        if (physics.velocity.X == 0 && bodySprites.CurrentAnim != "Stand")
                        {
                            bodySprites.Play("Idle");
                            if (!isAttacking)
                            {
                                faceSprites.Play("Idle");
                            }
                        }
                        //Run
                        else if (physics.velocity.X != 0)
                        {
                            bodySprites.Play("Run");
                            if (!isAttacking)
                            {
                                faceSprites.Play("Run");
                            }
                        }
                    }
                }
                else                 //In air
                {
                    if (physics.velocity.Y > 0)
                    {
                        bodySprites.Play("JumpIdle");
                        //faceSprites.Play("JumpIdle");
                    }
                    else if (bodySprites.CurrentAnim != "FallIdle")
                    {
                        bodySprites.Play("Fall");
                        if (!isAttacking)
                        {
                            faceSprites.Play("Fall");
                        }
                    }
                }
            }

            bodySprites.Update();

            //get y offset of the face
            if (bodySprites.CurrentAnim != "")
            {
                AnimationData animData = BodyAnimDict[bodySprites.CurrentAnim];
                int[]         yoffset  = animData.yFacePoints;
                if (yoffset != null)
                {
                    faceSprites.OriginY = bodySprites.Height - yoffset[bodySprites.Index] / 4
                                          + faceSprites.Height - 10;
                }
            }

            faceSprites.Update();
        }