├── 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 | --------------------------------------------------------------------------------