Example #1
0
    public IEnumerator PlayRecording()
    {
        yield return(new WaitForFixedUpdate());

        InputRecording record = LoadRecording(recordingName);

        yield return(PlayRecording(record, doLoop));
    }
Example #2
0
    private InputRecording LoadRecording(string name)
    {
        string path = Path.Combine(
            Application.streamingAssetsPath, recordingDirectory, name + ".inputRecord");
        BinaryFormatter formatter = new BinaryFormatter();
        FileStream      file      = File.Open(path, FileMode.Open);
        InputRecording  record    = (InputRecording)formatter.Deserialize(file);

        file.Close();
        return(record);
    }
    private IEnumerator Record()
    {
        isRecording = true;
        Debug.Log("Recording started");
        yield return(null);

        InputRecording record =
            new InputRecording(transform.position.x,
                               transform.position.y,
                               this.EnsureComponent <Rigidbody2D>().rotation,
                               new List <InputFrame>());
        float lastTime = Time.realtimeSinceStartup;

        while (true)
        {
            InputDevice input = controls.GetInputDevice();
            if (input != null)
            {
                if (endRecording)
                {
                    SaveRecording(record);
                    endRecording = false;
                    recording    = null;
                    isRecording  = false;
                    yield break;
                }
                if (input.LeftBumper.WasPressed)
                {
                    Debug.Log("Recording interrupt");
                }
                float delta = Time.realtimeSinceStartup - lastTime;
                lastTime = Time.realtimeSinceStartup;
                record.recording.Add(
                    new InputFrame(
                        input.LeftStickX, input.LeftStickY,
                        rigidbody.position.x, rigidbody.position.y,
                        rigidbody.rotation,
                        input.Action1.WasPressed,
                        input.Action1.WasReleased,
                        input.Action2.WasPressed,
                        input.Action2.WasReleased,
                        input.LeftBumper.WasPressed,
                        delta));
            }
            else
            {
                record.recording.Add(new InputFrame(0, 0, rigidbody.position.x, rigidbody.position.y, rigidbody.rotation));
            }
            yield return(null);
        }
    }
    private void WriteRecording(InputRecording record, string name)
    {
        BinaryFormatter formatter = new BinaryFormatter();

        Directory.CreateDirectory(recordingFolder);
        string path = string.Format("{0}/recordings/{1}",
                                    Application.persistentDataPath, name);

        Debug.LogFormat("Recording finished, saving to {0}", path);
        FileStream file = File.Create(path);

        formatter.Serialize(file, record);
        file.Close();
    }
Example #5
0
    private IEnumerator PlayRecording(InputRecording record, bool loop = false)
    {
        while (true)
        {
            transform.position = new Vector2(record.startX, record.startY);
            rigidbody.rotation = record.startRotation;
            foreach (InputFrame frame in record.recording)
            {
                if (this.gameObject == null)
                {
                    yield break;
                }

                while (puppetsPause)
                {
                    PlayerControls.SendInputEvents(
                        0, 0, false, false, false, false, this.gameObject);
                    yield return(new WaitForFixedUpdate());
                }
                rigidbody.position = new Vector2(frame.positionX, frame.positionY);
                rigidbody.rotation = frame.rotation;
                PlayerControls.SendInputEvents(
                    0, 0, frame.APressed, frame.AReleased,
                    frame.BPressed, frame.BReleased, this.gameObject);
                if (frame.Interrupt)
                {
                    Debug.LogWarning("Interrupt! Text will change");

                    GameManager.instance.notificationManager.NotifyMessage(
                        Message.RecordingInterrupt, this.gameObject);
                }
                yield return(null);
            }
            if (!recordingFinishedThisFrame)
            {
                GameManager.instance.notificationManager.NotifyMessage(
                    Message.RecordingFinished, this.gameObject);
            }
            if (!loop)
            {
                break;
            }
        }
    }
    private void SaveRecording(InputRecording record)
    {
        string name = string.Format(filePattern, NextRecordingNumber());

        WriteRecording(record, name);
    }