Пример #1
0
        public void TimelineStorageCanSaveItems()
        {
            var tls = new TimelineStorage <DState>(50)
            {
                [0] = new DState(5)
            };

            Assert.AreEqual(5, tls[0].Value);
        }
Пример #2
0
        public void TimelineStorageHasStateTest()
        {
            var tls = new TimelineStorage <DState>(2)
            {
                [0] = new DState(0)
            };

            Assert.IsTrue(tls.ContainsKey(0));
            Assert.AreEqual(0, tls[0].Value);
        }
Пример #3
0
        public void TimelineCanSaveItemsAfterMax()
        {
            var tls = new TimelineStorage <DState>(5);

            for (uint i = 0; i < 11; i++)
            {
                tls[i] = new DState((int)i);
            }
            Assert.Throws <TimelineException>(() => {
                tls[0].Value = 0;
            });
        }
Пример #4
0
        public void TimelineCanSaveMaxItems()
        {
            var tls = new TimelineStorage <DState>(50);

            for (uint i = 0; i < 50; i++)
            {
                tls[i] = new DState((int)i * 2);
            }

            Assert.AreEqual(98, tls[49].Value);
            Assert.AreEqual(0, tls[0].Value);
        }
Пример #5
0
        public void TimelineStorageRangeMoveAlong()
        {
            var tls = new TimelineStorage <DState>(2)
            {
                [0] = new DState(0), [1] = new DState(1)
            };

            Assert.AreEqual(0, tls[0].Value);
            tls[2] = new DState(2);
            Assert.Throws <TimelineException>(() => {
                tls[0].Value = 1;
            });
        }
Пример #6
0
        public void TimelineCanRetrieveItemsInCurrentRange()
        {
            var tls = new TimelineStorage <DState>(5);

            for (uint i = 0; i < 11; i++)
            {
                tls[i] = new DState((int)i);
            }
            Assert.AreEqual(10, tls[10].Value);
            Assert.AreEqual(9, tls[9].Value);
            Assert.AreEqual(8, tls[8].Value);
            Assert.AreEqual(7, tls[7].Value);
            Assert.AreEqual(6, tls[6].Value);
            Assert.Throws <TimelineException>(() => {
                tls[5].Value = 0;
            });
            Assert.Throws <TimelineException>(() => {
                tls[12].Value = 12;
            });
            Assert.DoesNotThrow(() => {
                tls[11] = new DState(11);
            });
        }
Пример #7
0
        public static void SaveGame(String pathToFolder, NamelessGame game)
        {
            var  saveFile = new NamelessRogueSaveFile();
            Type iStorageInterfaceType = typeof(IStorage <>);

            foreach (var componentTypeCollection in EntityInfrastructureManager.Components)
            {
                if (componentTypeCollection.Key.GetCustomAttributes(true).Any(a => a.GetType() == typeof(NamelessRogue.Engine.Serialization.SkipClassGeneration)))
                {
                    continue;
                }

                foreach (var componentDictionary in componentTypeCollection.Value)
                {
                    //the type of the storage that can store current type
                    Type storageType = saveFile.ComponentTypeToStorge[componentTypeCollection.Key];

                    var constructor = storageType.GetConstructor(Type.EmptyTypes);
                    if (constructor == null)
                    {
                        throw new Exception($@"{storageType.Name} must contain a parameterless constructor in order for Save manager to serialize it");
                    }

                    dynamic storageObject = constructor.Invoke(null);

                    storageObject.FillFrom(ObjectExtensions.CastToReflected(componentDictionary.Value, componentDictionary.Value.GetType()));

                    saveFile.StoragesDictionary[storageObject.GetType()].Add(storageObject);
                }
            }
            foreach (var entity in EntityInfrastructureManager.Entities.Values)
            {
                var storage = new EntityStorage();
                storage.FillFrom(entity);
                saveFile.EntityStorageTable.Add(storage);
            }

            {
                int    maxBytesNeeded = FlatBufferSerializer.Default.GetMaxSize(saveFile);
                byte[] buffer         = new byte[maxBytesNeeded];
                int    bytesWritten   = FlatBufferSerializer.Default.Serialize(saveFile, buffer);

                var stream = File.OpenWrite("objectdata.nrs");
                stream.Write(buffer, 0, bytesWritten);
                stream.Close();
            }

            {
                TimelineStorage timelinesStorage = new TimelineStorage();
                var             timeline         = game.TimelineEntity.GetComponentOfType <TimeLine>();
                timelinesStorage.FillFrom(timeline);
                {
                    FlatBufferSerializer serializer = new FlatBufferSerializer(FlatBufferDeserializationOption.Greedy);
                    int maxBytesNeeded = serializer.GetMaxSize(timelinesStorage);

                    int byteNeeded = serializer.GetMaxSize(timelinesStorage.CurrentTimelineLayer.WorldTiles[50 * 10]);

                    byte[] buffer = new byte[maxBytesNeeded];

                    int bytesWritten = serializer.Serialize(timelinesStorage, buffer);

                    var stream = File.OpenWrite("chunksmemory.nrs");
                    stream.Write(buffer, 0, bytesWritten);
                    stream.Close();
                }
            }
        }