using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.UI; using DG.Tweening; using TMPro; using System.Threading.Tasks; public class roomcontroller : MonoBehaviour { [Range(0f, 1f)] public float probabilityOfStand = 0.2f;//站立状态 [Header("精灵走路的概率")] [Range(0f, 1f)] public float probabilityOfWalk = 0.3f;//走路状态 [Header("精灵挖矿的概率")] [Range(0f, 1f)] public float probabilityOfDig = 0.5f;//挖矿状态 [Header("精灵的预制体")] public GameObject fishManPrefab; [Header("购买的精灵数据")] public List listItem = new List(); private GameObject fishMan;//生成的渔船 private SpriteAniationpro fishManShipContorl;//渔船的控制器 [Header("精灵生成点")] public Transform startPos; [Header("精灵终点")] public Transform endPos; [Header("房间类型编号")] public int type; public float ActivateValue = 0; public int Num = 0; public int Type = 0; [Header("精灵路径点集合")] public List paths; //航行时间 [Header("走路时间")] public float pathsNeedTimer = 30f; //捕鱼时间 [Header("挖矿时间")] public float fishingNeedTimer = 30f; //休息时间 [Header("休息时间")] public float restTimer = 5f; [Header("显示精灵数量")] public Text shipNumberTextPro; [Header("点击的特效")] public GameObject effectPrefab;//特效 [Header("点击按钮出现的动画")] public Transform OnBtnAni; public float FishPrice; public GameObject map; public static bool canClick = true; public List ids = new List(); public int number; public GameObject musk; // Start is called before the first frame update private void Awake() { listItem = new List(); UpdateShipNumberTextPro(listItem.Count.ToString()); } private void Start() { FishPrice = 10; } async void addman(int type, int number) { if (type == this.type) { GenerateForFisherElf generateForFisherElf = new GenerateForFisherElf(); // 购买渔夫 generateForFisherElf.Num = Num; generateForFisherElf.Count = 1; string userponse = await web.SendRequest(web.URL + "/Voucher/GenerateForFisherElf", "POST", JsonUtility.ToJson(generateForFisherElf)); ids itemList = JsonUtility.FromJson(userponse); Debug.Log(itemList.Ids[0]); if (itemList.ErrorCode == 0) // 如果购买成功 { Promptmgr.Instance.PromptBubble("购买成功", Color.black, Color.blue); /* foreach (string item in itemList.Ids) { Use use = new Use(); // 使用渔夫 use.Id = item; string rect = await web.SendRequest(web.URL + "/Voucher/Use", "POST", JsonUtility.ToJson(use)); Res res = JsonUtility.FromJson(userponse); if (res.ErrorCode == 0) { Promptmgr.Instance.PromptBubble("购买成功", Color.black, Color.blue); //增加船只数量 //ChangeShipNumber(1); } else { Promptmgr.Instance.PromptBubble(res.ErrorMessage, Color.black, Color.red); } }*/ } else// 如果购买失败 { Res res = JsonUtility.FromJson(userponse); Promptmgr.Instance.PromptBubble(res.ErrorMessage, Color.black, Color.red); } } } public void OnClick() { if (!canClick) { return; } if (fishMan == null) { Promptmgr.Instance.PromptBubble("还没有买精灵!", Color.black, Color.red); return; } add_fish(); } public void add_fish(string timerStr = null)//生成船只 { if (timerStr != null) { fishMan = GameObject.Instantiate(fishManPrefab, this.transform); fishMan.transform.position = endPos.position; fishManShipContorl = fishMan.GetComponent(); Debug.Log("更新船时间"); //dig(); return; } musk.gameObject.SetActive(false); number++; UpdateShipNumberTextPro(number+"/10"); fishMan = GameObject.Instantiate(fishManPrefab, this.transform); fishMan.transform.position = startPos.position; fishManShipContorl = fishMan.GetComponent(); MoveToFishingPos(); } void MoveToFishingPos() { // 随机选择一条路径 Path selectedPath = paths[Random.Range(0, paths.Count)]; // 移动到挖矿点 StartCoroutine(MoveToFishingPoint(selectedPath.pathPoints)); } IEnumerator MoveToFishingPoint(List path) { // 将路径点转换为 Vector3 数组 Vector3[] pathPoints = new Vector3[path.Count]; for (int i = 0; i < path.Count; i++) { pathPoints[i] = path[i].position; } //改变朝向 ChangeShipLook(pathPoints[0], pathPoints[path.Count - 1]); //动作变化,移动 fishManShipContorl.SetAni(1); // 使用 DOPath 沿着路径移动到捕鱼点,并禁用旋转变化 yield return fishMan.transform.DOPath(pathPoints, pathsNeedTimer, PathType.CatmullRom) .SetOptions(false) // 禁用旋转 .SetEase(Ease.InOutSine) .WaitForCompletion(); //挖矿 dig(); } void dig() { //动作变化,捕鱼 fishManShipContorl.SetAni(2); StartCoroutine(movetoStatrPos()); } IEnumerator movetoStatrPos() { yield return new WaitForSeconds(3); Debug.Log("朝向左边"); fishMan.transform.rotation = Quaternion.Euler(0, 180, 0); fishManShipContorl.SetAni(1); Vector3[] ve = { endPos.position, startPos.position }; // 使用 DOPath 沿着路径移动到捕鱼点,并禁用旋转变化 yield return fishMan.transform.DOPath(ve, pathsNeedTimer, PathType.CatmullRom) .SetOptions(false) // 禁用旋转 .SetEase(Ease.InOutSine) .WaitForCompletion(); fishManShipContorl.SetAni(0); yield return new WaitForSeconds(3); MoveToFishingPos(); } //根据前后位置改变朝向 void ChangeShipLook(Vector3 _startpos, Vector3 _endpos) { if (_startpos.x > _endpos.x) { Debug.Log("朝向左边"); fishMan.transform.rotation = Quaternion.Euler(0,180,0); } else { Debug.Log("朝向右边"); fishMan.transform.rotation = Quaternion.Euler(0, 0, 0); } } //更新精灵数量显示 public void UpdateShipNumberTextPro(string str) { if (shipNumberTextPro.text == str) { return; } shipNumberTextPro.text = str; } //使用代金卷 async void UseShip() { Use use = new Use(); // 使用渔夫 use.Id = listItem[0].Id; string rect = await web.SendRequest(web.URL + "/Voucher/Use", "POST", JsonUtility.ToJson(use)); Res res = JsonUtility.FromJson(rect); if (res.ErrorCode == 0) { Promptmgr.Instance.PromptBubble("使用成功", Color.black, Color.blue); } else { Promptmgr.Instance.PromptBubble(res.ErrorMessage, Color.black, Color.red); } } }