IEnumerator WaitForAction() { if (coroutinePosition < actions.Length) { switch (actions[coroutinePosition]) { case Action.MoveWASD: { while (Player.PlayerInstance.GetComponent <Rigidbody>().velocity == Vector3.zero) { yield return(null); } break; } case Action.StartBurningIronSteel: { while (!Player.PlayerIronSteel.IsBurning) { yield return(null); } break; } case Action.SelectSteel: { while (!Keybinds.SelectAlternateDown()) { yield return(null); } break; } case Action.PushPull: { bool pulled = false; bool pushed = false; while (!pulled || !pushed) { pulled = pulled || Keybinds.IronPulling(); pushed = pushed || Keybinds.SteelPushing(); yield return(null); } break; } case Action.Deselect: { bool select = false; bool alternate = false; while (!select || !alternate) { select = select || (Keybinds.Negate() && Keybinds.Select()); alternate = alternate || (Keybinds.Negate() && Keybinds.SelectAlternate()); yield return(null); } break; } case Action.Help: { while (!HUD.HelpOverlayController.IsOpen) { yield return(null); } // Close Message Close(); break; } case Action.ChangeNumberOfTargets: { while (Player.PlayerIronSteel.PullTargets.Size == 1) { yield return(null); } break; } case Action.ChangeBurnPercentage: { while (Player.PlayerIronSteel.IronBurnPercentageTarget > .99f && Player.PlayerIronSteel.SteelBurnPercentageTarget > .99f) { yield return(null); } break; } case Action.StopBurningIronSteel: { while (Player.PlayerIronSteel.IsBurning) { yield return(null); } Close(); break; } case Action.CollectCoin: { while (Player.PlayerInstance.CoinHand.Pouch.Count == 0) { yield return(null); } break; } case Action.ThrowCoin: { while (!Keybinds.WithdrawCoinDown()) { yield return(null); } break; } case Action.ThrowCoinDown: { while (!Keybinds.WithdrawCoinDown() || !Keybinds.Jump()) { yield return(null); } FlagsController.HelpOverlayFull = true; break; } case Action.SelectIron: { while (!Keybinds.SelectDown()) { yield return(null); } break; } case Action.BurnPewter: { while (!Player.PlayerPewter.IsSprinting) { yield return(null); } break; } } // When one TriggerBeadPopup is entered, make sure no other TriggerBead listeners are still running to update the MessageOverlay later on. if (HUD.MessageOverlayController.CurrentPopup == this) { coroutinePosition++; HUD.MessageOverlayController.MessageText.text = GetText(); HUD.MessageOverlayController.HeaderText.text = GetHeader(); if (coroutinePosition < HUD.MessageOverlayController.TriggerBeadMessages[section].Count - 2 || coroutinePosition < actions.Length) { StartCoroutine(WaitForAction()); yield break; } } } // End of this bead's actions if (nextBead) { nextBead.transform.parent.gameObject.SetActive(true); } }
/* * Read inputs for selecting targets. * Update burn percentages. * Update blue lines pointing from player to metal. */ private void LateUpdate() { if (!PauseMenu.IsPaused) { // Start and Stop Burning metals if (IsBurning) { // Stop burning if (Keybinds.StopBurning()) { StopBurning(); timeToStopBurning = 0; } else if (Keybinds.Negate()) { timeToStopBurning += Time.deltaTime; if (Keybinds.Select() && Keybinds.SelectAlternate() && timeToStopBurning > timeToHoldDown) { //if (Keybinds.IronPulling() && Keybinds.SteelPushing() && timeToStopBurning > timeToHoldDown) { StopBurning(); timeToStopBurning = 0; } } else { timeToStopBurning = 0; } } else { // Start burning if (!Keybinds.Negate()) { if (Keybinds.SelectDown()) { StartBurning(true); } else if (Keybinds.SelectAlternateDown()) { StartBurning(false); } } } // Could have stopped burning above. Check if the Allomancer is still burning. if (IsBurning) { // Change Burn Percentage Targets, Number of Targets // Check scrollwheel for changing the max number of targets and burn percentage, or DPad if using gamepad float scrollValue = 0; if (SettingsMenu.settingsData.controlScheme == SettingsData.Gamepad) // Gamepad { scrollValue = Keybinds.DPadYAxis(); if (SettingsMenu.settingsData.pushControlStyle == 1) { ChangeTargetForceMagnitude(Keybinds.DPadXAxis()); } } else // Mouse and keyboard { if (Keybinds.Negate()) { scrollValue = Keybinds.ScrollWheelAxis(); } else { if (SettingsMenu.settingsData.pushControlStyle == 0) { ChangeBurnPercentageTarget(Keybinds.ScrollWheelAxis()); } else { ChangeTargetForceMagnitude(Keybinds.ScrollWheelAxis()); } } } if (scrollValue > 0) { IncrementNumberOfTargets(); } if (scrollValue < 0) { DecrementNumberOfTargets(); } // Assign Burn percentage targets based on the previously changed burn percentage/target magnitudes if (SettingsMenu.settingsData.pushControlStyle == 0) // Percentage { if (SettingsMenu.settingsData.controlScheme == SettingsData.Gamepad) // Gamepad { SetPullPercentageTarget(Keybinds.RightBurnPercentage()); SetPushPercentageTarget(Keybinds.LeftBurnPercentage()); } } else // Magnitude { if (HasPullTarget || HasPushTarget) { //Debug.Log(player.LastMaximumNetForce); float maxNetForce = (LastMaximumNetForce).magnitude; SetPullPercentageTarget(forceMagnitudeTarget / maxNetForce); SetPushPercentageTarget(forceMagnitudeTarget / maxNetForce); } else { SetPullPercentageTarget(0); SetPushPercentageTarget(0); } } LerpToBurnPercentages(); UpdateBurnRateMeter(); if (Player.CanControlPlayer) { // Could have stopped burning above. Check if the Allomancer is still burning. if (IsBurning) { // Swap pull- and push- targets if (Keybinds.NegateDown() && timeToSwapBurning > Time.time) { // Double-tapped, Swap targets PullTargets.SwapContents(PushTargets); // If vacuously targeting, swap statuses of vacuous targets SwapVacuousTargets(); } else { if (Keybinds.NegateDown()) { timeToSwapBurning = Time.time + timeDoubleTapWindow; } } // Search for Metals bool pulling = Keybinds.IronPulling() && HasIron;// && !(Player.CoinshotMode && Keybinds.SteelPushing()); // in coinshot mode, you cannot push and pull simultaneously bool pushing = Keybinds.SteelPushing() && HasSteel; // If you are trying to push and pull and only have pullTargets, only push. And vice versa if (!HasPushTarget && HasPullTarget) { if (pulling) { pushing = false; } } else if (!HasPullTarget && HasPushTarget) { if (pushing) { pulling = false; } } IronPulling = pulling; SteelPushing = pushing; // Check input for target selection bool selecting = (Keybinds.Select() || Keybinds.SelectAlternate()) && !Keybinds.Negate(); Magnetic target = SearchForMetals(); if (target != null) { // highlight the potential target you would select, if you targeted it if (target != HighlightedTarget) { // Remove old target if (HasHighlightedTarget) { HighlightedTarget.RemoveTargetGlow(); } target.AddTargetGlow(); HighlightedTarget = target; } } else { // no target near center of screen; remove highlighted target if (HasHighlightedTarget) { HighlightedTarget.RemoveTargetGlow(); } HighlightedTarget = null; } // Add/Remove Targets // If vacuously targeting (or should be), if (VacuouslyPullTargeting || !HasPullTarget) { // If starting to pull/push again, replace that old vacuous target with the new target if (Keybinds.PullDown()) { SetVacuousTarget(target, iron); } // If releasing push/pull, remove vacuous target if (!Keybinds.IronPulling()) { SetVacuousTarget(null, iron); } } // Repeat for steel if (VacuouslyPushTargeting || !HasPushTarget) { if (Keybinds.PushDown()) { SetVacuousTarget(target, steel); } if (!Keybinds.SteelPushing()) { SetVacuousTarget(null, steel); } } // Manual target selection if (Keybinds.Select() || Keybinds.SelectAlternate()) { // Select or Deselect pullTarget and/or pushTarget if (Keybinds.Select() && HasIron) // Selecting pull target { if (selecting) { AddPullTarget(target); } else { if (RemovePullTarget(target)) // If the player is hovering over a pullTarget, instantly remove that one. Keep it highlighted. { target.AddTargetGlow(); } else if (Keybinds.SelectDown() && !RemovePullTarget(target)) // If the highlighted Magnetic is not a pullTarget, remove the oldest pullTarget instead { RemovePullTargetAt(0); } } } if (Keybinds.SelectAlternate() && HasSteel) { if (selecting) { AddPushTarget(target); } else { if (RemovePushTarget(target)) { target.AddTargetGlow(); } else if (Keybinds.SelectAlternateDown() && !RemovePushTarget(target)) { RemovePushTargetAt(0); } } } } RefreshHUD(); } } else // If the player is not in control, but still burning metals, show blue lines to metals. { if (IsBurning) { SearchForMetals(false); LerpToBurnPercentages(); UpdateBurnRateMeter(); RefreshHUD(); } } } } }