1
- //Ignore those dumb 'never assigned to' warnings cuz this is Unity and our fields are serialized
2
- #pragma warning disable CS0649
3
-
1
+ using System . Collections . Generic ;
4
2
using UnityEngine ;
5
3
6
4
namespace Gameframe . Procgen
7
5
{
8
- public class WorldMapGenerator : MonoBehaviour
6
+ [ CreateAssetMenu ( menuName = "Gameframe/Procgen/WorldMapGenerator" ) ]
7
+ public class WorldMapGenerator : ScriptableObject
8
+ {
9
+ [ SerializeField ] private int mapWidth = 100 ;
10
+ [ SerializeField ] private int mapHeight = 100 ;
11
+ [ SerializeField ] private List < WorldMapLayerGenerator > layerGenerators = new List < WorldMapLayerGenerator > ( ) ;
12
+
13
+ public WorldMapData GenerateMap ( int seed )
9
14
{
10
- [ SerializeField ] private int mapWidth = 100 ;
11
-
12
- [ SerializeField ] private int mapHeight = 100 ;
13
-
14
- [ SerializeField ] private HeightMapLayerGenerator heightMapGenerator ;
15
-
16
- [ SerializeField ] private RegionMapLayerGenerator regionMapGenerator ;
17
-
18
- [ SerializeField ] private PoissonMapLayerGenerator poissonMapGenerator ;
19
-
20
- [ SerializeField ] private int seed = 100 ;
21
-
22
- private void Start ( )
23
- {
24
- GenerateMap ( ) ;
25
- }
26
-
27
- [ ContextMenu ( "GenerateMap" ) ]
28
- public void GenerateMap ( )
29
- {
30
- var worldData = new WorldMapData
31
- {
32
- seed = seed ,
33
- width = mapWidth ,
34
- height = mapHeight
35
- } ;
36
- heightMapGenerator . AddToWorld ( worldData ) ;
37
- regionMapGenerator . AddToWorld ( worldData ) ;
38
- poissonMapGenerator . AddToWorld ( worldData ) ;
39
- DisplayMap ( worldData ) ;
40
- }
41
-
42
- private void DisplayMap ( WorldMapData mapData )
43
- {
44
- var mapViews = GetComponents < IWorldMapView > ( ) ;
45
- foreach ( var view in mapViews )
46
- {
47
- view . DisplayMap ( mapData ) ;
48
- }
49
- }
50
-
51
- private void OnValidate ( )
52
- {
53
- if ( mapWidth <= 0 )
54
- {
55
- mapWidth = 1 ;
56
- }
57
-
58
- if ( mapHeight <= 0 )
59
- {
60
- mapHeight = 1 ;
61
- }
62
- }
15
+ var worldData = new WorldMapData
16
+ {
17
+ seed = seed ,
18
+ width = mapWidth ,
19
+ height = mapHeight
20
+ } ;
21
+
22
+ for ( int i = 0 ; i < layerGenerators . Count ; i ++ )
23
+ {
24
+ layerGenerators [ i ] . AddToWorld ( worldData ) ;
25
+ }
26
+
27
+ return worldData ;
28
+ }
63
29
30
+ private void OnValidate ( )
31
+ {
32
+ if ( mapWidth <= 0 )
33
+ {
34
+ mapWidth = 1 ;
35
+ }
36
+
37
+ if ( mapHeight <= 0 )
38
+ {
39
+ mapHeight = 1 ;
40
+ }
64
41
}
42
+ }
65
43
66
44
}
0 commit comments