public void TimelineStorageCanSaveItems() { var tls = new TimelineStorage <DState>(50) { [0] = new DState(5) }; Assert.AreEqual(5, tls[0].Value); }
public void TimelineStorageHasStateTest() { var tls = new TimelineStorage <DState>(2) { [0] = new DState(0) }; Assert.IsTrue(tls.ContainsKey(0)); Assert.AreEqual(0, tls[0].Value); }
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; }); }
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); }
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; }); }
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); }); }
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(); } } }