CutePet/Assets/Scripts/CreateLev/CreateLevMain.cs

246 lines
7.3 KiB
C#
Raw Permalink Normal View History

2024-10-25 11:10:04 +08:00
using System.Collections;
using System.Collections.Generic;
using LitJson;
using UnityEngine;
using UnityEngine.Networking;
using UnityEngine.UI;
public class CreateLevMain : MonoBehaviour
{
public Transform gamePos;
// <20><><EFBFBD><EFBFBD><EFBFBD>ȳ<EFBFBD><C8B3><EFBFBD>Ԥ<EFBFBD><D4A4><EFBFBD><EFBFBD>
public GameObject[] petPrefabs;
// <20><><EFBFBD><EFBFBD><EFBFBD>ȳ<EFBFBD><C8B3>İ<EFBFBD>ť
public Button[] petBtns;
// <20><>ǰѡ<C7B0><D1A1><EFBFBD><EFBFBD><EFBFBD>ȳ<EFBFBD>Ԥ<EFBFBD><D4A4><EFBFBD><EFBFBD>
private GameObject nowChoosePet;
// <20><>ǰ<EFBFBD><C7B0><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɵ<EFBFBD><C9B5>ȳ<EFBFBD>ʵ<EFBFBD><CAB5>
private GameObject createPetGameObj;
//<2F>ϴ<EFBFBD><CFB4>ؿ<EFBFBD><D8BF><EFBFBD>ť
public Button btnUpload;
// <20><>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֻ<EFBFBD><D6BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
public InputField inputNum;
public Text txtLev;
public TipPanel tipPanel;
// <20><EFBFBD><E8B6A8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ
private int maxValue = 99999;
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ
private PetInfo pet;
private LevData levData;
private float x;
private float y;
private string levDataUploadUrl= "http://192.168.2.24:8080/uploadLevData"; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>URL
// Start is called before the first frame update
void Start()
{
tipPanel.gameObject.SetActive(false);
// <20><><EFBFBD><EFBFBD>ÿ<EFBFBD><C3BF><EFBFBD><EFBFBD>ť<EFBFBD>ĵ<EFBFBD><C4B5><EFBFBD><EFBFBD>¼<EFBFBD>
for (int i = 0; i < petBtns.Length; i++)
{
int index = i; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
petBtns[i].GetComponent<Button>().onClick.AddListener(() => OnPetButtonClicked(index));
}
btnUpload.onClick.AddListener(() =>
{
if (txtLev.text!="")
{
OnButtonClick();
}
});
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݱ仯
inputNum.onValueChanged.AddListener(OnNumberInputChanged);
}
// Update is called once per frame
void Update()
{
// ȷ<><C8B7>ѡ<EFBFBD><D1A1><EFBFBD><EFBFBD><EFBFBD>ȳ<EFBFBD>Ԥ<EFBFBD><D4A4><EFBFBD><EFBFBD>
if (nowChoosePet != null)
{
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƿ<EFBFBD><C7B7><EFBFBD><EFBFBD><EFBFBD>
if (Input.GetMouseButtonDown(0))
{
// <20><><EFBFBD><EFBFBD>Ļ<EFBFBD><C4BB><EFBFBD><EFBFBD>ת<EFBFBD><D7AA>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
Vector3 mousePosition = Input.mousePosition;
mousePosition.z = Camera.main.nearClipPlane; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD><EFBFBD>Ľ<EFBFBD><C4BD>ü<EFBFBD><C3BC><EFBFBD>
Vector3 worldPosition = Camera.main.ScreenToWorldPoint(mousePosition);
// <20><><EFBFBD><EFBFBD><EFBFBD>ȳ<EFBFBD>
if (createPetGameObj == null)
{
createPetGameObj = Instantiate(nowChoosePet, worldPosition, Quaternion.identity);
createPetGameObj.name = nowChoosePet.name;
createPetGameObj.AddComponent<PetDelet>();
createPetGameObj.transform.SetParent(gamePos, false);
nowChoosePet = null;
}
else
{
createPetGameObj = Instantiate(nowChoosePet, worldPosition, Quaternion.identity);
createPetGameObj.name = nowChoosePet.name;
createPetGameObj.AddComponent<PetDelet>();
createPetGameObj.transform.SetParent(gamePos,false);
nowChoosePet = null;
}
}
}
}
// <20><><EFBFBD>ȳ谴ť<E8B0B4><C5A5><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ
void OnPetButtonClicked(int index)
{
// ѡ<><D1A1><EFBFBD><EFBFBD>Ӧ<EFBFBD><D3A6><EFBFBD>ȳ<EFBFBD>Ԥ<EFBFBD><D4A4><EFBFBD><EFBFBD>
nowChoosePet = petPrefabs[index];
Debug.Log("Selected Pet: " + nowChoosePet.name);
}
// <20><><EFBFBD><EFBFBD>һ<EFBFBD><D2BB>InputField<6C><64><EFBFBD>ݸı<DDB8>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD>
void OnNumberInputChanged(string str)
{
if (int.TryParse(str, out int number))
{
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ִ<EFBFBD><D6B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ<EFBFBD><D6B5>ǿ<EFBFBD><C7BF><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD>ֵ
if (number > maxValue)
{
number= maxValue;
inputNum.text = maxValue.ToString();
}
// ת<><D7AA>Ϊ<EFBFBD><CEAA><EFBFBD>Ĵ<EFBFBD>д<EFBFBD><D0B4><EFBFBD><EFBFBD>
string chineseNumber = ConvertToChineseNumber(number);
// <20><><EFBFBD>µڶ<C2B5><DAB6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
txtLev.text = $"<22><>{chineseNumber}<7D><>";
}
else
{
txtLev.text = "<22><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ч<EFBFBD><D0A7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>"; // <20><>ֹ<EFBFBD><D6B9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ч<EFBFBD><D0A7><EFBFBD><EFBFBD>
}
}
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ת<EFBFBD><D7AA>Ϊ<EFBFBD><CEAA><EFBFBD>Ĵ<EFBFBD>д
string ConvertToChineseNumber(int number)
{
string[] chineseDigits = { "<22><>", "һ", "<22><>", "<22><>", "<22><>", "<22><>", "<22><>", "<22><>", "<22><>", "<22><>" };
string[] chineseUnits = { "", "ʮ", "<22><>", "ǧ", "<22><>" ,<><CAAE>"};
string result = "";
int unitIndex = 0;
if (number == 0) return chineseDigits[0]; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>0<EFBFBD><30>ֱ<EFBFBD>ӷ<EFBFBD><D3B7>ء<EFBFBD><D8A1>
while (number > 0)
{
int digit = number % 10; // ȡ<><C8A1><EFBFBD><EFBFBD>һλ<D2BB><CEBB><EFBFBD><EFBFBD>
if (digit > 0 || unitIndex == 0) // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ĵ<EFBFBD>д<EFBFBD>еġ<D0B5><C4A1><EFBFBD><EFBFBD>١<EFBFBD><D9A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʮ<EFBFBD><CAAE>
{
result = chineseDigits[digit] + chineseUnits[unitIndex] + result;
}
else if (digit == 0 && result.Length > 0 && result[0] != '<EFBFBD><EFBFBD>') // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
{
result = "<22><>" + result;
}
number /= 10; // ȥ<><C8A5><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һλ<D2BB><CEBB><EFBFBD><EFBFBD>
unitIndex++;
}
// <20><><EFBFBD><EFBFBD><E2B4A6>ʮ<EFBFBD><CAAE><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><><CAAE>"<22><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>"һʮ<D2BB><CAAE>"
if (result.StartsWith("һʮ"))
{
result = result.Substring(1);
}
// <20>Ƴ<EFBFBD><C6B3><EFBFBD><EFBFBD><EFBFBD>ĩβ<C4A9>Ķ<EFBFBD><C4B6><EFBFBD>
if (result.EndsWith("<22><>"))
{
result = result.TrimEnd('<EFBFBD><EFBFBD>');
}
return result;
}
// <20><><EFBFBD><EFBFBD>ť<EFBFBD><C5A5><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD>ô˺<C3B4><CBBA><EFBFBD>
public void OnButtonClick()
{
// <20><>ȡ<EFBFBD><C8A1><EFBFBD>б<EFBFBD>ǩΪ "PetObject" <20><><EFBFBD><EFBFBD>Ϸ<EFBFBD><CFB7><EFBFBD><EFBFBD>
GameObject[] petObjects = GameObject.FindGameObjectsWithTag("PetObject");
levData = new LevData();
levData.petInfoList = new List<PetInfo>();
levData.id = int.Parse(inputNum.text);
levData.name = txtLev.text;
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ҵ<EFBFBD><D2B5>ij<EFBFBD><C4B3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
foreach (GameObject petObject in petObjects)
{
// <20><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>x<EFBFBD><78><79><CEBB>
x = petObject.transform.position.x;
y = petObject.transform.position.y;
// <20><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Դ<EFBFBD><D4B4>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Դ<EFBFBD><D4B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ԥ<EFBFBD><D4A4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
string petName = GetResourcePath(petObject);
// <20><><EFBFBD><EFBFBD>PetData<74><61><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ӵ<EFBFBD><D3B5>б<EFBFBD><D0B1><EFBFBD>
pet = new PetInfo();
pet.post_x = x;
pet.post_y = y;
pet.res = petName;
levData.petInfoList.Add(pet);
}
// <20><><EFBFBD><EFBFBD><EFBFBD>ݷ<EFBFBD><DDB7>͵<EFBFBD><CDB5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
StartCoroutine(SendDataToServer(levData));
}
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݵ<EFBFBD><DDB5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
private IEnumerator SendDataToServer(LevData levData)
{
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>л<EFBFBD>ΪJSON
string jsonData = LitJson.JsonMapper.ToJson(levData);
// <20><><EFBFBD><EFBFBD>POST<53><54><EFBFBD><EFBFBD>
using (UnityWebRequest req = new UnityWebRequest(levDataUploadUrl, "POST"))
{
byte[] bodyRaw = new System.Text.UTF8Encoding().GetBytes(jsonData);
req.uploadHandler = new UploadHandlerRaw(bodyRaw);
req.downloadHandler = new DownloadHandlerBuffer();
req.SetRequestHeader("Content-Type", "application/json");
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>󲢵ȴ<F3B2A2B5><C8B4><EFBFBD>Ӧ
yield return req.SendWebRequest();
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ӧ<EFBFBD><D3A6><EFBFBD><EFBFBD>
if (req.result == UnityWebRequest.Result.Success)
{
string str = req.downloadHandler.text;
IsSuccessMsg msg = JsonMapper.ToObject<IsSuccessMsg>(str);
tipPanel.gameObject.SetActive(true);
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
tipPanel.UpdatePanel(msg);
}
else
{
Debug.LogError("<22><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʧ<EFBFBD><CAA7>: " + req.error);
}
}
}
// <20><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Դ<EFBFBD><D4B4>ַ
private string GetResourcePath(GameObject petObject)
{
// <20><><EFBFBD><EFBFBD><EFBFBD>Ը<EFBFBD><D4B8><EFBFBD><EFBFBD><EFBFBD>Ŀʵ<C4BF><CAB5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Զ<EFBFBD><D4B6><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD>ȡ<EFBFBD><C8A1>Դ<EFBFBD><D4B4>ַ
// <20><><EFBFBD><EFBFBD>ʹ<EFBFBD>ö<EFBFBD><C3B6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD><CEAA>Դ<EFBFBD><D4B4>ַ
return "GameObject/"+petObject.name; // Ԥ<><D4A4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
}
}