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;
// }
// }
//}
}
}