├── UnityMedievalCityImporter.unitypackage
├── LevelGeneration
├── CityGenerator.prefab.meta
├── CityPrefabs
│ ├── River.prefab.meta
│ ├── Road.prefab.meta
│ ├── Tower.prefab.meta
│ ├── Wall.prefab.meta
│ ├── Water.prefab.meta
│ ├── Building.prefab.meta
│ ├── BuildingLine.prefab.meta
│ ├── Water.prefab
│ ├── Building.prefab
│ ├── Tower.prefab
│ ├── River.prefab
│ ├── Wall.prefab
│ ├── Road.prefab
│ └── BuildingLine.prefab
├── Creators.meta
├── Editor.meta
├── CityMaterials.meta
├── CityPrefabs.meta
├── CityMaterials
│ ├── MaterialRiver.mat.meta
│ ├── MaterialRoad.mat.meta
│ ├── MaterialTower.mat.meta
│ ├── MaterialWalls.mat.meta
│ ├── MaterialWater.mat.meta
│ ├── MaterialBuilding.mat.meta
│ ├── MaterialBuildingLine.mat.meta
│ ├── MaterialBuildingLine.mat
│ ├── MaterialTower.mat
│ ├── MaterialRiver.mat
│ ├── MaterialWalls.mat
│ ├── MaterialRoad.mat
│ ├── MaterialWater.mat
│ └── MaterialBuilding.mat
├── JsonFix.cs.meta
├── MeshFolder.cs.meta
├── CityElements.cs.meta
├── CityGenerator.cs.meta
├── Creators
│ ├── Creator.cs.meta
│ ├── RoadCreator.cs.meta
│ ├── WallCreator.cs.meta
│ ├── BuildingCreator.cs.meta
│ ├── RiversCreator.cs.meta
│ ├── WaterCreator.cs.meta
│ ├── AssetFolderHelper.cs.meta
│ ├── CityGeneratorHelper.cs.meta
│ ├── LineBuildingCreator.cs.meta
│ ├── MultiLineStringHandler.cs.meta
│ ├── Creator.cs
│ ├── WaterCreator.cs
│ ├── RiversCreator.cs
│ ├── RoadCreator.cs
│ ├── LineBuildingCreator.cs
│ ├── BuildingCreator.cs
│ ├── AssetFolderHelper.cs
│ ├── MultiLineStringHandler.cs
│ ├── WallCreator.cs
│ └── CityGeneratorHelper.cs
├── Editor
│ ├── CityGeneratorEditor.cs.meta
│ └── CityGeneratorEditor.cs
├── MeshFolder.cs
├── CityElements.cs
├── JsonFix.cs
├── CityGenerator.cs
└── CityGenerator.prefab
├── LevelGeneration.meta
├── LICENSE
└── README.md
/UnityMedievalCityImporter.unitypackage:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/InsaneQA/UnityMedievalCityImporter/HEAD/UnityMedievalCityImporter.unitypackage
--------------------------------------------------------------------------------
/LevelGeneration/CityGenerator.prefab.meta:
--------------------------------------------------------------------------------
1 | fileFormatVersion: 2
2 | guid: 90a71b0ccdb21184ab99c238f5e3447a
3 | PrefabImporter:
4 | externalObjects: {}
5 | userData:
6 | assetBundleName:
7 | assetBundleVariant:
8 |
--------------------------------------------------------------------------------
/LevelGeneration.meta:
--------------------------------------------------------------------------------
1 | fileFormatVersion: 2
2 | guid: 845b39444da18f548b01ce8d0fb9376b
3 | folderAsset: yes
4 | DefaultImporter:
5 | externalObjects: {}
6 | userData:
7 | assetBundleName:
8 | assetBundleVariant:
9 |
--------------------------------------------------------------------------------
/LevelGeneration/CityPrefabs/River.prefab.meta:
--------------------------------------------------------------------------------
1 | fileFormatVersion: 2
2 | guid: 6c7df8e459d40524396d80afbe3ed374
3 | PrefabImporter:
4 | externalObjects: {}
5 | userData:
6 | assetBundleName:
7 | assetBundleVariant:
8 |
--------------------------------------------------------------------------------
/LevelGeneration/CityPrefabs/Road.prefab.meta:
--------------------------------------------------------------------------------
1 | fileFormatVersion: 2
2 | guid: 29bcda58ccd74cc4881f88405ada4cdb
3 | PrefabImporter:
4 | externalObjects: {}
5 | userData:
6 | assetBundleName:
7 | assetBundleVariant:
8 |
--------------------------------------------------------------------------------
/LevelGeneration/CityPrefabs/Tower.prefab.meta:
--------------------------------------------------------------------------------
1 | fileFormatVersion: 2
2 | guid: 80a058699d804444dbdd61fc695ae6b6
3 | PrefabImporter:
4 | externalObjects: {}
5 | userData:
6 | assetBundleName:
7 | assetBundleVariant:
8 |
--------------------------------------------------------------------------------
/LevelGeneration/CityPrefabs/Wall.prefab.meta:
--------------------------------------------------------------------------------
1 | fileFormatVersion: 2
2 | guid: 7717e6db44d0df54e931c7f1a50f11e8
3 | PrefabImporter:
4 | externalObjects: {}
5 | userData:
6 | assetBundleName:
7 | assetBundleVariant:
8 |
--------------------------------------------------------------------------------
/LevelGeneration/CityPrefabs/Water.prefab.meta:
--------------------------------------------------------------------------------
1 | fileFormatVersion: 2
2 | guid: f95d32ae389625644a1b82018ce81eb5
3 | PrefabImporter:
4 | externalObjects: {}
5 | userData:
6 | assetBundleName:
7 | assetBundleVariant:
8 |
--------------------------------------------------------------------------------
/LevelGeneration/CityPrefabs/Building.prefab.meta:
--------------------------------------------------------------------------------
1 | fileFormatVersion: 2
2 | guid: bb614a8b45e83954da47cd4690a96720
3 | PrefabImporter:
4 | externalObjects: {}
5 | userData:
6 | assetBundleName:
7 | assetBundleVariant:
8 |
--------------------------------------------------------------------------------
/LevelGeneration/Creators.meta:
--------------------------------------------------------------------------------
1 | fileFormatVersion: 2
2 | guid: d028d608e7c72f04394b0f0b010bda43
3 | folderAsset: yes
4 | DefaultImporter:
5 | externalObjects: {}
6 | userData:
7 | assetBundleName:
8 | assetBundleVariant:
9 |
--------------------------------------------------------------------------------
/LevelGeneration/Editor.meta:
--------------------------------------------------------------------------------
1 | fileFormatVersion: 2
2 | guid: 59c247c0b2723da46928161e22d9760e
3 | folderAsset: yes
4 | DefaultImporter:
5 | externalObjects: {}
6 | userData:
7 | assetBundleName:
8 | assetBundleVariant:
9 |
--------------------------------------------------------------------------------
/LevelGeneration/CityMaterials.meta:
--------------------------------------------------------------------------------
1 | fileFormatVersion: 2
2 | guid: 1481fa32bf6eb8245b2ab2c16de52470
3 | folderAsset: yes
4 | DefaultImporter:
5 | externalObjects: {}
6 | userData:
7 | assetBundleName:
8 | assetBundleVariant:
9 |
--------------------------------------------------------------------------------
/LevelGeneration/CityPrefabs.meta:
--------------------------------------------------------------------------------
1 | fileFormatVersion: 2
2 | guid: 00de05de3cfa0354381823f117184a76
3 | folderAsset: yes
4 | DefaultImporter:
5 | externalObjects: {}
6 | userData:
7 | assetBundleName:
8 | assetBundleVariant:
9 |
--------------------------------------------------------------------------------
/LevelGeneration/CityPrefabs/BuildingLine.prefab.meta:
--------------------------------------------------------------------------------
1 | fileFormatVersion: 2
2 | guid: 97ef2948a16e9d2409326cae5e0fde6f
3 | PrefabImporter:
4 | externalObjects: {}
5 | userData:
6 | assetBundleName:
7 | assetBundleVariant:
8 |
--------------------------------------------------------------------------------
/LevelGeneration/CityMaterials/MaterialRiver.mat.meta:
--------------------------------------------------------------------------------
1 | fileFormatVersion: 2
2 | guid: 6fc4b61e7e21ac6459d41f7cc03999d0
3 | NativeFormatImporter:
4 | externalObjects: {}
5 | mainObjectFileID: 2100000
6 | userData:
7 | assetBundleName:
8 | assetBundleVariant:
9 |
--------------------------------------------------------------------------------
/LevelGeneration/CityMaterials/MaterialRoad.mat.meta:
--------------------------------------------------------------------------------
1 | fileFormatVersion: 2
2 | guid: 48c28de019edaf247be3efa3630bbe1a
3 | NativeFormatImporter:
4 | externalObjects: {}
5 | mainObjectFileID: 2100000
6 | userData:
7 | assetBundleName:
8 | assetBundleVariant:
9 |
--------------------------------------------------------------------------------
/LevelGeneration/CityMaterials/MaterialTower.mat.meta:
--------------------------------------------------------------------------------
1 | fileFormatVersion: 2
2 | guid: 55d89c32368b0ac4588acc3da9418ba9
3 | NativeFormatImporter:
4 | externalObjects: {}
5 | mainObjectFileID: 2100000
6 | userData:
7 | assetBundleName:
8 | assetBundleVariant:
9 |
--------------------------------------------------------------------------------
/LevelGeneration/CityMaterials/MaterialWalls.mat.meta:
--------------------------------------------------------------------------------
1 | fileFormatVersion: 2
2 | guid: a42a914eff6233248adf21a988114334
3 | NativeFormatImporter:
4 | externalObjects: {}
5 | mainObjectFileID: 2100000
6 | userData:
7 | assetBundleName:
8 | assetBundleVariant:
9 |
--------------------------------------------------------------------------------
/LevelGeneration/CityMaterials/MaterialWater.mat.meta:
--------------------------------------------------------------------------------
1 | fileFormatVersion: 2
2 | guid: 849d536a65a701944bed85b025ce81f3
3 | NativeFormatImporter:
4 | externalObjects: {}
5 | mainObjectFileID: 2100000
6 | userData:
7 | assetBundleName:
8 | assetBundleVariant:
9 |
--------------------------------------------------------------------------------
/LevelGeneration/CityMaterials/MaterialBuilding.mat.meta:
--------------------------------------------------------------------------------
1 | fileFormatVersion: 2
2 | guid: 36076a93c0fe2d542942969a6a80de27
3 | NativeFormatImporter:
4 | externalObjects: {}
5 | mainObjectFileID: 2100000
6 | userData:
7 | assetBundleName:
8 | assetBundleVariant:
9 |
--------------------------------------------------------------------------------
/LevelGeneration/CityMaterials/MaterialBuildingLine.mat.meta:
--------------------------------------------------------------------------------
1 | fileFormatVersion: 2
2 | guid: a91af4e75a4cecd42b13cfdad9d39627
3 | NativeFormatImporter:
4 | externalObjects: {}
5 | mainObjectFileID: 2100000
6 | userData:
7 | assetBundleName:
8 | assetBundleVariant:
9 |
--------------------------------------------------------------------------------
/LevelGeneration/JsonFix.cs.meta:
--------------------------------------------------------------------------------
1 | fileFormatVersion: 2
2 | guid: b43967c42ac56074ea9813ebdd882169
3 | MonoImporter:
4 | externalObjects: {}
5 | serializedVersion: 2
6 | defaultReferences: []
7 | executionOrder: 0
8 | icon: {instanceID: 0}
9 | userData:
10 | assetBundleName:
11 | assetBundleVariant:
12 |
--------------------------------------------------------------------------------
/LevelGeneration/MeshFolder.cs.meta:
--------------------------------------------------------------------------------
1 | fileFormatVersion: 2
2 | guid: eda8df8938d3b754fa54eca46816f372
3 | MonoImporter:
4 | externalObjects: {}
5 | serializedVersion: 2
6 | defaultReferences: []
7 | executionOrder: 0
8 | icon: {instanceID: 0}
9 | userData:
10 | assetBundleName:
11 | assetBundleVariant:
12 |
--------------------------------------------------------------------------------
/LevelGeneration/CityElements.cs.meta:
--------------------------------------------------------------------------------
1 | fileFormatVersion: 2
2 | guid: 029af6660c6f0474cadadbf09966b523
3 | MonoImporter:
4 | externalObjects: {}
5 | serializedVersion: 2
6 | defaultReferences: []
7 | executionOrder: 0
8 | icon: {instanceID: 0}
9 | userData:
10 | assetBundleName:
11 | assetBundleVariant:
12 |
--------------------------------------------------------------------------------
/LevelGeneration/CityGenerator.cs.meta:
--------------------------------------------------------------------------------
1 | fileFormatVersion: 2
2 | guid: 53210b53490ffab43926ec101df74e90
3 | MonoImporter:
4 | externalObjects: {}
5 | serializedVersion: 2
6 | defaultReferences: []
7 | executionOrder: 0
8 | icon: {instanceID: 0}
9 | userData:
10 | assetBundleName:
11 | assetBundleVariant:
12 |
--------------------------------------------------------------------------------
/LevelGeneration/Creators/Creator.cs.meta:
--------------------------------------------------------------------------------
1 | fileFormatVersion: 2
2 | guid: b425b86ed65066f4fad5f05d66f3f2d2
3 | MonoImporter:
4 | externalObjects: {}
5 | serializedVersion: 2
6 | defaultReferences: []
7 | executionOrder: 0
8 | icon: {instanceID: 0}
9 | userData:
10 | assetBundleName:
11 | assetBundleVariant:
12 |
--------------------------------------------------------------------------------
/LevelGeneration/Creators/RoadCreator.cs.meta:
--------------------------------------------------------------------------------
1 | fileFormatVersion: 2
2 | guid: 5b5badc9f23e2994780ad5ff3e777eb0
3 | MonoImporter:
4 | externalObjects: {}
5 | serializedVersion: 2
6 | defaultReferences: []
7 | executionOrder: 0
8 | icon: {instanceID: 0}
9 | userData:
10 | assetBundleName:
11 | assetBundleVariant:
12 |
--------------------------------------------------------------------------------
/LevelGeneration/Creators/WallCreator.cs.meta:
--------------------------------------------------------------------------------
1 | fileFormatVersion: 2
2 | guid: ece990aa882ef3042bdc7f14a99aa12f
3 | MonoImporter:
4 | externalObjects: {}
5 | serializedVersion: 2
6 | defaultReferences: []
7 | executionOrder: 0
8 | icon: {instanceID: 0}
9 | userData:
10 | assetBundleName:
11 | assetBundleVariant:
12 |
--------------------------------------------------------------------------------
/LevelGeneration/Creators/BuildingCreator.cs.meta:
--------------------------------------------------------------------------------
1 | fileFormatVersion: 2
2 | guid: 0108d1124d3d3c34eb5f0c3dc122fea0
3 | MonoImporter:
4 | externalObjects: {}
5 | serializedVersion: 2
6 | defaultReferences: []
7 | executionOrder: 0
8 | icon: {instanceID: 0}
9 | userData:
10 | assetBundleName:
11 | assetBundleVariant:
12 |
--------------------------------------------------------------------------------
/LevelGeneration/Creators/RiversCreator.cs.meta:
--------------------------------------------------------------------------------
1 | fileFormatVersion: 2
2 | guid: 4eb6162b651596d418f72bdf6f7bdf75
3 | MonoImporter:
4 | externalObjects: {}
5 | serializedVersion: 2
6 | defaultReferences: []
7 | executionOrder: 0
8 | icon: {instanceID: 0}
9 | userData:
10 | assetBundleName:
11 | assetBundleVariant:
12 |
--------------------------------------------------------------------------------
/LevelGeneration/Creators/WaterCreator.cs.meta:
--------------------------------------------------------------------------------
1 | fileFormatVersion: 2
2 | guid: 408a7566bfaf83d4ba6fec91dd8a5635
3 | MonoImporter:
4 | externalObjects: {}
5 | serializedVersion: 2
6 | defaultReferences: []
7 | executionOrder: 0
8 | icon: {instanceID: 0}
9 | userData:
10 | assetBundleName:
11 | assetBundleVariant:
12 |
--------------------------------------------------------------------------------
/LevelGeneration/Creators/AssetFolderHelper.cs.meta:
--------------------------------------------------------------------------------
1 | fileFormatVersion: 2
2 | guid: a93e11137c37dec4dae2b236156fd8b3
3 | MonoImporter:
4 | externalObjects: {}
5 | serializedVersion: 2
6 | defaultReferences: []
7 | executionOrder: 0
8 | icon: {instanceID: 0}
9 | userData:
10 | assetBundleName:
11 | assetBundleVariant:
12 |
--------------------------------------------------------------------------------
/LevelGeneration/Creators/CityGeneratorHelper.cs.meta:
--------------------------------------------------------------------------------
1 | fileFormatVersion: 2
2 | guid: 3f558e26421afc545aca38d0149c5dde
3 | MonoImporter:
4 | externalObjects: {}
5 | serializedVersion: 2
6 | defaultReferences: []
7 | executionOrder: 0
8 | icon: {instanceID: 0}
9 | userData:
10 | assetBundleName:
11 | assetBundleVariant:
12 |
--------------------------------------------------------------------------------
/LevelGeneration/Creators/LineBuildingCreator.cs.meta:
--------------------------------------------------------------------------------
1 | fileFormatVersion: 2
2 | guid: e891b85483b4ed143962c1e3b13c3c17
3 | MonoImporter:
4 | externalObjects: {}
5 | serializedVersion: 2
6 | defaultReferences: []
7 | executionOrder: 0
8 | icon: {instanceID: 0}
9 | userData:
10 | assetBundleName:
11 | assetBundleVariant:
12 |
--------------------------------------------------------------------------------
/LevelGeneration/Editor/CityGeneratorEditor.cs.meta:
--------------------------------------------------------------------------------
1 | fileFormatVersion: 2
2 | guid: 683fc9afe925946408168363d513a367
3 | MonoImporter:
4 | externalObjects: {}
5 | serializedVersion: 2
6 | defaultReferences: []
7 | executionOrder: 0
8 | icon: {instanceID: 0}
9 | userData:
10 | assetBundleName:
11 | assetBundleVariant:
12 |
--------------------------------------------------------------------------------
/LevelGeneration/Creators/MultiLineStringHandler.cs.meta:
--------------------------------------------------------------------------------
1 | fileFormatVersion: 2
2 | guid: 98cf77d5dc8c345458c8eac740391cb2
3 | MonoImporter:
4 | externalObjects: {}
5 | serializedVersion: 2
6 | defaultReferences: []
7 | executionOrder: 0
8 | icon: {instanceID: 0}
9 | userData:
10 | assetBundleName:
11 | assetBundleVariant:
12 |
--------------------------------------------------------------------------------
/LevelGeneration/Editor/CityGeneratorEditor.cs:
--------------------------------------------------------------------------------
1 | using Assets.Scripts.Logic.LevelGeneration;
2 | using UnityEditor;
3 | using UnityEngine;
4 |
5 | [CustomEditor(typeof(CityGenerator))]
6 | public class CityGeneratorEditor : Editor
7 | {
8 | public override void OnInspectorGUI()
9 | {
10 | base.OnInspectorGUI();
11 |
12 | CityGenerator cityGenerator = (CityGenerator)target;
13 | if (GUILayout.Button("Generate City Prefab"))
14 | {
15 | cityGenerator.GenerateCity();
16 | }
17 | }
18 | }
19 |
--------------------------------------------------------------------------------
/LevelGeneration/MeshFolder.cs:
--------------------------------------------------------------------------------
1 | namespace Assets.Scripts.Logic.LevelGeneration
2 | {
3 | using UnityEngine;
4 |
5 | ///
6 | /// Defines the .
7 | ///
8 | public class MeshFolder : MonoBehaviour
9 | {
10 | ///
11 | /// Defines the _folder.
12 | ///
13 | [Tooltip("The folder in which the meshes are going to be saved. The city name will be added to the end of the line")]
14 | [SerializeField] private string _folder = "Assets/Levels/Meshes/";
15 |
16 | ///
17 | /// Gets the Folder.
18 | ///
19 | public string Folder => _folder;
20 | }
21 | }
22 |
--------------------------------------------------------------------------------
/LevelGeneration/CityElements.cs:
--------------------------------------------------------------------------------
1 | namespace Assets.Scripts.Logic.LevelGeneration
2 | {
3 | ///
4 | /// Defines the CityElements.
5 | ///
6 | public enum CityElements
7 | {
8 | ///
9 | /// Defines the Buildings.
10 | ///
11 | Buildings,
12 |
13 | ///
14 | /// Defines the Walls.
15 | ///
16 | Walls,
17 |
18 | ///
19 | /// Defines the Roads.
20 | ///
21 | Roads,
22 |
23 | ///
24 | /// Defines the Water.
25 | ///
26 | Water,
27 |
28 | ///
29 | /// Defines the Rivers.
30 | ///
31 | Rivers
32 | }
33 | }
34 |
--------------------------------------------------------------------------------
/LICENSE:
--------------------------------------------------------------------------------
1 | MIT License
2 |
3 | Copyright (c) 2020 Stepan Diadorov
4 |
5 | Permission is hereby granted, free of charge, to any person obtaining a copy
6 | of this software and associated documentation files (the "Software"), to deal
7 | in the Software without restriction, including without limitation the rights
8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9 | copies of the Software, and to permit persons to whom the Software is
10 | furnished to do so, subject to the following conditions:
11 |
12 | The above copyright notice and this permission notice shall be included in all
13 | copies or substantial portions of the Software.
14 |
15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21 | SOFTWARE.
22 |
--------------------------------------------------------------------------------
/LevelGeneration/Creators/Creator.cs:
--------------------------------------------------------------------------------
1 | namespace Assets.Scripts.Logic.LevelGeneration.Creators
2 | {
3 | using UnityEngine;
4 |
5 | ///
6 | /// Defines the .
7 | ///
8 | public abstract class Creator : MonoBehaviour
9 | {
10 | ///
11 | /// Defines the _enabled.
12 | ///
13 | [SerializeField] protected bool _enabled = true;
14 |
15 | ///
16 | /// Gets a value indicating whether Enabled.
17 | ///
18 | public bool Enabled => _enabled;
19 |
20 | ///
21 | /// Gets the MeshFolder.
22 | ///
23 | protected MeshFolder MeshFolder => GetComponent();
24 |
25 | ///
26 | /// The Create.
27 | ///
28 | /// The collection.
29 | /// The scale.
30 | /// The city.
31 | public abstract void Create(dynamic collection, float scale, GameObject city);
32 | }
33 | }
34 |
--------------------------------------------------------------------------------
/LevelGeneration/Creators/WaterCreator.cs:
--------------------------------------------------------------------------------
1 | namespace Assets.Scripts.Logic.LevelGeneration.Creators
2 | {
3 | using UnityEditor;
4 | using UnityEngine;
5 |
6 | ///
7 | /// Defines the .
8 | ///
9 | public class WaterCreator : Creator
10 | {
11 | ///
12 | /// Defines the _waterPrefab.
13 | ///
14 | [SerializeField] private GameObject _waterPrefab;
15 |
16 | ///
17 | /// Defines the _idName.
18 | ///
19 | private string _idName = "water";
20 |
21 | ///
22 | /// The Create.
23 | ///
24 | /// The collection.
25 | /// The scale.
26 | /// The city.
27 | public override void Create(dynamic collection, float scale, GameObject city)
28 | {
29 | var parent = CityGeneratorHelper.GetParentTransformFromCity(city, CityElements.Water);
30 | var buildingFeature = CityGeneratorHelper.GetFeatureBasedOnPropertyValueName(collection, _idName);
31 | if (buildingFeature == null)
32 | {
33 | return;
34 | }
35 | var polygon = CityGeneratorHelper.GetPolygonsFromFeature(buildingFeature);
36 |
37 | Mesh mesh = CityGeneratorHelper.CreateMeshFromGeoJsonPolygon(polygon, _waterPrefab, parent, scale);
38 | string folderName = AssetFolderHelper.CreateFolderToSaveCity(city, MeshFolder.Folder);
39 | AssetDatabase.CreateAsset(mesh, folderName + "water.asset");
40 | }
41 | }
42 | }
43 |
--------------------------------------------------------------------------------
/LevelGeneration/Creators/RiversCreator.cs:
--------------------------------------------------------------------------------
1 | namespace Assets.Scripts.Logic.LevelGeneration.Creators
2 | {
3 | using UnityEngine;
4 |
5 | ///
6 | /// Defines the .
7 | ///
8 | public class RiversCreator : Creator
9 | {
10 | ///
11 | /// Defines the _riverPrefab.
12 | ///
13 | [SerializeField] protected GameObject _riverPrefab;
14 |
15 | ///
16 | /// Defines the idName.
17 | ///
18 | private const string idName = "rivers";
19 |
20 | ///
21 | /// The Create.
22 | ///
23 | /// The collection.
24 | /// The scale.
25 | /// The city.
26 | public override void Create(dynamic collection, float scale, GameObject city)
27 | {
28 | var _parent = CityGeneratorHelper.GetParentTransformFromCity(city, CityElements.Rivers);
29 | var riversFeature = CityGeneratorHelper.GetFeatureBasedOnPropertyValueName(collection, idName);
30 | if (riversFeature == null)
31 | {
32 | return;
33 | }
34 | var polygons = CityGeneratorHelper.GetPolygonsFromFeature(riversFeature);
35 | foreach (var poly in polygons)
36 | {
37 | Vector3[] positions;
38 | var lineRenderer = MultiLineStringHandler.CreateLineRenderer(_riverPrefab, _parent);
39 | MultiLineStringHandler.UpdateLineRendererPoints(poly, out positions, scale, lineRenderer);
40 | }
41 | }
42 | }
43 | }
44 |
--------------------------------------------------------------------------------
/LevelGeneration/Creators/RoadCreator.cs:
--------------------------------------------------------------------------------
1 | namespace Assets.Scripts.Logic.LevelGeneration.Creators
2 | {
3 | using UnityEngine;
4 |
5 | ///
6 | /// Defines the .
7 | ///
8 | public class RoadCreator : Creator
9 | {
10 | ///
11 | /// Defines the _roadPrefab.
12 | ///
13 | [SerializeField] protected GameObject _roadPrefab;
14 |
15 | ///
16 | /// Defines the idName.
17 | ///
18 | private const string idName = "roads";
19 |
20 | ///
21 | /// The Create.
22 | ///
23 | /// The collection.
24 | /// The scale.
25 | /// The city.
26 | public override void Create(dynamic collection, float scale, GameObject city)
27 | {
28 | var _roadParent = CityGeneratorHelper.GetParentTransformFromCity(city, CityElements.Rivers);
29 | var roadFeature = CityGeneratorHelper.GetFeatureBasedOnPropertyValueName(collection, idName);
30 | if (roadFeature == null)
31 | {
32 | return;
33 | }
34 | var polygons = CityGeneratorHelper.GetPolygonsFromFeature(roadFeature); //(roadFeature.Geometry).Coordinates;
35 | foreach (var poly in polygons)
36 | {
37 | Vector3[] positions;
38 | var lineRenderer = MultiLineStringHandler.CreateLineRenderer(_roadPrefab, _roadParent);
39 | MultiLineStringHandler.UpdateLineRendererPoints(poly, out positions, scale, lineRenderer);
40 | }
41 | }
42 | }
43 | }
44 |
--------------------------------------------------------------------------------
/LevelGeneration/Creators/LineBuildingCreator.cs:
--------------------------------------------------------------------------------
1 | namespace Assets.Scripts.Logic.LevelGeneration.Creators
2 | {
3 | using UnityEngine;
4 |
5 | ///
6 | /// Defines the .
7 | ///
8 | public class LineBuildingCreator : Creator
9 | {
10 | ///
11 | /// Defines the _buildingLinePrefab.
12 | ///
13 | [SerializeField] protected GameObject _buildingLinePrefab;
14 |
15 | ///
16 | /// Defines the idName.
17 | ///
18 | private const string idName = "buildings";
19 |
20 | ///
21 | /// The Create.
22 | ///
23 | /// The collection.
24 | /// The scale.
25 | /// The city.
26 | public override void Create(dynamic collection, float scale, GameObject city)
27 | {
28 | var _parent = CityGeneratorHelper.GetParentTransformFromCity(city, CityElements.Buildings);
29 | var buildingFeature = CityGeneratorHelper.GetFeatureBasedOnPropertyValueName(collection, idName);
30 | if (buildingFeature == null)
31 | {
32 | return;
33 | }
34 | var polygons = CityGeneratorHelper.GetPolygonsForBuildings(buildingFeature);
35 |
36 | foreach (var poly in polygons)
37 | {
38 | Vector3[] positions;
39 | var lineRenderer = MultiLineStringHandler.CreateLineRenderer(_buildingLinePrefab, _parent);
40 | MultiLineStringHandler.UpdateLineRendererPoints(poly, out positions, scale, lineRenderer);
41 | }
42 | }
43 | }
44 | }
45 |
--------------------------------------------------------------------------------
/LevelGeneration/Creators/BuildingCreator.cs:
--------------------------------------------------------------------------------
1 | namespace Assets.Scripts.Logic.LevelGeneration.Creators
2 | {
3 | using UnityEditor;
4 | using UnityEngine;
5 |
6 | ///
7 | /// Defines the .
8 | ///
9 | public class BuildingCreator : Creator
10 | {
11 | ///
12 | /// Defines the _buildingPrefab.
13 | ///
14 | [SerializeField] private GameObject _buildingPrefab;
15 |
16 | ///
17 | /// Defines the idName.
18 | ///
19 | private const string idName = "buildings";
20 |
21 | ///
22 | /// The Create.
23 | ///
24 | /// The collection.
25 | /// The scale.
26 | /// The city.
27 | public override void Create(dynamic collection, float scale, GameObject city)
28 | {
29 | var _parent = CityGeneratorHelper.GetParentTransformFromCity(city, CityElements.Buildings);
30 | var buildingFeature = CityGeneratorHelper.GetFeatureBasedOnPropertyValueName(collection, idName);
31 | if (buildingFeature == null)
32 | {
33 | return;
34 | }
35 | var polygons = CityGeneratorHelper.GetPolygonsForBuildings(buildingFeature);
36 |
37 | int meshIndex = 0;
38 |
39 | string folderName = AssetFolderHelper.CreateFolderToSaveCity(city, MeshFolder.Folder);
40 |
41 |
42 | foreach (var poly in polygons)
43 | {
44 | Mesh mesh = CityGeneratorHelper.CreateMeshFromGeoJsonPolygon(poly, _buildingPrefab, _parent, scale);
45 | AssetDatabase.CreateAsset(mesh, folderName + meshIndex + ".asset");
46 | meshIndex++;
47 | }
48 | }
49 | }
50 | }
51 |
--------------------------------------------------------------------------------
/LevelGeneration/Creators/AssetFolderHelper.cs:
--------------------------------------------------------------------------------
1 | namespace Assets.Scripts.Logic.LevelGeneration.Creators
2 | {
3 | using System.Collections.Generic;
4 | using System.Linq;
5 | using UnityEditor;
6 | using UnityEngine;
7 |
8 | ///
9 | /// Defines the .
10 | ///
11 | public static class AssetFolderHelper
12 | {
13 | ///
14 | /// Defines the _assetFolder.
15 | ///
16 | private const string _assetFolder = "Assets";
17 |
18 | ///
19 | /// The CreateFolderToSaveCity.
20 | ///
21 | /// The city.
22 | /// The meshFolder.
23 | /// The .
24 | public static string CreateFolderToSaveCity(GameObject city, string meshFolder)
25 | {
26 | var folderHierarchy = CreateFolderHierarchyFromString(meshFolder);
27 |
28 | folderHierarchy.Add(city.name);
29 |
30 | var oldFolderName = _assetFolder;
31 | string newFolderName;
32 |
33 | for (int i = 0; i < folderHierarchy.Count; i++)
34 | {
35 | newFolderName = folderHierarchy[i];
36 | var tempName = oldFolderName + "/" + newFolderName;
37 |
38 | if (!AssetDatabase.IsValidFolder(tempName))
39 | {
40 | AssetDatabase.CreateFolder(oldFolderName, newFolderName);
41 | }
42 |
43 | oldFolderName += "/" + newFolderName;
44 | }
45 |
46 | return oldFolderName + "/";
47 | }
48 |
49 | ///
50 | /// The CreateFolderHierarchyFromString.
51 | ///
52 | /// The meshFolder.
53 | /// The .
54 | private static List CreateFolderHierarchyFromString(string meshFolder)
55 | {
56 | var folderHierarchy = meshFolder.Split('/').ToList();
57 |
58 | if (folderHierarchy[0] == _assetFolder)
59 | {
60 | folderHierarchy.RemoveAt(0);
61 | }
62 |
63 | if (folderHierarchy.Last() == string.Empty)
64 | {
65 | folderHierarchy.RemoveAt(folderHierarchy.Count - 1);
66 | }
67 |
68 | return folderHierarchy;
69 | }
70 | }
71 | }
72 |
--------------------------------------------------------------------------------
/LevelGeneration/CityPrefabs/Water.prefab:
--------------------------------------------------------------------------------
1 | %YAML 1.1
2 | %TAG !u! tag:unity3d.com,2011:
3 | --- !u!1 &3852657034685883526
4 | GameObject:
5 | m_ObjectHideFlags: 0
6 | m_CorrespondingSourceObject: {fileID: 0}
7 | m_PrefabInstance: {fileID: 0}
8 | m_PrefabAsset: {fileID: 0}
9 | serializedVersion: 6
10 | m_Component:
11 | - component: {fileID: 3852657034685883521}
12 | - component: {fileID: 3852657034685883520}
13 | - component: {fileID: 3852657034685883527}
14 | m_Layer: 0
15 | m_Name: Water
16 | m_TagString: Untagged
17 | m_Icon: {fileID: 0}
18 | m_NavMeshLayer: 0
19 | m_StaticEditorFlags: 0
20 | m_IsActive: 1
21 | --- !u!4 &3852657034685883521
22 | Transform:
23 | m_ObjectHideFlags: 0
24 | m_CorrespondingSourceObject: {fileID: 0}
25 | m_PrefabInstance: {fileID: 0}
26 | m_PrefabAsset: {fileID: 0}
27 | m_GameObject: {fileID: 3852657034685883526}
28 | m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
29 | m_LocalPosition: {x: 0, y: 0, z: 0}
30 | m_LocalScale: {x: 1, y: 1, z: 1}
31 | m_Children: []
32 | m_Father: {fileID: 0}
33 | m_RootOrder: 0
34 | m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
35 | --- !u!23 &3852657034685883520
36 | MeshRenderer:
37 | m_ObjectHideFlags: 0
38 | m_CorrespondingSourceObject: {fileID: 0}
39 | m_PrefabInstance: {fileID: 0}
40 | m_PrefabAsset: {fileID: 0}
41 | m_GameObject: {fileID: 3852657034685883526}
42 | m_Enabled: 1
43 | m_CastShadows: 1
44 | m_ReceiveShadows: 1
45 | m_DynamicOccludee: 1
46 | m_MotionVectors: 1
47 | m_LightProbeUsage: 1
48 | m_ReflectionProbeUsage: 1
49 | m_RayTracingMode: 2
50 | m_RayTraceProcedural: 0
51 | m_RenderingLayerMask: 1
52 | m_RendererPriority: 0
53 | m_Materials:
54 | - {fileID: 2100000, guid: 849d536a65a701944bed85b025ce81f3, type: 2}
55 | m_StaticBatchInfo:
56 | firstSubMesh: 0
57 | subMeshCount: 0
58 | m_StaticBatchRoot: {fileID: 0}
59 | m_ProbeAnchor: {fileID: 0}
60 | m_LightProbeVolumeOverride: {fileID: 0}
61 | m_ScaleInLightmap: 1
62 | m_ReceiveGI: 1
63 | m_PreserveUVs: 0
64 | m_IgnoreNormalsForChartDetection: 0
65 | m_ImportantGI: 0
66 | m_StitchLightmapSeams: 1
67 | m_SelectedEditorRenderState: 3
68 | m_MinimumChartSize: 4
69 | m_AutoUVMaxDistance: 0.5
70 | m_AutoUVMaxAngle: 89
71 | m_LightmapParameters: {fileID: 0}
72 | m_SortingLayerID: 0
73 | m_SortingLayer: 0
74 | m_SortingOrder: 0
75 | m_AdditionalVertexStreams: {fileID: 0}
76 | --- !u!33 &3852657034685883527
77 | MeshFilter:
78 | m_ObjectHideFlags: 0
79 | m_CorrespondingSourceObject: {fileID: 0}
80 | m_PrefabInstance: {fileID: 0}
81 | m_PrefabAsset: {fileID: 0}
82 | m_GameObject: {fileID: 3852657034685883526}
83 | m_Mesh: {fileID: 0}
84 |
--------------------------------------------------------------------------------
/LevelGeneration/CityPrefabs/Building.prefab:
--------------------------------------------------------------------------------
1 | %YAML 1.1
2 | %TAG !u! tag:unity3d.com,2011:
3 | --- !u!1 &7725567109345287491
4 | GameObject:
5 | m_ObjectHideFlags: 0
6 | m_CorrespondingSourceObject: {fileID: 0}
7 | m_PrefabInstance: {fileID: 0}
8 | m_PrefabAsset: {fileID: 0}
9 | serializedVersion: 6
10 | m_Component:
11 | - component: {fileID: 7725567109345287492}
12 | - component: {fileID: 7725567109345287493}
13 | - component: {fileID: 7725567109345287490}
14 | m_Layer: 0
15 | m_Name: Building
16 | m_TagString: Untagged
17 | m_Icon: {fileID: 0}
18 | m_NavMeshLayer: 0
19 | m_StaticEditorFlags: 0
20 | m_IsActive: 1
21 | --- !u!4 &7725567109345287492
22 | Transform:
23 | m_ObjectHideFlags: 0
24 | m_CorrespondingSourceObject: {fileID: 0}
25 | m_PrefabInstance: {fileID: 0}
26 | m_PrefabAsset: {fileID: 0}
27 | m_GameObject: {fileID: 7725567109345287491}
28 | m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
29 | m_LocalPosition: {x: 0, y: 0, z: 0}
30 | m_LocalScale: {x: 1, y: 1, z: 1}
31 | m_Children: []
32 | m_Father: {fileID: 0}
33 | m_RootOrder: 0
34 | m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
35 | --- !u!23 &7725567109345287493
36 | MeshRenderer:
37 | m_ObjectHideFlags: 0
38 | m_CorrespondingSourceObject: {fileID: 0}
39 | m_PrefabInstance: {fileID: 0}
40 | m_PrefabAsset: {fileID: 0}
41 | m_GameObject: {fileID: 7725567109345287491}
42 | m_Enabled: 1
43 | m_CastShadows: 1
44 | m_ReceiveShadows: 1
45 | m_DynamicOccludee: 1
46 | m_MotionVectors: 1
47 | m_LightProbeUsage: 1
48 | m_ReflectionProbeUsage: 1
49 | m_RayTracingMode: 2
50 | m_RayTraceProcedural: 0
51 | m_RenderingLayerMask: 1
52 | m_RendererPriority: 0
53 | m_Materials:
54 | - {fileID: 2100000, guid: 36076a93c0fe2d542942969a6a80de27, type: 2}
55 | m_StaticBatchInfo:
56 | firstSubMesh: 0
57 | subMeshCount: 0
58 | m_StaticBatchRoot: {fileID: 0}
59 | m_ProbeAnchor: {fileID: 0}
60 | m_LightProbeVolumeOverride: {fileID: 0}
61 | m_ScaleInLightmap: 1
62 | m_ReceiveGI: 1
63 | m_PreserveUVs: 0
64 | m_IgnoreNormalsForChartDetection: 0
65 | m_ImportantGI: 0
66 | m_StitchLightmapSeams: 1
67 | m_SelectedEditorRenderState: 3
68 | m_MinimumChartSize: 4
69 | m_AutoUVMaxDistance: 0.5
70 | m_AutoUVMaxAngle: 89
71 | m_LightmapParameters: {fileID: 0}
72 | m_SortingLayerID: 0
73 | m_SortingLayer: 0
74 | m_SortingOrder: 0
75 | m_AdditionalVertexStreams: {fileID: 0}
76 | --- !u!33 &7725567109345287490
77 | MeshFilter:
78 | m_ObjectHideFlags: 0
79 | m_CorrespondingSourceObject: {fileID: 0}
80 | m_PrefabInstance: {fileID: 0}
81 | m_PrefabAsset: {fileID: 0}
82 | m_GameObject: {fileID: 7725567109345287491}
83 | m_Mesh: {fileID: 0}
84 |
--------------------------------------------------------------------------------
/LevelGeneration/CityPrefabs/Tower.prefab:
--------------------------------------------------------------------------------
1 | %YAML 1.1
2 | %TAG !u! tag:unity3d.com,2011:
3 | --- !u!1 &6034553323792719514
4 | GameObject:
5 | m_ObjectHideFlags: 0
6 | m_CorrespondingSourceObject: {fileID: 0}
7 | m_PrefabInstance: {fileID: 0}
8 | m_PrefabAsset: {fileID: 0}
9 | serializedVersion: 6
10 | m_Component:
11 | - component: {fileID: 6303562157579261099}
12 | - component: {fileID: 6763717333995761083}
13 | - component: {fileID: 6665485464391267969}
14 | m_Layer: 0
15 | m_Name: Tower
16 | m_TagString: Untagged
17 | m_Icon: {fileID: 0}
18 | m_NavMeshLayer: 0
19 | m_StaticEditorFlags: 0
20 | m_IsActive: 1
21 | --- !u!4 &6303562157579261099
22 | Transform:
23 | m_ObjectHideFlags: 0
24 | m_CorrespondingSourceObject: {fileID: 0}
25 | m_PrefabInstance: {fileID: 0}
26 | m_PrefabAsset: {fileID: 0}
27 | m_GameObject: {fileID: 6034553323792719514}
28 | m_LocalRotation: {x: 0.7071068, y: 0, z: 0, w: 0.7071068}
29 | m_LocalPosition: {x: 0, y: 0, z: 0}
30 | m_LocalScale: {x: 0.25, y: 0.01, z: 0.25}
31 | m_Children: []
32 | m_Father: {fileID: 0}
33 | m_RootOrder: 0
34 | m_LocalEulerAnglesHint: {x: 90, y: 0, z: 0}
35 | --- !u!33 &6763717333995761083
36 | MeshFilter:
37 | m_ObjectHideFlags: 0
38 | m_CorrespondingSourceObject: {fileID: 0}
39 | m_PrefabInstance: {fileID: 0}
40 | m_PrefabAsset: {fileID: 0}
41 | m_GameObject: {fileID: 6034553323792719514}
42 | m_Mesh: {fileID: 10206, guid: 0000000000000000e000000000000000, type: 0}
43 | --- !u!23 &6665485464391267969
44 | MeshRenderer:
45 | m_ObjectHideFlags: 0
46 | m_CorrespondingSourceObject: {fileID: 0}
47 | m_PrefabInstance: {fileID: 0}
48 | m_PrefabAsset: {fileID: 0}
49 | m_GameObject: {fileID: 6034553323792719514}
50 | m_Enabled: 1
51 | m_CastShadows: 1
52 | m_ReceiveShadows: 1
53 | m_DynamicOccludee: 1
54 | m_MotionVectors: 1
55 | m_LightProbeUsage: 1
56 | m_ReflectionProbeUsage: 1
57 | m_RayTracingMode: 2
58 | m_RayTraceProcedural: 0
59 | m_RenderingLayerMask: 1
60 | m_RendererPriority: 0
61 | m_Materials:
62 | - {fileID: 2100000, guid: 55d89c32368b0ac4588acc3da9418ba9, type: 2}
63 | m_StaticBatchInfo:
64 | firstSubMesh: 0
65 | subMeshCount: 0
66 | m_StaticBatchRoot: {fileID: 0}
67 | m_ProbeAnchor: {fileID: 0}
68 | m_LightProbeVolumeOverride: {fileID: 0}
69 | m_ScaleInLightmap: 1
70 | m_ReceiveGI: 1
71 | m_PreserveUVs: 0
72 | m_IgnoreNormalsForChartDetection: 0
73 | m_ImportantGI: 0
74 | m_StitchLightmapSeams: 1
75 | m_SelectedEditorRenderState: 3
76 | m_MinimumChartSize: 4
77 | m_AutoUVMaxDistance: 0.5
78 | m_AutoUVMaxAngle: 89
79 | m_LightmapParameters: {fileID: 0}
80 | m_SortingLayerID: 0
81 | m_SortingLayer: 0
82 | m_SortingOrder: 0
83 | m_AdditionalVertexStreams: {fileID: 0}
84 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # Introduction
2 |
3 | https://watabou.itch.io/medieval-fantasy-city-generator
4 | Using the link above you can find a totally magnificent city generator created by [watabou](https://watabou.itch.io/ "watabou works").
5 | Some time ago, the author also added the GeoJson export feature, so we can all use the exported cities!
6 | This following importer uses the GeoJson to generate city from meshes and linestrings.
7 | The objects generated by the Importer:
8 | - Buildings
9 | - Rivers
10 | - Water
11 | - Walls (with towers, of course!)
12 | - Roads
13 |
14 | ## Prerequisites
15 | - https://www.newtonsoft.com/json - you need to download the package and install the appropriate dll. Just unpack the .dll somewhere in the Assets folder, and you are ready to go.
16 |
17 | ## How to use the Importer
18 | 1. Go to https://watabou.itch.io/medieval-fantasy-city-generator and export a city as GeoJson.
19 | 2. Put the json file to the Unity Resources folder. Rename it to your heart content.
20 | 3. Export GeoJson and Newtonsoft.Json mentioned in the Prerequisites.
21 | 4. Download and export the UnityMedievalCityImporter.unitypackage.
22 | 5. Drag the CityGenerator prefab from the LevelGeneration folder into the Hierarchy in instantiate it.
23 | 6. Select the CityGenerator object. In the Json Name specify the json name.
24 | 7. Specify the folder that the new city is going to be saved to. If such directory doensn't exist, the city will not be saved! (however, you can save it manually, so really, no need to be OCD about it)
25 | 8. *(Optional)* Select the Creators gameobject (it's a child of the CityGenerator). Update the folder in the MeshFolder component.
26 | 9. *(Optional)* You can uncheck the *Create Walls Separately* checkbox in the Wall Creator component. This flag allows the walls to be (you guessed it!) created separately from one another, so the unnecessary walls could easily be removed (e.g. the walls are often generated near the water)
27 | 10. Click *Generate City Prefab* button on the CityGenerator object.
28 | 11. DONE!
29 |
30 | The prefab will be saved in the specified directory after some time (it might take more than a minute to generate a large city). After being created, the city will remain in the hierarchy, and can be safely removed.
31 | If your objects are pink - don't worry, that's because the materials are missing the appropriate shaders. Just go to the CityMaterials folder and update the materials with any shader you like.
32 |
33 | ## Known issues
34 | 1. The multi-corner castles look like a steaming pile of crap, frankly. The meshes generated for such figures are usually pretty complex and I'm looking for a way to place them correctly.
35 | 2. The generated objects don't use any shaders. I suck at shaders, sorry. Also, the shader might be missing since the project was created in the LWRP, so just update the shader in the corresponding material.
36 |
--------------------------------------------------------------------------------
/LevelGeneration/CityMaterials/MaterialBuildingLine.mat:
--------------------------------------------------------------------------------
1 | %YAML 1.1
2 | %TAG !u! tag:unity3d.com,2011:
3 | --- !u!114 &-4686448300867851550
4 | MonoBehaviour:
5 | m_ObjectHideFlags: 11
6 | m_CorrespondingSourceObject: {fileID: 0}
7 | m_PrefabInstance: {fileID: 0}
8 | m_PrefabAsset: {fileID: 0}
9 | m_GameObject: {fileID: 0}
10 | m_Enabled: 1
11 | m_EditorHideFlags: 0
12 | m_Script: {fileID: 11500000, guid: d0353a89b1f911e48b9e16bdc9f2e058, type: 3}
13 | m_Name:
14 | m_EditorClassIdentifier:
15 | version: 1
16 | --- !u!21 &2100000
17 | Material:
18 | serializedVersion: 6
19 | m_ObjectHideFlags: 0
20 | m_CorrespondingSourceObject: {fileID: 0}
21 | m_PrefabInstance: {fileID: 0}
22 | m_PrefabAsset: {fileID: 0}
23 | m_Name: MaterialBuildingLine
24 | m_Shader: {fileID: 4800000, guid: c20914cb4dbdd8a4bae7fc742b5a62c5, type: 3}
25 | m_ShaderKeywords: _ALPHAPREMULTIPLY_ON
26 | m_LightmapFlags: 4
27 | m_EnableInstancingVariants: 0
28 | m_DoubleSidedGI: 0
29 | m_CustomRenderQueue: -1
30 | stringTagMap: {}
31 | disabledShaderPasses: []
32 | m_SavedProperties:
33 | serializedVersion: 3
34 | m_TexEnvs:
35 | - _BaseMap:
36 | m_Texture: {fileID: 0}
37 | m_Scale: {x: 1, y: 1}
38 | m_Offset: {x: 0, y: 0}
39 | - _BumpMap:
40 | m_Texture: {fileID: 0}
41 | m_Scale: {x: 1, y: 1}
42 | m_Offset: {x: 0, y: 0}
43 | - _DetailAlbedoMap:
44 | m_Texture: {fileID: 0}
45 | m_Scale: {x: 1, y: 1}
46 | m_Offset: {x: 0, y: 0}
47 | - _DetailMask:
48 | m_Texture: {fileID: 0}
49 | m_Scale: {x: 1, y: 1}
50 | m_Offset: {x: 0, y: 0}
51 | - _DetailNormalMap:
52 | m_Texture: {fileID: 0}
53 | m_Scale: {x: 1, y: 1}
54 | m_Offset: {x: 0, y: 0}
55 | - _EmissionMap:
56 | m_Texture: {fileID: 0}
57 | m_Scale: {x: 1, y: 1}
58 | m_Offset: {x: 0, y: 0}
59 | - _MainTex:
60 | m_Texture: {fileID: 0}
61 | m_Scale: {x: 1, y: 1}
62 | m_Offset: {x: 0, y: 0}
63 | - _MetallicGlossMap:
64 | m_Texture: {fileID: 0}
65 | m_Scale: {x: 1, y: 1}
66 | m_Offset: {x: 0, y: 0}
67 | - _OcclusionMap:
68 | m_Texture: {fileID: 0}
69 | m_Scale: {x: 1, y: 1}
70 | m_Offset: {x: 0, y: 0}
71 | - _ParallaxMap:
72 | m_Texture: {fileID: 0}
73 | m_Scale: {x: 1, y: 1}
74 | m_Offset: {x: 0, y: 0}
75 | m_Floats:
76 | - Vector1_D0FA1168: 2
77 | - _AlphaClip: 0
78 | - _Blend: 0
79 | - _BumpScale: 1
80 | - _ColorMask: 15
81 | - _Cull: 2
82 | - _Cutoff: 0.5
83 | - _DetailNormalMapScale: 1
84 | - _DstBlend: 10
85 | - _GlossMapScale: 1
86 | - _Glossiness: 0
87 | - _GlossyReflections: 1
88 | - _Metallic: 0.5
89 | - _Mode: 3
90 | - _NormalSlider: 0
91 | - _OcclusionStrength: 1
92 | - _Parallax: 0.02
93 | - _QueueOffset: 0
94 | - _SampleGI: 0
95 | - _SmoothnessTextureChannel: 0
96 | - _SpecularHighlights: 1
97 | - _SrcBlend: 1
98 | - _Stencil: 0
99 | - _StencilComp: 8
100 | - _StencilOp: 0
101 | - _StencilReadMask: 255
102 | - _StencilWriteMask: 255
103 | - _Surface: 0
104 | - _UVSec: 0
105 | - _ZWrite: 0
106 | m_Colors:
107 | - Color_E69DD76C: {r: 1, g: 0, b: 0, a: 0}
108 | - _BaseColor: {r: 0.066037714, g: 0.06093447, b: 0.052643273, a: 1}
109 | - _Color: {r: 0.1764706, g: 0.20392157, b: 0.21176471, a: 1}
110 | - _EmissionColor: {r: 0, g: 0, b: 0, a: 1}
111 |
--------------------------------------------------------------------------------
/LevelGeneration/CityMaterials/MaterialTower.mat:
--------------------------------------------------------------------------------
1 | %YAML 1.1
2 | %TAG !u! tag:unity3d.com,2011:
3 | --- !u!21 &2100000
4 | Material:
5 | serializedVersion: 6
6 | m_ObjectHideFlags: 0
7 | m_CorrespondingSourceObject: {fileID: 0}
8 | m_PrefabInstance: {fileID: 0}
9 | m_PrefabAsset: {fileID: 0}
10 | m_Name: MaterialTower
11 | m_Shader: {fileID: 10755, guid: 0000000000000000f000000000000000, type: 0}
12 | m_ShaderKeywords: _GLOSSYREFLECTIONS_OFF
13 | m_LightmapFlags: 4
14 | m_EnableInstancingVariants: 0
15 | m_DoubleSidedGI: 0
16 | m_CustomRenderQueue: -1
17 | stringTagMap: {}
18 | disabledShaderPasses: []
19 | m_SavedProperties:
20 | serializedVersion: 3
21 | m_TexEnvs:
22 | - _BaseMap:
23 | m_Texture: {fileID: 0}
24 | m_Scale: {x: 1, y: 1}
25 | m_Offset: {x: 0, y: 0}
26 | - _BumpMap:
27 | m_Texture: {fileID: 0}
28 | m_Scale: {x: 1, y: 1}
29 | m_Offset: {x: 0, y: 0}
30 | - _DetailAlbedoMap:
31 | m_Texture: {fileID: 0}
32 | m_Scale: {x: 1, y: 1}
33 | m_Offset: {x: 0, y: 0}
34 | - _DetailMask:
35 | m_Texture: {fileID: 0}
36 | m_Scale: {x: 1, y: 1}
37 | m_Offset: {x: 0, y: 0}
38 | - _DetailNormalMap:
39 | m_Texture: {fileID: 0}
40 | m_Scale: {x: 1, y: 1}
41 | m_Offset: {x: 0, y: 0}
42 | - _EmissionMap:
43 | m_Texture: {fileID: 0}
44 | m_Scale: {x: 1, y: 1}
45 | m_Offset: {x: 0, y: 0}
46 | - _MainTex:
47 | m_Texture: {fileID: 0}
48 | m_Scale: {x: 1, y: 1}
49 | m_Offset: {x: 0, y: 0}
50 | - _MetallicGlossMap:
51 | m_Texture: {fileID: 0}
52 | m_Scale: {x: 1, y: 1}
53 | m_Offset: {x: 0, y: 0}
54 | - _OcclusionMap:
55 | m_Texture: {fileID: 0}
56 | m_Scale: {x: 1, y: 1}
57 | m_Offset: {x: 0, y: 0}
58 | - _ParallaxMap:
59 | m_Texture: {fileID: 0}
60 | m_Scale: {x: 1, y: 1}
61 | m_Offset: {x: 0, y: 0}
62 | - _SpecGlossMap:
63 | m_Texture: {fileID: 0}
64 | m_Scale: {x: 1, y: 1}
65 | m_Offset: {x: 0, y: 0}
66 | m_Floats:
67 | - _AlphaClip: 0
68 | - _Blend: 0
69 | - _BumpScale: 1
70 | - _Cull: 2
71 | - _Cutoff: 0.5
72 | - _DetailNormalMapScale: 1
73 | - _DstBlend: 0
74 | - _EnvironmentReflections: 1
75 | - _GlossMapScale: 0
76 | - _Glossiness: 0
77 | - _GlossyReflections: 0
78 | - _Metallic: 0
79 | - _Mode: 0
80 | - _OcclusionStrength: 1
81 | - _Parallax: 0.02
82 | - _QueueOffset: 0
83 | - _ReceiveShadows: 1
84 | - _SampleGI: 0
85 | - _Smoothness: 0.5
86 | - _SmoothnessTextureChannel: 0
87 | - _SpecularHighlights: 1
88 | - _SrcBlend: 1
89 | - _Surface: 0
90 | - _UVSec: 0
91 | - _WorkflowMode: 1
92 | - _ZWrite: 1
93 | m_Colors:
94 | - _BaseColor: {r: 0.06666667, g: 0.0627451, b: 0.050980393, a: 1}
95 | - _Color: {r: 0.5, g: 0.5, b: 0.5, a: 1}
96 | - _EmissionColor: {r: 0, g: 0, b: 0, a: 1}
97 | - _SpecColor: {r: 0.19999996, g: 0.19999996, b: 0.19999996, a: 1}
98 | --- !u!114 &4423165182071818520
99 | MonoBehaviour:
100 | m_ObjectHideFlags: 11
101 | m_CorrespondingSourceObject: {fileID: 0}
102 | m_PrefabInstance: {fileID: 0}
103 | m_PrefabAsset: {fileID: 0}
104 | m_GameObject: {fileID: 0}
105 | m_Enabled: 1
106 | m_EditorHideFlags: 0
107 | m_Script: {fileID: 11500000, guid: d0353a89b1f911e48b9e16bdc9f2e058, type: 3}
108 | m_Name:
109 | m_EditorClassIdentifier:
110 | version: 1
111 |
--------------------------------------------------------------------------------
/LevelGeneration/CityMaterials/MaterialRiver.mat:
--------------------------------------------------------------------------------
1 | %YAML 1.1
2 | %TAG !u! tag:unity3d.com,2011:
3 | --- !u!114 &-2983532654434736736
4 | MonoBehaviour:
5 | m_ObjectHideFlags: 11
6 | m_CorrespondingSourceObject: {fileID: 0}
7 | m_PrefabInstance: {fileID: 0}
8 | m_PrefabAsset: {fileID: 0}
9 | m_GameObject: {fileID: 0}
10 | m_Enabled: 1
11 | m_EditorHideFlags: 0
12 | m_Script: {fileID: 11500000, guid: d0353a89b1f911e48b9e16bdc9f2e058, type: 3}
13 | m_Name:
14 | m_EditorClassIdentifier:
15 | version: 1
16 | --- !u!21 &2100000
17 | Material:
18 | serializedVersion: 6
19 | m_ObjectHideFlags: 0
20 | m_CorrespondingSourceObject: {fileID: 0}
21 | m_PrefabInstance: {fileID: 0}
22 | m_PrefabAsset: {fileID: 0}
23 | m_Name: MaterialRiver
24 | m_Shader: {fileID: 10755, guid: 0000000000000000f000000000000000, type: 0}
25 | m_ShaderKeywords: _GLOSSYREFLECTIONS_OFF
26 | m_LightmapFlags: 4
27 | m_EnableInstancingVariants: 0
28 | m_DoubleSidedGI: 0
29 | m_CustomRenderQueue: -1
30 | stringTagMap: {}
31 | disabledShaderPasses: []
32 | m_SavedProperties:
33 | serializedVersion: 3
34 | m_TexEnvs:
35 | - _BaseMap:
36 | m_Texture: {fileID: 0}
37 | m_Scale: {x: 1, y: 1}
38 | m_Offset: {x: 0, y: 0}
39 | - _BumpMap:
40 | m_Texture: {fileID: 0}
41 | m_Scale: {x: 1, y: 1}
42 | m_Offset: {x: 0, y: 0}
43 | - _DetailAlbedoMap:
44 | m_Texture: {fileID: 0}
45 | m_Scale: {x: 1, y: 1}
46 | m_Offset: {x: 0, y: 0}
47 | - _DetailMask:
48 | m_Texture: {fileID: 0}
49 | m_Scale: {x: 1, y: 1}
50 | m_Offset: {x: 0, y: 0}
51 | - _DetailNormalMap:
52 | m_Texture: {fileID: 0}
53 | m_Scale: {x: 1, y: 1}
54 | m_Offset: {x: 0, y: 0}
55 | - _EmissionMap:
56 | m_Texture: {fileID: 0}
57 | m_Scale: {x: 1, y: 1}
58 | m_Offset: {x: 0, y: 0}
59 | - _MainTex:
60 | m_Texture: {fileID: 0}
61 | m_Scale: {x: 1, y: 1}
62 | m_Offset: {x: 0, y: 0}
63 | - _MetallicGlossMap:
64 | m_Texture: {fileID: 0}
65 | m_Scale: {x: 1, y: 1}
66 | m_Offset: {x: 0, y: 0}
67 | - _OcclusionMap:
68 | m_Texture: {fileID: 0}
69 | m_Scale: {x: 1, y: 1}
70 | m_Offset: {x: 0, y: 0}
71 | - _ParallaxMap:
72 | m_Texture: {fileID: 0}
73 | m_Scale: {x: 1, y: 1}
74 | m_Offset: {x: 0, y: 0}
75 | - _SpecGlossMap:
76 | m_Texture: {fileID: 0}
77 | m_Scale: {x: 1, y: 1}
78 | m_Offset: {x: 0, y: 0}
79 | m_Floats:
80 | - _AlphaClip: 0
81 | - _Blend: 0
82 | - _BumpScale: 1
83 | - _Cull: 2
84 | - _Cutoff: 0.5
85 | - _DetailNormalMapScale: 1
86 | - _DstBlend: 0
87 | - _EnvironmentReflections: 1
88 | - _GlossMapScale: 0
89 | - _Glossiness: 0
90 | - _GlossyReflections: 0
91 | - _Metallic: 0
92 | - _Mode: 0
93 | - _OcclusionStrength: 1
94 | - _Parallax: 0.02
95 | - _QueueOffset: 0
96 | - _ReceiveShadows: 1
97 | - _SampleGI: 0
98 | - _Smoothness: 0.5
99 | - _SmoothnessTextureChannel: 0
100 | - _SpecularHighlights: 1
101 | - _SrcBlend: 1
102 | - _Surface: 0
103 | - _UVSec: 0
104 | - _WorkflowMode: 1
105 | - _ZWrite: 1
106 | m_Colors:
107 | - _BaseColor: {r: 0.06666667, g: 0.0627451, b: 0.050980393, a: 1}
108 | - _Color: {r: 0.5, g: 0.5, b: 0.5, a: 1}
109 | - _EmissionColor: {r: 0, g: 0, b: 0, a: 1}
110 | - _SpecColor: {r: 0.19999996, g: 0.19999996, b: 0.19999996, a: 1}
111 |
--------------------------------------------------------------------------------
/LevelGeneration/JsonFix.cs:
--------------------------------------------------------------------------------
1 | namespace Assets.Scripts.Logic.LevelGeneration
2 | {
3 | using Assets.Scripts.Logic.LevelGeneration.Creators;
4 | using Newtonsoft.Json.Linq;
5 | using System.Collections.Generic;
6 | using System.IO;
7 | using UnityEditor;
8 | using UnityEngine;
9 |
10 | ///
11 | /// Defines the .
12 | ///
13 | public class JsonFix : MonoBehaviour
14 | {
15 | ///
16 | /// The FixJson.
17 | ///
18 | /// The jsonAsset.
19 | /// The path.
20 | public void FixJson(TextAsset jsonAsset, string path)
21 | {
22 | JObject rss = JObject.Parse(jsonAsset.text);
23 | Resources.UnloadAsset(jsonAsset);
24 | JObject buildingsFeature = (JObject)CityGeneratorHelper.GetFeatureBasedOnPropertyValueName(rss, "buildings");
25 | JArray coordinates = (JArray)buildingsFeature["coordinates"];
26 | FixCoordinates(coordinates);
27 | SaveToFile(rss, path);
28 | AssetDatabase.Refresh();
29 | }
30 |
31 | ///
32 | /// The FixCoordinates.
33 | ///
34 | /// The coordinates.
35 | private static void FixCoordinates(JArray coordinates)
36 | {
37 | IList toBeRemoved = new List();
38 |
39 | foreach (var coordinate in coordinates)
40 | {
41 | JArray meshCoordinates = (JArray)coordinate[0];
42 | AddCoordinatesIfTheEndIsMissing(meshCoordinates);
43 | MarkPolygonToBeRemovedIfThereAreLessThanFourCoordinates(toBeRemoved, coordinate, meshCoordinates);
44 | }
45 |
46 | foreach (var coordinate in toBeRemoved)
47 | {
48 | coordinates.Remove(coordinate);
49 | }
50 | }
51 |
52 | ///
53 | /// The MarkPolygonToBeRemovedIfThereAreLessThanFourCoordinates.
54 | ///
55 | /// The toBeRemoved.
56 | /// The coordinate.
57 | /// The meshCoordinates.
58 | private static void MarkPolygonToBeRemovedIfThereAreLessThanFourCoordinates(IList toBeRemoved, JToken coordinate, JArray meshCoordinates)
59 | {
60 | if (meshCoordinates.Count <= 3)
61 | {
62 | toBeRemoved.Add(coordinate);
63 | }
64 | }
65 |
66 | ///
67 | /// The AddCoordinatesIfTheEndIsMissing.
68 | ///
69 | /// The meshCoordinates.
70 | private static void AddCoordinatesIfTheEndIsMissing(JArray meshCoordinates)
71 | {
72 | if (meshCoordinates[0].ToString() != meshCoordinates[meshCoordinates.Count - 1].ToString())
73 | {
74 | meshCoordinates.Add(meshCoordinates[0]);
75 | }
76 | }
77 |
78 | ///
79 | /// The SaveToFile.
80 | ///
81 | /// The rss.
82 | /// The path.
83 | private void SaveToFile(JObject rss, string path)
84 | {
85 | File.Delete(path);
86 | File.WriteAllText(path, rss.ToString());
87 | }
88 | }
89 | }
90 |
--------------------------------------------------------------------------------
/LevelGeneration/CityMaterials/MaterialWalls.mat:
--------------------------------------------------------------------------------
1 | %YAML 1.1
2 | %TAG !u! tag:unity3d.com,2011:
3 | --- !u!21 &2100000
4 | Material:
5 | serializedVersion: 6
6 | m_ObjectHideFlags: 0
7 | m_CorrespondingSourceObject: {fileID: 0}
8 | m_PrefabInstance: {fileID: 0}
9 | m_PrefabAsset: {fileID: 0}
10 | m_Name: MaterialWalls
11 | m_Shader: {fileID: 4800000, guid: c20914cb4dbdd8a4bae7fc742b5a62c5, type: 3}
12 | m_ShaderKeywords: _GLOSSYREFLECTIONS_OFF
13 | m_LightmapFlags: 4
14 | m_EnableInstancingVariants: 0
15 | m_DoubleSidedGI: 0
16 | m_CustomRenderQueue: 4500
17 | stringTagMap: {}
18 | disabledShaderPasses: []
19 | m_SavedProperties:
20 | serializedVersion: 3
21 | m_TexEnvs:
22 | - _BaseMap:
23 | m_Texture: {fileID: 0}
24 | m_Scale: {x: 1, y: 1}
25 | m_Offset: {x: 0, y: 0}
26 | - _BumpMap:
27 | m_Texture: {fileID: 0}
28 | m_Scale: {x: 1, y: 1}
29 | m_Offset: {x: 0, y: 0}
30 | - _DetailAlbedoMap:
31 | m_Texture: {fileID: 0}
32 | m_Scale: {x: 1, y: 1}
33 | m_Offset: {x: 0, y: 0}
34 | - _DetailMask:
35 | m_Texture: {fileID: 0}
36 | m_Scale: {x: 1, y: 1}
37 | m_Offset: {x: 0, y: 0}
38 | - _DetailNormalMap:
39 | m_Texture: {fileID: 0}
40 | m_Scale: {x: 1, y: 1}
41 | m_Offset: {x: 0, y: 0}
42 | - _EmissionMap:
43 | m_Texture: {fileID: 0}
44 | m_Scale: {x: 1, y: 1}
45 | m_Offset: {x: 0, y: 0}
46 | - _MainTex:
47 | m_Texture: {fileID: 0}
48 | m_Scale: {x: 1, y: 1}
49 | m_Offset: {x: 0, y: 0}
50 | - _MetallicGlossMap:
51 | m_Texture: {fileID: 0}
52 | m_Scale: {x: 1, y: 1}
53 | m_Offset: {x: 0, y: 0}
54 | - _OcclusionMap:
55 | m_Texture: {fileID: 0}
56 | m_Scale: {x: 1, y: 1}
57 | m_Offset: {x: 0, y: 0}
58 | - _ParallaxMap:
59 | m_Texture: {fileID: 0}
60 | m_Scale: {x: 1, y: 1}
61 | m_Offset: {x: 0, y: 0}
62 | - _SpecGlossMap:
63 | m_Texture: {fileID: 0}
64 | m_Scale: {x: 1, y: 1}
65 | m_Offset: {x: 0, y: 0}
66 | m_Floats:
67 | - _AlphaClip: 0
68 | - _Blend: 0
69 | - _BumpScale: 1
70 | - _ColorMask: 15
71 | - _Cull: 2
72 | - _Cutoff: 0.5
73 | - _DetailNormalMapScale: 1
74 | - _DstBlend: 0
75 | - _EnvironmentReflections: 1
76 | - _GlossMapScale: 0
77 | - _Glossiness: 0
78 | - _GlossyReflections: 0
79 | - _Metallic: 0
80 | - _Mode: 0
81 | - _OcclusionStrength: 1
82 | - _Parallax: 0.02
83 | - _QueueOffset: 0
84 | - _ReceiveShadows: 1
85 | - _SampleGI: 0
86 | - _Smoothness: 0.5
87 | - _SmoothnessTextureChannel: 0
88 | - _SpecularHighlights: 1
89 | - _SrcBlend: 1
90 | - _Stencil: 0
91 | - _StencilComp: 8
92 | - _StencilOp: 0
93 | - _StencilReadMask: 255
94 | - _StencilWriteMask: 255
95 | - _Surface: 0
96 | - _UVSec: 0
97 | - _WorkflowMode: 1
98 | - _ZWrite: 1
99 | m_Colors:
100 | - _BaseColor: {r: 0.06666667, g: 0.0627451, b: 0.050980393, a: 1}
101 | - _Color: {r: 0.5, g: 0.5, b: 0.5, a: 1}
102 | - _EmissionColor: {r: 0, g: 0, b: 0, a: 1}
103 | - _SpecColor: {r: 0.19999996, g: 0.19999996, b: 0.19999996, a: 1}
104 | --- !u!114 &4247561567158663752
105 | MonoBehaviour:
106 | m_ObjectHideFlags: 11
107 | m_CorrespondingSourceObject: {fileID: 0}
108 | m_PrefabInstance: {fileID: 0}
109 | m_PrefabAsset: {fileID: 0}
110 | m_GameObject: {fileID: 0}
111 | m_Enabled: 1
112 | m_EditorHideFlags: 0
113 | m_Script: {fileID: 11500000, guid: d0353a89b1f911e48b9e16bdc9f2e058, type: 3}
114 | m_Name:
115 | m_EditorClassIdentifier:
116 | version: 1
117 |
--------------------------------------------------------------------------------
/LevelGeneration/CityMaterials/MaterialRoad.mat:
--------------------------------------------------------------------------------
1 | %YAML 1.1
2 | %TAG !u! tag:unity3d.com,2011:
3 | --- !u!114 &-6482683810604147160
4 | MonoBehaviour:
5 | m_ObjectHideFlags: 11
6 | m_CorrespondingSourceObject: {fileID: 0}
7 | m_PrefabInstance: {fileID: 0}
8 | m_PrefabAsset: {fileID: 0}
9 | m_GameObject: {fileID: 0}
10 | m_Enabled: 1
11 | m_EditorHideFlags: 0
12 | m_Script: {fileID: 11500000, guid: d0353a89b1f911e48b9e16bdc9f2e058, type: 3}
13 | m_Name:
14 | m_EditorClassIdentifier:
15 | version: 1
16 | --- !u!21 &2100000
17 | Material:
18 | serializedVersion: 6
19 | m_ObjectHideFlags: 0
20 | m_CorrespondingSourceObject: {fileID: 0}
21 | m_PrefabInstance: {fileID: 0}
22 | m_PrefabAsset: {fileID: 0}
23 | m_Name: MaterialRoad
24 | m_Shader: {fileID: 4800000, guid: c20914cb4dbdd8a4bae7fc742b5a62c5, type: 3}
25 | m_ShaderKeywords: _GLOSSYREFLECTIONS_OFF
26 | m_LightmapFlags: 4
27 | m_EnableInstancingVariants: 0
28 | m_DoubleSidedGI: 0
29 | m_CustomRenderQueue: 5000
30 | stringTagMap: {}
31 | disabledShaderPasses: []
32 | m_SavedProperties:
33 | serializedVersion: 3
34 | m_TexEnvs:
35 | - _BaseMap:
36 | m_Texture: {fileID: 0}
37 | m_Scale: {x: 1, y: 1}
38 | m_Offset: {x: 0, y: 0}
39 | - _BumpMap:
40 | m_Texture: {fileID: 0}
41 | m_Scale: {x: 1, y: 1}
42 | m_Offset: {x: 0, y: 0}
43 | - _DetailAlbedoMap:
44 | m_Texture: {fileID: 0}
45 | m_Scale: {x: 1, y: 1}
46 | m_Offset: {x: 0, y: 0}
47 | - _DetailMask:
48 | m_Texture: {fileID: 0}
49 | m_Scale: {x: 1, y: 1}
50 | m_Offset: {x: 0, y: 0}
51 | - _DetailNormalMap:
52 | m_Texture: {fileID: 0}
53 | m_Scale: {x: 1, y: 1}
54 | m_Offset: {x: 0, y: 0}
55 | - _EmissionMap:
56 | m_Texture: {fileID: 0}
57 | m_Scale: {x: 1, y: 1}
58 | m_Offset: {x: 0, y: 0}
59 | - _MainTex:
60 | m_Texture: {fileID: 0}
61 | m_Scale: {x: 1, y: 1}
62 | m_Offset: {x: 0, y: 0}
63 | - _MetallicGlossMap:
64 | m_Texture: {fileID: 0}
65 | m_Scale: {x: 1, y: 1}
66 | m_Offset: {x: 0, y: 0}
67 | - _OcclusionMap:
68 | m_Texture: {fileID: 0}
69 | m_Scale: {x: 1, y: 1}
70 | m_Offset: {x: 0, y: 0}
71 | - _ParallaxMap:
72 | m_Texture: {fileID: 0}
73 | m_Scale: {x: 1, y: 1}
74 | m_Offset: {x: 0, y: 0}
75 | - _SpecGlossMap:
76 | m_Texture: {fileID: 0}
77 | m_Scale: {x: 1, y: 1}
78 | m_Offset: {x: 0, y: 0}
79 | m_Floats:
80 | - _AlphaClip: 0
81 | - _Blend: 0
82 | - _BumpScale: 1
83 | - _ColorMask: 15
84 | - _Cull: 2
85 | - _Cutoff: 0.5
86 | - _DetailNormalMapScale: 1
87 | - _DstBlend: 0
88 | - _EnvironmentReflections: 1
89 | - _GlossMapScale: 0
90 | - _Glossiness: 0
91 | - _GlossyReflections: 0
92 | - _Metallic: 0
93 | - _Mode: 0
94 | - _OcclusionStrength: 1
95 | - _Parallax: 0.02
96 | - _QueueOffset: 0
97 | - _ReceiveShadows: 1
98 | - _SampleGI: 0
99 | - _Smoothness: 0.5
100 | - _SmoothnessTextureChannel: 0
101 | - _SpecularHighlights: 1
102 | - _SrcBlend: 1
103 | - _Stencil: 0
104 | - _StencilComp: 8
105 | - _StencilOp: 0
106 | - _StencilReadMask: 255
107 | - _StencilWriteMask: 255
108 | - _Surface: 0
109 | - _UVSec: 0
110 | - _WorkflowMode: 1
111 | - _ZWrite: 1
112 | m_Colors:
113 | - _BaseColor: {r: 0.46226418, g: 0.4047709, b: 0.24203454, a: 1}
114 | - _Color: {r: 1, g: 0.91764706, b: 0.654902, a: 1}
115 | - _EmissionColor: {r: 0, g: 0, b: 0, a: 1}
116 | - _SpecColor: {r: 0.19999996, g: 0.19999996, b: 0.19999996, a: 1}
117 |
--------------------------------------------------------------------------------
/LevelGeneration/CityMaterials/MaterialWater.mat:
--------------------------------------------------------------------------------
1 | %YAML 1.1
2 | %TAG !u! tag:unity3d.com,2011:
3 | --- !u!21 &2100000
4 | Material:
5 | serializedVersion: 6
6 | m_ObjectHideFlags: 0
7 | m_CorrespondingSourceObject: {fileID: 0}
8 | m_PrefabInstance: {fileID: 0}
9 | m_PrefabAsset: {fileID: 0}
10 | m_Name: MaterialWater
11 | m_Shader: {fileID: 10755, guid: 0000000000000000f000000000000000, type: 0}
12 | m_ShaderKeywords:
13 | m_LightmapFlags: 4
14 | m_EnableInstancingVariants: 0
15 | m_DoubleSidedGI: 0
16 | m_CustomRenderQueue: -1
17 | stringTagMap: {}
18 | disabledShaderPasses: []
19 | m_SavedProperties:
20 | serializedVersion: 3
21 | m_TexEnvs:
22 | - _BaseMap:
23 | m_Texture: {fileID: 0}
24 | m_Scale: {x: 1, y: 1}
25 | m_Offset: {x: 0, y: 0}
26 | - _BumpMap:
27 | m_Texture: {fileID: 0}
28 | m_Scale: {x: 1, y: 1}
29 | m_Offset: {x: 0, y: 0}
30 | - _DetailAlbedoMap:
31 | m_Texture: {fileID: 0}
32 | m_Scale: {x: 1, y: 1}
33 | m_Offset: {x: 0, y: 0}
34 | - _DetailMask:
35 | m_Texture: {fileID: 0}
36 | m_Scale: {x: 1, y: 1}
37 | m_Offset: {x: 0, y: 0}
38 | - _DetailNormalMap:
39 | m_Texture: {fileID: 0}
40 | m_Scale: {x: 1, y: 1}
41 | m_Offset: {x: 0, y: 0}
42 | - _EmissionMap:
43 | m_Texture: {fileID: 0}
44 | m_Scale: {x: 1, y: 1}
45 | m_Offset: {x: 0, y: 0}
46 | - _MainTex:
47 | m_Texture: {fileID: 2800000, guid: e5cc8076281ffe9409df56b8afa85241, type: 3}
48 | m_Scale: {x: 1, y: 1}
49 | m_Offset: {x: 0, y: 0}
50 | - _MetallicGlossMap:
51 | m_Texture: {fileID: 0}
52 | m_Scale: {x: 1, y: 1}
53 | m_Offset: {x: 0, y: 0}
54 | - _OcclusionMap:
55 | m_Texture: {fileID: 0}
56 | m_Scale: {x: 1, y: 1}
57 | m_Offset: {x: 0, y: 0}
58 | - _ParallaxMap:
59 | m_Texture: {fileID: 0}
60 | m_Scale: {x: 1, y: 1}
61 | m_Offset: {x: 0, y: 0}
62 | - _SpecGlossMap:
63 | m_Texture: {fileID: 0}
64 | m_Scale: {x: 1, y: 1}
65 | m_Offset: {x: 0, y: 0}
66 | m_Floats:
67 | - _AlphaClip: 0
68 | - _Blend: 0
69 | - _BumpScale: 1
70 | - _ColorMask: 15
71 | - _Cull: 2
72 | - _Cutoff: 0.5
73 | - _DetailNormalMapScale: 1
74 | - _DstBlend: 0
75 | - _EnvironmentReflections: 1
76 | - _GlossMapScale: 0
77 | - _Glossiness: 0
78 | - _GlossyReflections: 0
79 | - _Metallic: 0
80 | - _Mode: 0
81 | - _NormalSlider: 0
82 | - _OcclusionStrength: 1
83 | - _Parallax: 0.02
84 | - _QueueOffset: 0
85 | - _ReceiveShadows: 1
86 | - _SampleGI: 0
87 | - _Smoothness: 0.5
88 | - _SmoothnessTextureChannel: 0
89 | - _SpecularHighlights: 1
90 | - _SrcBlend: 1
91 | - _Stencil: 0
92 | - _StencilComp: 8
93 | - _StencilOp: 0
94 | - _StencilReadMask: 255
95 | - _StencilWriteMask: 255
96 | - _Surface: 0
97 | - _UVSec: 0
98 | - _WorkflowMode: 1
99 | - _ZWrite: 1
100 | m_Colors:
101 | - _BaseColor: {r: 0.2627451, g: 0.1764706, b: 0.15294118, a: 1}
102 | - _Color: {r: 0, g: 0.72156864, b: 0.5803922, a: 1}
103 | - _EmissionColor: {r: 0, g: 0, b: 0, a: 1}
104 | - _SpecColor: {r: 0.19999996, g: 0.19999996, b: 0.19999996, a: 1}
105 | --- !u!114 &3718132988274287041
106 | MonoBehaviour:
107 | m_ObjectHideFlags: 11
108 | m_CorrespondingSourceObject: {fileID: 0}
109 | m_PrefabInstance: {fileID: 0}
110 | m_PrefabAsset: {fileID: 0}
111 | m_GameObject: {fileID: 0}
112 | m_Enabled: 1
113 | m_EditorHideFlags: 0
114 | m_Script: {fileID: 11500000, guid: d0353a89b1f911e48b9e16bdc9f2e058, type: 3}
115 | m_Name:
116 | m_EditorClassIdentifier:
117 | version: 1
118 |
--------------------------------------------------------------------------------
/LevelGeneration/CityMaterials/MaterialBuilding.mat:
--------------------------------------------------------------------------------
1 | %YAML 1.1
2 | %TAG !u! tag:unity3d.com,2011:
3 | --- !u!114 &-4686448300867851550
4 | MonoBehaviour:
5 | m_ObjectHideFlags: 11
6 | m_CorrespondingSourceObject: {fileID: 0}
7 | m_PrefabInstance: {fileID: 0}
8 | m_PrefabAsset: {fileID: 0}
9 | m_GameObject: {fileID: 0}
10 | m_Enabled: 1
11 | m_EditorHideFlags: 0
12 | m_Script: {fileID: 11500000, guid: d0353a89b1f911e48b9e16bdc9f2e058, type: 3}
13 | m_Name:
14 | m_EditorClassIdentifier:
15 | version: 1
16 | --- !u!21 &2100000
17 | Material:
18 | serializedVersion: 6
19 | m_ObjectHideFlags: 0
20 | m_CorrespondingSourceObject: {fileID: 0}
21 | m_PrefabInstance: {fileID: 0}
22 | m_PrefabAsset: {fileID: 0}
23 | m_Name: MaterialBuilding
24 | m_Shader: {fileID: 10755, guid: 0000000000000000f000000000000000, type: 0}
25 | m_ShaderKeywords: _GLOSSYREFLECTIONS_OFF
26 | m_LightmapFlags: 4
27 | m_EnableInstancingVariants: 0
28 | m_DoubleSidedGI: 0
29 | m_CustomRenderQueue: -1
30 | stringTagMap: {}
31 | disabledShaderPasses:
32 | - SHADOWCASTER
33 | m_SavedProperties:
34 | serializedVersion: 3
35 | m_TexEnvs:
36 | - _BaseMap:
37 | m_Texture: {fileID: 0}
38 | m_Scale: {x: 1, y: 1}
39 | m_Offset: {x: 0, y: 0}
40 | - _BumpMap:
41 | m_Texture: {fileID: 0}
42 | m_Scale: {x: 1, y: 1}
43 | m_Offset: {x: 0, y: 0}
44 | - _DetailAlbedoMap:
45 | m_Texture: {fileID: 0}
46 | m_Scale: {x: 1, y: 1}
47 | m_Offset: {x: 0, y: 0}
48 | - _DetailMask:
49 | m_Texture: {fileID: 0}
50 | m_Scale: {x: 1, y: 1}
51 | m_Offset: {x: 0, y: 0}
52 | - _DetailNormalMap:
53 | m_Texture: {fileID: 0}
54 | m_Scale: {x: 1, y: 1}
55 | m_Offset: {x: 0, y: 0}
56 | - _EmissionMap:
57 | m_Texture: {fileID: 0}
58 | m_Scale: {x: 1, y: 1}
59 | m_Offset: {x: 0, y: 0}
60 | - _MainTex:
61 | m_Texture: {fileID: 0}
62 | m_Scale: {x: 1, y: 1}
63 | m_Offset: {x: 0, y: 0}
64 | - _MetallicGlossMap:
65 | m_Texture: {fileID: 0}
66 | m_Scale: {x: 1, y: 1}
67 | m_Offset: {x: 0, y: 0}
68 | - _OcclusionMap:
69 | m_Texture: {fileID: 0}
70 | m_Scale: {x: 1, y: 1}
71 | m_Offset: {x: 0, y: 0}
72 | - _ParallaxMap:
73 | m_Texture: {fileID: 0}
74 | m_Scale: {x: 1, y: 1}
75 | m_Offset: {x: 0, y: 0}
76 | - _SpecGlossMap:
77 | m_Texture: {fileID: 0}
78 | m_Scale: {x: 1, y: 1}
79 | m_Offset: {x: 0, y: 0}
80 | m_Floats:
81 | - Vector1_D0FA1168: 2
82 | - _AlphaClip: 0
83 | - _Blend: 0
84 | - _BumpScale: 1
85 | - _Cull: 2
86 | - _Cutoff: 0.5
87 | - _DetailNormalMapScale: 1
88 | - _DstBlend: 0
89 | - _EnvironmentReflections: 1
90 | - _GlossMapScale: 0
91 | - _Glossiness: 0
92 | - _GlossinessSource: 0
93 | - _GlossyReflections: 0
94 | - _Metallic: 0
95 | - _Mode: 0
96 | - _NormalSlider: 0
97 | - _OcclusionStrength: 1
98 | - _Parallax: 0.02
99 | - _QueueOffset: 0
100 | - _ReceiveShadows: 1
101 | - _SampleGI: 0
102 | - _Shininess: 0
103 | - _Smoothness: 0.5
104 | - _SmoothnessSource: 0
105 | - _SmoothnessTextureChannel: 0
106 | - _SpecSource: 0
107 | - _SpecularHighlights: 1
108 | - _SrcBlend: 1
109 | - _Surface: 1
110 | - _UVSec: 0
111 | - _WorkflowMode: 1
112 | - _ZWrite: 1
113 | m_Colors:
114 | - Color_E69DD76C: {r: 1, g: 0, b: 0, a: 0}
115 | - _BaseColor: {r: 0.13207549, g: 0.1022161, b: 0.09407263, a: 0.92941177}
116 | - _Color: {r: 0.88235295, g: 0.4392157, b: 0.33333334, a: 1}
117 | - _EmissionColor: {r: 0, g: 0, b: 0, a: 1}
118 | - _SpecColor: {r: 0.5, g: 0.5, b: 0.5, a: 0.5}
119 |
--------------------------------------------------------------------------------
/LevelGeneration/CityPrefabs/River.prefab:
--------------------------------------------------------------------------------
1 | %YAML 1.1
2 | %TAG !u! tag:unity3d.com,2011:
3 | --- !u!1 &7637482500003768193
4 | GameObject:
5 | m_ObjectHideFlags: 0
6 | m_CorrespondingSourceObject: {fileID: 0}
7 | m_PrefabInstance: {fileID: 0}
8 | m_PrefabAsset: {fileID: 0}
9 | serializedVersion: 6
10 | m_Component:
11 | - component: {fileID: 7637482500003768207}
12 | - component: {fileID: 7637482500003768192}
13 | m_Layer: 0
14 | m_Name: River
15 | m_TagString: Untagged
16 | m_Icon: {fileID: 0}
17 | m_NavMeshLayer: 0
18 | m_StaticEditorFlags: 0
19 | m_IsActive: 1
20 | --- !u!4 &7637482500003768207
21 | Transform:
22 | m_ObjectHideFlags: 0
23 | m_CorrespondingSourceObject: {fileID: 0}
24 | m_PrefabInstance: {fileID: 0}
25 | m_PrefabAsset: {fileID: 0}
26 | m_GameObject: {fileID: 7637482500003768193}
27 | m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
28 | m_LocalPosition: {x: 0, y: 0, z: 0}
29 | m_LocalScale: {x: 1, y: 1, z: 1}
30 | m_Children: []
31 | m_Father: {fileID: 0}
32 | m_RootOrder: 0
33 | m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
34 | --- !u!120 &7637482500003768192
35 | LineRenderer:
36 | m_ObjectHideFlags: 0
37 | m_CorrespondingSourceObject: {fileID: 0}
38 | m_PrefabInstance: {fileID: 0}
39 | m_PrefabAsset: {fileID: 0}
40 | m_GameObject: {fileID: 7637482500003768193}
41 | m_Enabled: 1
42 | m_CastShadows: 0
43 | m_ReceiveShadows: 1
44 | m_DynamicOccludee: 1
45 | m_MotionVectors: 0
46 | m_LightProbeUsage: 0
47 | m_ReflectionProbeUsage: 0
48 | m_RenderingLayerMask: 1
49 | m_RendererPriority: 0
50 | m_Materials:
51 | - {fileID: 2100000, guid: 6fc4b61e7e21ac6459d41f7cc03999d0, type: 2}
52 | m_StaticBatchInfo:
53 | firstSubMesh: 0
54 | subMeshCount: 0
55 | m_StaticBatchRoot: {fileID: 0}
56 | m_ProbeAnchor: {fileID: 0}
57 | m_LightProbeVolumeOverride: {fileID: 0}
58 | m_ScaleInLightmap: 1
59 | m_ReceiveGI: 1
60 | m_PreserveUVs: 0
61 | m_IgnoreNormalsForChartDetection: 0
62 | m_ImportantGI: 0
63 | m_StitchLightmapSeams: 1
64 | m_SelectedEditorRenderState: 3
65 | m_MinimumChartSize: 4
66 | m_AutoUVMaxDistance: 0.5
67 | m_AutoUVMaxAngle: 89
68 | m_LightmapParameters: {fileID: 0}
69 | m_SortingLayerID: 0
70 | m_SortingLayer: 0
71 | m_SortingOrder: 0
72 | m_Positions:
73 | - {x: 0, y: 0, z: 0}
74 | - {x: 0, y: 0, z: 1}
75 | m_Parameters:
76 | serializedVersion: 3
77 | widthMultiplier: 1
78 | widthCurve:
79 | serializedVersion: 2
80 | m_Curve:
81 | - serializedVersion: 3
82 | time: 0
83 | value: 0.6083998
84 | inSlope: 0
85 | outSlope: 0
86 | tangentMode: 0
87 | weightedMode: 0
88 | inWeight: 0.33333334
89 | outWeight: 0.33333334
90 | m_PreInfinity: 2
91 | m_PostInfinity: 2
92 | m_RotationOrder: 4
93 | colorGradient:
94 | serializedVersion: 2
95 | key0: {r: 0.7075472, g: 0.59441864, b: 0.46391067, a: 1}
96 | key1: {r: 1, g: 1, b: 1, a: 1}
97 | key2: {r: 0, g: 0, b: 0, a: 0}
98 | key3: {r: 0, g: 0, b: 0, a: 0}
99 | key4: {r: 0, g: 0, b: 0, a: 0}
100 | key5: {r: 0, g: 0, b: 0, a: 0}
101 | key6: {r: 0, g: 0, b: 0, a: 0}
102 | key7: {r: 0, g: 0, b: 0, a: 0}
103 | ctime0: 0
104 | ctime1: 65535
105 | ctime2: 0
106 | ctime3: 0
107 | ctime4: 0
108 | ctime5: 0
109 | ctime6: 0
110 | ctime7: 0
111 | atime0: 0
112 | atime1: 65535
113 | atime2: 0
114 | atime3: 0
115 | atime4: 0
116 | atime5: 0
117 | atime6: 0
118 | atime7: 0
119 | m_Mode: 0
120 | m_NumColorKeys: 2
121 | m_NumAlphaKeys: 2
122 | numCornerVertices: 3
123 | numCapVertices: 3
124 | alignment: 0
125 | textureMode: 0
126 | shadowBias: 0.5
127 | generateLightingData: 1
128 | m_UseWorldSpace: 0
129 | m_Loop: 0
130 |
--------------------------------------------------------------------------------
/LevelGeneration/CityPrefabs/Wall.prefab:
--------------------------------------------------------------------------------
1 | %YAML 1.1
2 | %TAG !u! tag:unity3d.com,2011:
3 | --- !u!1 &7473781593071163703
4 | GameObject:
5 | m_ObjectHideFlags: 0
6 | m_CorrespondingSourceObject: {fileID: 0}
7 | m_PrefabInstance: {fileID: 0}
8 | m_PrefabAsset: {fileID: 0}
9 | serializedVersion: 6
10 | m_Component:
11 | - component: {fileID: 7473781593071163705}
12 | - component: {fileID: 7473781593071163702}
13 | m_Layer: 0
14 | m_Name: Wall
15 | m_TagString: Untagged
16 | m_Icon: {fileID: 0}
17 | m_NavMeshLayer: 0
18 | m_StaticEditorFlags: 0
19 | m_IsActive: 1
20 | --- !u!4 &7473781593071163705
21 | Transform:
22 | m_ObjectHideFlags: 0
23 | m_CorrespondingSourceObject: {fileID: 0}
24 | m_PrefabInstance: {fileID: 0}
25 | m_PrefabAsset: {fileID: 0}
26 | m_GameObject: {fileID: 7473781593071163703}
27 | m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
28 | m_LocalPosition: {x: 0, y: 0, z: 0}
29 | m_LocalScale: {x: 1, y: 1, z: 1}
30 | m_Children: []
31 | m_Father: {fileID: 0}
32 | m_RootOrder: 0
33 | m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
34 | --- !u!120 &7473781593071163702
35 | LineRenderer:
36 | m_ObjectHideFlags: 0
37 | m_CorrespondingSourceObject: {fileID: 0}
38 | m_PrefabInstance: {fileID: 0}
39 | m_PrefabAsset: {fileID: 0}
40 | m_GameObject: {fileID: 7473781593071163703}
41 | m_Enabled: 1
42 | m_CastShadows: 0
43 | m_ReceiveShadows: 1
44 | m_DynamicOccludee: 1
45 | m_MotionVectors: 0
46 | m_LightProbeUsage: 0
47 | m_ReflectionProbeUsage: 0
48 | m_RayTracingMode: 0
49 | m_RenderingLayerMask: 1
50 | m_RendererPriority: 0
51 | m_Materials:
52 | - {fileID: 2100000, guid: a42a914eff6233248adf21a988114334, type: 2}
53 | m_StaticBatchInfo:
54 | firstSubMesh: 0
55 | subMeshCount: 0
56 | m_StaticBatchRoot: {fileID: 0}
57 | m_ProbeAnchor: {fileID: 0}
58 | m_LightProbeVolumeOverride: {fileID: 0}
59 | m_ScaleInLightmap: 1
60 | m_ReceiveGI: 1
61 | m_PreserveUVs: 0
62 | m_IgnoreNormalsForChartDetection: 0
63 | m_ImportantGI: 0
64 | m_StitchLightmapSeams: 1
65 | m_SelectedEditorRenderState: 3
66 | m_MinimumChartSize: 4
67 | m_AutoUVMaxDistance: 0.5
68 | m_AutoUVMaxAngle: 89
69 | m_LightmapParameters: {fileID: 0}
70 | m_SortingLayerID: 0
71 | m_SortingLayer: 0
72 | m_SortingOrder: 0
73 | m_Positions:
74 | - {x: 0, y: 0, z: 0}
75 | - {x: 0, y: 0, z: 1}
76 | m_Parameters:
77 | serializedVersion: 3
78 | widthMultiplier: 1
79 | widthCurve:
80 | serializedVersion: 2
81 | m_Curve:
82 | - serializedVersion: 3
83 | time: 0
84 | value: 0.4796614
85 | inSlope: 0
86 | outSlope: 0
87 | tangentMode: 0
88 | weightedMode: 0
89 | inWeight: 0.33333334
90 | outWeight: 0.33333334
91 | m_PreInfinity: 2
92 | m_PostInfinity: 2
93 | m_RotationOrder: 4
94 | colorGradient:
95 | serializedVersion: 2
96 | key0: {r: 1, g: 1, b: 1, a: 1}
97 | key1: {r: 1, g: 1, b: 1, a: 1}
98 | key2: {r: 0, g: 0, b: 0, a: 0}
99 | key3: {r: 0, g: 0, b: 0, a: 0}
100 | key4: {r: 0, g: 0, b: 0, a: 0}
101 | key5: {r: 0, g: 0, b: 0, a: 0}
102 | key6: {r: 0, g: 0, b: 0, a: 0}
103 | key7: {r: 0, g: 0, b: 0, a: 0}
104 | ctime0: 0
105 | ctime1: 65535
106 | ctime2: 0
107 | ctime3: 0
108 | ctime4: 0
109 | ctime5: 0
110 | ctime6: 0
111 | ctime7: 0
112 | atime0: 0
113 | atime1: 65535
114 | atime2: 0
115 | atime3: 0
116 | atime4: 0
117 | atime5: 0
118 | atime6: 0
119 | atime7: 0
120 | m_Mode: 1
121 | m_NumColorKeys: 2
122 | m_NumAlphaKeys: 2
123 | numCornerVertices: 0
124 | numCapVertices: 0
125 | alignment: 0
126 | textureMode: 0
127 | shadowBias: 0.5
128 | generateLightingData: 1
129 | m_UseWorldSpace: 0
130 | m_Loop: 0
131 |
--------------------------------------------------------------------------------
/LevelGeneration/CityPrefabs/Road.prefab:
--------------------------------------------------------------------------------
1 | %YAML 1.1
2 | %TAG !u! tag:unity3d.com,2011:
3 | --- !u!1 &1246708242267961065
4 | GameObject:
5 | m_ObjectHideFlags: 0
6 | m_CorrespondingSourceObject: {fileID: 0}
7 | m_PrefabInstance: {fileID: 0}
8 | m_PrefabAsset: {fileID: 0}
9 | serializedVersion: 6
10 | m_Component:
11 | - component: {fileID: 1246708242267961063}
12 | - component: {fileID: 1246708242267961064}
13 | m_Layer: 0
14 | m_Name: Road
15 | m_TagString: Untagged
16 | m_Icon: {fileID: 0}
17 | m_NavMeshLayer: 0
18 | m_StaticEditorFlags: 0
19 | m_IsActive: 1
20 | --- !u!4 &1246708242267961063
21 | Transform:
22 | m_ObjectHideFlags: 0
23 | m_CorrespondingSourceObject: {fileID: 0}
24 | m_PrefabInstance: {fileID: 0}
25 | m_PrefabAsset: {fileID: 0}
26 | m_GameObject: {fileID: 1246708242267961065}
27 | m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
28 | m_LocalPosition: {x: 0, y: 0, z: 0}
29 | m_LocalScale: {x: 1, y: 1, z: 1}
30 | m_Children: []
31 | m_Father: {fileID: 0}
32 | m_RootOrder: 0
33 | m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
34 | --- !u!120 &1246708242267961064
35 | LineRenderer:
36 | m_ObjectHideFlags: 0
37 | m_CorrespondingSourceObject: {fileID: 0}
38 | m_PrefabInstance: {fileID: 0}
39 | m_PrefabAsset: {fileID: 0}
40 | m_GameObject: {fileID: 1246708242267961065}
41 | m_Enabled: 1
42 | m_CastShadows: 0
43 | m_ReceiveShadows: 1
44 | m_DynamicOccludee: 1
45 | m_MotionVectors: 0
46 | m_LightProbeUsage: 0
47 | m_ReflectionProbeUsage: 0
48 | m_RayTracingMode: 0
49 | m_RenderingLayerMask: 1
50 | m_RendererPriority: 0
51 | m_Materials:
52 | - {fileID: 2100000, guid: 48c28de019edaf247be3efa3630bbe1a, type: 2}
53 | m_StaticBatchInfo:
54 | firstSubMesh: 0
55 | subMeshCount: 0
56 | m_StaticBatchRoot: {fileID: 0}
57 | m_ProbeAnchor: {fileID: 0}
58 | m_LightProbeVolumeOverride: {fileID: 0}
59 | m_ScaleInLightmap: 1
60 | m_ReceiveGI: 1
61 | m_PreserveUVs: 0
62 | m_IgnoreNormalsForChartDetection: 0
63 | m_ImportantGI: 0
64 | m_StitchLightmapSeams: 1
65 | m_SelectedEditorRenderState: 3
66 | m_MinimumChartSize: 4
67 | m_AutoUVMaxDistance: 0.5
68 | m_AutoUVMaxAngle: 89
69 | m_LightmapParameters: {fileID: 0}
70 | m_SortingLayerID: 0
71 | m_SortingLayer: 0
72 | m_SortingOrder: 0
73 | m_Positions:
74 | - {x: 0, y: 0, z: 0}
75 | - {x: 0, y: 0, z: 1}
76 | m_Parameters:
77 | serializedVersion: 3
78 | widthMultiplier: 1
79 | widthCurve:
80 | serializedVersion: 2
81 | m_Curve:
82 | - serializedVersion: 3
83 | time: 0
84 | value: 0.33088058
85 | inSlope: 0
86 | outSlope: 0
87 | tangentMode: 0
88 | weightedMode: 0
89 | inWeight: 0.33333334
90 | outWeight: 0.33333334
91 | m_PreInfinity: 2
92 | m_PostInfinity: 2
93 | m_RotationOrder: 4
94 | colorGradient:
95 | serializedVersion: 2
96 | key0: {r: 0.7075472, g: 0.59441864, b: 0.46391067, a: 1}
97 | key1: {r: 1, g: 1, b: 1, a: 1}
98 | key2: {r: 0, g: 0, b: 0, a: 0}
99 | key3: {r: 0, g: 0, b: 0, a: 0}
100 | key4: {r: 0, g: 0, b: 0, a: 0}
101 | key5: {r: 0, g: 0, b: 0, a: 0}
102 | key6: {r: 0, g: 0, b: 0, a: 0}
103 | key7: {r: 0, g: 0, b: 0, a: 0}
104 | ctime0: 0
105 | ctime1: 65535
106 | ctime2: 0
107 | ctime3: 0
108 | ctime4: 0
109 | ctime5: 0
110 | ctime6: 0
111 | ctime7: 0
112 | atime0: 0
113 | atime1: 65535
114 | atime2: 0
115 | atime3: 0
116 | atime4: 0
117 | atime5: 0
118 | atime6: 0
119 | atime7: 0
120 | m_Mode: 0
121 | m_NumColorKeys: 2
122 | m_NumAlphaKeys: 2
123 | numCornerVertices: 3
124 | numCapVertices: 3
125 | alignment: 0
126 | textureMode: 0
127 | shadowBias: 0.5
128 | generateLightingData: 1
129 | m_UseWorldSpace: 0
130 | m_Loop: 0
131 |
--------------------------------------------------------------------------------
/LevelGeneration/CityPrefabs/BuildingLine.prefab:
--------------------------------------------------------------------------------
1 | %YAML 1.1
2 | %TAG !u! tag:unity3d.com,2011:
3 | --- !u!1 &1246708242267961065
4 | GameObject:
5 | m_ObjectHideFlags: 0
6 | m_CorrespondingSourceObject: {fileID: 0}
7 | m_PrefabInstance: {fileID: 0}
8 | m_PrefabAsset: {fileID: 0}
9 | serializedVersion: 6
10 | m_Component:
11 | - component: {fileID: 1246708242267961063}
12 | - component: {fileID: 1246708242267961064}
13 | m_Layer: 0
14 | m_Name: BuildingLine
15 | m_TagString: Untagged
16 | m_Icon: {fileID: 0}
17 | m_NavMeshLayer: 0
18 | m_StaticEditorFlags: 0
19 | m_IsActive: 1
20 | --- !u!4 &1246708242267961063
21 | Transform:
22 | m_ObjectHideFlags: 0
23 | m_CorrespondingSourceObject: {fileID: 0}
24 | m_PrefabInstance: {fileID: 0}
25 | m_PrefabAsset: {fileID: 0}
26 | m_GameObject: {fileID: 1246708242267961065}
27 | m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
28 | m_LocalPosition: {x: 0, y: 0, z: 0}
29 | m_LocalScale: {x: 1, y: 1, z: 1}
30 | m_Children: []
31 | m_Father: {fileID: 0}
32 | m_RootOrder: 0
33 | m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
34 | --- !u!120 &1246708242267961064
35 | LineRenderer:
36 | m_ObjectHideFlags: 0
37 | m_CorrespondingSourceObject: {fileID: 0}
38 | m_PrefabInstance: {fileID: 0}
39 | m_PrefabAsset: {fileID: 0}
40 | m_GameObject: {fileID: 1246708242267961065}
41 | m_Enabled: 1
42 | m_CastShadows: 0
43 | m_ReceiveShadows: 0
44 | m_DynamicOccludee: 0
45 | m_MotionVectors: 0
46 | m_LightProbeUsage: 0
47 | m_ReflectionProbeUsage: 0
48 | m_RayTracingMode: 0
49 | m_RayTraceProcedural: 0
50 | m_RenderingLayerMask: 1
51 | m_RendererPriority: 0
52 | m_Materials:
53 | - {fileID: 2100000, guid: a91af4e75a4cecd42b13cfdad9d39627, type: 2}
54 | m_StaticBatchInfo:
55 | firstSubMesh: 0
56 | subMeshCount: 0
57 | m_StaticBatchRoot: {fileID: 0}
58 | m_ProbeAnchor: {fileID: 0}
59 | m_LightProbeVolumeOverride: {fileID: 0}
60 | m_ScaleInLightmap: 1
61 | m_ReceiveGI: 1
62 | m_PreserveUVs: 0
63 | m_IgnoreNormalsForChartDetection: 0
64 | m_ImportantGI: 0
65 | m_StitchLightmapSeams: 1
66 | m_SelectedEditorRenderState: 3
67 | m_MinimumChartSize: 4
68 | m_AutoUVMaxDistance: 0.5
69 | m_AutoUVMaxAngle: 89
70 | m_LightmapParameters: {fileID: 0}
71 | m_SortingLayerID: 0
72 | m_SortingLayer: 0
73 | m_SortingOrder: 1
74 | m_Positions:
75 | - {x: 0, y: 0, z: 0}
76 | - {x: 0, y: 0, z: 1}
77 | m_Parameters:
78 | serializedVersion: 3
79 | widthMultiplier: 1
80 | widthCurve:
81 | serializedVersion: 2
82 | m_Curve:
83 | - serializedVersion: 3
84 | time: 0
85 | value: 0.028321683
86 | inSlope: 0
87 | outSlope: 0
88 | tangentMode: 0
89 | weightedMode: 0
90 | inWeight: 0.33333334
91 | outWeight: 0.33333334
92 | m_PreInfinity: 2
93 | m_PostInfinity: 2
94 | m_RotationOrder: 4
95 | colorGradient:
96 | serializedVersion: 2
97 | key0: {r: 0.7075472, g: 0.59441864, b: 0.46391067, a: 1}
98 | key1: {r: 1, g: 1, b: 1, a: 1}
99 | key2: {r: 0, g: 0, b: 0, a: 0}
100 | key3: {r: 0, g: 0, b: 0, a: 0}
101 | key4: {r: 0, g: 0, b: 0, a: 0}
102 | key5: {r: 0, g: 0, b: 0, a: 0}
103 | key6: {r: 0, g: 0, b: 0, a: 0}
104 | key7: {r: 0, g: 0, b: 0, a: 0}
105 | ctime0: 0
106 | ctime1: 65535
107 | ctime2: 0
108 | ctime3: 0
109 | ctime4: 0
110 | ctime5: 0
111 | ctime6: 0
112 | ctime7: 0
113 | atime0: 0
114 | atime1: 65535
115 | atime2: 0
116 | atime3: 0
117 | atime4: 0
118 | atime5: 0
119 | atime6: 0
120 | atime7: 0
121 | m_Mode: 0
122 | m_NumColorKeys: 2
123 | m_NumAlphaKeys: 2
124 | numCornerVertices: 3
125 | numCapVertices: 3
126 | alignment: 0
127 | textureMode: 0
128 | shadowBias: 0.5
129 | generateLightingData: 1
130 | m_UseWorldSpace: 0
131 | m_Loop: 0
132 |
--------------------------------------------------------------------------------
/LevelGeneration/Creators/MultiLineStringHandler.cs:
--------------------------------------------------------------------------------
1 | namespace Assets.Scripts.Logic.LevelGeneration.Creators
2 | {
3 | using System.Collections.Generic;
4 | using UnityEngine;
5 |
6 | ///
7 | /// Defines the .
8 | ///
9 | public static class MultiLineStringHandler
10 | {
11 | ///
12 | /// The CreateLineRenderer.
13 | ///
14 | /// The prefab.
15 | /// The parent.
16 | /// The .
17 | public static LineRenderer CreateLineRenderer(GameObject prefab, Transform parent)
18 | {
19 | var lineRendererObject = Object.Instantiate(prefab, parent);
20 | return lineRendererObject.GetComponent();
21 | }
22 |
23 | ///
24 | /// The UpdateLineRendererPoints.
25 | ///
26 | /// The poly.
27 | /// The positions.
28 | /// The scale.
29 | /// The lineRenderer.
30 | //public static void UpdateLineRendererPoints(LineString poly, out Vector3[] positions, int scale, LineRenderer lineRenderer)
31 | //{
32 | // positions = GetPositionsFromLineString(poly, scale);
33 | // lineRenderer.positionCount = positions.Length;
34 | // lineRenderer.SetPositions(positions);
35 | //}
36 |
37 | ///
38 | /// The UpdateLineRendererPoints.
39 | ///
40 | /// The poly.
41 | /// The positions.
42 | /// The scale.
43 | /// The lineRenderer.
44 | public static void UpdateLineRendererPoints(dynamic poly, out Vector3[] positions, float scale, LineRenderer lineRenderer)
45 | {
46 | Vector2 offset;
47 | positions = GetPositionsFromPolygon(poly, scale, out offset);
48 | lineRenderer.positionCount = positions.Length;
49 | lineRenderer.SetPositions(positions);
50 | lineRenderer.transform.position -= new Vector3(offset.x, offset.y, 0);
51 | }
52 |
53 | ///
54 | /// The GetPositionsFromLineString.
55 | ///
56 | /// The poly.
57 | /// The scale.
58 | /// The .
59 | public static Vector3[] GetPositionsFromLineString(dynamic poly, float scale)
60 | {
61 | var coordinates = GetCoordinatesFromPoly(poly);
62 | List vectorCoordinates = new List();
63 |
64 | foreach (var coordinate in coordinates)
65 | {
66 | float x = coordinate[0];
67 | float y = coordinate[1];
68 | vectorCoordinates.Add(new Vector3(x, y, 0) * scale);
69 | }
70 | //coordinate => new Vector3((float)coordinate.Latitude, (float)coordinate.Longitude, 0) * scale);
71 | return vectorCoordinates.ToArray();
72 | }
73 |
74 | ///
75 | /// The GetPositionsFromPolygon.
76 | ///
77 | /// The poly.
78 | /// The scale.
79 | /// The offset.
80 | /// The .
81 | public static Vector3[] GetPositionsFromPolygon(dynamic poly, float scale, out Vector2 offset)
82 | {
83 | return CityGeneratorHelper.GetMeshVertices(poly, out offset, scale);
84 | }
85 |
86 | public static dynamic GetCoordinatesFromPoly(dynamic poly)
87 | {
88 | dynamic coordinates = poly;
89 | try
90 | {
91 | coordinates = poly["coordinates"];
92 | }
93 | catch
94 | {
95 | }
96 |
97 | var arrayIsFound = false;
98 | dynamic currentArray = coordinates;
99 | while (!arrayIsFound)
100 | {
101 | if (currentArray.Count > 1)
102 | {
103 | arrayIsFound = true;
104 | }
105 | else
106 | {
107 | try
108 | {
109 | currentArray = currentArray[0];
110 | }
111 | catch
112 | {
113 | return currentArray;
114 | }
115 | }
116 | }
117 | return currentArray;
118 | }
119 | }
120 | }
121 |
--------------------------------------------------------------------------------
/LevelGeneration/Creators/WallCreator.cs:
--------------------------------------------------------------------------------
1 | namespace Assets.Scripts.Logic.LevelGeneration.Creators
2 | {
3 | using System.Collections.ObjectModel;
4 | using UnityEngine;
5 |
6 | ///
7 | /// Defines the .
8 | ///
9 | public class WallCreator : Creator
10 | {
11 | ///
12 | /// Defines the _createWallsSeparately.
13 | ///
14 | [SerializeField] private bool _createWallsSeparately = true;
15 |
16 | ///
17 | /// Defines the _towerPrefab.
18 | ///
19 | [SerializeField] private GameObject _towerPrefab;
20 |
21 | ///
22 | /// Defines the _wallPrefab.
23 | ///
24 | [SerializeField] private GameObject _wallPrefab;
25 |
26 | ///
27 | /// Defines the _idName.
28 | ///
29 | private const string _idName = "walls";
30 |
31 | ///
32 | /// The Create.
33 | ///
34 | /// The collection.
35 | /// The scale.
36 | /// The city.
37 | public override void Create(dynamic collection, float scale, GameObject city)
38 | {
39 | var parent = CityGeneratorHelper.GetParentTransformFromCity(city, CityElements.Walls);
40 | var wallFeature = CityGeneratorHelper.GetFeatureBasedOnPropertyValueName(collection, _idName);
41 | if (wallFeature == null)
42 | {
43 | return;
44 | }
45 | var lineStrings = CityGeneratorHelper.GetPolygonsFromFeature(wallFeature);
46 |
47 | if (_createWallsSeparately)
48 | {
49 | CreateWallsSeparately(scale, parent, lineStrings);
50 | }
51 | else
52 | {
53 | CreateContiniousWall(scale, parent, lineStrings);
54 | }
55 | }
56 |
57 | ///
58 | /// The CreateContiniousWall.
59 | ///
60 | /// The scale.
61 | /// The parent.
62 | /// The lineStrings.
63 | private void CreateContiniousWall(float scale, Transform parent, dynamic lineStrings)
64 | {
65 | foreach (var lines in lineStrings)
66 | {
67 | Vector3[] positions;
68 | var lineRenderer = MultiLineStringHandler.CreateLineRenderer(_wallPrefab, parent);
69 | MultiLineStringHandler.UpdateLineRendererPoints(lines, out positions, scale, lineRenderer);
70 |
71 | buildTowers(parent, positions, scale);
72 | }
73 | }
74 |
75 | ///
76 | /// The buildTowers.
77 | ///
78 | /// The parent.
79 | /// The positions.
80 | private void buildTowers(Transform parent, Vector3[] positions, float scale)
81 | {
82 | foreach (var position in positions)
83 | {
84 | CreateTower(position, parent, scale);
85 | }
86 | }
87 |
88 | ///
89 | /// The CreateWallsSeparately.
90 | ///
91 | /// The scale.
92 | /// The parent.
93 | /// The lineStrings.
94 | private void CreateWallsSeparately(float scale, Transform parent, dynamic lineStrings)
95 | {
96 | foreach (var lines in lineStrings)
97 | {
98 | Vector3[] positions = MultiLineStringHandler.GetPositionsFromLineString(lines, scale);
99 |
100 | for (int i = 0; i < positions.Length - 1; i++)
101 | {
102 | var lineRenderer = MultiLineStringHandler.CreateLineRenderer(_wallPrefab, parent);
103 | lineRenderer.positionCount = 2;
104 | lineRenderer.SetPosition(0, positions[i]);
105 | lineRenderer.SetPosition(1, positions[i + 1]);
106 | }
107 |
108 | buildTowers(parent, positions, scale);
109 | }
110 | }
111 |
112 | ///
113 | /// The CreateTower.
114 | ///
115 | /// The position.
116 | /// The parent.
117 | private void CreateTower(Vector3 position, Transform parent, float scale)
118 | {
119 | var tower = Instantiate(_towerPrefab, position, Quaternion.Euler(90f, 0f, 0f), parent);
120 | tower.transform.localScale = tower.transform.localScale * (scale / 0.03f);
121 | }
122 | }
123 | }
124 |
--------------------------------------------------------------------------------
/LevelGeneration/CityGenerator.cs:
--------------------------------------------------------------------------------
1 | namespace Assets.Scripts.Logic.LevelGeneration
2 | {
3 | using Assets.Scripts.Logic.LevelGeneration.Creators;
4 | using Newtonsoft.Json;
5 | using System;
6 | using UnityEditor;
7 | using UnityEngine;
8 |
9 | ///
10 | /// Defines the .
11 | ///
12 | public class CityGenerator : MonoBehaviour
13 | {
14 | ///
15 | /// Defines the _jsonName.
16 | ///
17 | [Tooltip("The Json file name saved in the Resources folder")]
18 | [SerializeField] private string _jsonName;
19 |
20 | ///
21 | /// Defines the _cityPrefabPath.
22 | ///
23 | [Tooltip("The path to the created city prefab")]
24 | [SerializeField] private string _cityPrefabPath = "Assets/Prefabs/";
25 |
26 | ///
27 | /// Defines the _scale.
28 | ///
29 | [Tooltip("City scale")]
30 | [SerializeField] private float _scale = 0.01f;
31 |
32 | ///
33 | /// Defines the _updateCityTransformScale.
34 | ///
35 | [SerializeField] private bool _updateCityTransformScale = true;
36 |
37 | ///
38 | /// Defines the _transformScaleFactor.
39 | ///
40 | [SerializeField] private int _transformScaleFactor = 4;
41 |
42 | ///
43 | /// Defines the _creators.
44 | ///
45 | private Creator[] _creators;
46 |
47 | ///
48 | /// Defines the _json.
49 | ///
50 | private TextAsset _json;
51 |
52 | ///
53 | /// Defines the _fix.
54 | ///
55 | private JsonFix _fix;
56 |
57 | ///
58 | /// Defines the _city.
59 | ///
60 | public GameObject _city;
61 |
62 | ///
63 | /// The GenerateCity.
64 | ///
65 | public void GenerateCity()
66 | {
67 | ValidateFields();
68 | _city = CityGeneratorHelper.CreateCityInHierarchy(_jsonName);
69 | FixJson();
70 | dynamic collection = GetCollectionFromJson();
71 | LocateCreators();
72 | CreateCity(collection);
73 | UpdateCityTransformScale();
74 | SaveCity();
75 | }
76 |
77 | ///
78 | /// The UpdateCityTransformScale.
79 | ///
80 | private void UpdateCityTransformScale()
81 | {
82 | if (_updateCityTransformScale)
83 | {
84 | _city.transform.localScale *= _transformScaleFactor;
85 | }
86 | }
87 |
88 | ///
89 | /// The ValidateFields.
90 | ///
91 | private void ValidateFields()
92 | {
93 | if (_jsonName == string.Empty)
94 | {
95 | throw new ArgumentException("Please specify the Json Name");
96 | }
97 |
98 | if (_cityPrefabPath == string.Empty)
99 | {
100 | throw new ArgumentException("Please specify the City Prefab Path, for example \"Assets/Prefabs/\"");
101 | }
102 | }
103 |
104 | ///
105 | /// The LocateCreators.
106 | ///
107 | private void LocateCreators()
108 | {
109 | _creators = GetComponentsInChildren();
110 | }
111 |
112 | ///
113 | /// The FixJson.
114 | ///
115 | private void FixJson()
116 | {
117 | _json = Resources.Load(_jsonName);
118 | var path = AssetDatabase.GetAssetPath(_json);
119 | _fix = GetComponent();
120 | _fix.FixJson(_json, path);
121 | }
122 |
123 | ///
124 | /// The GetCollectionFromJson.
125 | ///
126 | /// The .
127 | private dynamic GetCollectionFromJson()
128 | {
129 | _json = Resources.Load(_jsonName);
130 | var collection = JsonConvert.DeserializeObject(_json.text);
131 | return collection;
132 | }
133 |
134 | ///
135 | /// The CreateCity.
136 | ///
137 | /// The collection.
138 | private void CreateCity(dynamic collection)
139 | {
140 | foreach (var creator in _creators)
141 | {
142 | if (creator.Enabled)
143 | {
144 | creator.Create(collection, _scale, _city);
145 | }
146 |
147 | }
148 | }
149 |
150 | ///
151 | /// The SaveCity.
152 | ///
153 | private void SaveCity()
154 | {
155 | bool isSaved;
156 | try
157 | {
158 | PrefabUtility.SaveAsPrefabAsset(_city, _cityPrefabPath + _jsonName + ".prefab", out isSaved);
159 | if (isSaved)
160 | {
161 | Debug.Log("The city has been prefabricated!");
162 | }
163 | }
164 | catch (ArgumentException)
165 | {
166 | Debug.LogWarning("The specified prefab " + _cityPrefabPath + " folder doesn't exist. Please prefabricate the city manually or create the folder and re-run city generation");
167 | }
168 | }
169 | }
170 | }
171 |
--------------------------------------------------------------------------------
/LevelGeneration/CityGenerator.prefab:
--------------------------------------------------------------------------------
1 | %YAML 1.1
2 | %TAG !u! tag:unity3d.com,2011:
3 | --- !u!1 &2050038629827161229
4 | GameObject:
5 | m_ObjectHideFlags: 0
6 | m_CorrespondingSourceObject: {fileID: 0}
7 | m_PrefabInstance: {fileID: 0}
8 | m_PrefabAsset: {fileID: 0}
9 | serializedVersion: 6
10 | m_Component:
11 | - component: {fileID: 2050038629827161227}
12 | - component: {fileID: 2050038629827161226}
13 | - component: {fileID: 2050038629827161224}
14 | m_Layer: 0
15 | m_Name: CityGenerator
16 | m_TagString: Untagged
17 | m_Icon: {fileID: 0}
18 | m_NavMeshLayer: 0
19 | m_StaticEditorFlags: 0
20 | m_IsActive: 1
21 | --- !u!4 &2050038629827161227
22 | Transform:
23 | m_ObjectHideFlags: 0
24 | m_CorrespondingSourceObject: {fileID: 0}
25 | m_PrefabInstance: {fileID: 0}
26 | m_PrefabAsset: {fileID: 0}
27 | m_GameObject: {fileID: 2050038629827161229}
28 | m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
29 | m_LocalPosition: {x: 0, y: 0, z: 0}
30 | m_LocalScale: {x: 1, y: 1, z: 1}
31 | m_Children:
32 | - {fileID: 2050038630561182187}
33 | m_Father: {fileID: 0}
34 | m_RootOrder: 0
35 | m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
36 | --- !u!114 &2050038629827161226
37 | MonoBehaviour:
38 | m_ObjectHideFlags: 0
39 | m_CorrespondingSourceObject: {fileID: 0}
40 | m_PrefabInstance: {fileID: 0}
41 | m_PrefabAsset: {fileID: 0}
42 | m_GameObject: {fileID: 2050038629827161229}
43 | m_Enabled: 1
44 | m_EditorHideFlags: 0
45 | m_Script: {fileID: 11500000, guid: 53210b53490ffab43926ec101df74e90, type: 3}
46 | m_Name:
47 | m_EditorClassIdentifier:
48 | _jsonName:
49 | _cityPrefabPath: Assets/Prefabs/
50 | _scale: 0.03
51 | _updateCityTransformScale: 1
52 | _transformScaleFactor: 4
53 | _city: {fileID: 0}
54 | --- !u!114 &2050038629827161224
55 | MonoBehaviour:
56 | m_ObjectHideFlags: 0
57 | m_CorrespondingSourceObject: {fileID: 0}
58 | m_PrefabInstance: {fileID: 0}
59 | m_PrefabAsset: {fileID: 0}
60 | m_GameObject: {fileID: 2050038629827161229}
61 | m_Enabled: 1
62 | m_EditorHideFlags: 0
63 | m_Script: {fileID: 11500000, guid: b43967c42ac56074ea9813ebdd882169, type: 3}
64 | m_Name:
65 | m_EditorClassIdentifier:
66 | --- !u!1 &2050038630561182186
67 | GameObject:
68 | m_ObjectHideFlags: 0
69 | m_CorrespondingSourceObject: {fileID: 0}
70 | m_PrefabInstance: {fileID: 0}
71 | m_PrefabAsset: {fileID: 0}
72 | serializedVersion: 6
73 | m_Component:
74 | - component: {fileID: 2050038630561182187}
75 | - component: {fileID: 2050038630561182181}
76 | - component: {fileID: 2050038630561182185}
77 | - component: {fileID: 2050038630561182182}
78 | - component: {fileID: 2050038630561182183}
79 | - component: {fileID: 2050038630561182180}
80 | - component: {fileID: 7521153856757652811}
81 | - component: {fileID: 4359895164946160735}
82 | m_Layer: 0
83 | m_Name: Creators
84 | m_TagString: Untagged
85 | m_Icon: {fileID: 0}
86 | m_NavMeshLayer: 0
87 | m_StaticEditorFlags: 0
88 | m_IsActive: 1
89 | --- !u!4 &2050038630561182187
90 | Transform:
91 | m_ObjectHideFlags: 0
92 | m_CorrespondingSourceObject: {fileID: 0}
93 | m_PrefabInstance: {fileID: 0}
94 | m_PrefabAsset: {fileID: 0}
95 | m_GameObject: {fileID: 2050038630561182186}
96 | m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
97 | m_LocalPosition: {x: 0, y: 0, z: 0}
98 | m_LocalScale: {x: 1, y: 1, z: 1}
99 | m_Children: []
100 | m_Father: {fileID: 2050038629827161227}
101 | m_RootOrder: 0
102 | m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
103 | --- !u!114 &2050038630561182181
104 | MonoBehaviour:
105 | m_ObjectHideFlags: 0
106 | m_CorrespondingSourceObject: {fileID: 0}
107 | m_PrefabInstance: {fileID: 0}
108 | m_PrefabAsset: {fileID: 0}
109 | m_GameObject: {fileID: 2050038630561182186}
110 | m_Enabled: 1
111 | m_EditorHideFlags: 0
112 | m_Script: {fileID: 11500000, guid: eda8df8938d3b754fa54eca46816f372, type: 3}
113 | m_Name:
114 | m_EditorClassIdentifier:
115 | _folder: Assets/Levels/Meshes/
116 | --- !u!114 &2050038630561182185
117 | MonoBehaviour:
118 | m_ObjectHideFlags: 0
119 | m_CorrespondingSourceObject: {fileID: 0}
120 | m_PrefabInstance: {fileID: 0}
121 | m_PrefabAsset: {fileID: 0}
122 | m_GameObject: {fileID: 2050038630561182186}
123 | m_Enabled: 1
124 | m_EditorHideFlags: 0
125 | m_Script: {fileID: 11500000, guid: ece990aa882ef3042bdc7f14a99aa12f, type: 3}
126 | m_Name:
127 | m_EditorClassIdentifier:
128 | _enabled: 1
129 | _createWallsSeparately: 1
130 | _towerPrefab: {fileID: 6034553323792719514, guid: 80a058699d804444dbdd61fc695ae6b6,
131 | type: 3}
132 | _wallPrefab: {fileID: 7473781593071163703, guid: 7717e6db44d0df54e931c7f1a50f11e8,
133 | type: 3}
134 | --- !u!114 &2050038630561182182
135 | MonoBehaviour:
136 | m_ObjectHideFlags: 0
137 | m_CorrespondingSourceObject: {fileID: 0}
138 | m_PrefabInstance: {fileID: 0}
139 | m_PrefabAsset: {fileID: 0}
140 | m_GameObject: {fileID: 2050038630561182186}
141 | m_Enabled: 1
142 | m_EditorHideFlags: 0
143 | m_Script: {fileID: 11500000, guid: 5b5badc9f23e2994780ad5ff3e777eb0, type: 3}
144 | m_Name:
145 | m_EditorClassIdentifier:
146 | _enabled: 1
147 | _roadPrefab: {fileID: 1246708242267961065, guid: 29bcda58ccd74cc4881f88405ada4cdb,
148 | type: 3}
149 | --- !u!114 &2050038630561182183
150 | MonoBehaviour:
151 | m_ObjectHideFlags: 0
152 | m_CorrespondingSourceObject: {fileID: 0}
153 | m_PrefabInstance: {fileID: 0}
154 | m_PrefabAsset: {fileID: 0}
155 | m_GameObject: {fileID: 2050038630561182186}
156 | m_Enabled: 1
157 | m_EditorHideFlags: 0
158 | m_Script: {fileID: 11500000, guid: 408a7566bfaf83d4ba6fec91dd8a5635, type: 3}
159 | m_Name:
160 | m_EditorClassIdentifier:
161 | _enabled: 1
162 | _waterPrefab: {fileID: 3852657034685883526, guid: f95d32ae389625644a1b82018ce81eb5,
163 | type: 3}
164 | --- !u!114 &2050038630561182180
165 | MonoBehaviour:
166 | m_ObjectHideFlags: 0
167 | m_CorrespondingSourceObject: {fileID: 0}
168 | m_PrefabInstance: {fileID: 0}
169 | m_PrefabAsset: {fileID: 0}
170 | m_GameObject: {fileID: 2050038630561182186}
171 | m_Enabled: 1
172 | m_EditorHideFlags: 0
173 | m_Script: {fileID: 11500000, guid: 4eb6162b651596d418f72bdf6f7bdf75, type: 3}
174 | m_Name:
175 | m_EditorClassIdentifier:
176 | _enabled: 1
177 | _riverPrefab: {fileID: 7637482500003768193, guid: 6c7df8e459d40524396d80afbe3ed374,
178 | type: 3}
179 | --- !u!114 &7521153856757652811
180 | MonoBehaviour:
181 | m_ObjectHideFlags: 0
182 | m_CorrespondingSourceObject: {fileID: 0}
183 | m_PrefabInstance: {fileID: 0}
184 | m_PrefabAsset: {fileID: 0}
185 | m_GameObject: {fileID: 2050038630561182186}
186 | m_Enabled: 1
187 | m_EditorHideFlags: 0
188 | m_Script: {fileID: 11500000, guid: e891b85483b4ed143962c1e3b13c3c17, type: 3}
189 | m_Name:
190 | m_EditorClassIdentifier:
191 | _enabled: 1
192 | _buildingLinePrefab: {fileID: 1246708242267961065, guid: 97ef2948a16e9d2409326cae5e0fde6f,
193 | type: 3}
194 | --- !u!114 &4359895164946160735
195 | MonoBehaviour:
196 | m_ObjectHideFlags: 0
197 | m_CorrespondingSourceObject: {fileID: 0}
198 | m_PrefabInstance: {fileID: 0}
199 | m_PrefabAsset: {fileID: 0}
200 | m_GameObject: {fileID: 2050038630561182186}
201 | m_Enabled: 1
202 | m_EditorHideFlags: 0
203 | m_Script: {fileID: 11500000, guid: 0108d1124d3d3c34eb5f0c3dc122fea0, type: 3}
204 | m_Name:
205 | m_EditorClassIdentifier:
206 | _enabled: 1
207 | _buildingPrefab: {fileID: 7725567109345287491, guid: bb614a8b45e83954da47cd4690a96720,
208 | type: 3}
209 |
--------------------------------------------------------------------------------
/LevelGeneration/Creators/CityGeneratorHelper.cs:
--------------------------------------------------------------------------------
1 | namespace Assets.Scripts.Logic.LevelGeneration.Creators
2 | {
3 | using System.Collections.Generic;
4 | using System.Linq;
5 | using UnityEngine;
6 |
7 | ///
8 | /// Defines the .
9 | ///
10 | public static class CityGeneratorHelper
11 | {
12 | ///
13 | /// The GetFeatureBasedOnPropertyValueName.
14 | ///
15 | /// The collection.
16 | /// The value.
17 | /// The .
18 | public static dynamic GetFeatureBasedOnPropertyValueName(dynamic collection, string value)
19 | {
20 | var features = collection["features"];
21 | foreach (var feature in features)
22 | {
23 | if (feature["id"] == value)
24 | {
25 | return feature;
26 | }
27 | }
28 | return null;
29 | }
30 |
31 | internal static dynamic GetPolygonsFromFeature(dynamic feature)
32 | {
33 | var geometries = feature["geometries"];
34 |
35 | if (geometries != null)
36 | {
37 | return geometries;
38 | }
39 |
40 | return feature;
41 |
42 | //Dictionary dict = new Dictionary();
43 | //foreach (var element in feature)
44 | //{
45 | // if (element.Name == "coordinates")
46 | // {
47 | // dict[element.Name] = element.Value;
48 | // }
49 | //}
50 |
51 | //return dict;
52 | }
53 |
54 | internal static dynamic GetPolygonsForBuildings(dynamic feature)
55 | {
56 | var listOfPolygons = new List();
57 | var coordinates = feature["coordinates"];
58 | foreach (var element in coordinates)
59 | {
60 | listOfPolygons.Add(element[0]);
61 | }
62 |
63 | return listOfPolygons;
64 | }
65 |
66 | ///
67 | /// The GetTrianglesFromCoordinates.
68 | ///
69 | /// The meshVertices.
70 | /// The .
71 | public static int[] GetTrianglesFromCoordinates(IList meshVertices)
72 | {
73 | IList meshTriangles = new List();
74 | var counter = 2;
75 |
76 | while (counter != meshVertices.Count)
77 | {
78 | meshTriangles.Add(0);
79 | meshTriangles.Add(counter);
80 | meshTriangles.Add(counter - 1);
81 |
82 | counter++;
83 | }
84 |
85 | return meshTriangles.ToArray();
86 | }
87 |
88 | ///
89 | /// The GetMeshVertices.
90 | ///
91 | /// The poly.
92 | /// The offset.
93 | /// The scale.
94 | /// The .
95 | public static Vector3[] GetMeshVertices(dynamic poly, out Vector2 offset, float scale)
96 | {
97 | IList meshVertices = new List();
98 | var lineString = MultiLineStringHandler.GetCoordinatesFromPoly(poly);
99 | offset = new Vector2(0.0f - float.Parse(lineString[0][0].ToString()), 0.0f - float.Parse(lineString[0][1].ToString())) * scale;
100 | foreach (var geoPosition in lineString)
101 | {
102 | var unityLatitude = (float)(scale * float.Parse(geoPosition[0].ToString())) + offset.x;
103 | var unityLongitude = (float)(scale * float.Parse(geoPosition[1].ToString())) + offset.y;
104 | meshVertices.Add(new Vector2(unityLatitude, unityLongitude));
105 | }
106 |
107 | return meshVertices.Reverse().ToArray();
108 | }
109 |
110 | ///
111 | /// The GetMeshAfterInstantiatingMeshObject.
112 | ///
113 | /// The meshObject.
114 | /// The prefab.
115 | /// The parent.
116 | /// The .
117 | public static Mesh GetMeshAfterInstantiatingMeshObject(out GameObject meshObject, GameObject prefab, Transform parent)
118 | {
119 | var mesh = new Mesh();
120 | meshObject = Object.Instantiate(prefab, parent);
121 | meshObject.GetComponent().mesh = mesh;
122 | return mesh;
123 | }
124 |
125 | ///
126 | /// The CreateMeshFromGeoJsonPolygon.
127 | ///
128 | /// The poly.
129 | /// The prefab.
130 | /// The parent.
131 | /// The scale.
132 | /// The material.
133 | /// The .
134 | public static Mesh CreateMeshFromGeoJsonPolygon(dynamic poly, GameObject prefab, Transform parent, float scale, Material material = null)
135 | {
136 | GameObject meshObject;
137 | Mesh mesh = GetMeshAfterInstantiatingMeshObject(out meshObject, prefab, parent);
138 | Vector2 offset;
139 | var meshVertices = GetMeshVertices(poly, out offset, scale);
140 | var uvs = GetMeshUVsFromVertices(meshVertices);
141 | var trianglesArray = GetTrianglesFromCoordinates(meshVertices);
142 |
143 | mesh.vertices = meshVertices;
144 | mesh.triangles = trianglesArray;
145 | mesh.uv = uvs;
146 | mesh.RecalculateNormals();
147 |
148 | meshObject.transform.Translate(-offset);
149 |
150 | if (material != null)
151 | {
152 | meshObject.GetComponent().material = material;
153 | }
154 |
155 | return mesh;
156 | }
157 |
158 | ///
159 | /// The GetMeshUVsFromVertices.
160 | ///
161 | /// The meshVertices.
162 | /// The .
163 | private static Vector2[] GetMeshUVsFromVertices(Vector3[] meshVertices)
164 | {
165 | var uvs = new Vector2[meshVertices.Length];
166 |
167 | uvs[0] = Vector2.zero;
168 | uvs[1] = Vector2.right;
169 | uvs[2] = new Vector2(1, 1);
170 | uvs[3] = Vector2.up;
171 |
172 | return uvs;
173 | }
174 |
175 | ///
176 | /// The CreateCityInHierarchy.
177 | ///
178 | /// The name.
179 | /// The .
180 | public static GameObject CreateCityInHierarchy(string name)
181 | {
182 | var city = new GameObject(name);
183 | new GameObject(CityElements.Buildings.ToString()).transform.parent = city.transform;
184 | new GameObject(CityElements.Walls.ToString()).transform.parent = city.transform;
185 | new GameObject(CityElements.Roads.ToString()).transform.parent = city.transform;
186 | new GameObject(CityElements.Water.ToString()).transform.parent = city.transform;
187 | new GameObject(CityElements.Rivers.ToString()).transform.parent = city.transform;
188 | return city;
189 | }
190 |
191 | ///
192 | /// The GetParentTransformFromCity.
193 | ///
194 | /// The city.
195 | /// The parentType.
196 | /// The .
197 | public static Transform GetParentTransformFromCity(GameObject city, CityElements parentType)
198 | {
199 | return city.transform.Find(parentType.ToString());
200 | }
201 | }
202 | }
203 |
--------------------------------------------------------------------------------