Example #1
0
    /**
     * 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));
    }
Example #2
0
    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 };
    }
Example #3
0
    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();
    }
Example #4
0
    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);
    }
Example #5
0
    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);
        }
    }
Example #6
0
    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();
    }
Example #7
0
    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);
        }
    }
Example #8
0
    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;
        }
    }
Example #9
0
 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()
                        );
 }
Example #10
0
 protected override void OnPrefabInit()
 {
     Instance             = this;
     previewTemplate      = CreatePreviewTemplate();
     constructionTemplate = CreateConstructionTemplate();
 }
Example #11
0
 public static void DestroyInstance()
 {
     Instance = null;
 }