public MusicEffect(SoundReference sound) { Music = sound.CreateInstance(); Music.IsLooped = true; }
public IEnumerable <Wait> RoutineEndLevel() { var tile = PlayerCurio.GetMainTile(); var movable = PlayerCurio.GetBehavior <BehaviorMovable>(); var orientation = PlayerCurio.GetBehavior <BehaviorOrientable>(); var end = tile.GetBehavior <BehaviorLevelEnd>(); var player = PlayerCurio.GetBehavior <BehaviorPlayer>(); int stains = 0; float pitchSlide = 0; foreach (var bloodStain in VisualEffects.OfType <BloodStain>()) { RunStats.Splats += 1; stains += 1; var center = PlayerCurio.GetVisualTarget(); var emit = bloodStain.WorldPosition; var delta = Vector2.Normalize(emit - center); var offset = delta * Random.NextFloat(40, 80); int score; if (stains > 20) { score = 1000; } else if (stains > 10) { score = 500; } else { score = 50; } pitchSlide = (float)LerpHelper.QuadraticIn(-1, 1, Math.Min(0, stains / 50f)); var blob = new ScoreBlood(this, emit, center + delta * Random.NextFloat(4, 8), offset, Util.AngleToVector(Random.NextAngle()) * Random.NextFloat(80, 200), score, 20 + stains * 2); if (stains % 3 == 0) { blob.Sound = SoundBloodstainImpact.CreateInstance(); blob.Sound.Pitch = pitchSlide; } bloodStain.Destroy(); } SoundBloodstain.Play(1, pitchSlide, 0); yield return(new WaitTime(30 + stains * 2)); orientation.OrientTo(Util.PointToAngle(end.Direction), LerpHelper.QuadraticIn, new SliderScene(this, 10)); player.Fade.Set(0, LerpHelper.QuadraticIn, 70); var pos = tile.VisualPosition; PlayerCurio.MoveVisual(GetOutsidePosition(pos, end.Direction, 200), LerpHelper.QuadraticIn, new SliderScene(this, 100)); CameraCurio.MoveVisual(GetOutsidePosition(pos, end.Direction, 150), LerpHelper.QuadraticIn, new SliderScene(this, 100)); SoundEgress.Play(1f, 0f, 0f); CurrentTheme.Volume.Set(0, LerpHelper.QuadraticIn, 90); player.LevelTransition = true; yield return(new WaitTime(100)); CurrentTheme.Stop(false); PlayerCurio.MoveTo(null); CameraCurio.MoveTo(null); DestroyMap(); Menu.SubMenu.Open(new BetweenLevelMenu(this)); yield return(WaitForInput()); GenerateMap(); yield return(Scheduler.Instance.RunAndWait(RoutineStartLevel())); }