public IEnumerator PlayRecording() { yield return(new WaitForFixedUpdate()); InputRecording record = LoadRecording(recordingName); yield return(PlayRecording(record, doLoop)); }
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(); }
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); }