/// <summary> /// Cycle weapons using directional pad input. Up and Down cycle forward and backward through /// the list of two handed weapons. Left cycles through the left hand weapons. Right cycles through /// the right hand weapons. /// </summary> private void SwitchWeapons() { // Bail out if we can't switch weapons. if (!rpgCharacterController.CanStartAction("SwitchWeapon")) { return; } bool doSwitch = false; SwitchWeaponContext context = new SwitchWeaponContext(); int weaponNumber = 0; // Cycle through 2H weapons any input happens on the up-down axis. if (Mathf.Abs(inputSwitchUpDown) > 0.1f) { int[] twoHandedWeapons = new int[] { (int)Weapon.TwoHandSword, }; // If we're not wielding 2H weapon already, just switch to the first one in the list. if (System.Array.IndexOf(twoHandedWeapons, rpgCharacterController.rightWeapon) == -1) { weaponNumber = twoHandedWeapons[0]; } else { weaponNumber = 0; } // Set up the context and flag that we actually want to perform the switch. doSwitch = true; context.type = "Switch"; context.side = "None"; context.leftWeapon = -1; context.rightWeapon = weaponNumber; } // If we've received input, then "doSwitch" is true, and the context is filled out, // so start the SwitchWeapon action. if (doSwitch) { rpgCharacterController.StartAction("SwitchWeapon", context); } }
private void WeaponSwitching() { if (!rpgCharacterController.CanStartAction("SwitchWeapon")) { return; } bool doSwitch = false; SwitchWeaponContext context = new SwitchWeaponContext(); if (!rpgCharacterController.isRelaxed) { if (GUI.Button(new Rect(1115, 240, 100, 30), "Relax")) { if (useInstant) { rpgCharacterController.StartAction("Relax", true); } else { rpgCharacterController.StartAction("Relax"); } } } if (rpgCharacterController.rightWeapon != (int)Weapon.Unarmed || rpgCharacterController.leftWeapon != (int)Weapon.Unarmed) { if (GUI.Button(new Rect(1115, 280, 100, 30), "Unarmed")) { doSwitch = true; context.type = "Switch"; context.side = "Dual"; context.leftWeapon = (int)Weapon.Unarmed; context.rightWeapon = (int)Weapon.Unarmed; } } // Two-handed weapons. Weapon[] weapons = new Weapon[] { Weapon.TwoHandSword, Weapon.TwoHandSpear, Weapon.TwoHandAxe, Weapon.TwoHandStaff, Weapon.TwoHandBow, Weapon.TwoHandCrossbow, Weapon.Rifle, }; int offset = 310; foreach (Weapon weapon in weapons) { if (rpgCharacterController.rightWeapon != (int)weapon) { string label = weapon.ToString(); if (label.StartsWith("TwoHand")) { label = label.Replace("TwoHand", "2H "); } if (GUI.Button(new Rect(1115, offset, 100, 30), label)) { doSwitch = true; context.type = "Switch"; context.side = "None"; context.leftWeapon = -1; context.rightWeapon = (int)weapon; } } offset += 30; } // Left/Right weapon pairs. Tuple <Weapon, Weapon>[] leftRightPairs = new Tuple <Weapon, Weapon>[] { Tuple.Create(Weapon.LeftSword, Weapon.RightSword), Tuple.Create(Weapon.LeftMace, Weapon.RightMace), Tuple.Create(Weapon.LeftDagger, Weapon.RightDagger), Tuple.Create(Weapon.LeftItem, Weapon.RightItem), Tuple.Create(Weapon.LeftPistol, Weapon.RightPistol), Tuple.Create(Weapon.Shield, Weapon.RightSpear), }; offset = 530; foreach (Tuple <Weapon, Weapon> pair in leftRightPairs) { bool missingOneSide = false; // Left weapons. if (rpgCharacterController.leftWeapon != (int)pair.Item1) { missingOneSide = true; if (GUI.Button(new Rect(1065, offset, 100, 30), pair.Item1.ToString())) { doSwitch = true; context.type = "Switch"; context.side = "Left"; context.leftWeapon = (int)pair.Item1; context.rightWeapon = -1; } } // Right weapons. if (rpgCharacterController.rightWeapon != (int)pair.Item2) { missingOneSide = true; if (GUI.Button(new Rect(1165, offset, 100, 30), pair.Item2.ToString())) { doSwitch = true; context.type = "Switch"; context.side = "Right"; context.leftWeapon = -1; context.rightWeapon = (int)pair.Item2; } } // If at least one side isn't carrying this weapon, show the Dual switch. if (missingOneSide) { string label = pair.Item1.ToString(); if (!label.Contains("Shield")) { label = label.Replace("Left", "Dual ") + "s"; if (GUI.Button(new Rect(965, offset, 100, 30), label)) { doSwitch = true; context.type = "Switch"; context.side = "Dual"; context.leftWeapon = (int)pair.Item1; context.rightWeapon = (int)pair.Item2; } } } offset += 30; } if (rpgCharacterController.leftWeapon > (int)Weapon.Unarmed) { if (GUI.Button(new Rect(750, offset - 150, 100, 30), "Sheath Left")) { doSwitch = true; context.type = "Sheath"; context.side = "Left"; context.leftWeapon = (int)Weapon.Unarmed; context.rightWeapon = -1; } } if (rpgCharacterController.rightWeapon > (int)Weapon.Unarmed) { if (GUI.Button(new Rect(850, offset - 150, 100, 30), "Sheath Right")) { doSwitch = true; context.type = "Sheath"; context.side = "Right"; context.leftWeapon = -1; context.rightWeapon = (int)Weapon.Unarmed; } } offset += 30; if (GUI.Button(new Rect(965, 680, 100, 30), "Shuffle")) { int lefty = (int)leftRightPairs[UnityEngine.Random.Range(0, leftRightPairs.Length)].Item1; int righty = (int)leftRightPairs[UnityEngine.Random.Range(0, leftRightPairs.Length)].Item2; doSwitch = true; context.type = "Switch"; context.side = "Both"; context.leftWeapon = lefty; context.rightWeapon = righty; } // Hip Shooting. hipShooting = GUI.Toggle(new Rect(1000, 495, 100, 30), hipShooting, "Hip Shooting"); if (hipShooting) { rpgCharacterController.StartAction("HipShoot"); } else { rpgCharacterController.EndAction("HipShoot"); } // Sheath/Unsheath Hips. useHips = GUI.Toggle(new Rect(1000, 260, 100, 30), useHips, "Hips"); if (useHips) { context.sheathLocation = "Hips"; } else { context.sheathLocation = "Back"; } // Instant weapon toggle. useInstant = GUI.Toggle(new Rect(1000, 310, 100, 30), useInstant, "Instant"); if (useInstant) { context.type = "Instant"; } // Perform the weapon switch. if (doSwitch) { rpgCharacterController.StartAction("SwitchWeapon", context); } }
/// <summary> /// Cycle weapons using directional pad input. Up and Down cycle forward and backward through /// the list of two handed weapons. Left cycles through the left hand weapons. Right cycles through /// the right hand weapons. /// </summary> private void SwitchWeapons() { // Bail out if we can't switch weapons. if (!rpgCharacterController.CanStartAction("SwitchWeapon")) { return; } // Switch to Relaxed state. if (inputRelax) { rpgCharacterController.StartAction("Relax"); return; } bool doSwitch = false; SwitchWeaponContext context = new SwitchWeaponContext(); int weaponNumber = 0; // Switch to Shield. if (inputShield) { doSwitch = true; context.side = "Left"; context.type = "Switch"; context.leftWeapon = 7; context.rightWeapon = weaponNumber; rpgCharacterController.StartAction("SwitchWeapon", context); return; } // Cycle through 2H weapons any input happens on the up-down axis. if (inputSwitchUp || inputSwitchDown) { int[] twoHandedWeapons = new int[] { (int)Weapon.TwoHandSword, (int)Weapon.TwoHandSpear, (int)Weapon.TwoHandAxe, (int)Weapon.TwoHandBow, (int)Weapon.TwoHandCrossbow, (int)Weapon.TwoHandStaff, (int)Weapon.Rifle, }; // If we're not wielding 2H weapon already, just switch to the first one in the list. if (System.Array.IndexOf(twoHandedWeapons, rpgCharacterController.rightWeapon) == -1) { weaponNumber = twoHandedWeapons[0]; } // Otherwise, we should loop through them. else { int index = System.Array.IndexOf(twoHandedWeapons, rpgCharacterController.rightWeapon); if (inputSwitchUp) { index = (index - 1 + twoHandedWeapons.Length) % twoHandedWeapons.Length; } else if (inputSwitchDown) { index = (index + 1) % twoHandedWeapons.Length; } weaponNumber = twoHandedWeapons[index]; } // Set up the context and flag that we actually want to perform the switch. doSwitch = true; context.type = "Switch"; context.side = "None"; context.leftWeapon = -1; context.rightWeapon = weaponNumber; } // Cycle through 1H weapons if any input happens on the left-right axis. if (inputSwitchLeft || inputSwitchRight) { doSwitch = true; context.type = "Switch"; // Left-handed weapons. if (inputSwitchLeft) { int[] leftWeapons = new int[] { (int)Weapon.Unarmed, (int)Weapon.Shield, (int)Weapon.LeftSword, (int)Weapon.LeftMace, (int)Weapon.LeftDagger, (int)Weapon.LeftItem, (int)Weapon.LeftPistol, }; // If we are not wielding a left-handed weapon, switch to unarmed. if (System.Array.IndexOf(leftWeapons, rpgCharacterController.leftWeapon) == -1) { weaponNumber = leftWeapons[0]; } // Otherwise, cycle through the list. else { int currentIndex = System.Array.IndexOf(leftWeapons, rpgCharacterController.leftWeapon); weaponNumber = leftWeapons[(currentIndex + 1) % leftWeapons.Length]; } context.side = "Left"; context.leftWeapon = weaponNumber; context.rightWeapon = -1; } // Right-handed weapons. else if (inputSwitchRight) { int[] rightWeapons = new int[] { (int)Weapon.Unarmed, (int)Weapon.RightSword, (int)Weapon.RightMace, (int)Weapon.RightDagger, (int)Weapon.RightItem, (int)Weapon.RightPistol, (int)Weapon.RightSpear, }; // If we are not wielding a right-handed weapon, switch to unarmed. if (System.Array.IndexOf(rightWeapons, rpgCharacterController.rightWeapon) == -1) { weaponNumber = rightWeapons[0]; } // Otherwise, cycle through the list. else { int currentIndex = System.Array.IndexOf(rightWeapons, rpgCharacterController.rightWeapon); weaponNumber = rightWeapons[(currentIndex + 1) % rightWeapons.Length]; } context.side = "Right"; context.leftWeapon = -1; context.rightWeapon = weaponNumber; } } // If we've received input, then "doSwitch" is true, and the context is filled out, // so start the SwitchWeapon action. if (doSwitch) { rpgCharacterController.StartAction("SwitchWeapon", context); } }
private void WeaponSwitching() { if (!rpgCharacterController.CanStartAction("SwitchWeapon")) { return; } bool doSwitch = false; SwitchWeaponContext context = new SwitchWeaponContext(); if (rpgCharacterController.rightWeapon != (int)Weapon.Unarmed || rpgCharacterController.leftWeapon != (int)Weapon.Unarmed) { if (GUI.Button(new Rect(1115, 280, 100, 30), "Unarmed")) { doSwitch = true; context.type = "Switch"; context.side = "Dual"; context.leftWeapon = (int)Weapon.Unarmed; context.rightWeapon = (int)Weapon.Unarmed; } } // Two-handed weapons. Weapon[] weapons = new Weapon[] { Weapon.TwoHandSword, }; int offset = 310; foreach (Weapon weapon in weapons) { if (rpgCharacterController.rightWeapon != (int)weapon) { string label = weapon.ToString(); if (label.StartsWith("TwoHand")) { label = label.Replace("TwoHand", "2H "); } if (GUI.Button(new Rect(1115, offset, 100, 30), label)) { doSwitch = true; context.type = "Switch"; context.side = "None"; context.leftWeapon = -1; context.rightWeapon = (int)weapon; } } offset += 30; } // Instant weapon toggle. useInstant = GUI.Toggle(new Rect(1130, 350, 100, 30), useInstant, "Instant"); if (useInstant) { context.type = "Instant"; } // Perform the weapon switch. if (doSwitch) { rpgCharacterController.StartAction("SwitchWeapon", context); } }