using System.Collections.Generic; using System.Linq; using AppGame; using AppGame.Sync; using Game.Input; using JNGame.Math; using JNGame.Util; using UnityEngine; using UnityEngine.UI; namespace UI { public class DMainUI : MonoBehaviour { public GameObject root; public Text SizeText; public Text ByteSizeText; public Camera MainCamera; public Dropdown tileDropdown; public List servers; private void Awake() { AddListener(); } private void Update() { SizeText.text = $"{root.transform.childCount}"; if (App.IsClient()) { // ByteSizeText.text = $"{JNTCPClient.Size}"; } if (App.IsServer()) { ByteSizeText.text = $"{App.Server.GetByteSize()}"; } if (!(App.IsClient())) return; float moveHorizontal = Input.GetAxis("Horizontal"); float moveVertical = Input.GetAxis("Vertical"); Vector3 movement = new Vector3(moveHorizontal, 0.0f, moveVertical); var transform1 = MainCamera.transform; movement = transform1.forward * movement.z + transform1.right * movement.x; movement = movement.normalized; IDPlayerMoveVector vector = new IDPlayerMoveVector { X = movement.x.ToLFloat(), Y = movement.z.ToLFloat(), }; if (App.Game.IsStartClient) { App.Game.GetInput().MoveVector = vector; } } /// /// 监听事件 /// private void AddListener() { App.Event.AddListener(GEvent.GSwPlayerTile,OnGSwPlayerTile); App.Event.AddListener(GEvent.NetNewTileServer,OnGSwPlayerTile); } private void OnDestroy() { App.Event.RemoveListener(GEvent.GSwPlayerTile,OnGSwPlayerTile); App.Event.RemoveListener(GEvent.NetNewTileServer,OnGSwPlayerTile); } /// /// 玩家区块切换了 /// private async void OnGSwPlayerTile() { int? tile = App.Game.GetClient()?.PlayerTile; if (tile is null) return; async void Action() { servers = (await App.GAPI.NSyncTileListServer(tile.Value)).data; tileDropdown.ClearOptions(); tileDropdown.AddOptions(servers.Select(server => $"{(server.master ? "主" : "副")}:{server.port}").ToList()); } await UnityMainThreadDispatcher.Instance.EnqueueAsync(Action); } /// /// 切换区块 /// public void OnSwitchTile() { if (servers.Count <= tileDropdown.value) return; App.Game.GetClient() ?.SwSocket(servers[tileDropdown.value].tile, servers[tileDropdown.value]); } } }