예제 #1
0
        public void Initalise(VoxelTypeManager voxelTypeManager, BiomeDatabaseComponent biomeDatabase, float treeThreshold, int seed)
        {
            this.treeThreshold = treeThreshold;
            this.biomeDatabase = biomeDatabase;
            typeManager        = voxelTypeManager;

            var adjustedSeed = (uint)seed;

            adjustedSeed = adjustedSeed == 0 ? adjustedSeed + 1 : adjustedSeed;
            random       = new Random(adjustedSeed);
        }
예제 #2
0
        public NativeTreeDefinition ToNative(VoxelTypeManager typeManager)
        {
            NativeTreeDefinition def = new NativeTreeDefinition();

            def.maxHeight        = maxHeight;
            def.minHeight        = minHeight;
            def.minLeafClearance = minLeafClearance;
            def.leafID           = (leafType == null) ? (VoxelTypeID)VoxelTypeID.AIR_ID : typeManager.GetId(leafType);
            def.logID            = (logType == null) ? (VoxelTypeID)VoxelTypeID.AIR_ID : typeManager.GetId(logType);
            def.style            = Style;
            return(def);
        }
        public void Initialise(VoxelTypeManager typeManager, Allocator allocator = Allocator.Persistent)
        {
            NativeArray <NativeOreSettingsPair> oreSettings = new NativeArray <NativeOreSettingsPair>(ores.Count, allocator);

            for (int i = 0; i < ores.Count; i++)
            {
                var original = ores[i];
                var settings = original.settings;
                settings.Initialise();
                oreSettings[i] = new NativeOreSettingsPair()
                {
                    voxelType = typeManager.GetId(original.voxelType),
                    settings  = settings
                };
            }
            Native = oreSettings;
        }
예제 #4
0
 private void Start()
 {
     typeManager = FindObjectOfType <VoxelTypeManager>();
     row         = GetComponent <InventoryRow>();
     keys        = new KeyCode[] {
         KeyCode.Alpha1,
         KeyCode.Alpha2,
         KeyCode.Alpha3,
         KeyCode.Alpha4,
         KeyCode.Alpha5,
         KeyCode.Alpha6,
         KeyCode.Alpha7,
         KeyCode.Alpha8,
         KeyCode.Alpha9,
     };
     SetSelectedSlot(0);
 }
예제 #5
0
		internal FileSectorLoader( VoxelGameEnvironment GameEnv, IWorldGenesis Genesis )
		{
			for( int i = 0; i < 8; i++ )
				RequestList[i] = new SectorRequestRingList();
			this.GameEnv = GameEnv;
			SectorCreator = Genesis;
			ReadySectorList = new SectorRingList( 1024 * 1024 );
			EjectedSectorList = new SectorRingList( 1024 * 1024 );
			SectorRecycling = new Stack<VoxelSector>( 100 );
			VoxelTypeManager = null;
			UniverseNum = 1;
			WorkingEmptySector = new VoxelSector( null, (VoxelWorld)null );
			//GameEnv.Basic_Renderer.GetCuller().InitFaceCullData( WorkingEmptySector );
			WorkingEmptySector.Fill( 0 );
			WorkingFullSector = new VoxelSector( null, (VoxelWorld)null );
			//GameEnv.Basic_Renderer.GetCuller().InitFaceCullData( WorkingFullSector );
			WorkingFullSector.Fill( 1 );
			Thread = null;
			ThreadContinue = false;
		}
예제 #6
0
		public void SetVoxelTypeManager( VoxelTypeManager VoxelTypeManager ) { this.VoxelTypeManager = VoxelTypeManager; }
예제 #7
0
 public void Initialise(VoxelTypeManager voxelTypeManager, IChunkManager chunkManager, FrameworkEventManager eventManager)
 {
     throw new NotImplementedException();
 }
예제 #8
0
        public override void Initialise(VoxelTypeManager voxelTypeManager, IChunkManager chunkManager, FrameworkEventManager eventManager)
        {
            base.Initialise(voxelTypeManager, chunkManager, eventManager);


            Assert.IsNotNull(bedrockType, $"{typeof(NoisyProvider)} must have a valid reference to a bedrock block type");
            Assert.IsNotNull(waterType, $"{typeof(NoisyProvider)} must have a valid reference to a water block type");
            Assert.IsNotNull(biomeDatabaseComponent, $"{typeof(NoisyProvider)} must have a valid reference to a biome database component");

            if (SceneMessagePasser.TryConsumeMessage <SeedMessage>(out var message))
            {
                worldSettings.seed = GetSeedAsFloat(message.seed);
                Debug.Log($"Int seed: {message.seed}, derived seed: {worldSettings.seed}");
            }
            InitialiseSeeds();

            bedrockID = voxelTypeManager.GetId(bedrockType);
            waterID   = voxelTypeManager.GetId(waterType);

            chunkDimensions = chunkManager.ChunkDimensions.ToNative();

            if (chunkManager.WorldLimits.IsWorldHeightLimited)
            {
                minY = chunkManager.WorldLimits.MinChunkY * chunkManager.ChunkDimensions.y;
            }

            worldSettings.Initialise(minY, chunkManager.ChunkDimensions.ToNative());
            treeSettings.Initialise();

            biomeDatabaseComponent.Initialise();

            //Setup ocean config
            try
            {
                var oceanZone   = biomeDatabaseComponent.config.elevationLowToHigh.Find((zone) => zone.Name.Equals("Ocean"));
                var oceanBiomes = oceanZone.moistureLevelsLowToHigh.Select((def) => def.biomeDefinition).ToArray();

                oceanGenConfig.oceanIDs = new NativeArray <int>(oceanBiomes.Length, Allocator.Persistent);
                for (int i = 0; i < oceanBiomes.Length; i++)
                {
                    oceanGenConfig.oceanIDs[i] = biomeDatabaseComponent.GetBiomeID(oceanBiomes[i]);
                }
                oceanGenConfig.sealevel = math.floor(math.lerp(worldSettings.minPossibleHmValue, worldSettings.maxPossibleHmValue, biomeDatabaseComponent.GetMaxElevationFraction(oceanBiomes[0])));
                oceanGenConfig.waterID  = waterID;
            }
            catch (Exception e)
            {
                throw new Exception($"Failed to find any ocean biomes for biome config {biomeDatabaseComponent.config.name}. Cause {e.Message}");
            }

            noiseMaps = new Dictionary <Vector2Int, ChunkColumnNoiseMaps>();
            numActiveChunksInColumn  = new Dictionary <Vector2Int, int>();
            noiseGenReferenceCounter = new JobReferenceCounter <Vector2Int, NativeChunkColumnNoiseMaps>(MakeNoiseJob);

            structureGenerator = new StructureGenerator();
            structureGenerator.Initalise(voxelTypeManager, biomeDatabaseComponent, treeSettings.TreeThreshold, (int)treemapNoise.Seed);

            oreSettings.Initialise(voxelTypeManager);

            eventManager.OnChunkActivated   += OnChunkActivated;
            eventManager.OnChunkDeactivated += OnChunkDeactivated;
        }
