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); }
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); }
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); }