public IEnumerator Save(SaveInformation info, WorldManager world, string filename) { info.UpdateProgress(SaveState.SavingWorld, 0.0f); var direction = Player.Instance.Mover.MoveDirection; var position = Player.Instance.Mover.CurrentGridPosition; var layer = Player.Instance.Mover.CollisionLayer; var data = new SaveData(); data.Game.MainScene = world.gameObject.scene.path; data.Game.StartingZone = world.CurrentZone.Zone.name; data.Game.PlayerSpawn.Direction = direction; data.Game.PlayerSpawn.Position = position; data.Game.PlayerSpawn.Layer = layer; world.SaveWorld(data.World); info.UpdateProgress(SaveState.WritingData, 0.2f); yield return(StartCoroutine(Write(info, data, filename))); if (info.State != SaveState.Error) { info.SetComplete(); } }
private static SaveInformation Save(WorldManager world, string filename) { var info = new SaveInformation(); Instance.StartCoroutine(Instance.Save(info, world, filename)); return(info); }
private static IEnumerator Write(SaveInformation info, SaveData data, string filename) { var thread = new Thread(DoWrite); var transfer = new ThreadData { Failed = false, Contents = data, Path = filename, Filename = filename }; thread.Start(transfer); while (thread.IsAlive) { yield return(null); } if (transfer.Failed) { info.SetError(transfer.Error); } }