using System.Collections; using System.Collections.Generic; using UnityEngine; using WPM; using DG.Tweening; using UnityEngine.UI; using Assets.Scripts.Apis; using Newtonsoft.Json.Linq; using Assets.Scripts; using UnityEngine.EventSystems; using System; public class EarthController : PFUIPanel { private WorldMapGlobe map; private Text Province; private Text Country; private RawImage maskImage; private MapApi mapApi; private Text CountText; private Text OfficialText; private Text RiderText; //private GameObject hotPanel; //private GameObject content; //private Object itemObject; Transform rootPanel; Canvas canvas; float time = 0f; bool showSummary = false; Vector2 latlonCenter; private GameObject panel; private bool isTaiwanClick = false; protected override void Awake() { base.Awake(); mapApi = new MapApi(); canvas = this.transform.Find("Canvas").GetComponent(); canvas.worldCamera = Camera.main; rootPanel = this.transform.Find("Canvas").Find("Panel"); map = WorldMapGlobe.instance; #if UNITY_IOS if (Utils.isLowIPhone()) { map.earthScenicGlowIntensity = 0; } #endif map.showProvinces = true; map.showCities = true; //map.autoRotationSpeed = 0f; //map.autoRotationSpeed = 0.1f; //Camera.main.fieldOfView = 180; //map.allowUserZoom = false; map.showLatitudeLines = false; map.showLongitudeLines = false; map.showCursor = false; } // Start is called before the first frame update protected override void Start() { //itemObject = Resources.Load("UI/Prefab/BigMap/Item"); panel = rootPanel.Find("Panel").gameObject; #if UNITY_ANDROID || UNITY_IOS SetRounded(panel.transform, 20); var nav = transform.Find("Canvas/Panel/Tmp/MainNav-mobile").GetComponent(); nav.SetButtonActive(new List { 2, 3, 6, 7 }, 2, custom: new NewMainNav.CustomButton(Resources.Load("Images/搜索"), () => { UIManager.ShowNewRouteOverviewPanel(); })); newNav = nav; #else SetRounded(panel.transform, 60); #endif panel.gameObject.SetActive(false); var goList = rootPanel.transform.Find("SwitchMode"); #if UNITY_ANDROID || UNITY_IOS SetRounded(goList, 52); #else SetRounded(goList, 64); #endif UIManager.AddEvent(goList.Find("GoList").gameObject, EventTriggerType.PointerClick, (e) => { //UIManager.PopStack(); UIManager.ShowNewRouteOverviewPanel(); //this.gameObject.SetActive(false); //DestroyImmediate(this.gameObject); }); maskImage = rootPanel.Find("MaskImage").GetComponent(); Country = panel.transform.Find("Country").GetComponent(); Province = panel.transform.Find("Province").GetComponent(); CountText = panel.transform.Find("CountPanel").Find("Count").GetComponent(); OfficialText = panel.transform.Find("OfficialPanel").Find("Count").GetComponent(); RiderText = panel.transform.Find("RiderPanel").Find("Count").GetComponent(); //hotPanel = rootPanel.Find("HotPanel").gameObject; //SetRounded(hotPanel.transform, 60); //content = hotPanel.transform.Find("Scroll View").Find("Viewport").Find("Content").gameObject; var avatar = rootPanel.transform.Find("Avatar").GetComponent(); UIManager.AddEvent(avatar.gameObject, EventTriggerType.PointerClick, b => { UIManager.ShowUserInfoPanel(); }); Utils.DisplayImage(avatar, App.CurrentUser.WxHeadImg, true); //var mainCanvas = GameObject.Find("Canvas"); //mainCanvas.gameObject.SetActive(false); UIManager.Instance.MainPanel.gameObject.SetActive(false); Camera.main.transform.position = new Vector3(0, 0); Camera.main.transform.rotation = Quaternion.Euler(0, 0, 0); map.SetZoomLevel(2.6f); //var zoom = map.GetZoomLevel(); //Debug.Log(zoom); map.OnZoomStart += Map_OnZoomStart; map.OnZoomEnd += Map_OnZoomEnd; map.OnClick += Map_OnClick; map.OnCountryEnter += (int countryIndex, int regionIndex) => { map.autoRotationSpeed = 0f; var country = map.countries[countryIndex]; if (country.name.ToLower().Contains("taiwan")) { Country.text = "China"; Province.text = "TaiWan"; ShowSummary(country.latlonCenter); map.HighlightCountryRegion(173, 1, false, true, Color.white); } else { Country.text = country.name; } }; map.OnCountryClick += (int countryIndex, int regionIndex) => { var country = map.countries[countryIndex]; Debug.Log($"country click { country.name }, { countryIndex }, { regionIndex }"); if (country.name.ToLower().Contains("taiwan") || country.name.ToLower().Contains("china")) { //var latLon = map.countries[36].latlonCenter; //country.latlonCenter; //EnterBigMap(latLon); isTaiwanClick = true; Invoke("DelayEnterBigMapForTaiwan", 0.01f); } }; map.OnProvinceEnter += (int provinceIndex, int regionIndex) => { var province = map.provinces[provinceIndex]; Province.text = province.name; latlonCenter = province.latlonCenter; time = 0f; showSummary = true; //ShowSummary(province.latlonCenter); }; map.OnProvinceExit += (int provinceIndex, int regionIndex) => { showSummary = false; }; map.OnProvinceClick += (int provinceIndex, int regionIndex) => { isTaiwanClick = false; Debug.Log("province click"); var province = map.provinces[provinceIndex]; var latLon = province.latlonCenter; EnterBigMap(latLon); }; //skybox = Camera.main.GetComponent(); } private void DelayEnterBigMapForTaiwan() { if (!isTaiwanClick) return; var latLon = map.countries[36].latlonCenter; EnterBigMap(latLon); } //private float rot = 0; //Skybox skybox; /// /// 显示概要信息 /// /// private async void ShowSummary(Vector2 latlonCenter) { if(panel.activeInHierarchy == false) { panel.SetActive(true); panel.GetComponent().alpha = 0; panel.GetComponent().DOFade(1f, 0.1f); } var result = await mapApi.GetEarthData(latlonCenter.x, latlonCenter.y); if (result.result == false) { return; } var obj = JObject.FromObject(result.data); CountText.text = obj.Value("count"); OfficialText.text = obj.Value("officialCount"); RiderText.text = obj.Value("riderCount"); //foreach (Transform item in content.transform) //{ // GameObject.Destroy(item.gameObject); //} //var list = JArray.FromObject(obj["list"]); //foreach (var item in list) //{ // var itemObject1 = (GameObject)Instantiate(itemObject, content.transform, false); // var iii = itemObject1.GetComponent(); // iii.SetModel(new Assets.Scripts.Apis.Models.NearRouteModel // { // Id = item.Value("Id"), // Name = item.Value("Name"), // TheHeat = item.Value("TheHat"), // IsFire = item.Value("IsFire") // }); //} } /// /// 进入大地图 /// /// private void EnterBigMap(Vector2 latLon) { map.FlyToLocation(latLon.x, latLon.y, 1f, 0.1f).Then(() => { //Close(); //UIManager.ShowBigMapPanel(); }); maskImage.gameObject.SetActive(true); maskImage.DOFade(1f, 0.9f).SetEase(Ease.InSine).OnComplete(() => { Close(); UIManager.PopStack(); UIManager.ShowBigMapPanel(latLon.x, latLon.y); }); } private void Map_OnClick(Vector3 sphereLocation, int mouseButtonIndex) { //Debug.Log("click"); //Vector2 latLon = Conversion.GetLatLonFromSpherePoint(sphereLocation); //Debug.Log("Clicked on Latitude: " + latLon.x + ", Longitude: " + latLon.y); } private void Map_OnZoomStart(float zoomLevel) { //throw new System.NotImplementedException(); Debug.Log(zoomLevel); } private void Map_OnZoomEnd(float zoomLevel) { Debug.Log(zoomLevel); } // Update is called once per frame void Update() { var zoom = map.GetZoomLevel(); //Debug.Log(zoom); if (showSummary) { time += Time.deltaTime; if (time >= 0.2) { ShowSummary(latlonCenter); showSummary = false; } } //Debug.Log(showSummary + "," + time); //rot += 0.1f * Time.deltaTime; //rot %= 360; //skybox.material.SetFloat("_Rotation", rot); } public void Show(double lat, double lon) { if (lat != 0 && lon != 0) { map.FlyToLocation(new Vector2((float)lat, (float)lon), 0.1f); } } public override void Close() { //base.Close(); map.Destroy(); DestroyImmediate(this.gameObject); GC.SuppressFinalize(this); } }