/** * Render 3D objects into the scene */ IEnumerator RenderObjects(LatLngObject mapMiddlePoint, List <BuildingObject> buildings, List <RoadObject> roads, List <TreeObject> trees) { while (!CanRenderObjects) { yield return(new WaitForSeconds(0.1f)); } //render terrain TerrainRender.Get().GenerateTerrain(mapMiddlePoint, transform); //render buildings BuildingRender.Get().Render(transform, buildings); //render roads RoadRender.Get().Render(mapMiddlePoint, transform, roads); //render trees TreeRender.Get().GenerateTrees(mapMiddlePoint, trees); //init address info game objects MenuController.Get().AddAddressGameObjects(AddressBackground, AddressText); CanRenderObjects = false; }
/** * Get map middle point and set default camera position */ private LatLngObject GetMiddlePoint(List <BuildingObject> buildings, List <RoadObject> roads) { LatLngObject middleMapPointLatLng = null; if (buildings.Count != 0) { middleMapPointLatLng = TerrainRender.GetMiddlePoint(buildings); } else if (roads.Count != 0) { middleMapPointLatLng = TerrainRender.GetMiddlePoint(roads); } //set default camera position var middlePoint = Converter.ConvertLatLngToXyz(middleMapPointLatLng); UiUtils.SetDefaultCameraPos(middlePoint, transform); return(middleMapPointLatLng); }
public void Import(Stream input, string path) { var file = new TerrainRender(); using (var reader = new BinaryReader(input)) { reader.ReadBytes(236); float maxHeight = reader.ReadSingle(); reader.ReadBytes(12); float minHeight = reader.ReadSingle(); reader.ReadBytes(80); var miniHeightMapBytes = reader.ReadUInt32(); reader.ReadBytes(364); Debug.Log(maxHeight); Debug.Log(minHeight); // Just grab the super low LOD for now // It's at position 4 in the heightMap section I think reader.ReadBytes((int)(miniHeightMapBytes * 4)); var miniHeightmap = new float[128, 128]; for (var x = 0; x < 128; x++) { for (var y = 0; y < 128; y++) { miniHeightmap[y, x] = (reader.ReadSingle() - minHeight) / maxHeight; } } file.TerrainData = CreateTerrainData(128, new Vector3(8192, maxHeight - minHeight, 8192), miniHeightmap); } AssetDatabase.CreateAsset(file.TerrainData, "Assets/New Terrain.asset"); }
/** * */ private void AssignBuildingAddresses(BuildingObject building, List <AddressObject> addressObjects) { var buildingList = new List <BuildingObject> { building }; var middleBuildingPoint = TerrainRender.GetMiddlePoint(buildingList); AddressObject finalAddress = null; var finalDiffLat = float.MaxValue; var finalDiffLon = float.MaxValue; foreach (var address in addressObjects) { var diffLat = Math.Abs(middleBuildingPoint.Latitude - address.Position.Latitude); var diffLon = Math.Abs(middleBuildingPoint.Longitude - address.Position.Longitude); if (diffLat < finalDiffLat && diffLon < finalDiffLon) { finalAddress = address; finalDiffLon = diffLon; finalDiffLat = diffLat; } } building.AddressObject = finalAddress; }
/** * Nastavení kláves a myši pro rotaci objektu, jeho posun, načtení a jeho umístění */ public static void PlaceNewBuildingListener() { if (customObject == null) { return; } var customObjectTransform = customObject.transform; //realtime object position update customObjectTransform.position = GetMousePos(); //custom object ROTATION -- MOUSE if (Input.GetAxis("Mouse ScrollWheel") > 0f && activeAction == CanvasActionUtils.RotateAction) { customObjectTransform.Rotate(Vector3.up * Time.deltaTime * 150f); } if (Input.GetAxis("Mouse ScrollWheel") < 0f && activeAction == CanvasActionUtils.RotateAction) { customObject.transform.Rotate(Vector3.down * Time.deltaTime * 150f); } //custom object ROTATION -- GAMEPAD if (Input.GetAxisRaw("Horizontal") > 0 && activeAction == CanvasActionUtils.RotateAction) { customObjectTransform.Rotate(Vector3.up * Time.deltaTime * 150f); } if (Input.GetAxisRaw("Horizontal") < 0 && activeAction == CanvasActionUtils.RotateAction) { customObjectTransform.Rotate(Vector3.down * Time.deltaTime * 150f); } //custom object SIZE changing -- MOUSE if (Input.GetAxis("Mouse ScrollWheel") > 0f && activeAction == CanvasActionUtils.SizeAction) { customObjectSize = customObjectSize + defaultObjectSize * Time.deltaTime * 2; customObjectTransform.localScale = new Vector3(customObjectSize, customObjectSize, customObjectSize); } if ((Input.GetAxis("Mouse ScrollWheel") < 0f && activeAction == CanvasActionUtils.SizeAction)) { customObjectSize = customObjectSize - defaultObjectSize * Time.deltaTime * 2; customObjectTransform.localScale = new Vector3(customObjectSize, customObjectSize, customObjectSize); } //custom object SIZE changing -- GAMEPAD if (Input.GetAxisRaw("Horizontal") > 0 && activeAction == CanvasActionUtils.SizeAction) { customObjectSize = customObjectSize + defaultObjectSize * Time.deltaTime * 2; customObjectTransform.localScale = new Vector3(customObjectSize, customObjectSize, customObjectSize); } if (Input.GetAxisRaw("Horizontal") < 0 && activeAction == CanvasActionUtils.SizeAction) { customObjectSize = customObjectSize - defaultObjectSize * Time.deltaTime * 2; customObjectTransform.localScale = new Vector3(customObjectSize, customObjectSize, customObjectSize); } //put custom object (with spacebar or gamepad A button) if (ControlUtils.ConfirmAction() && customObject != null) { putted = true; var objectFinalPosition = GetMousePos(); //set terrain height as y coordinate objectFinalPosition.y = TerrainRender.Get().Terrain.SampleHeight(objectFinalPosition); //remove "clone" text in the name var customObjectName = customObject.name.Substring(0, customObject.name.LastIndexOf("(")); //save added object into List var addedObject = new CustomObject { Position = objectFinalPosition, ObjectName = customObjectName, Rotation = customObjectTransform.rotation.eulerAngles.y, Size = customObjectSize }; Main.AddedObjects.Add(addedObject); //place custom object to the final position customObjectTransform.position = objectFinalPosition; customObject = null; customObjectSize = defaultObjectSize; } }