Files
valheim/Assets/_Valheim/Scripts/GameInit.cs
2025-12-25 18:17:54 +08:00

225 lines
7.7 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 Common;
using DragonLi.Core;
using Unity.XR.PXR;
using UnityEngine;
using UnityEngine.AI;
using UnityEngine.XR.Interaction.Toolkit;
using Wave.Native;
namespace Valheim
{
public enum Place
{
GongSi1Lou=0,
GongSi1LouShiwai=-999,
LiaoningAnShan =1,
Liaoning_Anshan_Lishan_Dayuecheng = -1,
HangZhouLongHuTianJie=2,
Nanjing_Yuhua_WanXiangTianDi=3,
Nanjing_Xianlin_WanDaMao=4,
Yangzhou_Hanjiang_Tansuozhongxin=5,
Yangzhou_Hanjiang_Tansuozhongxin_wai=-5,
Zhejiang_Jinhua_KeJiGuan=6,
Guangzhou_Panyv_Zhanting=7,
Anhui_Wuhu_Guanwei=8,
Shandong_Jining_Shangchang_wai=9,
Shandong_Jining_Shangchang_nei=-9,
ShanDong_Langfang_QingzhouTaihuacheng=10,
Hubei_Xiangyang_Kejiguan=11,
Zhejiang_Shaoxing_Shengzhou_WuyueGuangchang = 12,
Hunan_Jishou_Qianzhou_Tianhong=13,
Jilin_Tonghua_Liuhe=14,
Shandong_Jinan_Huaiyin_ShengfutongShangmao = 15,
Shandong_Jinan_Huaiyin_ShengfutongShangmao_wai = -15,
Henan_Xinzheng_Shuanghudadao_Longhujinyicheng = 16,
Nanjing_Qixia_Yaohuamen_Jindiguangchang = 17,
Nanjing_Qixia_Yaohuamen_Jindiguangchang_nei = -17,
Anhui_Suzhou_Yueshan_Guchengshangyejie = 18,
Anhui_Suzhou_Yueshan_Guchengshangyejie_2=-18,
Gansu_Longnan_Shicheng_Dongsheng = 19,
Shandong_Heze_Yuncheng_Gefuli = 20,
Wulanhaote_Ouya_Shangchang = 21,
Wulanhaote_Wanda_Shangchang = -21,
Yunnan_Mile_Jinchen_Shidaiguangchang = 22,
Xinjiang_Yili_Yining_Wanrong = 23,
Hunan_Hengyang_Zhuhui_Dongzhoudao = 24,
Hunan_Hengyang_Zhuhui_Dongzhoudao_nei = -24,
Yunnan_Lincang_Linxiang_Hengji = 25,
Yunnan_Lincang_Linxiang_Hengji_Dixia = -25,
Guangxi_Guilin_Gongcheng_Shijixincheng = 26,
Guangdong_Shenzhen_Guangming_Wanda = 27,
Gansu_Jinchang_Jinchuan_Shijiguangchang = 28,
Gansu_Jinchang_Jinchuan_Shijiguangchang_Shiwai=-28,
Jiangsu_Xvzhou_Fengxian_Wuyueguangchang = 29,
Hebei_Tangshan_Qianan_Tianyuangu = 30,
Guangdong_Guangzhou_Yanghaiyan = 31,
Guangdong_Guangzhou_Yanghaiyan_Lihu=-31,
Zhejiang_Hangzhou_Linping_Yintaicheng = 32,
Zhejiang_Hangzhou_Linping_Yintaicheng_Shinei = -32,
Henan_Xinxiang_Wandaguangchang =33,
Henan_Xinxiang_Wandaguangchang_Shinei=-33,
Yangzhou_Hanjiang_TansuoZhongxin_Waidai =34,
Nanjing_Pukou_Longhutianjie=35,
Jiangsu_Xvzhou_Guolou_Oulebao=36,
Jiangsu_Xvzhou_Guolou_Oulebao_2=-36,
Jiangsu_Xvzhou_Suning_Guangchang =37,
Jiangsu_Xvzhou_Suning_Guangchang_1 =-37,
Shanxi_Baoji_Meixian_TianlongShangcheng=38,
Hunan_Changde_Lixian_WandaGuangchang=39,
Jilin_Changchun_Beihu_WuyueGuangchang=41,
Chongqing_Yuzhong_Hongyadong_Xiakexing=42,
Chongqing_Yuzhong_Hongyadong_Xiakexing_shiwan=-42,
Chengdu_Shuangliu_ShengfeiXuexiao =43,
Hebei_Hengshui_Xinji_WandaGuangchang = 44,
Ningxia_Yinchuan_Jinfeng_XinhualianGuangchang = 45,
Hunan_Zhuzhou_Wanda_Shennongcheng_Chaowanshe = 46,
Anhui_Suzhou_Yueshan_Guchengshangyejie_Shinei=47,
Zhejiang_Wenzhou_Cangnan_Yintaicheng = 48,
Shandong_Jining_Shangchang_3 = 49,
Anhui_Manshan_XingyueGuangchang = 50,
}
public enum Bgm
{
Common,
Fight,
Win,
Fail,
Level0,
Level1,
Level2,
}
public class GameInit : MonoBehaviour
{
public static GameInit Ins { get; private set; }
public Camera MRCamera;
public State MRBgm;
public Transform MRLeftControl;
public Transform MRRightControl;
//public PXR_Manager PXRManager;
public Transform FakeTree;
public Transform[] WorkTree;
public LaboratoryManager laboratory;
public GameObject[] worldPres;
public Transform aiDrPos;
public Transform doorPos;
public Transform petPos;
public GameObject[] badges;
public GameObject[] openEffects;
public NavMeshData[] navMeshData;
public GameObject winLightBgm;
public GameObject goEffect;
[NonSerialized]
public Player self;
[Header("场地")]
public Place place = Place.GongSi1Lou;
// 版本号
private NavMeshDataInstance currentInstance;
public void Close()
{
MRLeftControl.GetComponent<XRRayInteractor>().enabled = false;
MRRightControl.GetComponent<XRRayInteractor>().enabled = false;
}
void Start()
{
Ins = this;
Application.targetFrameRate = 60;
//ConPanel.Show();
MRNetworkManager.Ins.CreateAndJoinRoom();
MRNetworkManager.Ins.networkDiscovery.AdvertiseServer();
MRBgm.StateChangeBgm(0);
#if !UNITY_EDITOR && UNITY_ANDROID && PICO
PXR_MixedReality.EnableVideoSeeThrough(true);
#elif !UNITY_EDITOR && UNITY_ANDROID && VIVE
Interop.WVR_ShowPassthroughUnderlay(true);
#endif
}
public void StartGame(Action cb)
{
laboratory.gameObject.SetActive(false);
winLightBgm.SetActive(false);
goEffect.transform.position = MRCamera.transform.position + new Vector3(0, 0, 20);
goEffect.SetActive(true);
foreach (var obj in worldPres)
{
obj.SetActive(false);
}
LoadNavMesh(navMeshData[GameManager.Ins.curMapId]);
MonoSingleton<CoroutineTaskManager>.Instance.WaitSecondTodo(() =>
{
goEffect.SetActive(false);
for (int i = 0; i < worldPres.Length; i++)
{
worldPres[i].gameObject.SetActive(i==GameManager.Ins.curMapId);
}
cb?.Invoke();
},5f);
foreach (var obj in badges)
{
obj.SetActive(false);
}
foreach (var obj in openEffects)
{
obj.SetActive(false);
}
}
public void BadgeShow(int id)
{
badges[id].SetActive(true);
}
public IEnumerator PlayEndAnimation()
{
foreach (var item in badges)
{
item.SetActive(true);
StartCoroutine(GameManager.Ins.PlayAudio("放入徽章音效",item.transform,true));
yield return new WaitForSeconds(1f);
}
openEffects[0].SetActive(true);
yield return new WaitForSeconds(1f);
openEffects[1].SetActive(true);
StartCoroutine(GameManager.Ins.PlayAudio("光波炸开音效", openEffects[1].transform, true));
yield return new WaitForSeconds(2f);
openEffects[2].SetActive(true);
yield return new WaitForSeconds(2f);
//GameManager.Ins.GameOver = true;
StartCoroutine(GameManager.Ins.PlayAudio("NPC25", self.transform, true));
winLightBgm.SetActive(true);
GameManager.Ins.IsWin = true;
GameManager.Ins.GameEnd();
Debug.Log("游戏结束5秒后退出");
CoroutineTaskManager.Instance.WaitSecondTodo(() =>
{
Debug.Log("正在退出游戏...");
Application.Quit();
}, 15f);
}
public void LoadNavMesh(NavMeshData data)
{
// 卸载之前的NavMesh
currentInstance.Remove();
// 加载新的NavMesh
currentInstance = NavMesh.AddNavMeshData(data);
}
}
}