2022-07-28 15:58:55 +08:00
|
|
|
|
using System.Collections;
|
|
|
|
|
using System.Collections.Generic;
|
|
|
|
|
using UnityEngine;
|
2022-08-13 17:12:45 +08:00
|
|
|
|
using UnityEngine.InputSystem;
|
2022-08-27 21:30:16 +08:00
|
|
|
|
using UnityEngine.UI;
|
|
|
|
|
using DG.Tweening;
|
|
|
|
|
using TMPro;
|
2022-07-28 15:58:55 +08:00
|
|
|
|
|
|
|
|
|
public class GameController : UnitySingleton<GameController>
|
|
|
|
|
{
|
2022-08-27 21:30:16 +08:00
|
|
|
|
private float cameraTransDistance = 0;
|
|
|
|
|
private float cameraStartX;
|
2022-07-28 15:58:55 +08:00
|
|
|
|
|
|
|
|
|
public struct Death{
|
2022-08-19 14:23:35 +08:00
|
|
|
|
public enum DeadReason { Camera , PersonFall }
|
2022-07-28 15:58:55 +08:00
|
|
|
|
public DeadReason deadReason;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private Horse horse;
|
|
|
|
|
private CameraManager cameraManager;
|
2022-08-19 14:23:35 +08:00
|
|
|
|
private Person person;
|
2022-08-27 21:30:16 +08:00
|
|
|
|
public bool hasGameOver = false;
|
2022-07-28 15:58:55 +08:00
|
|
|
|
|
2022-08-19 14:23:35 +08:00
|
|
|
|
void Start(){
|
2022-07-28 15:58:55 +08:00
|
|
|
|
FindSth();
|
|
|
|
|
}
|
|
|
|
|
|
2022-08-13 17:12:45 +08:00
|
|
|
|
void Update(){
|
2022-08-27 21:30:16 +08:00
|
|
|
|
// //当同时按下左右扳机,触发重开,仅调试用
|
|
|
|
|
// if(Gamepad.current != null && Gamepad.current.leftTrigger.isPressed && Gamepad.current.rightTrigger.isPressed){
|
|
|
|
|
// UnityEngine.SceneManagement.SceneManager.LoadScene(UnityEngine.SceneManagement.SceneManager.GetActiveScene().name);
|
|
|
|
|
// }
|
|
|
|
|
//如果已经游戏结束,并且按下手柄Y键,则重新开始游戏
|
|
|
|
|
if(hasGameOver && Gamepad.current != null && Gamepad.current.buttonNorth.isPressed){
|
|
|
|
|
StartCoroutine(RestartCoroutine());
|
|
|
|
|
//UnityEngine.SceneManagement.SceneManager.LoadScene(UnityEngine.SceneManagement.SceneManager.GetActiveScene().name);
|
2022-08-13 17:12:45 +08:00
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
2022-08-27 21:30:16 +08:00
|
|
|
|
private IEnumerator RestartCoroutine(){
|
|
|
|
|
//仅防止多次触发
|
|
|
|
|
hasGameOver = false;
|
|
|
|
|
//首先呼出黑幕
|
|
|
|
|
BlackController.Instance.Trans();
|
|
|
|
|
//等到屏幕全黑
|
|
|
|
|
yield return new WaitUntil(() => {return BlackController.Instance.AllBlack;});
|
|
|
|
|
//切换场景
|
|
|
|
|
UnityEngine.SceneManagement.SceneManager.LoadScene(UnityEngine.SceneManagement.SceneManager.GetActiveScene().name);
|
|
|
|
|
}
|
|
|
|
|
|
2022-08-19 14:23:35 +08:00
|
|
|
|
void FindSth(){
|
2022-07-28 15:58:55 +08:00
|
|
|
|
horse = FindObjectOfType<Horse>();
|
|
|
|
|
cameraManager = FindObjectOfType<CameraManager>();
|
2022-08-19 14:23:35 +08:00
|
|
|
|
person = FindObjectOfType<Person>();
|
2022-08-27 21:30:16 +08:00
|
|
|
|
cameraStartX = Camera.main.transform.position.x;
|
2022-07-28 15:58:55 +08:00
|
|
|
|
}
|
|
|
|
|
|
2022-08-19 14:23:35 +08:00
|
|
|
|
public void GameOver(Death deathInfo){
|
2022-08-27 21:30:16 +08:00
|
|
|
|
hasGameOver = true;
|
2022-07-28 15:58:55 +08:00
|
|
|
|
//触发马的死亡功能
|
|
|
|
|
horse.Death(deathInfo);
|
2022-08-19 14:23:35 +08:00
|
|
|
|
//触发人的死亡功能
|
|
|
|
|
person.Death(deathInfo);
|
2022-07-28 15:58:55 +08:00
|
|
|
|
//告诉相机马死了
|
|
|
|
|
cameraManager.Death(deathInfo);
|
2022-08-27 21:30:16 +08:00
|
|
|
|
StartCoroutine(UICoroutine());
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public RectTransform restartUI;
|
|
|
|
|
public TextMeshProUGUI meter;
|
|
|
|
|
private IEnumerator UICoroutine(){
|
|
|
|
|
//计算相机移动距离
|
|
|
|
|
cameraTransDistance = Camera.main.transform.position.x - cameraStartX;
|
|
|
|
|
cameraTransDistance /= 5;
|
|
|
|
|
//设定UI分数显示为cameraTransDistance
|
|
|
|
|
//restartUI = GameObject.Find("重开").GetComponent<RectTransform>();
|
|
|
|
|
meter.text = ((int)cameraTransDistance).ToString();
|
|
|
|
|
//等待2秒钟
|
|
|
|
|
yield return new WaitForSeconds(2);
|
|
|
|
|
//UI进入页面
|
|
|
|
|
restartUI.DOLocalMoveX(0,1f);
|
2022-07-28 15:58:55 +08:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
}
|