private IEnumerator HandleFreeFiringBeam(BeamController beam, SpeculativeRigidbody otherShooter, float duration) { float elapsed = 0f; yield return(null); while (elapsed < duration) { Vector2 sourcePos; if (otherShooter == null) { break; } if (!otherShooter.GetComponentInParent <FlippableCover>()) { break; } if (otherShooter.GetComponentInParent <FlippableCover>().IsBroken) { break; } else { sourcePos = otherShooter.UnitCenter; } elapsed += BraveTime.DeltaTime; if (sourcePos != null) { beam.Origin = sourcePos; beam.LateUpdatePosition(sourcePos); } else { ETGModConsole.Log("SOURCEPOS WAS NULL IN BEAM FIRING HANDLER"); } yield return(null); } beam.CeaseAttack(); yield break; }