summaryrefslogtreecommitdiff
path: root/source/game/planets/GeneratedPlanet.cs
blob: c89a6c851e4b6f0d200f3a4f3b7d55323e9670e8 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
using System;
using Celesteia.Game.Planets.Generation;
using Microsoft.Xna.Framework;

namespace Celesteia.Game.Planets {
    public class GeneratedPlanet : ChunkMap
    {
        public int Seed { get; private set; }

        private IChunkProvider _provider;

        public GeneratedPlanet(int w, int h, int? seed = null) : base(w, h)
        {
            Seed = seed.HasValue ? seed.Value : (int) System.DateTime.Now.Ticks;
        }

        public void Generate(IChunkProvider provider, Action<string> progressReport = null) {
            Action<string> doProgressReport = (s) => { if (progressReport != null) progressReport(s); };

            _provider = provider;
            doProgressReport("Generating chunks...");

            ChunkVector _cv;
            for (_cv.X = 0; _cv.X < Width; _cv.X++)
                for (_cv.Y = 0; _cv.Y < Height; _cv.Y++)
                    provider.ProvideChunk(Map[_cv.X, _cv.Y] = new Chunk(_cv));

            provider.GenerateStructures(doProgressReport);

            doProgressReport("Planet generated.");
        }
        
        public override Vector2 GetSpawnpoint() => _provider.GetSpawnpoint();
    }
}