Project290.Games.Solitude.SolitudeObjects.Player.Update C# (CSharp) Method

Update() public method

public Update ( ) : void
return void
        public override void Update()
        {
            if (jetpackZero + TimeSpan.FromSeconds(3) < DateTime.Now)
            {
                refuelling = true;
            }
            if (refuelling && fuel < fuelCap)
            {
                if (refuel % 2 == 0)
                {
                    fuel++;
                }
                refuel++;
            }
            //update health and fuel bars
            hpBar.Update();
            fBar.Update();

            //if moving, make sure not on wall
            if (!body.LinearVelocity.Equals(Vector2.Zero))
            {
                jumpCounter = 0;
                onWall = false;
                standingOn = null;
            }
            if (onWall)
            {
                //get input
                vector.X =  GameElements.GameWorld.controller.ContainsFloat(Inputs.ActionType.MoveHorizontal);
                vector.Y = -1 * GameElements.GameWorld.controller.ContainsFloat(Inputs.ActionType.MoveVertical);

                //if B pressed on door, enter next room
                if (standingOn is Door && GameElements.GameWorld.controller.ContainsBool(Inputs.ActionType.BButtonFirst))
                {
                    (standingOn as Door).Enter();
                    jumpCounter = 0;
                }

                //if the A button is held down
                if (GameElements.GameWorld.controller.ContainsBool(Inputs.ActionType.AButton))
                {
                    //power up jump
                    if (jumpCounter < 125)
                    {
                        jumpCounter++;
                    }else{
                        jumpCounter = 100;
                    }
                    // Draw arrow
                    vector.Normalize();
                    int arrowDistance = 50;

                    rotation = (float)Math.Atan(vector.Y / vector.X) - (float)Math.PI / 2;
                    if (vector.X >= 0)
                        rotation += (float)Math.PI;

                    arrowbodyPosition = new Vector2(
                        body.Position.X + arrowDistance * vector.X,
                        body.Position.Y + arrowDistance * vector.Y);
                    arrowheadPosition = new Vector2(
                        arrowbodyPosition.X + vector.X * (jumpCounter + 15),
                        arrowbodyPosition.Y + vector.Y * (jumpCounter + 15));
                }
                else //A is not pressed
                {
                    if (jumpCounter > 0)
                    {
                        //jump
                        if (!vector.Equals(Vector2.Zero))
                        {
                            vector.Normalize();
                            body.ApplyLinearImpulse(2000 * vector * (jumpCounter + 25));
                            onWall = false;
                            standingOn = null;
                        }
                    }
                    jumpCounter = 0;
                }

            }

            //update jetpack
            if (hasJetpack && fuel > 0)
            {

                vector.X = GameElements.GameWorld.controller.ContainsFloat(Inputs.ActionType.LookHorizontal);
                vector.Y = -1 * GameElements.GameWorld.controller.ContainsFloat(Inputs.ActionType.LookVertical);
                if (!vector.Equals(Vector2.Zero))
                {
                    jetpackZero = DateTime.Now;
                    refuelling = false;
                    refuel = 0;
                    vector.Normalize();
                    fuel--;
                    body.ApplyForce(vector * Settings.jetPackForceMult);
                    hasUsedJetPack = true;
                    if (JetPackState < 100)
                        JetPackState++;
                }
            }

            //set a bomb
            if (GameElements.GameWorld.controller.ContainsBool(Inputs.ActionType.XButtonFirst))
            {
                if (Settings.maxBombs > SolitudeScreen.ship.bombCount && !onWall && numBombs > 0)
                {
                    vector.X = GameElements.GameWorld.controller.ContainsFloat(Inputs.ActionType.MoveHorizontal);
                    vector.Y = -1 * GameElements.GameWorld.controller.ContainsFloat(Inputs.ActionType.MoveVertical);

                    //if the player is holding a direction
                    if (!vector.Equals(Vector2.Zero))
                    {
                        vector.Normalize();
                        //numBombs--;
                        body.ApplyForce(vector * Settings.bombForce);

                        //calculate the bomb's speed
                        Vector2 bombSpeed = new Vector2();
                        bombSpeed = -1 * vector * body.LinearVelocity.Length();

                        Bomb b = new Bomb(body.Position - 50 * vector, SolitudeScreen.ship.PhysicalWorld, bombSpeed);
                        SolitudeScreen.ship.contents.Add(b);
                        SolitudeScreen.ship.bombCount++;
                    }
                }
            }

            if (oxygen <= 0 )
            {
                if (lives > 0 /*&& !hasDiedRecently*/)
                {
                    //die, and place player back at start of room
                    lives--;
                    standingOn = enterDoor;
                    body.Position = enterPosition;
                    onWall = true;
                    body.LinearVelocity = Vector2.Zero;
                    body.AngularVelocity = 0f;
                    oxygen = oxygenCap;
                    hasDiedRecently = true;
                    SolitudeScreen.ship.ResetRoom();
                }
                else
                {
                    SolitudeScreen.ship.screen.GameOver();
                    //SolitudeScreen.ship.endGameFlag = true;
                    //gameover
                }
            }
        }