private IEnumerator onWatchtowerUse(On.Celeste.Lookout.orig_LookRoutine orig, Lookout self, Player player) { UsingWatchtower = true; float timeStartedUsing = Engine.Scene.TimeActive; IEnumerator origRoutine = orig(self, player); while (origRoutine.MoveNext()) { yield return(origRoutine.Current); } UsingWatchtower = false; if (Settings.BadelineChasersEverywhere) { // adjust chaser state timestamps so that they behave as if the player didn't stand by that watchtower. float timeDiff = Engine.Scene.TimeActive - timeStartedUsing; for (int i = 0; i < player.ChaserStates.Count; i++) { // structs are nice. I have to copy it, modify it, then place it back. Player.ChaserState state = player.ChaserStates[i]; state.TimeStamp += timeDiff; player.ChaserStates[i] = state; } } }
public override void Update() { base.Update(); if (_isRecording && _player != null && !_player.Dead) { Player.ChaserState state = new Player.ChaserState(_player) { TimeStamp = Scene.RawTimeActive }; _states.Add(state); } }
public static List <Player.ChaserState> ImportVerbose(byte[] buffer) { using (BinaryReader reader = new BinaryReader(new MemoryStream(buffer))) { List <Player.ChaserState> list = new List <Player.ChaserState>(); int version = 1; if (_("HEADER", reader.ReadString) == "TIMELINE") { version = reader.ReadInt32(); } else { reader.BaseStream.Seek(0L, SeekOrigin.Begin); } int frameCount = reader.ReadInt32(); for (int i = 0; i < frameCount; i++) { Player.ChaserState state = default; state.Position.X = _("Position.X", reader.ReadSingle); state.Position.Y = _("Position.Y", reader.ReadSingle); state.TimeStamp = _("TimeStamp", reader.ReadSingle); state.Animation = _("Animation", reader.ReadString); state.Facing = (Facings)_("Facing", reader.ReadInt32); state.OnGround = _("OnGround", reader.ReadBoolean); state.HairColor = new Color(_("HairColor.R", reader.ReadByte), _("HairColor.G", reader.ReadByte), _("HairColor.B", reader.ReadByte), 255); state.Depth = _("Depth", reader.ReadInt32); state.Sounds = 0; if (version == 1) { state.Scale = new Vector2((float)state.Facing, 1f); state.DashDirection = Vector2.Zero; } else { state.Scale.X = _("Scale.X", reader.ReadSingle); state.Scale.Y = _("Scale.Y", reader.ReadSingle); state.DashDirection.X = _("DashDirection.X", reader.ReadSingle); state.DashDirection.Y = _("DashDirection.Y", reader.ReadSingle); } list.Add(state); } return(list); } }