예제 #1
0
파일: Tests.cs 프로젝트: vashage/MarsMiner
        public static void TestAddChunkToUnloadedChunks(GameSave gameSave, Header header)
        {
            ChunkTable oldChunkTable = header.SaveIndex.ChunkTable;

            var octree = new Octree(gameSave, new BitArray(new[] { false, false }), new byte[] { 1 });
            var blockTypeTable = new BlockTypeTable(gameSave,
                                                    new[]
                                                        {
                                                            new StringBlock(gameSave, "Block 0"),
                                                            new StringBlock(gameSave, "Block 1"),
                                                            new StringBlock(gameSave, "Block 2"),
                                                            new StringBlock(gameSave, "Block 2")
                                                        },
                                                    new[] { 0, 0, 0, 1 });
            var chunk = new Chunk(gameSave, blockTypeTable, new[] { octree });

            var r = new Random();

            int x = r.Next();
            int z = r.Next();

            List<Tuple<int, int, Chunk>> chunks =
                oldChunkTable.GetChunks().Where(c => c.Item1 != x || c.Item2 != z).ToList();
            chunks.Add(new Tuple<int, int, Chunk>(x, z, chunk));

            var chunkTable = new ChunkTable(gameSave, chunks.ToArray());
            var mainIndex = new SavedStateIndex(gameSave, DateTime.UtcNow.Ticks,
                                                new StringBlock(gameSave, "ChunkTable Length: " + chunkTable.Length),
                                                chunkTable);
            var newHeader = new Header(gameSave, mainIndex);

            newHeader.Write(true);
        }
예제 #2
0
파일: Header.cs 프로젝트: Tamschi/MarsMiner
        public Header(GameSave gameSave, SavedStateIndex saveIndex)
            : base(gameSave)
        {
            Address   = new Tuple <int, uint>(0, 0);
            SaveIndex = saveIndex;

            UpdateLength();
        }
예제 #3
0
파일: Header.cs 프로젝트: vashage/MarsMiner
        public Header(GameSave gameSave, SavedStateIndex saveIndex)
            : base(gameSave)
        {
            Address = new Tuple<int, uint>(0, 0);
            SaveIndex = saveIndex;

            UpdateLength();
        }
예제 #4
0
        internal static SavedStateIndex FromSave(GameSave gameSave, Tuple <int, uint> address)
        {
            SavedStateIndex savedStateIndex;

            if (!gameSave.TryGetFromBlockStructureCache(address, out savedStateIndex))
            {
                savedStateIndex = new SavedStateIndex(gameSave, address);
                gameSave.AddToBlockStructureCache(address, savedStateIndex);
            }
            return(savedStateIndex);
        }
예제 #5
0
파일: Header.cs 프로젝트: Tamschi/MarsMiner
        protected override void ReadData(BinaryReader reader)
        {
            int version = reader.ReadInt32();

            if (version != Version)
            {
                throw new InvalidDataException("Expected file version " + Version + ", was " + version + ".");
            }

            SaveIndex = SavedStateIndex.FromSave(GameSave, ReadAddress(reader));
        }
예제 #6
0
 internal static SavedStateIndex FromSave(GameSave gameSave, Tuple<int, uint> address)
 {
     SavedStateIndex savedStateIndex;
     if (!gameSave.TryGetFromBlockStructureCache(address, out savedStateIndex))
     {
         savedStateIndex = new SavedStateIndex(gameSave, address);
         gameSave.AddToBlockStructureCache(address, savedStateIndex);
     }
     return savedStateIndex;
 }
예제 #7
0
파일: Header.cs 프로젝트: vashage/MarsMiner
        protected override void ReadData(BinaryReader reader)
        {
            int version = reader.ReadInt32();
            if (version != Version)
            {
                throw new InvalidDataException("Expected file version " + Version + ", was " + version + ".");
            }

            SaveIndex = SavedStateIndex.FromSave(GameSave, ReadAddress(reader));
        }
예제 #8
0
파일: Header.cs 프로젝트: vashage/MarsMiner
 protected override void ForgetData()
 {
     SaveIndex = null;
 }
예제 #9
0
파일: Tests.cs 프로젝트: vashage/MarsMiner
        public static void TestSaving(GameSave gameSave, string saveName)
        {
            var octree = new Octree(gameSave, new BitArray(new[] { false, false }), new byte[] { 1 });
            var blockTypeTable = new BlockTypeTable(gameSave,
                                                    new[]
                                                        {
                                                            new StringBlock(gameSave, "Block 0"),
                                                            new StringBlock(gameSave, "Block 1"),
                                                            new StringBlock(gameSave, "Block 2"),
                                                            new StringBlock(gameSave, "Block 2")
                                                        },
                                                    new[] { 0, 0, 0, 1 });
            var chunk = new Chunk(gameSave, blockTypeTable, new[] { octree });
            var chunkTable = new ChunkTable(gameSave, new[] { 0 }, new[] { 0 }, new[] { chunk });
            var mainIndex = new SavedStateIndex(gameSave, DateTime.UtcNow.Ticks, new StringBlock(gameSave, saveName),
                                                chunkTable);
            var header = new Header(gameSave, mainIndex);

            header.Write(true);
        }