using System; using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.UI; public class GameView : PinBallUIBase { /// 左转按钮 public GameObject btn_Left; /// 右转按钮 public GameObject btn_Right; /// 加满子弹 public GameObject btn_AddBullet; /// 取消发射按钮 public Image btn_CancelShoot; public GameObject btn_Return; /// 倒计时文本 public Text text_downTime; /// 子弹数量文本 public Text text_ArrowCount; /// 目标数量文本 public Text text_TargetCount; /// 倒计时数量 public int int_ShowTime; /// 子弹数量 public int int_bulletCount; /// 剩余目标 public int int_tangetNum; /// 目标总数量 public int int_tangetCount; /// 是否倒计时 public bool isShowTime; /// 时间累计 private float timeing; /// /// 测试面板 /// public GameObject contorlPanel; private GameObject btn_Contorl; /// 准心开关 public Toggle toggle_IsAni; public Toggle tgl_isShowGun; //是否显示枪模型 /// /// 摄像机距离 调整测试 /// private Text text_CameraDis; private Slider slider_CameraDis; /// /// 气球飞行速度 /// private Text text_BalloonFlySpeed; private Slider slider_BalloonFlySpeed; //子弹相关 private InputField input_Mass; private InputField input_Force; private Toggle useGravity; private Text text_BulletBounciness; private Slider slider_BulletBounciness; protected override void Init() { base.Init(); uILevel = PinBallUILevel.Content; btn_Left = transform.Find("btn_Left").gameObject; btn_Right = transform.Find("btn_Right").gameObject; btn_AddBullet = transform.Find("btn_AddBullet").gameObject; btn_Return = transform.Find("btn_Return").gameObject; btn_CancelShoot = transform.Find("btn_CancelShoot").GetComponent(); Transform hintPanel = transform.Find("HintPanel"); text_downTime = hintPanel.Find("text_downTime").GetComponent(); text_ArrowCount = hintPanel.Find("text_ArrowCount").GetComponent(); text_TargetCount = hintPanel.Find("text_TargetCount").GetComponent(); UIEventListener.Get(btn_Left).onClick = OnClick; UIEventListener.Get(btn_Right).onClick = OnClick; UIEventListener.Get(btn_AddBullet).onClick = OnClick; UIEventListener.Get(btn_Return).onClick = OnClick; UIEventListener.Get(btn_CancelShoot.gameObject).onEnter = OnPointerClick; UIEventListener.Get(btn_CancelShoot.gameObject).onExit = OnExit; //测试项 contorlPanel = transform.Find("ContorlPanel").gameObject; btn_Contorl = transform.Find("btn_Contorl").gameObject; text_CameraDis = contorlPanel.transform.Find("Text_CameraDis").GetComponent(); slider_CameraDis = contorlPanel.transform.Find("Slider_CameraDis").GetComponent(); slider_CameraDis.onValueChanged.AddListener(SliderCameraDis); slider_CameraDis.minValue = 5; slider_CameraDis.maxValue = 16; text_BalloonFlySpeed = contorlPanel.transform.Find("Text_BalloonFlySpeed").GetComponent(); slider_BalloonFlySpeed = contorlPanel.transform.Find("Slider_BalloonFlySpeed").GetComponent(); slider_BalloonFlySpeed.onValueChanged.AddListener(SliderBalloonFlySpeed); UIEventListener.Get(btn_Contorl.gameObject).onClick = OnTestClick; input_Mass = contorlPanel.transform.Find("InputField_BulletMass").GetComponent(); input_Force = contorlPanel.transform.Find("InputField_BulletForce").GetComponent(); useGravity = contorlPanel.transform.Find("Tgl_useGravity").GetComponent(); UIEventListener.Get(useGravity.gameObject).onClick = OnTestClick; input_Mass.onEndEdit.AddListener(OnEndEditMass); input_Force.onEndEdit.AddListener(OnEndEditForce); input_Mass.text = GameInstantiateData.Instance.bullet_Mass.ToString(); input_Force.text = GameInstantiateData.Instance.bullet_Force.ToString(); useGravity.isOn = GameInstantiateData.Instance.bullet_useGravity; text_BulletBounciness = contorlPanel.transform.Find("Text_BulletBounciness").GetComponent(); slider_BulletBounciness = contorlPanel.transform.Find("Slider_BulletBounciness").GetComponent(); slider_BulletBounciness.onValueChanged.AddListener(ChangeBulletBounciness); toggle_IsAni = contorlPanel.transform.Find("toggle_IsAni").GetComponent(); tgl_isShowGun = contorlPanel.transform.Find("toggle_IsShowGun").GetComponent(); UIEventListener.Get(toggle_IsAni.gameObject).onClick = OnTestClick; UIEventListener.Get(tgl_isShowGun.gameObject).onClick = OnTestClick; } private void ChangeBulletBounciness(float value) { text_BulletBounciness.text = "子弹弹力:" + value; GameInstantiateData.Instance.bullet_Bounciness = value; } /// /// 控制面本测试按钮功能 /// /// private void OnTestClick(GameObject go) { if (go.name.Contains("btn_Contorl")) { contorlPanel.SetActive(!contorlPanel.activeSelf); } else if (go.name.CompareTo("Tgl_useGravity") == 0) { GameInstantiateData.Instance.bullet_useGravity = useGravity.isOn; } else if (go.name.Contains("toggle_IsAni")) { bool value = toggle_IsAni.isOn; LauncherCtrl.instance.ShowAni(value); } else if (go.name.Contains("toggle_IsShowGun")) { bool value = tgl_isShowGun.isOn; LauncherCtrl.instance.ShowGunModel(value); } } /// /// 子弹质量修改 /// /// private void OnEndEditMass(string value) { GameInstantiateData.Instance.bullet_Mass = float.Parse(value); } /// /// 子弹 发射崇力 修改 /// /// private void OnEndEditForce(string value) { GameInstantiateData.Instance.bullet_Force = int.Parse(value); } /// /// 按钮点击 /// /// private void OnClick(GameObject go) { if (go.name.Contains("btn_Left")) { GameMgr.instance.RotateCastle(1); } else if (go.name.Contains("btn_Right")) { GameMgr.instance.RotateCastle(-1); } else if (go.name.Contains("btn_AddBullet")) { GameMgr.instance.AddBulletCount(); } else if (go.name.Contains("btn_Return")) { PinBallUIManager.instance.DestroyAllUI(); PinBallUIManager.instance.ShowUI(new object[] { "LoadingView", "Start" }); } else { Debug.LogError(go.name + "未找到注册方法"); } } private void SliderBalloonFlySpeed(float value) { GameInstantiateData.Instance.int_balloonFlySpeed = (int)value; text_BalloonFlySpeed.text = "气球飞行速度" + value; } private void SliderCameraDis(float value) { //print(value); int v = (int)value; text_CameraDis.text = "摄像机距离城堡位置:" + v; if (GameInstantiateData.Instance.int_CameraToCastleDis == v) { return; } // int dis = (int)Vector3.Distance(LauncherCtrl.instance.launcherCamera.transform.position, GameMgr.instance.transform.position); Vector3 pos = Vector3.MoveTowards(LauncherCtrl.instance.launcherCamera.transform.position, GameMgr.instance.transform.position, GameInstantiateData.Instance.int_CameraToCastleDis - value); LauncherCtrl.instance.launcherCamera.transform.position = pos; GameInstantiateData.Instance.int_CameraToCastleDis = v; } protected override void ShowUIOpt(object[] args) { //传值- 开始倒计时,游戏倒计时时间,子弹数量,目标数量 isShowTime = (bool)args[0]; int_ShowTime = (int)args[1]; int_bulletCount = (int)args[2]; int_tangetNum = int_tangetCount = (int)args[3]; SetTextDownTime(); SetTextBulletCount(); SetTextTargetCount(); GameInstantiateData.Instance.int_CameraToCastleDis = (int)Vector3.Distance(LauncherCtrl.instance.launcherCamera.transform.position, GameMgr.instance.transform.position); // text_CameraDis.text = "摄像机距离城堡位置:" + int_CameraDisDis; slider_CameraDis.value = GameInstantiateData.Instance.int_CameraToCastleDis; slider_BalloonFlySpeed.value = GameInstantiateData.Instance.int_balloonFlySpeed; } protected override void Broadcast(object[] args) { //args[0] 是否倒计时 args[1] 类型 isShowTime = (bool)args[0]; if (isShowTime) { // 类型,1——目标数量,2——子弹数量 3——力量计时 int type = (int)args[1]; if (type == 1) { int_tangetNum = (int)args[2]; SetTextTargetCount(); } else if(type == 2) { int_bulletCount = (int)args[2]; SetTextBulletCount(); } else if (type == 3) { } } else { } } protected override void HideUIOpt() { } /// /// 进入按钮 /// /// private void OnPointerClick(GameObject go) { if (go.name.Contains("btn_CancelShoot")) { btn_CancelShoot.color = Color.red; } } /// /// 退出按钮 /// /// private void OnExit(GameObject go) { if (go.name.Contains("btn_CancelShoot")) { btn_CancelShoot.color = Color.white; } } /// /// 设置倒计时 /// private void SetTextDownTime() { int m = int_ShowTime / 60; string sm = m >= 10 ? (m).ToString() : "0" + m; int s = int_ShowTime % 60; string ss = s >= 10 ? s.ToString() : "0" + s; string time = sm + ":" + ss; text_downTime.text = time; } /// /// 设置文本,子弹数量 /// private void SetTextBulletCount() { text_ArrowCount.text = int_bulletCount.ToString(); if (int_bulletCount <= 0 && int_ShowTime >= 10) { Invoke("GameOver", 1f); } } /// /// 设置文本,目标数量 /// private void SetTextTargetCount() { text_TargetCount.text = int_tangetNum + "/" + int_tangetCount; } private void GameOver() { GameMgr.instance.GameOver(); } private void Update() { if (isShowTime) { timeing += Time.deltaTime; if (timeing >= 1f) { timeing = 0; int_ShowTime -= 1; if (int_ShowTime < 0) { isShowTime = false; Debug.Log("时间结束"); GameOver(); } else { SetTextDownTime(); } } } //if (isShowAni) //{ // Vector2 uguiPos = Vector2.zero; // if (isAniGun) // { // //十字准心在枪口 // // img_Anim.transform.localPosition // Vector3 viewportPos = LauncherCtrl.instance.launcherCamera.WorldToViewportPoint(LauncherCtrl.instance.gunPoint.transform.position); // //获得 (枪口在摄像机的屏幕位置 - 初始中点位置) * 屏幕大小1280 * 摄像机的摄像角度180 / 100 // uguiPos.x = (viewportPos.x - 0.5f) * 1280 * 180 / 100; // canvasRtm.sizeDelta.x; // uguiPos.y = (viewportPos.y - 0.3f) * 720 * 180 / 100;// canvasRtm.sizeDelta.y; // img_Anim.transform.localPosition = uguiPos; // //uguiPos.x = (viewportPos.x) * canvasRtm.sizeDelta.x; // //uguiPos.y = (viewportPos.y) * canvasRtm.sizeDelta.y; // // img_Anim.transform.localPosition = uguiPos; // // print(viewportPos); // } // else // { // //十字准心在目标上 // float maxDistance = 100; // int layerMask = 1 << 8; //TargetLayerMask // RaycastHit raycastHit; // Ray ray = new Ray(LauncherCtrl.instance.gunPoint.transform.position, LauncherCtrl.instance.transform.TransformDirection(Vector3.forward)); // Physics.Raycast(ray.origin, ray.direction, out raycastHit, maxDistance, layerMask); // if (raycastHit.collider != null) // { // Vector3 viewportPos = LauncherCtrl.instance.launcherCamera.WorldToViewportPoint(raycastHit.point); // uguiPos.x = (viewportPos.x - 0.5f) * 1280;// * 180 / 100; // canvasRtm.sizeDelta.x; // uguiPos.y = (viewportPos.y - 0.5f) * 720;// * 180 / 100;// canvasRtm.sizeDelta.y; // img_Anim.transform.localPosition = uguiPos; // } // else // { // //img_Anim.gameObject.SetActive(false); // img_Anim.transform.localPosition = vec_AinPos; // } // } //} } }