コード例 #1
0
        public Pause_Menu(Screen_Manager screen_manager, GameCamera _camera)
        {
            camera = _camera;

            rect = Assets.It.Get <Texture2D>("gui-rect");
            font = Assets.It.Get <SpriteFont>("gfont");

            actions = new Named_Action_List(new Dictionary <string, Action> {
                { "Resume", () => {
                      LostIslandRanal.Request_Resume();
                      showing = false;
                  } },
                { "Settings", () => {
                  } },
                { "Level Select", () =>
                  {
                      showing = false;
                      screen_manager.Goto_Screen("Level Select", false);
                  } },
                { "Exit", () => {
                      //LostIslandRanal.Request_Resume();
                      showing = false;
                      screen_manager.Goto_Screen("Menu", true);
                  } }
            });
        }
コード例 #2
0
        public override void Update(GameTime time, Entity entity)
        {
            // get all of the needed components
            var body      = (Body)entity.Get(Types.Body);
            var physics   = (Physics)entity.Get(Types.Physics);
            var sprite    = (Animated_Sprite)entity.Get(Types.Animation);
            var invatory  = (Invatory)entity.Get(Types.Invatory);
            var player    = (Player)entity.Get(Types.Player);
            var equipment = (Equipment)entity.Get(Types.Equipment);
            var dust      = (Entity_Particle_Emitter)entity.Get(Types.Entity_Particle_Emitter);

            // default the animation state to be the idle animation
            if (player.State != Player.Action_State.ATTACKING)
            {
                sprite.Current_Animation_ID = "player-idle";
            }

            //sprite.Color = new Color(1f, 1f, 1f, 0.2f);

            // get input
            var state  = GamePad.GetState(PlayerIndex.One);
            var x_axis = state.ThumbSticks.Left.X;
            var y_axis = state.ThumbSticks.Left.Y;
            var dash   = (state.Triggers.Left > 0.2f);
            var action = state.Buttons.A == ButtonState.Pressed;
            var attack = state.Buttons.X == ButtonState.Pressed;

            string player_run_anim = "player-run";

            if (equipment.Left_Hand != null)
            {
                if (player.State != Player.Action_State.ATTACKING)
                {
                    sprite.Current_Animation_ID = equipment.Left_Hand.Idle_Animation_ID;
                }

                player_run_anim = equipment.Left_Hand.Run_Animation_ID;
            }

            if (Input.It.Is_Key_Pressed(Keys.P))
            {
                global::System.Console.WriteLine($"Player Pos: {body.X} {body.Y}.");
            }

            if (player.Can_Move && player.State != Player.Action_State.DASHING && player.State != Player.Action_State.IN_INVATORY)
            {
                var mult  = (player.State == Player.Action_State.ATTACKING) ? player.Attack_Walk_Speed_Multiplyer : 1;
                var speed = 10 * mult;

                if (Input.It.Is_Key_Down(Keys.Space))
                {
                    body.Z = 1;
                }
                else
                {
                    body.Z = 0;
                }

                if (Input.It.Is_Key_Down(Keys.Left) || x_axis < 0)
                {
                    if (player.State != Player.Action_State.ATTACKING)
                    {
                        sprite.Current_Animation_ID = player_run_anim;
                    }
                    physics.Apply_Force(speed, Physics.Deg_To_Rad(180));
                    sprite.Scale = new Vector2(-1, sprite.Scale.Y);
                }

                if (Input.It.Is_Key_Down(Keys.Right) || x_axis > 0)
                {
                    if (player.State != Player.Action_State.ATTACKING)
                    {
                        sprite.Current_Animation_ID = player_run_anim;
                    }
                    physics.Apply_Force(speed, Physics.Deg_To_Rad(0));
                    sprite.Scale = new Vector2(1, sprite.Scale.Y);
                }

                if (Input.It.Is_Key_Down(Keys.Up) || y_axis > 0)
                {
                    physics.Apply_Force(speed * 0.8f, Physics.Deg_To_Rad(270));
                    if (player.State != Player.Action_State.ATTACKING)
                    {
                        sprite.Current_Animation_ID = player_run_anim;
                    }
                }

                if (Input.It.Is_Key_Down(Keys.Down) || y_axis < 0)
                {
                    if (player.State != Player.Action_State.ATTACKING)
                    {
                        sprite.Current_Animation_ID = player_run_anim;
                    }
                    physics.Apply_Force(speed * 0.8f, Physics.Deg_To_Rad(90));
                }
            }

            if (Input.It.Is_Key_Pressed(Keys.C))
            {
                sprite.Force_Play_Animation("player-smoke");
            }

            // Controll
            if (player.Dying)
            {
                player.Can_Move = false;
            }
            if (player.Can_Move)
            {
                if (Input.It.Is_Key_Pressed(Keys.LeftShift) == true || dash == true)
                {
                    if (player.Dash_Timer <= 0 && player.State != Player.Action_State.DASHING)
                    {
                        player.State = Player.Action_State.DASHING;
                        var direction = physics.Direction;
                        physics.Velocity = Vector2.Zero;
                        physics.Apply_Force(dash_speed, direction);
                        player.Dash_Timer = player.Max_Dash_Time;
                    }
                }

                if (player.Dash_Timer <= 0 && player.State == Player.Action_State.DASHING)
                {
                    player.State = Player.Action_State.RUNNING;
                }

                var _attack = Input.It.Is_Key_Pressed(Keys.X) || Input.It.Is_Gamepad_Button_Pressed(Buttons.X);
                if (_attack)
                {
                    player.Combo_Counter++;
                }

                if (_attack && player.State != Player.Action_State.ATTACKING)
                {
                    player.Combo_Counter = 0;
                    if (equipment.Left_Hand != null)
                    {
                        sprite.Current_Animation_ID = equipment.Left_Hand.Use_Animation_ID;
                        sprite.Current_Frame        = 0;
                        player.State = Player.Action_State.ATTACKING;

                        // create the collideable
                        Create_Sword_Hitbox(World_Ref, physics, body);
                    }
                }
                else
                {
                    if (player.State == Player.Action_State.ATTACKING)
                    {
                        if (sprite.Current_Frame == 6 - 1)
                        {
                            if (player.Combo_Counter == 0)
                            {
                                player.State           = Player.Action_State.IDLE;
                                player.Combo_Counter   = 0;
                                player.Performed_Combo = false;
                            }
                        }

                        if (sprite.Current_Frame == 10 - 1 && player.Combo_Counter > 0 && player.Performed_Combo == false)
                        {
                            Create_Sword_Hitbox(World_Ref, physics, body);
                            player.Performed_Combo = true;
                        }

                        if (sprite.Animation_End)
                        {
                            player.Performed_Combo = false;
                            player.Combo_Counter   = 0;
                            player.State           = Player.Action_State.IDLE;
                        }
                    }
                }
            }
            player.Dash_Timer -= (float)time.ElapsedGameTime.TotalSeconds;


            // Dealing with the killing of the player
            if (entity.Get(Component.Types.Health) is Health health)
            {
                if (health.Amount <= 0 && !player.Dying)
                {
                    player.Dying         = true;
                    player.Going_To_Menu = false;
                    sprite.Force_Play_Animation("player-die");
                    return;
                }
            }

            if (player.Dying && sprite.Animation_End && !player.Going_To_Menu)
            {
                player.Going_To_Menu = true;
                sprite.Force_Play_Animation("player-die");
                sprite.Current_Frame = sprite.Animations[sprite.Current_Animation_ID].Frames.Count - 1;
                sprite.Playing       = false;
                screen_manager.Goto_Screen("Menu", true);
            }

            // (TEMP): toggle the equipment
            if (Input.It.Is_Key_Pressed(Keys.E))
            {
                if (equipment.Left_Hand != null)
                {
                    equipment.Left_Hand = null;
                }
                else
                {
                    // TODO: Clean this up so that i dont hard code the player equipment
                    equipment.Left_Hand = Claymore;
                }
            }

            // handle the dust emitter
            if (dust != null)
            {
                dust.Active = physics.Current_Speed > 1.2f;
                dust.Offset = new Vector2(dust.Offset.X, -8);
                if (physics.Vel_X > 0)
                {
                    dust.Offset = new Vector2(-4, dust.Offset.Y);
                }
                else
                {
                    dust.Offset = new Vector2(-8, dust.Offset.Y);
                }
            }

            camera.Track(body, 0.1f);
        }