コード例 #1
0
ファイル: Saving.cs プロジェクト: ofsouzap/PokemonObsidian
 public LoadedData(Status status, long saveTime, PlayerData playerData, GameSettings gameSettings, GameSceneManager.SceneStack sceneStack)
 {
     this.status       = status;
     this.saveTime     = saveTime;
     this.playerData   = playerData;
     this.gameSettings = gameSettings;
     this.sceneStack   = sceneStack;
 }
コード例 #2
0
ファイル: Serialize.cs プロジェクト: ofsouzap/PokemonObsidian
 public static void DeserializeData(Stream stream,
                                    out long saveTime,
                                    out PlayerData playerData,
                                    out GameSettings gameSettings,
                                    out GameSceneManager.SceneStack sceneStack)
 => DeserializeData(defaultSerializerVersion, stream,
                    out saveTime,
                    out playerData,
                    out gameSettings,
                    out sceneStack);
コード例 #3
0
        public override void SerializeSceneStack(Stream stream, GameSceneManager.SceneStack stack)
        {
            List <byte> bytes = new List <byte>();

            string s = stack.AsString;

            byte[] stringBytes = Encoding.ASCII.GetBytes(s);

            bytes.AddRange(BitConverter.GetBytes(stringBytes.Length));
            bytes.AddRange(stringBytes);

            stream.Write(bytes.ToArray(), 0, bytes.Count);
        }
コード例 #4
0
ファイル: Saving.cs プロジェクト: ofsouzap/PokemonObsidian
        public LoadedData(Status status)
        {
            if (status == Status.Success)
            {
                throw new ArgumentException("This initialiser should only be used when the data failed to load");
            }

            this.status = status;

            saveTime     = default;
            playerData   = default;
            gameSettings = default;
            sceneStack   = default;
        }
コード例 #5
0
ファイル: Serialize.cs プロジェクト: ofsouzap/PokemonObsidian
 public static void DeserializeData(ushort versionNumber, Stream stream,
                                    out long saveTime,
                                    out PlayerData playerData,
                                    out GameSettings gameSettings,
                                    out GameSceneManager.SceneStack sceneStack)
 {
     if (!serializers.ContainsKey(versionNumber))
     {
         throw new ArgumentException($"No serializer for provided version number ({versionNumber})");
     }
     else
     {
         serializers[versionNumber].DeserializeData(stream,
                                                    out saveTime,
                                                    out playerData,
                                                    out gameSettings,
                                                    out sceneStack);
     }
 }
コード例 #6
0
 public abstract void SerializeSceneStack(Stream stream, GameSceneManager.SceneStack stack);
コード例 #7
0
 public abstract void DeserializeData(Stream stream,
                                      out long saveTime,
                                      out PlayerData playerData,
                                      out GameSettings gameSettings,
                                      out GameSceneManager.SceneStack sceneStack);
