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;
                }
            }
        }
Exemplo n.º 2
0
 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);
     }
 }
Exemplo n.º 3
0
        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);
            }
        }