Exemple #1
0
        public void Lower(Player player, PlayerSpriteDef psp)
        {
            psp.Sy += WeaponBehavior.LowerSpeed;

            // Is already down.
            if (psp.Sy < WeaponBehavior.WeaponBottom)
            {
                return;
            }

            // Player is dead.
            if (player.PlayerState == PlayerState.Dead)
            {
                psp.Sy = WeaponBehavior.WeaponBottom;

                // don't bring weapon back up
                return;
            }

            var pb = this.world.PlayerBehavior;

            // The old weapon has been lowered off the screen,
            // so change the weapon and start raising it.
            if (player.Health == 0)
            {
                // Player is dead, so keep the weapon off screen.
                pb.SetPlayerSprite(player, PlayerSprite.Weapon, MobjState.Null);

                return;
            }

            player.ReadyWeapon = player.PendingWeapon;

            pb.BringUpWeapon(player);
        }
Exemple #2
0
        public void WeaponReady(Player player, PlayerSpriteDef psp)
        {
            var pb = this.world.PlayerBehavior;

            // Get out of attack state.
            if (player.Mobj.State == DoomInfo.States[(int)MobjState.PlayAtk1] || player.Mobj.State == DoomInfo.States[(int)MobjState.PlayAtk2])
            {
                player.Mobj.SetState(MobjState.Play);
            }

            if (player.ReadyWeapon.Info is WeaponChainsaw && psp.State == DoomInfo.States[(int)MobjState.Saw])
            {
                this.world.StartSound(player.Mobj, Sfx.SAWIDL, SfxType.Weapon);
            }

            var healthComponent = player.Entity.GetComponent <Health>();

            // Check for weapon change.
            // If player is dead, put the weapon away.
            if (player.PendingWeapon != null || healthComponent.Current == 0)
            {
                // Change weapon.
                // Pending weapon should allready be validated.
                var newState = player.ReadyWeapon.GetComponent <WeaponComponent>().Info.DownState;
                pb.SetPlayerSprite(player, PlayerSprite.Weapon, newState);

                return;
            }

            // Check for fire.
            // The missile launcher and bfg do not auto fire.
            if ((player.Cmd.Buttons & TicCmdButtons.Attack) != 0)
            {
                if (!player.AttackDown || (!(player.ReadyWeapon.Info is WeaponRocketLauncher) && !(player.ReadyWeapon.Info is WeaponBfg)))
                {
                    player.AttackDown = true;
                    this.FireWeapon(player);

                    return;
                }
            }
            else
            {
                player.AttackDown = false;
            }

            // Bob the weapon based on movement speed.
            var angle = (128 * player.Mobj.World.LevelTime) & Trig.FineMask;

            psp.Sx = Fixed.One + player.Bob * Trig.Cos(angle);

            angle &= Trig.FineAngleCount / 2 - 1;
            psp.Sy = WeaponBehavior.WeaponTop + player.Bob * Trig.Sin(angle);
        }
Exemple #3
0
        public void Raise(Player player, PlayerSpriteDef psp)
        {
            psp.Sy -= WeaponBehavior.RaiseSpeed;

            if (psp.Sy > WeaponBehavior.WeaponTop)
            {
                return;
            }

            psp.Sy = WeaponBehavior.WeaponTop;

            // The weapon has been raised all the way, so change to the ready state.
            var newState = player.ReadyWeapon.GetComponent <WeaponComponent>().Info.ReadyState;

            this.world.PlayerBehavior.SetPlayerSprite(player, PlayerSprite.Weapon, newState);
        }