using System; using System.Collections.Generic; using BestHTTP; using Common; using DarkTonic.MasterAudio; using Unity.XR.PXR; using UnityEngine; using Random = UnityEngine.Random; public enum GameKey { DinosaurPark2=0,//重返侏罗纪 SpongeBob=1,//深海冒险 XMen=2,//银河守护者 KOF=3,//幻影交锋 Valheim=4,//小小幻宠 FutureMen=5,//未来战警 AliceBall=6,//爱丽丝的舞会 Zombie=7,//僵尸来了 DefendNJ=8,//保卫金陵 Loong=9, //巨龙猎人 MRCS=10,//火力对决 SXDMystery=11,//三星堆之谜 } public enum Place { Company1Floor = 0, Company1FloorShiwai = -999, LiaoningAnShan = 1, Liaoning_Anshan_Lishan_Dayuecheng = -1, HangZhouLongHuTianJie = 2, Nanjing_Yvhua_Wanxiang = 3, Nanjing_Xianlin_WanDaMao = 4, Yangzhou_Hanjiang_TansuoZhongxin = 5, Yangzhou_Hanjiang_TansuoZhongxin_wai = -5, Zhejiang_Jinhua_KeJiGuan = 6, GuangZhou_PanYu_ZhanTing = 7, Anhui_Wuhu_Guanwei = 8, Shandong_Jining_Shangchang = 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, Hebei_Hengshui_Taocheng_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, Shandong_Weifang_Linqu_WandaGuangchang = 51, Guangdong_Foushan_Haiyangguang = 52, Jilin_Changchun_Chaoyang_OuyaMaichang=53, Shandong_Weifang_Linqu_WandaGuangchang_Shinei=54, Liaoning_Panjin_Shuangtaizi_Shuangtaicheng = 55, Liaoning_Dalian_Pulandian_WandaGuangchang = 56, Jiangxi_Ganzhou_Longnan_WandaGuangchang=57, Jiangxi_Ganzhou_Longnan_WandaGuangchang_Shinei = 58, Jiangxi_Ganzhou_Zhanggong_GanzhouShucheng=59, Henan_Shangqiu_Juyang_WuyueGuangchang = 60, Guangdong_Meizhou_Meixian_TianhongShangchang = 61, Beijing_Tongzhou_Luyijie_XiangrikuiGuangchang = 62, Ningxia_Yinchuang_Shizuishan_WandaGuangchang = 63, Jilin_Jilin_Chuangying_Zhongdongxinshenghuo = 64, Jiangxi_Nanchang_Xinjian_XvhuiGuangchang = 65, Shandong_Weihai_Jingqu_W37 = 66, } public class GameLocal : MonoBehaviour { public static GameLocal Ins { get; private set; } public Camera MRCamera; public Transform Aim; public Transform MRLeftControl; public Transform MRRightControl; public State BGMState; // 验证信息 private AuthInfo authInfo = new AuthInfo(); [NonSerialized] public Player self; [Header("版本号")] public string Version = "1.0.1"; [Header("场地")] public Place place = Place.Company1Floor; // 总游玩时长 public int vistAllTime = (int)(60 * 10f); public float curGameTime = 0; public GameKey gameId; public GameObject Scene; public GameObject Settle; public Transform redDoorPos; public Transform blueDoorPos; public Transform startGameItemPos; public Transform[] startPlanePos; public Transform roundPlaceDoorPos; public GameObject[] gamePlace; [NonSerialized] public GameObject HitUI; [NonSerialized] public GameObject DieUI; [NonSerialized] public GameObject RoundUI; [NonSerialized] public GameObject DiKillUIeUI; public int addPlayerIndex; void Start() { Ins = this; Application.targetFrameRate = 60; AuthorPanel.Show(); BGMState.StateChange(0); gameId = GameKey.MRCS; ShowPlace(1); #if !UNITY_EDITOR && UNITY_ANDROID && PICO //PXRManager.enabled = true; PXR_MixedReality.EnableVideoSeeThrough(true); #elif !UNITY_EDITOR && UNITY_ANDROID && VIVE //PXRManager.enabled = false; Interop.WVR_ShowPassthroughUnderlay(true); #endif } public int GetNowTime() { return Mathf.RoundToInt(GameLocal.Ins.curGameTime); } /// /// 鉴权 /// public void RequestAuth(Action cb = null) { string url = "http://www.pineappletech.cn/startcount"; HTTPRequest request = new HTTPRequest(new Uri(url), HTTPMethods.Post, (req, response) => { if (response != null) { Debug.Log("收到数据 ->" + response.DataAsText); } cb?.Invoke(req, response); }); //request.AddHeader("Authorization", Author); authInfo.deviceSn = GetSn(); authInfo.startAt = ConvertTimestampToDateTime(GetTimestamp()) + ""; //authInfo.paid = 2; //authInfo.uuid = GetSn() + GetTimestamp(); authInfo.shop = 0; #if !UNITY_EDITOR && UNITY_ANDROID && PICO authInfo.shop = (int)place; if (place == Place.Liaoning_Anshan_Lishan_Dayuecheng) authInfo.shop = 1; if (place == Place.Yangzhou_Hanjiang_TansuoZhongxin_wai) authInfo.shop = 5; if (place == Place.Shandong_Jining_Shangchang_nei) authInfo.shop = 9; if (place == Place.Shandong_Jinan_Huaiyin_ShengfutongShangmao_wai) authInfo.shop = 15; if (place == Place.Nanjing_Qixia_Yaohuamen_Jindiguangchang_nei) authInfo.shop = 17; if (place == Place.Anhui_Suzhou_Yueshan_Guchengshangyejie_2) authInfo.shop = 18; if (place == Place.Wulanhaote_Wanda_Shangchang) authInfo.shop = 21; if (place == Place.Hunan_Hengyang_Zhuhui_Dongzhoudao_nei) authInfo.shop = 24; if (place == Place.Yunnan_Lincang_Linxiang_Hengji_Dixia) authInfo.shop = 25; if(place == Place. Gansu_Jinchang_Jinchuan_Shijiguangchang_Shiwai ) authInfo.shop = 28; if(place == Place. Guangdong_Guangzhou_Yanghaiyan_Lihu ) authInfo.shop = 31; if(place == Place.Zhejiang_Hangzhou_Linping_Yintaicheng_Shinei) authInfo.shop = 32; if(place == Place.Henan_Xinxiang_Wandaguangchang_Shinei) authInfo.shop = 33; if(place == Place.Jiangsu_Xvzhou_Guolou_Oulebao_2) authInfo.shop = 36; if(place == Place.Jiangsu_Xvzhou_Suning_Guangchang_1) authInfo.shop = 37; if(place == Place.Chongqing_Yuzhong_Hongyadong_Xiakexing_shiwan) authInfo.shop = 42; if(place == Place.Hebei_Hengshui_Taocheng_WandaGuangchang) authInfo.shop = 44; if(place == Place.Company1FloorShiwai) authInfo.shop = 0; #endif authInfo.gameId = (int)gameId; string authJson = JsonUtility.ToJson(authInfo); Debug.Log("发送数据 -> " + authJson); request.RawData = System.Text.Encoding.UTF8.GetBytes(authJson); request.AddHeader("Content-Type", "application/json"); request.Send(); } public long GetTimestamp() { return (long)DateTime.Now.Subtract(new DateTime(1970, 1, 1)).TotalSeconds; } public string ConvertTimestampToDateTime(long timestamp) { // Unix时间戳是从1970年1月1日00:00:00开始的秒数或毫秒数 // 这里以秒为单位,如果时间戳是毫秒则除以1000 DateTime dateTime = DateTimeOffset.FromUnixTimeSeconds(timestamp).DateTime; return dateTime.ToString("yyyy-MM-dd HH:mm:ss"); } /// /// 获取sn号 /// public string GetSn() { string res = "UnityEditor"; // string res = "PA8E10MGH7210380D"; #if !UNITY_EDITOR && UNITY_ANDROID && PICO res = PXR_Enterprise.StateGetDeviceInfo(SystemInfoEnum.EQUIPMENT_SN); #endif return res; } public void ShowPlace(int id) { for (int i = 0; i < gamePlace.Length; i++) { gamePlace[i].gameObject.SetActive(i == id-1); } } public GameObject CurPlace(int id) { return gamePlace[id-1]; } private class FlyItem { public Transform obj; public Vector3 startPos; public Quaternion startRot; public float startScale; public float duration; public float t; public Vector3 targetPos; public Vector3 randomRot; public float delay; } private readonly List items = new List(); public void AddObject(Transform obj, Vector3 targetPos) { FlyItem item = new FlyItem(); item.obj = obj; item.targetPos = targetPos; item.startPos = obj.position; item.startRot = obj.rotation; item.startScale = obj.localScale.x; item.duration = Random.Range(3f, 8f); item.t = 0f; item.randomRot = new Vector3( Random.Range(-300, 300), Random.Range(-300, 300), Random.Range(-300, 300) ); item.delay = Random.Range(0f, 1f); items.Add(item); } public void ClearObject() { items.Clear(); } private void Update() { if (items.Count == 0) return; float dt = Time.deltaTime; // 遍历全部吸入物体 for (int i = items.Count - 1; i >= 0; i--) { FlyItem item = items[i]; if(item.obj==null) continue; // 延迟 if (item.delay > 0) { item.delay -= dt; continue; } item.t += dt; float progress = item.t / item.duration; if (progress > 1f) progress = 1f; float curve = Mathf.Pow(progress, 0.5f); // 位置 item.obj.position = Vector3.Lerp(item.startPos, item.targetPos, curve); // 旋转 item.obj.Rotate(item.randomRot * dt); // 缩放 float scale = Mathf.Lerp(item.startScale, 0f, progress); item.obj.localScale = Vector3.one * scale; // 完成 if (progress >= 1f) { Destroy(item.obj.gameObject); items.RemoveAt(i); } } } }