using UnityEngine; using UnityEngine.UI; using UniRx; using AX.ImageViewer; public class OutdoorHydranrAttributePanel : UIView<OutdoorHydrant,OutdoorHydrantReactive> { //位置 public Text LocationText; public InputField LocationInput; //编号 public Text NumberText; public InputField NumberInput; //管径 public Text DiameterText; public InputField DiameterInput; //牙口 public Text MouthText; public InputField MouthInput; //状态 public Text StateText; public InputField StateInput; //图片类型 public OriginalImageType ImageType; //图片面板 public Image ImagePanel; //全景开关 public Toggle ImageTypeToggle; //查看原图 public Button ViewButton; public OpenImage OpenImageFile; //保存按钮 public Button SaveButton; public override void Awake() { base.Awake(); #region DataSource Bind //位置 DataSource.Location.SubscribeToText(LocationText).AddTo(gameObject); DataSource.Location.SubscribeToText(LocationInput).AddTo(gameObject); //编号 DataSource.Number.SubscribeToText(NumberText).AddTo(gameObject); DataSource.Number.SubscribeToText(NumberInput).AddTo(gameObject); //管径 DataSource.Diameter.SubscribeToText(DiameterText).AddTo(gameObject); DataSource.Diameter.SubscribeToText(DiameterInput).AddTo(gameObject); //牙口 DataSource.Mouth.SubscribeToText(MouthText).AddTo(gameObject); DataSource.Mouth.SubscribeToText(MouthInput).AddTo(gameObject); //状态 DataSource.State.SubscribeToText(StateText).AddTo(gameObject); DataSource.State.SubscribeToText(StateInput).AddTo(gameObject); //图片类型 DataSource.ImageType.Subscribe(data => { switch (data) { case OriginalImageType.Normal: ImageTypeToggle.isOn = false; break; case OriginalImageType.Panorama: ImageTypeToggle.isOn = true; break; } }).AddTo(gameObject); //图片地址 DataSource.ImageUrl.Subscribe(url => { GetImage(); }).AddTo(gameObject); LocationInput.OnValueChangedAsObservable().Subscribe(s => DataSource.Location.Value = s); NumberInput.OnValueChangedAsObservable().Subscribe(s => DataSource.Number.Value = s); DiameterInput.OnValueChangedAsObservable().Subscribe(s => DataSource.Diameter.Value = s); MouthInput.OnValueChangedAsObservable().Subscribe(s => DataSource.Mouth.Value = s); StateInput.OnValueChangedAsObservable().Subscribe(s => DataSource.State.Value = s); #endregion #region Button Click //保存 SaveButton.onClick.AsObservable().Subscribe(onClick => { SaveData(); }).AddTo(gameObject); //查看原图 ViewButton.onClick.AsObservable().Subscribe(onClick => { ViewImage(); }); //关闭 transform.Find("TitleBar/CloseButton").GetComponent<Button>().OnClickAsObservable() .Subscribe(_ => Hide()); //上传图片 OpenImageFile.OnLoadTextureFinished = texture => { UploadImage(texture); }; #endregion } public override void Show() { base.Show(); GetComponent<AttributePanelControl>().ResetPanel(); } /// <summary> /// 保存数据 /// </summary> public void SaveData() { //GameObject tempGo = EquipmentManager.SpawObjects[EquipmentManager.Instance.CreationType][DataSource.Id.Value]; //DataSource.Position.Value = tempGo.transform.position; //DataSource.Rotation.Value = tempGo.transform.rotation.eulerAngles; string url = string.Format(HttpManager.Instance.PostOutdoorFireHydrantsById, DataSource.Id); HttpManager.Instance.Post(url, DataSource.GetData()); } /// <summary> /// 上传图片 /// </summary> public void UploadImage(Texture2D texture) { HttpManager.Instance.PostImage($"{DataSource.Id}.jpg", texture, a => { DataSource.ImageUrl.Value = a?.ObjectName; }); } /// <summary> /// 获取图片 /// </summary> void GetImage() { if (!string.IsNullOrEmpty(DataSource.ImageUrl.Value)) { HttpManager.Instance.GetImage($"{ DataSource.ImageUrl.Value}?x-oss-process=image/resize,h_200", texture => { ImagePanel.sprite = Sprite.Create(texture, new Rect(0, 0, texture.width, texture.height), Vector2.zero); ImagePanel.preserveAspect = true; }); } else { ImagePanel.sprite = AssetManager.Instance.DefaultSprite; } } /// <summary> /// 查看原图 /// </summary> public void ViewImage() { if (!string.IsNullOrEmpty(DataSource.ImageUrl.Value)) { HttpManager.Instance.GetImage(DataSource.ImageUrl.Value, texture => { switch (DataSource.ImageType.Value) { case OriginalImageType.Normal: ImageViewer.Load(texture); break; case OriginalImageType.Panorama: PanoramicViewer.Load(texture); break; } }); } else { MessageBox.Show("未上传图片!", Color.white, 3f); } } }