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);
        }
Beispiel #4
0
        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);
            }
        }
Beispiel #6
0
        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));
        }