Terraria v1.4.4.9
Terraria source code documentation
Loading...
Searching...
No Matches

◆ GamePadInput()

static bool Terraria.GameInput.PlayerInput.GamePadInput ( )
inlinestaticprivate

Definition at line 752 of file PlayerInput.cs.

753 {
754 bool flag = false;
757 bool flag2 = false;
758 for (int i = 0; i < 4; i++)
759 {
760 GamePadState state = GamePad.GetState((PlayerIndex)i);
761 if (state.IsConnected)
762 {
763 flag2 = true;
765 break;
766 }
767 }
768 if (Main.SettingBlockGamepadsEntirely)
769 {
770 return false;
771 }
772 if (!flag2)
773 {
774 return false;
775 }
776 if (!Main.instance.IsActive && !Main.AllowUnfocusedInputOnGamepad)
777 {
778 return false;
779 }
780 Player player = Main.player[Main.myPlayer];
781 bool flag3 = UILinkPointNavigator.Available && !InBuildingMode;
782 InputMode inputMode = InputMode.XBoxGamepad;
783 if (Main.gameMenu || flag3 || player.talkNPC != -1 || player.sign != -1 || IngameFancyUI.CanCover())
784 {
785 inputMode = InputMode.XBoxGamepadUI;
786 }
787 if (!Main.gameMenu && InBuildingMode)
788 {
789 inputMode = InputMode.XBoxGamepad;
790 }
791 if (CurrentInputMode == InputMode.XBoxGamepad && inputMode == InputMode.XBoxGamepadUI)
792 {
793 flag = true;
794 }
795 if (CurrentInputMode == InputMode.XBoxGamepadUI && inputMode == InputMode.XBoxGamepad)
796 {
797 flag = true;
798 }
799 if (flag)
800 {
802 }
803 KeyConfiguration keyConfiguration = CurrentProfile.InputModes[inputMode];
804 int num = 2145386496;
805 for (int j = 0; j < ButtonsGamepad.Length; j++)
806 {
807 if ((int)((uint)num & (uint)ButtonsGamepad[j]) > 0)
808 {
809 continue;
810 }
811 string text = ButtonsGamepad[j].ToString();
812 bool flag4 = _buttonsLocked.Contains(text);
813 if (gamePadState.IsButtonDown(ButtonsGamepad[j]))
814 {
815 if (!flag4)
816 {
818 {
819 return false;
820 }
821 keyConfiguration.Processkey(Triggers.Current, text, inputMode);
822 flag = true;
823 }
824 }
825 else
826 {
827 _buttonsLocked.Remove(text);
828 }
829 }
830 GamepadThumbstickLeft = gamePadState.ThumbSticks.Left * new Vector2(1f, -1f) * new Vector2(CurrentProfile.LeftThumbstickInvertX.ToDirectionInt() * -1, CurrentProfile.LeftThumbstickInvertY.ToDirectionInt() * -1);
831 GamepadThumbstickRight = gamePadState.ThumbSticks.Right * new Vector2(1f, -1f) * new Vector2(CurrentProfile.RightThumbstickInvertX.ToDirectionInt() * -1, CurrentProfile.RightThumbstickInvertY.ToDirectionInt() * -1);
835 if (vector != Vector2.Zero)
836 {
837 vector.Normalize();
838 }
840 if (vector2 != Vector2.Zero)
841 {
842 vector2.Normalize();
843 }
844 float num2 = 0.6f;
845 float triggersDeadzone = CurrentProfile.TriggersDeadzone;
846 if (inputMode == InputMode.XBoxGamepadUI)
847 {
848 num2 = 0.4f;
850 {
852 }
853 GamepadAllowScrolling = false;
854 }
855 if (Vector2.Dot(-Vector2.UnitX, vector2) >= num2 && gamepadThumbstickLeft.X < 0f - CurrentProfile.LeftThumbstickDeadzoneX)
856 {
857 if (CheckRebindingProcessGamepad(Buttons.LeftThumbstickLeft.ToString()))
858 {
859 return false;
860 }
861 keyConfiguration.Processkey(Triggers.Current, Buttons.LeftThumbstickLeft.ToString(), inputMode);
862 flag = true;
863 }
864 if (Vector2.Dot(Vector2.UnitX, vector2) >= num2 && gamepadThumbstickLeft.X > CurrentProfile.LeftThumbstickDeadzoneX)
865 {
866 if (CheckRebindingProcessGamepad(Buttons.LeftThumbstickRight.ToString()))
867 {
868 return false;
869 }
870 keyConfiguration.Processkey(Triggers.Current, Buttons.LeftThumbstickRight.ToString(), inputMode);
871 flag = true;
872 }
873 if (Vector2.Dot(-Vector2.UnitY, vector2) >= num2 && gamepadThumbstickLeft.Y < 0f - CurrentProfile.LeftThumbstickDeadzoneY)
874 {
875 if (CheckRebindingProcessGamepad(Buttons.LeftThumbstickUp.ToString()))
876 {
877 return false;
878 }
879 keyConfiguration.Processkey(Triggers.Current, Buttons.LeftThumbstickUp.ToString(), inputMode);
880 flag = true;
881 }
882 if (Vector2.Dot(Vector2.UnitY, vector2) >= num2 && gamepadThumbstickLeft.Y > CurrentProfile.LeftThumbstickDeadzoneY)
883 {
884 if (CheckRebindingProcessGamepad(Buttons.LeftThumbstickDown.ToString()))
885 {
886 return false;
887 }
888 keyConfiguration.Processkey(Triggers.Current, Buttons.LeftThumbstickDown.ToString(), inputMode);
889 flag = true;
890 }
891 if (Vector2.Dot(-Vector2.UnitX, vector) >= num2 && gamepadThumbstickRight.X < 0f - CurrentProfile.RightThumbstickDeadzoneX)
892 {
893 if (CheckRebindingProcessGamepad(Buttons.RightThumbstickLeft.ToString()))
894 {
895 return false;
896 }
897 keyConfiguration.Processkey(Triggers.Current, Buttons.RightThumbstickLeft.ToString(), inputMode);
898 flag = true;
899 }
900 if (Vector2.Dot(Vector2.UnitX, vector) >= num2 && gamepadThumbstickRight.X > CurrentProfile.RightThumbstickDeadzoneX)
901 {
902 if (CheckRebindingProcessGamepad(Buttons.RightThumbstickRight.ToString()))
903 {
904 return false;
905 }
906 keyConfiguration.Processkey(Triggers.Current, Buttons.RightThumbstickRight.ToString(), inputMode);
907 flag = true;
908 }
909 if (Vector2.Dot(-Vector2.UnitY, vector) >= num2 && gamepadThumbstickRight.Y < 0f - CurrentProfile.RightThumbstickDeadzoneY)
910 {
911 if (CheckRebindingProcessGamepad(Buttons.RightThumbstickUp.ToString()))
912 {
913 return false;
914 }
915 keyConfiguration.Processkey(Triggers.Current, Buttons.RightThumbstickUp.ToString(), inputMode);
916 flag = true;
917 }
918 if (Vector2.Dot(Vector2.UnitY, vector) >= num2 && gamepadThumbstickRight.Y > CurrentProfile.RightThumbstickDeadzoneY)
919 {
920 if (CheckRebindingProcessGamepad(Buttons.RightThumbstickDown.ToString()))
921 {
922 return false;
923 }
924 keyConfiguration.Processkey(Triggers.Current, Buttons.RightThumbstickDown.ToString(), inputMode);
925 flag = true;
926 }
927 if (gamePadState.Triggers.Left > triggersDeadzone)
928 {
929 if (CheckRebindingProcessGamepad(Buttons.LeftTrigger.ToString()))
930 {
931 return false;
932 }
933 keyConfiguration.Processkey(Triggers.Current, Buttons.LeftTrigger.ToString(), inputMode);
934 flag = true;
935 }
936 if (gamePadState.Triggers.Right > triggersDeadzone)
937 {
938 string newKey = Buttons.RightTrigger.ToString();
940 {
941 return false;
942 }
943 if (inputMode == InputMode.XBoxGamepadUI && SteamDeckIsUsed && SettingsForUI.CurrentCursorMode == CursorMode.Mouse)
944 {
945 Triggers.Current.MouseLeft = true;
946 }
947 else
948 {
949 keyConfiguration.Processkey(Triggers.Current, newKey, inputMode);
950 flag = true;
951 }
952 }
953 bool flag5 = ItemID.Sets.GamepadWholeScreenUseRange[player.inventory[player.selectedItem].type] || player.scope;
954 Item item = player.inventory[player.selectedItem];
955 int num3 = item.tileBoost + ItemID.Sets.GamepadExtraRange[item.type];
956 if (player.yoyoString && ItemID.Sets.Yoyo[item.type])
957 {
958 num3 += 5;
959 }
960 else if (item.createTile < 0 && item.createWall <= 0 && item.shoot > 0)
961 {
962 num3 += 10;
963 }
964 else if (player.controlTorch)
965 {
966 num3++;
967 }
968 if (item.createWall > 0 || item.createTile > 0 || item.tileWand > 0)
969 {
970 num3 += player.blockRange;
971 }
972 if (flag5)
973 {
974 num3 += 30;
975 }
976 if (player.mount.Active && player.mount.Type == 8)
977 {
978 num3 = 10;
979 }
980 bool flag6 = false;
981 bool flag7 = !Main.gameMenu && !flag3 && Main.SmartCursorWanted;
982 if (!CursorIsBusy)
983 {
984 bool flag8 = Main.mapFullscreen || (!Main.gameMenu && !flag3);
985 int num4 = Main.screenWidth / 2;
986 int num5 = Main.screenHeight / 2;
987 if (!Main.mapFullscreen && flag8 && !flag5)
988 {
989 Point point = Main.ReverseGravitySupport(player.Center - Main.screenPosition).ToPoint();
990 num4 = point.X;
991 num5 = point.Y;
992 }
994 {
995 num4 += player.direction * 10;
996 }
997 float m = Main.GameViewMatrix.ZoomMatrix.M11;
998 smartSelectPointer.UpdateSize(new Vector2(Player.tileRangeX * 16 + num3 * 16, Player.tileRangeY * 16 + num3 * 16) * m);
999 if (flag5)
1000 {
1001 smartSelectPointer.UpdateSize(new Vector2(Math.Max(Main.screenWidth, Main.screenHeight) / 2));
1002 }
1003 smartSelectPointer.UpdateCenter(new Vector2(num4, num5));
1005 {
1006 Vector2 vector3 = new Vector2(8f);
1007 if (!Main.gameMenu && Main.mapFullscreen)
1008 {
1009 vector3 = new Vector2(16f);
1010 }
1011 if (flag7)
1012 {
1013 vector3 = new Vector2(Player.tileRangeX * 16, Player.tileRangeY * 16);
1014 if (num3 != 0)
1015 {
1016 vector3 += new Vector2(num3 * 16, num3 * 16);
1017 }
1018 if (flag5)
1019 {
1020 vector3 = new Vector2(Math.Max(Main.screenWidth, Main.screenHeight) / 2);
1021 }
1022 }
1023 else if (!Main.mapFullscreen)
1024 {
1025 if (player.inventory[player.selectedItem].mech)
1026 {
1027 vector3 += Vector2.Zero;
1028 }
1029 else
1030 {
1031 vector3 += new Vector2(num3) / 4f;
1032 }
1033 }
1034 float m2 = Main.GameViewMatrix.ZoomMatrix.M11;
1036 int num6 = MouseX - num4;
1037 int num7 = MouseY - num5;
1038 if (flag7)
1039 {
1040 num6 = 0;
1041 num7 = 0;
1042 }
1043 num6 += (int)vector4.X;
1044 num7 += (int)vector4.Y;
1045 MouseX = num6 + num4;
1046 MouseY = num7 + num5;
1047 flag = true;
1048 flag6 = true;
1049 SettingsForUI.SetCursorMode(CursorMode.Gamepad);
1050 }
1051 bool allowSecondaryGamepadAim = SettingsForUI.AllowSecondaryGamepadAim;
1053 {
1054 float num8 = 8f;
1055 if (!Main.gameMenu && Main.mapFullscreen)
1056 {
1057 num8 = 3f;
1058 }
1059 if (Main.mapFullscreen)
1060 {
1062 Main.mapFullscreenPos += vector5 * num8 * (1f / Main.mapFullscreenScale);
1063 flag = true;
1064 }
1065 else if (!flag6 && Main.SmartCursorWanted && allowSecondaryGamepadAim)
1066 {
1067 float m3 = Main.GameViewMatrix.ZoomMatrix.M11;
1068 Vector2 vector6 = gamepadThumbstickLeft * new Vector2(Player.tileRangeX * 16, Player.tileRangeY * 16) * m3;
1069 if (num3 != 0)
1070 {
1071 vector6 = gamepadThumbstickLeft * new Vector2((Player.tileRangeX + num3) * 16, (Player.tileRangeY + num3) * 16) * m3;
1072 }
1073 if (flag5)
1074 {
1075 vector6 = new Vector2(Math.Max(Main.screenWidth, Main.screenHeight) / 2) * gamepadThumbstickLeft;
1076 }
1077 int num9 = (int)vector6.X;
1078 int num10 = (int)vector6.Y;
1079 MouseX = num9 + num4;
1080 MouseY = num10 + num5;
1081 flag6 = true;
1082 }
1083 flag = true;
1084 }
1085 if (CurrentInputMode == InputMode.XBoxGamepad)
1086 {
1088 if (SettingsForUI.AllowSecondaryGamepadAim)
1089 {
1090 int num11 = MouseX - num4;
1091 int num12 = MouseY - num5;
1092 if (!Main.gameMenu && !flag3)
1093 {
1094 if (flag5 && !Main.mapFullscreen)
1095 {
1096 float num13 = 1f;
1097 int num14 = Main.screenWidth / 2;
1098 int num15 = Main.screenHeight / 2;
1099 num11 = (int)Utils.Clamp(num11, (float)(-num14) * num13, (float)num14 * num13);
1100 num12 = (int)Utils.Clamp(num12, (float)(-num15) * num13, (float)num15 * num13);
1101 }
1102 else
1103 {
1104 float num16 = 0f;
1105 if (player.HeldItem.createTile >= 0 || player.HeldItem.createWall > 0 || player.HeldItem.tileWand >= 0)
1106 {
1107 num16 = 0.5f;
1108 }
1109 float m4 = Main.GameViewMatrix.ZoomMatrix.M11;
1110 float num17 = (0f - ((float)(Player.tileRangeY + num3) - num16)) * 16f * m4;
1111 float max = ((float)(Player.tileRangeY + num3) - num16) * 16f * m4;
1112 num17 -= (float)(player.height / 16 / 2 * 16);
1113 num11 = (int)Utils.Clamp(num11, (0f - ((float)(Player.tileRangeX + num3) - num16)) * 16f * m4, ((float)(Player.tileRangeX + num3) - num16) * 16f * m4);
1114 num12 = (int)Utils.Clamp(num12, num17, max);
1115 }
1116 if (flag7 && (!flag || flag5))
1117 {
1118 float num18 = 0.81f;
1119 if (flag5)
1120 {
1121 num18 = 0.95f;
1122 }
1123 num11 = (int)((float)num11 * num18);
1124 num12 = (int)((float)num12 * num18);
1125 }
1126 }
1127 else
1128 {
1129 num11 = Utils.Clamp(num11, -num4 + 10, num4 - 10);
1130 num12 = Utils.Clamp(num12, -num5 + 10, num5 - 10);
1131 }
1132 MouseX = num11 + num4;
1133 MouseY = num12 + num5;
1134 }
1135 }
1136 }
1137 if (flag)
1138 {
1140 }
1141 if (CurrentInputMode == InputMode.XBoxGamepad)
1142 {
1143 Main.SetCameraGamepadLerp(0.1f);
1144 }
1145 if (CurrentInputMode != InputMode.XBoxGamepadUI && flag)
1146 {
1148 }
1149 if (!flag)
1150 {
1152 }
1153 if (CurrentInputMode == InputMode.XBoxGamepadUI && flag && !PreventCursorModeSwappingToGamepad)
1154 {
1155 SettingsForUI.SetCursorMode(CursorMode.Gamepad);
1156 }
1157 return flag;
1158 }
static byte Max(byte val1, byte val2)
Definition Math.cs:738
static List< string > _buttonsLocked
static Buttons[] ButtonsGamepad
static TriggersPack Triggers
static bool PreventCursorModeSwappingToGamepad
static InputMode CurrentInputMode
static Vector2 GamepadThumbstickLeft
static SmartSelectGamepadPointer smartSelectPointer
static PlayerInputProfile CurrentProfile
static Vector2 GamepadThumbstickRight
static bool CheckRebindingProcessGamepad(string newKey)
static bool[] Yoyo
Definition ItemID.cs:1086
static int[] GamepadExtraRange
Definition ItemID.cs:1078
static bool[] GamepadWholeScreenUseRange
Definition ItemID.cs:1080
static float Dot(Vector2 value1, Vector2 value2)
Definition Vector2.cs:121

