コード例 #1
0
        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();
            }
        }
コード例 #2
0
        private static SaveInformation Save(WorldManager world, string filename)
        {
            var info = new SaveInformation();

            Instance.StartCoroutine(Instance.Save(info, world, filename));
            return(info);
        }
コード例 #3
0
        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);
            }
        }