public static bool UpdateCurrentHeldGunItemState(TMRPlayer myplayer, int inventorySlotOfPrevHeldItem) { bool canHoldGun = PlayerLogic.IsHoldingGun(myplayer.player); myplayer.AimMode.UpdateAimState(myplayer.player); if (canHoldGun) { myplayer.GunHandling.UpdateEquipped(myplayer.player); Item prevItem = null; if (inventorySlotOfPrevHeldItem != -1) { prevItem = myplayer.player.inventory[inventorySlotOfPrevHeldItem]; } myplayer.AimMode.UpdateEquippedAimState(myplayer.player, prevItem); } else { myplayer.GunHandling.UpdateUnequipped(myplayer.player); myplayer.AimMode.UpdateUnequippedAimState(); } myplayer.GunHandling.UpdateHolsterAnimation(myplayer.player); return(canHoldGun); }
private void PreShoot(TMRPlayer myplayer) { // Refresh quick draw if (myplayer.AimMode.IsQuickDrawActive) { myplayer.GunHandling.IsQuickDrawReady = true; myplayer.AimMode.AttemptQuickDrawMode(myplayer.player); } }
private void ModifyShootAim(TMRPlayer myplayer, ref int damage, ref float speedX, ref float speedY) { float offsetRads = myplayer.AimMode.GetAimStateShakeRadiansOffset(false); var randSpeed = new Vector2(speedX, speedY) .RotatedBy(offsetRads); speedX = randSpeed.X; speedY = randSpeed.Y; damage = myplayer.AimMode.GetAimStateShakeDamage(damage); myplayer.GunHandling.BeginRecoil(MathHelper.ToDegrees(offsetRads) * -myplayer.player.direction); }
public static void UpdatePlayerStateForAimMode(TMRPlayer myplayer) { PlayerAimMode aimMode = myplayer.AimMode; GunHandling gunHandling = myplayer.GunHandling; if (aimMode.IsModeLocked || (aimMode.IsAttemptingModeLock && !gunHandling.IsAnimating)) { var config = TMRConfig.Instance; float aimLockMoveSpeed = config.Get <float>(nameof(config.AimModeLockMoveSpeedScale)); myplayer.player.maxRunSpeed *= aimLockMoveSpeed; myplayer.player.accRunSpeed = myplayer.player.maxRunSpeed; myplayer.player.moveSpeed *= aimLockMoveSpeed; } }
//////////////// public static void UpdatePreviousHeldGunItemState(TMRPlayer myplayer, Item prevHeldItem) { var mygun = prevHeldItem?.modItem as TheMadRangerItem; if (mygun == null) { return; } if (myplayer.HasAttemptedShotSinceEquip) { myplayer.HasAttemptedShotSinceEquip = false; myplayer.GunHandling.BeginHolster(myplayer.player, mygun); } if (Main.netMode == NetmodeID.MultiplayerClient && myplayer.player.whoAmI == Main.myPlayer) { GunAnimationPacket.Broadcast(GunAnimationType.Holster); } }
public static (bool IsAimWithinArc, int AimDir) ApplyGunAim(TMRPlayer myplayer, int screenX, int screenY) { Player plr = myplayer.player; Texture2D itemTex = Main.itemTexture[plr.HeldItem.type]; Vector2 plrCenter = plr.RotatedRelativePoint(plr.MountedCenter, true); float aimX = (float)screenX + Main.screenPosition.X - plrCenter.X; float aimY = (float)screenY + Main.screenPosition.Y - plrCenter.Y; if (plr.gravDir == -1f) { aimY = Main.screenPosition.Y + (float)Main.screenHeight - (float)screenY - plrCenter.Y; } plr.itemRotation = (float)Math.Atan2( (double)(aimY * (float)plr.direction), (double)(aimX * (float)plr.direction) ) - plr.fullRotation; bool isAimWithinArc = true; if (plr.direction > 0) { float rot1 = 1.2f; float rot2 = -1.5f; if (plr.itemRotation > rot1 || plr.itemRotation < rot2) { float upTest = Math.Abs(plr.itemRotation - rot2); float downTest = Math.Abs(plr.itemRotation - rot1); if (upTest < downTest) { plr.itemRotation = rot2; } else { plr.itemRotation = rot1; } isAimWithinArc = false; } } else { float rot1 = -1.2f; float rot2 = 1.5f; if (plr.itemRotation < rot1 || plr.itemRotation > rot2) { float upTest = Math.Abs(plr.itemRotation - rot2); float downTest = Math.Abs(plr.itemRotation - rot1); if (upTest < downTest) { plr.itemRotation = rot2; } else { plr.itemRotation = rot1; } isAimWithinArc = false; } } float addedRotDeg = myplayer.GunHandling.GetAddedRotationDegrees(plr); if (addedRotDeg != 0f) { plr.itemRotation = MathHelper.ToDegrees(plr.itemRotation) - (float)(plr.direction * addedRotDeg); plr.itemRotation = MathHelper.ToRadians(plr.itemRotation); } else { plr.itemRotation += myplayer.AimMode.GetAimStateShakeRadiansOffset(true); } plr.itemLocation.X = plr.position.X + ((float)plr.width * 0.5f) - (itemTex.Width * 0.5f) - plr.direction * 2; plr.itemLocation.Y = plr.MountedCenter.Y - ((float)itemTex.Height * 0.5f); ItemLoader.UseStyle(plr.HeldItem, plr); //NetMessage.SendData( MessageID.PlayerControls, -1, -1, null, plr.whoAmI, 0f, 0f, 0f, 0, 0, 0 ); //NetMessage.SendData( MessageID.ItemAnimation, -1, -1, null, plr.whoAmI, 0f, 0f, 0f, 0, 0, 0 ); return(isAimWithinArc, Math.Sign(aimX)); }