Files
AliceBall/Assets/_Alice/Scripts/Base/GameManager.cs

391 lines
9.9 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
using System;
using System.Collections;
using System.Collections.Generic;
using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Engines;
using Common;
using DragonLi.Core;
using UnityEngine;
using UnityEngine.PlayerLoop;
using XPlugin.Data.JsonLiteDB;
using static XPlugin.Data.JsonLiteDB.JsonLiteDB;
using LitJson;
using Pathfinding;
using DarkTonic.MasterAudio;
using NaughtyAttributes;
using UnityEngine.UIElements;
/// <summary>
/// 游戏状态
/// </summary>
public enum GameState
{
None = 0,
Playing = 1,
/// <summary>
/// 胜利
/// </summary>
Victory = 2,
/// <summary>
/// 失败
/// </summary>
Failur = 3,
Settle
}
public class GameManager : MonoBehaviour
{
public static GameManager Ins { get; private set; }
public TaskManager taskManager;
public GameState gameState;
public float vistEnd = 60 * 10;
public GameObject wuHui;
//预制体
public GameObject playerPre;
public GameObject enemyPre;
public GameObject gemKeyPre;
public GameObject eggBulletPre;
public GameObject eggBulletExPre;
public GameObject gameStartDoor;
public RightHand playerRightHand;
public Enemy enemy;
public bool isStartGame = false;
//添加
[Header("AI角色")]
public GameObject aiCharacterPre;//AI角色预制体
private GameObject aiCharacter;//AI角色实例
void Awake()
{
Ins = this;
}
private void Start()
{
isStartGame = false;
wuHui.SetActive(false);
}
public void GameStart()
{
CreateAICharacter();
//isStartGame = true;
//HUDPanel.Show();
//taskManager.bg.SetActive(true);
//CreateEnemy(GameLocal.Ins.enemyPos.position, new Vector3(0,180,0));
//宝石任务
//enemy.SetState(1);
//taskManager.curTaskId = 1;
//拔萝卜任务
// enemy.SetState(2);
// taskManager.curTaskId = 2;
//换装任务
//taskManager.curTaskId = 3;
//taskManager.StartTask();
//打鸡蛋任务
//enemy.SetState(3);
//taskManager.curTaskId = 4;
//taskManager.StartTask();
}
//修改处添加创建AI角色的方法
private void CreateAICharacter()
{
//检查是否已经存在AI角色
if (aiCharacter != null)
{
Debug.Log("AI角色已经存在不再创建新的");
return;
}
if (aiCharacterPre != null)
{
Debug.Log("创建AI角色");
//在玩家前方创建AI角色
Vector3 spawnPosition = playerPre.transform.position + playerPre.transform.forward * 3f;
aiCharacter = Instantiate(aiCharacterPre, spawnPosition, Quaternion.identity);
//获取AIController并启动开场白
AIController aiController = aiCharacter.GetComponent<AIController>();
if (aiController != null)
{
//注册AI介绍完成回调
aiController.OnIntroductionComplete += StartGameAfterIntroduction;
//添加延迟,确保所有组件已经完成初始化
StartCoroutine(DelayedStartIntroduction(aiController));
}
else
{
Debug.LogError("AI预制体中的AIController组件丢失");
}
}
else
{
Debug.LogError("AI预制体没有在GameManager分配!");
}
}
public void StartGameAfterIntroduction()
{
isStartGame = true;
Debug.Log("AI介绍完成开始游戏正常流程");
HUDPanel.Show();
taskManager.bg.SetActive(true);
CreateEnemy(GameLocal.Ins.enemyPos.position, new Vector3(0, 180, 0));
}
private IEnumerator DelayedStartIntroduction(AIController aiController)
{
yield return new WaitForSeconds(0.1f); // 短暂延迟
aiController.StartIntroduction();
}
public void LoginGame()
{
CreatePlayer();
//PlaySound2DRPC("1.25");
PlayBGM(0);
CreateGameStartDoor(GameLocal.Ins.startDoorPos.position);
}
public void PlayBGM(int id)
{
foreach (var item in GameLocal.Ins.BGM)
{
item.SetActive(false);
}
GameLocal.Ins.BGM[id].SetActive(true);
}
public void GameOver(GameState state)
{
}
/// <summary>
/// 更新配置表
/// </summary>
public void UpdateConf()
{
// string text = Resources.Load<TextAsset>("Data").text;
// if (text != null)
// {
// ParseGameJson(text);
// }
}
public void ParseGameJson(string text)
{
// DB = new JsonLiteDB();
// DB.Load(text);
//
// TableReader infoReader = DB["EnemysInfo"].GetReader();
// while (infoReader.Read())
// {
// EnemyInfo info = new EnemyInfo(infoReader);
//
// }
Debug.Log("游戏数值更新 -> complete");
}
public void StopBgm()
{
}
public void PlaySound2DRPC(string sound)
{
MasterAudio.PlaySound(sound);
}
public void PlaySound3DRPC(string sound,Transform soundTran,bool isStop=false)
{
if(isStop)
MasterAudio.StopAllSoundsOfTransform(soundTran);
MasterAudio.PlaySound3DAtTransform(sound, soundTran);
}
public void CreateGameStartDoor(Vector3 pos)
{
var door= Instantiate(gameStartDoor, pos, Quaternion.identity);
if(GameLocal.Ins.place == Place.Jiangsu_Xvzhou_Suning_Guangchang
||GameLocal.Ins.place == Place.Hunan_Changde_Lixian_WandaGuangchang
)
{
door.transform.eulerAngles = new Vector3(0, 90, 0);
}
else
{
door.transform.eulerAngles = new Vector3(0, 180, 0);
}
MonoSingleton<CoroutineTaskManager>.Instance.WaitSecondTodo(() =>
{
if (!isStartGame)
{
if (door.gameObject==null)
return;
door.gameObject.GetComponent<Collider>().enabled = false;
door.gameObject.SetActive(false);
Destroy(door.gameObject);
if (taskManager.curTaskId != 4)
{
GameStart();
}
else
{
StartDance();
}
}
},5);
}
public void CreatePlayer()
{
Instantiate(playerPre);
}
public void CreateEnemy(Vector3 pos,Vector3 eulerAngles)
{
var curEnemy=Instantiate(enemyPre,pos,Quaternion.identity);
curEnemy.transform.eulerAngles = eulerAngles;
curEnemy.GetComponent<Enemy>().Init();
enemy = curEnemy.GetComponent<Enemy>();
}
public GameObject CreateGemKey(Vector3 pos,Vector3 eulerAngles,Transform box)
{
var key= Instantiate(gemKeyPre, pos,Quaternion.identity,box);
key.transform.localEulerAngles = eulerAngles;
key.transform.localPosition = pos;
return key;
}
public void CreateEggBullet(Vector3 pos)
{
var egg= Instantiate(eggBulletPre, pos,Quaternion.identity);
egg.GetComponent<EggBullet>().Init();
}
public void CreateEggEx(Vector3 pos)
{
var eggEx= Instantiate(eggBulletExPre, pos,Quaternion.identity);
PlaySound2DRPC("1.23");
MonoSingleton<CoroutineTaskManager>.Instance.WaitSecondTodo(() =>
{
Destroy(eggEx);
},5f);
}
public void PlayerHit()
{
if(enemy.isDie)
return;
//玩家UI模糊
HUDPanel.Ins.ShowEgg();
Debug.Log("击中玩家");
PlaySound2DRPC("1.50");
}
public void EnemyHit(Vector3 pos)
{
if(enemy.isDie)
return;
enemy.Hit();
PlaySound3DRPC("1.49",enemy.transform,true);
CreateEggEx(pos);
}
public void EnemyTimeHit()
{
enemy.isTimeHit = true;
}
public void StartGameEnd()
{
//任务结束
PlaySound2DRPC("1.24");
playerRightHand.ChangeHand();
taskManager.OverTask();
isStartGame = false;
CreateGameStartDoor(GameLocal.Ins.self.transform.position.ReflectVectorXOZ()+new Vector3(0,0,2));
}
public void StartDance()
{
//开启舞会
Debug.LogError("开启舞会场景");
PlayBGM(1);
wuHui.SetActive(true);
taskManager.bg.SetActive(false);
MonoSingleton<CoroutineTaskManager>.Instance.WaitSecondTodo(() =>
{
WinPanel.Show();
},10f);
MonoSingleton<CoroutineTaskManager>.Instance.WaitSecondTodo(() =>
{
wuHui.SetActive(false);
}, 15f);
}
private void Update()
{
if (Input.GetKeyDown(KeyCode.Q))
{
CreateEnemy(new Vector3(0,1,5), new Vector3(0,180,0));
enemy.SetState(3);
taskManager.curTaskId = 4;
taskManager.StartTask();
}
}
#region
public string GetLessTimeStr()
{
string res = "";
if (gameState == GameState.Playing)
{
res = FormatTime((int)(vistEnd - DateTime.Now.Subtract(new DateTime(1970, 1, 1)).TotalSeconds));
}
return res;
}
public int GetLessTimeSeconds()
{
return (int)(vistEnd - DateTime.Now.Subtract(new DateTime(1970, 1, 1)).TotalSeconds);
}
// 时分秒
public string FormatTime(int totalSeconds)
{
int hours = totalSeconds / 3600;
// string hh = hours < 10 ? "0" + hours : hours.ToString();
int minutes = (totalSeconds - hours * 3600) / 60;
string mm = minutes < 10f ? "0" + minutes : minutes.ToString();
int seconds = totalSeconds - hours * 3600 - minutes * 60;
string ss = seconds < 10 ? "0" + seconds : seconds.ToString();
return string.Format("{0}:{1}", mm, ss);
}
#endregion
}