示例#1
0
 public void initialize(RAKTerrainMaster terrainMaster)
 {
     Debug.LogWarning("Initialize " + name);
     this.terrainMaster = terrainMaster;
     terrain            = GetComponent <Terrain>();
     grid = null;
 }
示例#2
0
 public void start(Transform master, RAKTerrainMaster masterTerrain, GameObject sun)
 {
     this.sun           = sun;
     this.masterTerrain = masterTerrain;
     windZone           = master.gameObject.GetComponent <WindZone>();
     audioClips         = new RAKAudioClip[2];
     audioClips[0]      = new RAKAudioClip(RAKUtilities.getAudioClip(RAKUtilities.AUDIO_CLIP_RAIN_LIGHT));
     audioClips[1]      = new RAKAudioClip(RAKUtilities.getAudioClip(RAKUtilities.AUDIO_CLIP_WIND_MEDIUM));
     rainPrefab         = RAKUtilities.getPrefab("RainPrefab");
     audioSource        = master.gameObject.AddComponent <AudioSource>();
     audioSource.clip   = audioClips[0].audioClip;
     audioSource.loop   = true;
     windAudio          = master.gameObject.AddComponent <AudioSource>();
     windAudio.clip     = audioClips[1].audioClip;
     windAudio.loop     = true;
     setWeather(WeatherType.Clear);
     initialized = true;
 }
示例#3
0
    public void Initialize(World world, HexCell cell)
    {
        if (debug)
        {
            InitializeDebugTerrain(world, cell);
            return;
        }
        // Set static data //
        RAKTerrainMaster.world = world;
        RAKTerrainMaster.cell  = cell;
        DateTime startTime = DateTime.Now;

        terrain = new RAKTerrain[worldSize];
        // Check if files are already present for this cell //
        bool saveDataAvail = IsSaveDataAvailable(cell, world.WorldName);

        if (forceGenerate)
        {
            saveDataAvail = false;
        }
        if (cell.GetChunkMaterial() == HexGridChunk.ChunkMaterial.GRASS)
        {
            currentBiome = RAKBiome.getForestBiome();
        }
        else
        {
            currentBiome = RAKBiome.getForestBiome();
        }

        #region TERRAIN GENERATION
        // Load single terrain loop //
        for (int count = 0; count < worldSize; count++)
        {
            TerrainData         td;
            RAKTerrainSavedData savedTerrain = null;
            // If no save data available, go ahead and generate a new terrain //
            if (!saveDataAvail) //  generate //
            {
                TerrainData previousTD = null;
                if (count > 0)
                {
                    currentBiome.GetNewOffsets();
                }
                td = generateTerrain(width, height, currentBiome.depth, currentBiome.scale, currentBiome.offsetX,
                                     currentBiome.offsetY);
                generateSplatPrototypes(td);
            }
            // Save data is available //
            else
            {
                savedTerrain = RAKTerrainSavedData.loadTerrain(cell.GetCellSaveFileName(world.WorldName) + "T" + count + ".area");
                td           = savedTerrain.generateTerrainDataFromFlatMap();
                Debug.LogWarning("Loading terrain from disk tdsize - " + td.size.x + "-" + td.size.y + "-" + td.size.z);
            }
            // TerrainData generation complete, finish setting up Unity objects //
            GameObject go = Terrain.CreateTerrainGameObject(td);
            go.isStatic = false;
            go.transform.SetParent(transform);
            go.name = "Terrain" + count;
            logDebug("Terrain created - " + go.name);
            Terrain terrainComp = go.GetComponent <Terrain>();
            terrain[count] = go.AddComponent <RAKTerrain>();
            terrain[count].initialize(this);
            terrain[count].savedData = savedTerrain;
            mapPositions(count);
            terrain[count].setBiome(RAKBiome.getForestBiome());
        }
        // Tell Unity which terrain objects are next to each other //
        setNeighbors();
        // If we are generating new world terrains, fix the sides and seam together //
        if (!saveDataAvail)
        {
            fixGaps(16);
        }
        // Generate the terrain details //
        for (int count = 0; count < terrain.Length; count++)
        {
            generateSplatMap(terrain[count].getTerrainData());
            // If no save data, generate new details //
            if (!saveDataAvail)
            {
                generateNonTerrainDetailPrefabs(terrain[count].getTerrainComponenet());
            }
            // Save data avail, load details from disk //
            else
            {
                Debug.Log("Loading terrain from disk");
                generateNonTerrainDetailsFromDisk(terrain[count]);
            }
        }
        #endregion

        float currentTime = Time.time;

        /*List<NavMeshSurface> surfaces = new List<NavMeshSurface>();
         * surfaces.Add(gameObject.AddComponent<NavMeshSurface>());
         * surfaces[0].collectObjects = CollectObjects.Children;
         * RAKMeshBaker.Bake(surfaces.ToArray());
         * Debug.LogWarning("Build nav mesh took - " + (Time.time - currentTime));*/

        // Save to disk if needed //
        if (!saveDataAvail)
        {
            SaveTerrainData();
        }

        // Finish loading //
        RAKTerrainMaster.generateCreatures(cell, world);
        RAKTerrainMaster.sun = gameObject.AddComponent <RAKWeather>();
        RAKTerrainMaster.sun.start(transform, this, sun.gameObject);
        TimeSpan difference = startTime.Subtract(DateTime.Now);
        Debug.LogWarning("LOAD TIME - " + difference.TotalMilliseconds);
    }