References Terraria.GameInput.PlayerInput._buttonsLocked, Terraria.Mount.Active, Terraria.GameInput.PlayerInput.SettingsForUI.AllowSecondaryGamepadAim, Terraria.Main.AllowUnfocusedInputOnGamepad, Terraria.Player.blockRange, Terraria.GameInput.PlayerInput.ButtonsGamepad, Terraria.UI.IngameFancyUI.CanCover(), Terraria.Entity.Center, Terraria.GameInput.PlayerInput.CheckRebindingProcessGamepad(), Terraria.Player.controlTorch, Terraria.Item.createTile, Terraria.Item.createWall, Terraria.GameInput.PlayerInput.SettingsForUI.CurrentCursorMode, Terraria.GameInput.PlayerInput.CurrentInputMode, Terraria.GameInput.PlayerInput.CurrentProfile, Terraria.GameInput.PlayerInput.CursorIsBusy, Microsoft.Xna.Framework.Vector2.Dot(), Terraria.Main.gameMenu, Terraria.GameInput.PlayerInput.GamepadAllowScrolling, Terraria.ID.ItemID.Sets.GamepadExtraRange, Terraria.GameInput.PlayerInput.GamepadScrollValue, Terraria.GameInput.PlayerInput.GamepadThumbstickLeft, Terraria.GameInput.PlayerInput.GamepadThumbstickRight, Terraria.ID.ItemID.Sets.GamepadWholeScreenUseRange, Terraria.Main.GameViewMatrix, Terraria.GameInput.PlayerInput.HandleDpadSnap(), Terraria.Entity.height, Terraria.Player.HeldItem, Terraria.GameInput.PlayerInput.InBuildingMode, Terraria.Main.instance, Terraria.Player.inventory, System.item, Terraria.Main.mapFullscreen, Terraria.Main.mapFullscreenScale, System.Math.Max(), Terraria.Item.mech, Terraria.Player.mount, Terraria.GameInput.PlayerInput.MouseX, Terraria.GameInput.PlayerInput.MouseY, Terraria.Main.myPlayer, Terraria.Main.player, Terraria.GameInput.PlayerInput.PreventCursorModeSwappingToGamepad, Terraria.Main.ReverseGravitySupport(), Terraria.Player.scope, Terraria.Main.screenHeight, Terraria.Main.screenPosition, Terraria.Main.screenWidth, Terraria.GameInput.PlayerInput.ScrollWheelValue, Terraria.Player.selectedItem, Terraria.Main.SetCameraGamepadLerp(), Terraria.GameInput.PlayerInput.SettingsForUI.SetCursorMode(), Terraria.Main.SettingBlockGamepadsEntirely, Terraria.Player.sign, Terraria.Main.SmartCursorWanted, Terraria.GameInput.PlayerInput.smartSelectPointer, System.state, Terraria.GameInput.PlayerInput.SteamDeckIsUsed, Terraria.Player.talkNPC, System.text, Terraria.Player.tileRangeX, Terraria.Player.tileRangeY, Terraria.Item.tileWand, Terraria.GameInput.PlayerInput.Triggers, Terraria.Item.type, Terraria.Mount.Type, Microsoft.Xna.Framework.Vector2.UnitX, Microsoft.Xna.Framework.Vector2.UnitY, Terraria.Entity.velocity, Microsoft.Xna.Framework.Point.X, Microsoft.Xna.Framework.Point.Y, Terraria.ID.ItemID.Sets.Yoyo, Terraria.Player.yoyoString, and Microsoft.Xna.Framework.Vector2.Zero.

Referenced by Terraria.GameInput.PlayerInput.UpdateInput().