public void Sanity()
        {
            ServerProtobufSerializer server = new ServerProtobufSerializer();

            ThreadSafeCollection <InteractiveChildObjectIdentifier> deserialized;

            using (MemoryStream stream = new MemoryStream())
            {
                server.Serialize(stream, state);
                stream.Position = 0;
                deserialized    = server.Deserialize <ThreadSafeCollection <InteractiveChildObjectIdentifier> >(stream);
            }

            deserialized.Count.Should().BeGreaterThan(0);
            deserialized[0].GameObjectNamePath.ShouldBeEquivalentTo("/BlablaScene/SomeBlablaContainer/BlaItem");
            deserialized[1].GameObjectNamePath.ShouldBeEquivalentTo("");
            deserialized[2].GameObjectNamePath.ShouldBeEquivalentTo(" herp ");

            int iterationCount = 0;

            foreach (InteractiveChildObjectIdentifier id in deserialized)
            {
                iterationCount++;
                id.Id.ToString().Should().MatchRegex("^[a-zA-Z0-9\\-]{10,}$"); // matches hex and - character
                id.GameObjectNamePath.Should().NotBeNull();
            }

            iterationCount.ShouldBeEquivalentTo(3);
        }
示例#2
0
        public override void RegisterDependencies(ContainerBuilder containerBuilder)
        {
            base.RegisterDependencies(containerBuilder);
            containerBuilder.Register(c => SimulationWhitelist.ForServerSpawned).SingleInstance();

            ServerProtobufSerializer serializer = new ServerProtobufSerializer("Assembly-CSharp", "Assembly-CSharp-firstpass", "NitroxModel", "NitroxModel-Subnautica");

            containerBuilder.Register(c => serializer).SingleInstance();

            containerBuilder.RegisterType <SubnauticaEntitySpawnPointFactory>().As <EntitySpawnPointFactory>().SingleInstance();

            ResourceAssets resourceAssets = ResourceAssetsParser.Parse();

            containerBuilder.Register(c => resourceAssets).SingleInstance();
            containerBuilder.Register(c => resourceAssets.WorldEntitiesByClassId).SingleInstance();
            containerBuilder.RegisterType <SubnauticaUweWorldEntityFactory>().As <UweWorldEntityFactory>().SingleInstance();

            SubnauticaUwePrefabFactory prefabFactory = new SubnauticaUwePrefabFactory(resourceAssets.LootDistributionsJson);

            containerBuilder.Register(c => prefabFactory).As <UwePrefabFactory>().SingleInstance();

            Dictionary <TechTypeModel, IEntityBootstrapper> bootstrappersByTechType = new Dictionary <TechTypeModel, IEntityBootstrapper>();

            bootstrappersByTechType[TechType.Crash.Model()]    = new CrashFishBootstrapper();
            bootstrappersByTechType[TechType.Reefback.Model()] = new ReefbackBootstrapper();

            containerBuilder.Register(c => bootstrappersByTechType).SingleInstance();
        }
示例#3
0
        public void Sanity()
        {
            ServerProtobufSerializer server = new ServerProtobufSerializer();

            PDAStateData deserialized;

            using (MemoryStream stream = new MemoryStream())
            {
                server.Serialize(stream, state);
                stream.Position = 0;
                deserialized    = server.Deserialize <PDAStateData>(stream);
            }

            deserialized.PdaLog.Count.ShouldBeEquivalentTo(1);
            deserialized.PdaLog[0].Key.ShouldBeEquivalentTo("Some key");
            deserialized.EncyclopediaEntries.Count.ShouldBeEquivalentTo(3);
            deserialized.EncyclopediaEntries[2].ShouldBeEquivalentTo("");
            deserialized.PartiallyUnlockedByTechType.Count.ShouldBeEquivalentTo(1);
            deserialized.PartiallyUnlockedByTechType[new NitroxTechType("Battery")].Progress.ShouldBeEquivalentTo(1f);
        }
示例#4
0
        public BatchEntitySpawner(EntitySpawnPointFactory entitySpawnPointFactory, UweWorldEntityFactory worldEntityFactory, UwePrefabFactory prefabFactory, List <Int3> loadedPreviousParsed, ServerProtobufSerializer serializer,
                                  Dictionary <TechType, IEntityBootstrapper> customBootstrappersByTechType, Dictionary <string, List <PrefabAsset> > placeholderPrefabsByGroupClassId)
        {
            parsedBatches                         = new HashSet <Int3>(loadedPreviousParsed);
            this.worldEntityFactory               = worldEntityFactory;
            this.prefabFactory                    = prefabFactory;
            this.customBootstrappersByTechType    = customBootstrappersByTechType;
            this.placeholderPrefabsByGroupClassId = placeholderPrefabsByGroupClassId;

            batchCellsParser = new BatchCellsParser(entitySpawnPointFactory, serializer);
        }
示例#5
0
 public WorldPersistence(ServerProtobufSerializer serializer, ServerConfig config)
 {
     this.serializer = serializer;
     this.config     = config;
 }
示例#6
0
        public BatchEntitySpawner(ResourceAssets resourceAssets, List <Int3> loadedPreviousParsed, ServerProtobufSerializer serializer)
        {
            parsedBatches          = new HashSet <Int3>(loadedPreviousParsed);
            worldEntitiesByClassId = resourceAssets.WorldEntitiesByClassId;
            batchCellsParser       = new BatchCellsParser(serializer);

            LootDistributionsParser lootDistributionsParser = new LootDistributionsParser();

            lootDistributionData = lootDistributionsParser.GetLootDistributionData(resourceAssets.LootDistributionsJson);

            customBootstrappersByTechType[TechType.CrashHome] = new CrashFishBootstrapper();
            customBootstrappersByTechType[TechType.Reefback]  = new ReefbackBootstrapper();
        }