예제 #9
0
 public override void Initialise(VoxelTypeManager voxelTypeManager, IChunkManager chunkManager, FrameworkEventManager eventManager)
 {
     base.Initialise(voxelTypeManager, chunkManager, eventManager);
     dirtID  = voxelTypeManager.GetId(dirtType);
     grassID = voxelTypeManager.GetId(grassType);
 }
예제 #10
0
 public override void Initialise(VoxelTypeManager voxelTypeManager, IChunkManager chunkManager, FrameworkEventManager eventManager)
 {
     base.Initialise(voxelTypeManager, chunkManager, eventManager);
     CullFaces = true;
 }
예제 #11
0
        public NativeBiomeDatabase ConfigToNative(SOBiomeConfiguration config, VoxelTypeManager typeManager)
        {
            List <NativeVoxelRange> allLayersList   = new List <NativeVoxelRange>();
            List <StartEndRange>    biomeLayersList = new List <StartEndRange>();
            List <NativeBiomeMoistureDefinition> allMoistureDefsList   = new List <NativeBiomeMoistureDefinition>();
            List <NativeElevationZone>           allElevationZonesList = new List <NativeElevationZone>();


            foreach (var elevationEntry in config.elevationLowToHigh)
            {
                NativeElevationZone elevationZone = new NativeElevationZone();
                elevationZone.maxElevationPercentage = elevationEntry.max;
                elevationZone.moistureLevels         = new StartEndRange()
                {
                    start = allMoistureDefsList.Count
                };

                foreach (var moistureEntry in elevationEntry.moistureLevelsLowToHigh)
                {
                    NativeBiomeMoistureDefinition moistureDef = new NativeBiomeMoistureDefinition();
                    moistureDef.maxMoisturePercentage = moistureEntry.max;

                    if (!biomeIds.TryGetValue(moistureEntry.biomeDefinition, out var id))
                    {
                        //Create new biome data
                        id = biomeLayersList.Count;
                        biomeIds.Add(moistureEntry.biomeDefinition, id);
                        biomeDefinitionsById.Add(moistureEntry.biomeDefinition);

                        Assert.IsTrue(moistureEntry.biomeDefinition.topLayers.Count > 0, $"All biome definitions must have at least one layer,{moistureEntry.biomeDefinition.name} does not");
                        StartEndRange layersForThisBiome = new StartEndRange()
                        {
                            start = allLayersList.Count
                        };

                        foreach (var layer in moistureEntry.biomeDefinition.topLayers)
                        {
                            NativeVoxelRange nativeLayer = new NativeVoxelRange();
                            nativeLayer.depth   = layer.depth;
                            nativeLayer.voxelID = typeManager.GetId(layer.voxelType);
                            allLayersList.Add(nativeLayer);
                        }

                        layersForThisBiome.end = allLayersList.Count;
                        biomeLayersList.Add(layersForThisBiome);
                    }

                    moistureDef.biomeID = id;

                    allMoistureDefsList.Add(moistureDef);
                }

                elevationZone.moistureLevels.end = allMoistureDefsList.Count;
                allElevationZonesList.Add(elevationZone);
            }

            NativeBiomeDatabase biomeDatabase = new NativeBiomeDatabase();

            VoxelTypeID defaultVoxelType = new VoxelTypeID(VoxelTypeID.AIR_ID);

            if (config.defaultVoxelType != null)
            {
                defaultVoxelType = typeManager.GetId(config.defaultVoxelType);
            }

            biomeDatabase.defaultVoxelType = defaultVoxelType;

            biomeDatabase.allLayers         = new NativeArray <NativeVoxelRange>(allLayersList.ToArray(), Allocator.Persistent);
            biomeDatabase.biomeLayers       = new NativeArray <StartEndRange>(biomeLayersList.ToArray(), Allocator.Persistent);
            biomeDatabase.allMoistureDefs   = new NativeArray <NativeBiomeMoistureDefinition>(allMoistureDefsList.ToArray(), Allocator.Persistent);
            biomeDatabase.allElevationZones = new NativeArray <NativeElevationZone>(allElevationZonesList.ToArray(), Allocator.Persistent);

            return(biomeDatabase);
        }