コード例 #8
0
        public override void DeserializeData(Stream stream,
                                             out long saveTime,
                                             out PlayerData playerData,
                                             out GameSettings gameSettings,
                                             out GameSceneManager.SceneStack sceneStack)
        {
            byte[] buffer;

            Guid  playerGuid;
            ulong gameStartTime, distanceWalked, timePlayed;

            PokemonInstance[] partyPokemon;
            Guid[]            tradeReceivedPokemonGuids;
            PlayerData.PokemonStorageSystem storageSystemPokemon;
            GameSceneManager.SceneStack     respawnSceneStack;
            int                   money;
            byte                  spriteId;
            string                name;
            List <int>            defeatedGymIds, npcsBattled, npcsTalkedTo, collectedDroppedItemIds;
            bool                  respawnSceneStackSet, cheatsUsed;
            Dictionary <int, int> generalItems, medicineItems, battleItems, pokeBallItems, tmItems;

            PlayerData.Pokedex     pokedex;
            GameSettings.TextSpeed textSpeed;
            float musicVolume, sfxVolume;

            //Header
            DeserializeDetails(stream, out ushort saveFileVersion, out saveTime);

            if (saveFileVersion != GetVersionCode())
            {
                throw new SerializerVersionMismatchException("Save file version of provided data isn't valid for this serializer", saveFileVersion, GetVersionCode());
            }

            //Player
            buffer = new byte[16];
            stream.Read(buffer, 0, 16);
            playerGuid = new Guid(buffer);

            buffer = new byte[8];
            stream.Read(buffer, 0, 8);
            gameStartTime = BitConverter.ToUInt64(buffer, 0);

            //Pokemon
            DeserializePlayerPartyAndStorageSystemPokemon(stream,
                                                          out partyPokemon,
                                                          out storageSystemPokemon);

            //Trade-Received Pokemon
            DeserializePlayerTradeReceivedPokemonGuids(stream,
                                                       out tradeReceivedPokemonGuids);

            //Scene Stacks
            sceneStack = DeserializeSceneStack(stream);

            respawnSceneStackSet = DeserializeBool(stream);

            if (respawnSceneStackSet)
            {
                respawnSceneStack = DeserializeSceneStack(stream);
            }
            else
            {
                respawnSceneStack = default;
            }

            //Profile Details
            buffer = new byte[1];
            stream.Read(buffer, 0, 1);
            spriteId = buffer[0];

            name = DeserializeString(stream);

            buffer = new byte[4];
            stream.Read(buffer, 0, 4);
            money = BitConverter.ToInt32(buffer, 0);

            //Defeated Gyms
            buffer = new byte[4];
            stream.Read(buffer, 0, 4);
            int numberOfDefeatedGyms = BitConverter.ToInt32(buffer, 0);

            defeatedGymIds = new List <int>();
            for (int i = 0; i < numberOfDefeatedGyms; i++)
            {
                buffer = new byte[4];
                stream.Read(buffer, 0, 4);
                defeatedGymIds.Add(BitConverter.ToInt32(buffer, 0));
            }

            //Stats
            buffer = new byte[8];
            stream.Read(buffer, 0, 8);
            distanceWalked = BitConverter.ToUInt64(buffer, 0);

            buffer = new byte[8];
            stream.Read(buffer, 0, 8);
            timePlayed = BitConverter.ToUInt64(buffer, 0);

            cheatsUsed = DeserializeBool(stream);

            //Inventory
            generalItems  = DeserializeInventorySection(stream);
            medicineItems = DeserializeInventorySection(stream);
            battleItems   = DeserializeInventorySection(stream);
            pokeBallItems = DeserializeInventorySection(stream);
            tmItems       = DeserializeInventorySection(stream);

            //Pokedex
            pokedex = DeserializePokedex(stream);

            //NPCs Battled
            buffer = new byte[4];
            stream.Read(buffer, 0, 4);
            int numberOfNpcsBattled = BitConverter.ToInt32(buffer, 0);

            npcsBattled = new List <int>();
            for (int i = 0; i < numberOfNpcsBattled; i++)
            {
                buffer = new byte[4];
                stream.Read(buffer, 0, 4);
                npcsBattled.Add(BitConverter.ToInt32(buffer, 0));
            }

            //NPCs Talked To
            buffer = new byte[4];
            stream.Read(buffer, 0, 4);
            int numberOfNpcsTalkedTo = BitConverter.ToInt32(buffer, 0);

            npcsTalkedTo = new List <int>();
            for (int i = 0; i < numberOfNpcsTalkedTo; i++)
            {
                buffer = new byte[4];
                stream.Read(buffer, 0, 4);
                npcsTalkedTo.Add(BitConverter.ToInt32(buffer, 0));
            }

            //Settings
            buffer = new byte[4];
            stream.Read(buffer, 0, 4);
            int textSpeedIndex = BitConverter.ToInt32(buffer, 0);

            textSpeed = GameSettings.textSpeedOptions[textSpeedIndex];

            buffer = new byte[4];
            stream.Read(buffer, 0, 4);
            musicVolume = BitConverter.ToSingle(buffer, 0);

            buffer = new byte[4];
            stream.Read(buffer, 0, 4);
            sfxVolume = BitConverter.ToSingle(buffer, 0);

            //Dropped Items Collected
            buffer = new byte[4];
            stream.Read(buffer, 0, 4);
            int numberOfCollectedDroppedItemIds = BitConverter.ToInt32(buffer, 0);

            collectedDroppedItemIds = new List <int>();
            for (int i = 0; i < numberOfCollectedDroppedItemIds; i++)
            {
                buffer = new byte[4];
                stream.Read(buffer, 0, 4);
                collectedDroppedItemIds.Add(BitConverter.ToInt32(buffer, 0));
            }

            //Setting output
            playerData = new PlayerData()
            {
                partyPokemon = partyPokemon,
                boxPokemon   = storageSystemPokemon,
                profile      = new PlayerData.Profile()
                {
                    guid           = playerGuid,
                    name           = name,
                    spriteId       = spriteId,
                    money          = money,
                    defeatedGymIds = defeatedGymIds
                },
                stats = new PlayerData.Stats()
                {
                    gameStartTime  = gameStartTime,
                    distanceWalked = distanceWalked,
                    timePlayed     = timePlayed,
                    cheatsUsed     = cheatsUsed
                },
                inventory                = new PlayerData.Inventory(),
                pokedex                  = pokedex,
                npcsBattled              = npcsBattled,
                npcsTalkedTo             = npcsTalkedTo,
                respawnSceneStackSet     = respawnSceneStackSet,
                respawnSceneStack        = respawnSceneStack,
                collectedDroppedItemsIds = collectedDroppedItemIds
            };

            playerData.inventory.generalItems.SetItems(generalItems);
            playerData.inventory.medicineItems.SetItems(medicineItems);
            playerData.inventory.battleItems.SetItems(battleItems);
            playerData.inventory.pokeBalls.SetItems(pokeBallItems);
            playerData.inventory.tmItems.SetItems(tmItems);

            gameSettings = new GameSettings()
            {
                textSpeed   = textSpeed,
                musicVolume = musicVolume,
                sfxVolume   = sfxVolume
            };
        }
コード例 #9
0
        private void LaunchSceneStack(GameSceneManager.SceneStack sceneStack)
        {
            PrepareToLaunch();

            GameSceneManager.LoadSceneStack(sceneStack);
        }
コード例 #10
0
        public override void DeserializeData(Stream stream, out long saveTime, out PlayerData playerData, out GameSettings gameSettings, out GameSceneManager.SceneStack sceneStack)
        {
            base.DeserializeData(stream, out saveTime, out playerData, out gameSettings, out sceneStack);

            List <ProgressionEvent> completedProgressionEvents;

            //Completed Progression Events
            byte[] buffer = new byte[4];
            stream.Read(buffer, 0, 4);
            int numberOfCompletedProgressionEvents = BitConverter.ToInt32(buffer, 0);

            completedProgressionEvents = new List <ProgressionEvent>();
            for (int i = 0; i < numberOfCompletedProgressionEvents; i++)
            {
                buffer = new byte[4];
                stream.Read(buffer, 0, 4);
                completedProgressionEvents.Add((ProgressionEvent)BitConverter.ToInt32(buffer, 0));
            }

            playerData.completedProgressionEvents = completedProgressionEvents;
        }