Cute_demon_attacks/meng_yao/Assets/script/scene_jinshakuang/roomcontroller.cs
2024-11-16 01:53:21 +08:00

291 lines
7.7 KiB
C#

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<VoucherItem> listItem = new List<VoucherItem>();
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<Path> 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<string> ids = new List<string>();
public int number;
public GameObject musk;
// Start is called before the first frame update
private void Awake()
{
listItem = new List<VoucherItem>();
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<ids>(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<ids>(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<ids>(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<SpriteAniationpro>();
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<SpriteAniationpro>();
MoveToFishingPos();
}
void MoveToFishingPos()
{
// 随机选择一条路径
Path selectedPath = paths[Random.Range(0, paths.Count)];
// 移动到挖矿点
StartCoroutine(MoveToFishingPoint(selectedPath.pathPoints));
}
IEnumerator MoveToFishingPoint(List<Transform> 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<ids>(rect);
if (res.ErrorCode == 0)
{
Promptmgr.Instance.PromptBubble("使用成功", Color.black, Color.blue);
}
else
{
Promptmgr.Instance.PromptBubble(res.ErrorMessage, Color.black, Color.red);
}
}
}