/** * Parse file and render buildings when scene starts */ private void Start() { Caching.ClearCache(); //hide and lock cursor into center UiUtils.HideCursor(); TutorialUtils.InitTutorial(TutorialCanvas, Settings); BuildingPickerCanvas.SetActive(false); ExitCanvasDialog.SetActive(false); //load XML file tags var xmlFile = new XmlDocument(); //load file xmlFile.Load(FileUtils.GetFullMapPath(Map.MapName)); //get node and way tags var nodeTags = xmlFile.SelectNodes(".//node"); var wayTags = xmlFile.SelectNodes(".//way"); //cache IDs in node tag for coordinate pairing var nodeTagIds = CacheNodeTagIds(nodeTags); //parse building and roads var buildings = BuildingLoader.Get().LoadFile(nodeTags, nodeTagIds, wayTags); var roads = RoadLoader.Get().LoadFile(nodeTags, nodeTagIds, wayTags); var trees = TreeLoader.Get().LoadFile(); var mapMiddlePoint = GetMiddlePoint(buildings, roads); //download elevation data AltitudeLoader.Get().SetAltitude(TerrainUtils.GetLatLngGrid(mapMiddlePoint)); //render terrain, buildings, roads etc. StartCoroutine(RenderObjects(mapMiddlePoint, buildings, roads, trees)); }
private void selectFromMap() { Ray ray = map.CurrentCamera.ScreenPointToRay(Input.mousePosition); Plane plane = new Plane(Vector3.up, Vector3.zero); float dist; if (!plane.Raycast(ray, out dist)) { return; } Vector3 displacement = ray.GetPoint(dist); double[] displacementMeters = new double[2] { displacement.x / map.RoundedScaleMultiplier, displacement.z / map.RoundedScaleMultiplier }; double[] coordinateMeters = new double[2] { map.CenterEPSG900913[0] + displacementMeters[0], map.CenterEPSG900913[1] + displacementMeters[1] }; var coordinates = BuildingLoader.latLonToMeters(this.map.EPSG900913ToWGS84Transform.Transform(coordinateMeters)); var result = this.activeBuildings.Values.OrderBy(p => getDistance(p.PointCloud.Center, coordinates)); if (!result.Any()) { return; } this.select(result.First()); UnityEditor.Selection.objects = new GameObject[] { this.selectedBuilding.gameObject }; }
private void showNextBuilding() { var currentPointcloudBehaviour = BuildingLoader.Instance.LoadRandom(pointcloud => pointcloud.Points.Length > 2000 && pointcloud.Points.Length < 6000); var pointCloud = currentPointcloudBehaviour.PointCloud; var localCenter = new Vector2((pointCloud.Shape.Max(v => v.x) + pointCloud.Shape.Min(v => v.x)) * 0.5f, (pointCloud.Shape.Max(v => v.y) + pointCloud.Shape.Min(v => v.y)) * 0.5f); UnitySlippyMap.Map.MapBehaviour.Instance.CenterWGS84 = BuildingLoader.metersToLatLon(new double[] { pointCloud.Metadata.center[0] + localCenter.x, pointCloud.Metadata.center[1] + localCenter.y }); currentPointcloudBehaviour.CreateMesh(AbstractMeshCreator.CurrentType, ShapeMeshCreator.CleanMeshDefault); BuildingLoader.Instance.UpdateBuildings(); }
private PointCloudBehaviour createGameObject(PointCloud pointCloud) { GameObject gameObject = new GameObject(); var pointCloudBehaviour = gameObject.AddComponent <PointCloudBehaviour>(); pointCloudBehaviour.Initialize(pointCloud); gameObject.transform.position = Vector3.up * gameObject.transform.position.y; var marker = gameObject.AddComponent <LocationMarkerBehaviour>(); marker.Map = this.map; marker.CoordinatesWGS84 = BuildingLoader.metersToLatLon(pointCloud.Metadata.center); this.activeBuildings[pointCloud.Metadata.filename] = pointCloudBehaviour; return(pointCloudBehaviour); }
private void updateBuildingsThread() { var center = BuildingLoader.latLonToMeters(this.map.CenterWGS84); foreach (var building in this.buildings.GetBuildings(center, this.LoadRadius).OrderBy(b => getDistance(b.center, center))) { if (this.activeBuildings.ContainsKey(building.filename)) { continue; } var pointCloud = new PointCloud(building); pointCloud.Load(); this.pointCloudsToDisplay.Enqueue(pointCloud); } }
public override void OnInspectorGUI() { base.OnInspectorGUI(); if (!Application.isPlaying) { return; } var map = MapBehaviour.Instance; GUILayout.Label("WGS84"); GUILayout.BeginHorizontal(); GUILayout.Label("Latitude:"); EditorGUILayout.TextArea(map.CenterWGS84[0].ToString()); GUILayout.EndHorizontal(); GUILayout.BeginHorizontal(); GUILayout.Label("Longitude:"); EditorGUILayout.TextArea(map.CenterWGS84[1].ToString()); GUILayout.EndHorizontal(); GUILayout.Label("EPSG900913"); GUILayout.BeginHorizontal(); GUILayout.Label("X:"); EditorGUILayout.TextArea(map.CenterEPSG900913[0].ToString()); GUILayout.EndHorizontal(); GUILayout.BeginHorizontal(); GUILayout.Label("Y:"); EditorGUILayout.TextArea(map.CenterEPSG900913[1].ToString()); GUILayout.EndHorizontal(); var meters = BuildingLoader.latLonToMeters(map.CenterWGS84); GUILayout.Label("WGS84 UTM Zone 32"); GUILayout.BeginHorizontal(); GUILayout.Label("X:"); EditorGUILayout.TextArea(meters[0].ToString()); GUILayout.EndHorizontal(); GUILayout.BeginHorizontal(); GUILayout.Label("Y:"); EditorGUILayout.TextArea(meters[1].ToString()); GUILayout.EndHorizontal(); }
public void UnloadBuildings(float radius) { var center = BuildingLoader.latLonToMeters(this.map.CenterWGS84); var removed = new List <string>(); foreach (var building in this.activeBuildings.Values) { if (getDistance(center, building.PointCloud.Metadata.center) > radius) { removed.Add(building.PointCloud.Metadata.filename); GameObject.Destroy(building.gameObject); } } foreach (var address in removed) { this.activeBuildings.Remove(address); } }
public static void LoadSingle() { string selected = EditorUtility.OpenFilePanel("Load file", Application.dataPath + "/data/buildings/", null); if (selected.Any() && File.Exists(selected)) { GameObject gameObject = new GameObject(); var pointcloud = new PointCloud(selected); pointcloud.Load(); var pointCloudBehaviour = gameObject.AddComponent <PointCloudBehaviour>(); pointCloudBehaviour.Initialize(pointcloud); gameObject.transform.position = Vector3.up * gameObject.transform.position.y; var marker = gameObject.AddComponent <LocationMarkerBehaviour>(); marker.Map = MapBehaviour.Instance; marker.CoordinatesWGS84 = BuildingLoader.metersToLatLon(pointCloudBehaviour.PointCloud.Center); MapBehaviour.Instance.CenterEPSG900913 = marker.CoordinatesEPSG900913; } }
public async Task Load() { await Task.WhenAll(IssueLoader.Load(), DecisionsLoader.Load(), EventsLoader.Load(), InventionsLoader.Load(), TechnologiesLoader.Load(), PopLoader.Load(), UnitLoader.Load(), ProvinceLoader.Load(), PopTypeLoader.Load(), DiplomacyLoader.Load(), OobLoader.Load(), WarLoader.Load(), BookmarkLoader.Load(), BuildingLoader.Load(), CbLoader.Load(), CotColorLoader.Load(), NationalFocusLoader.Load(), GraphicalCultureLoader.Load(), IdeologyLoader.Load(), CountryLoader.Load(), CountryColorsLoader.Load(), CrimeLoader.Load(), CultureLoader.Load(), DefinesLoader.Load(), EventModifiersLoader.Load(), GoodsLoader.Load(), GovernmentsLoader.Load(), NationalValueLoader.Load(), OnActionsLoader.Load(), PopTypeLoader.Load(), ProductionTypeLoader.Load(), RebelTypeLoader.Load(), ReligionLoader.Load(), StaticModifiersLoader.Load(), TechSchoolLoader.Load(), TraitsLoader.Load(), TriggeredModifiersLoader.Load(), CountryDirectoryLoader.Load() ); }
protected override void OnPrefabInit() { Instance = this; previewTemplate = CreatePreviewTemplate(); constructionTemplate = CreateConstructionTemplate(); }
public static void DestroyInstance() { Instance = null; }