LMQT/Assets/Scripts/mapDrag.cs

314 lines
9.5 KiB
C#
Raw Permalink 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.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
using UnityEngine.EventSystems;
using System;
using Cinemachine;
using System.IO;
using DG.Tweening;
using UnityEngine.Networking;
public class mapDrag : MonoBehaviour, IBeginDragHandler, IEndDragHandler, IDragHandler
{
//public Image BGmap;
public RectTransform BGmap;
Vector3 offset;
Vector3 originPos;
Vector3 outPos;
public Slider sliderScale;
public GameObject S1;
public GameObject S2;
public GameObject S3;
public GameObject S4;
public GameObject M1;
public GameObject M2;
public GameObject M3;
public GameObject M4;
public GameObject Q1;
public GameObject Q2;
public GameObject Q3;
public GameObject Q4;
private Vector2? initialTouch1Pos = null;
private Vector2? initialTouch2Pos = null;
private float initialSliderValue;
public float minScale;
public float maxScale;
public Animator XX;
public string buildingName;
public TMPro.TMP_Text zi;
public Image noMN;
public Image gu;
public Image jin;
public Image jin2;
public Image wz;
public AudioSource AS;
// Start is called before the first frame update
void Start()
{
sliderScale.onValueChanged.AddListener(OnScaleChanged);
}
void Update()
{
if (Input.touchCount == 2)
{
HandlePinchZoom();
}
}
private void HandlePinchZoom()
{
Touch touch0 = Input.GetTouch(0);
Touch touch1 = Input.GetTouch(1);
// Calculate the distance between the two touches
float currentDistance = (touch0.position - touch1.position).magnitude;
if (initialTouch1Pos == null || initialTouch2Pos == null)
{
// Set initial positions
initialTouch1Pos = touch0.position;
initialTouch2Pos = touch1.position;
initialSliderValue = sliderScale.value;
}
else
{
// Calculate the initial distance
float initialDistance = (initialTouch1Pos.Value - initialTouch2Pos.Value).magnitude;
// Calculate the distance change
float distanceChange = currentDistance - initialDistance;
// Map the distance change to Slider value
float valueChange = distanceChange * 0.01f; // Adjust sensitivity if needed
sliderScale.value = Mathf.Clamp(initialSliderValue + valueChange, minScale, maxScale);
}
}
public void OnPointerUp()
{
// Reset initial touch positions when touches are released
initialTouch1Pos = null;
initialTouch2Pos = null;
}
private void OnScaleChanged(float arg0)
{
BGmap.localScale = Vector3.one * arg0;
}
public void OnDrag(PointerEventData eventData)
{
BGmap.anchoredPosition = Input.mousePosition + offset;
}
public void OnBeginDrag(PointerEventData eventData)
{
if (RectTransformUtility.ScreenPointToWorldPointInRectangle(BGmap,Input.mousePosition,eventData.enterEventCamera,out outPos))
{
originPos = BGmap.anchoredPosition;
//BGmap.SetAsLastSibling();
offset = (Vector3)BGmap.anchoredPosition - outPos;
}
}
public void OnEndDrag(PointerEventData eventData)
{
}
public void DisS()
{
S1.SetActive(true);
S2.SetActive(true);
S3.SetActive(true);
S4.SetActive(true);
}
public void DisM()
{
M1.SetActive(true);
M2.SetActive(true);
M3.SetActive(true);
M4.SetActive(true);
}
public void DisQ()
{
Q1.SetActive(true);
Q2.SetActive(true);
Q3.SetActive(true);
Q4.SetActive(true);
}
public void UNDisAll()
{
S1.SetActive(false); S2.SetActive(false); S3.SetActive(false); S4.SetActive(false);
Q1.SetActive(false); Q2.SetActive(false); Q3.SetActive(false); Q4.SetActive(false);
M1.SetActive(false); M2.SetActive(false); M3.SetActive(false); M4.SetActive(false);
}
public void getName(string name)//<2F><><EFBFBD><EFBFBD>Ҫ<EFBFBD><D2AA>ת<EFBFBD>Ľ<EFBFBD><C4BD><EFBFBD><EFBFBD>İ<EFBFBD>ť<EFBFBD>ϣ<EFBFBD><CFA3><EFBFBD>name<6D><65><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ĵ<EFBFBD><C4B4>ţ<EFBFBD><C5A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>¸<EFBFBD><C2B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʵ<EFBFBD><CAB5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ӧ<EFBFBD><D3A6><EFBFBD><EFBFBD>
{
buildingName = name;
}
public void disXX()
{
if (!File.Exists(Application.streamingAssetsPath + "/XinXi.txt"))
{
Debug.LogError("<22>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>!");
return;
}
string[] lines = File.ReadAllLines(Application.streamingAssetsPath + "/XinXi.txt");
for (int i = 0; i < lines.Length; i++)
{
string[] data = lines[i].Split('@');
if (data.Length >= 2)
{
string itemName = data[0];
string description = data[1];
}
if (data[0] == buildingName)
{
zi.text = data[1];
zi.text = zi.text.Replace("\\n", "\n");
}
}
string g = "noModels/gu/";
string j = "noModels/jin/";
string w = "noModels/weizhi/";
string n = "noModels/name/";
//Sprite spriteName = Resources.Load<Sprite>("noModels/gu/" + buildingName);
Sprite spriteName = loadSpriteFromSA(buildingName, g);
gu.sprite = spriteName;
imageHD(spriteName, gu);
//gu.preserveAspect = true;
//Sprite jin1 = Resources.Load<Sprite>("noModels/jin/" + buildingName) as Sprite;
Sprite jin1 = loadSpriteFromSA(buildingName, j);
jin.sprite = jin1;
jin2.sprite = jin1;
//imageHD(jin1, jin);
imageHD(jin1, jin2);
//Sprite weizhi = Resources.Load<Sprite>("noModels/weizhi/" + buildingName);
Sprite weizhi = loadSpriteFromSA(buildingName, w);
wz.sprite = weizhi;
imageHD(weizhi, wz);
//Sprite Name = Resources.Load<Sprite>("noModels/name/" + buildingName);
Sprite Name = loadSpriteFromSA(buildingName, n);
noMN.sprite = Name;
noMN.preserveAspect = true;
Debug.Log("noModels/name/" + buildingName);
// Debug.Log(jin1+"-----"+Name+"-----"+noMN.sprite.name);
jin.DOFade(0, 2).From();
jin.transform.DOLocalMoveY((gu.rectTransform.rect.height) + 120, 2).From();
zi.DOFade(0, 2).From();
//AS.clip = Resources.Load<AudioClip>("sound/" + buildingName);
loadSound();
}
void imageHD(Sprite sprite,Image image)
{
float targetWidth = 920;
float widthRatio = sprite.rect.width / sprite.rect.height;
float targetHeight = targetWidth / widthRatio;
image.sprite = sprite;
image.rectTransform.sizeDelta = new Vector2(targetWidth, targetHeight);
}
public void XXback()
{
XX.GetComponent<Animator>().Play("back");
//Content.transform.DORestart();
float delayTime = 1f; // <20><>ʱ2<CAB1><32><EFBFBD><EFBFBD>ִ<EFBFBD>лص<D0BB><D8B5><EFBFBD><EFBFBD><EFBFBD>
DOTween.To(() => 0, x => { }, 0, delayTime)
.OnComplete(() =>
{
zi.text = null;
});
//gu.sprite = null;
//jin.sprite = null;
//wz.sprite = null;
//zi.text = null;
}
public Sprite loadSpriteFromSA(string buildingName, string ML)
{
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD>·<EFBFBD><C2B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD>StreamingAssets<74>µľ<C2B5><C4BE><EFBFBD><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD>·<EFBFBD><C2B7>ƴ<EFBFBD><C6B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
string filePath = Path.Combine(Application.streamingAssetsPath, ML + buildingName + ".png");
// <20><>ȡ<EFBFBD>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD>ֽ<EFBFBD><D6BD><EFBFBD><EFBFBD><EFBFBD>
byte[] fileData = File.ReadAllBytes(filePath);
// <20><><EFBFBD><EFBFBD>һ<EFBFBD><D2BB>Texture2D<32><44><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ں<EFBFBD><DABA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͼƬ<CDBC><C6AC><EFBFBD><EFBFBD>
Texture2D texture = new Texture2D(2, 2);
// <20><><EFBFBD>ֽ<EFBFBD><D6BD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>м<EFBFBD><D0BC><EFBFBD>ͼƬ<CDBC><C6AC>Ϣ<EFBFBD><CFA2>Texture2D<32><44><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>سɹ<D8B3>
if (texture.LoadImage(fileData))
{
// <20><><EFBFBD>ݼ<EFBFBD><DDBC>غõ<D8BA>Texture2D<32><44><EFBFBD><EFBFBD>Sprite<74><65><EFBFBD><EFBFBD>
return Sprite.Create(texture, new Rect(0, 0, texture.width, texture.height), new Vector2(0.5f, 0.5f));
}
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʧ<EFBFBD>ܣ<EFBFBD><DCA3><EFBFBD><EFBFBD><EFBFBD>null
return null;
}
public void LoadSoundFromSA(string buildingName, string ML, Action<AudioClip> onAudioLoaded)
{
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD>·<EFBFBD><C2B7>
string filePath = Path.Combine(Application.streamingAssetsPath, ML, buildingName + ".wav");
// <20>ж<EFBFBD><D0B6>ļ<EFBFBD><C4BC>Ƿ<EFBFBD><C7B7><EFBFBD><EFBFBD><EFBFBD>
if (!File.Exists(filePath))
{
Debug.LogError($"<22><>Ƶ<EFBFBD>ļ<EFBFBD> {filePath} <20><><EFBFBD><EFBFBD><EFBFBD>ڣ<EFBFBD>");
onAudioLoaded(null); // <20>ص<EFBFBD><D8B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>null
return;
}
// <20><><EFBFBD><EFBFBD>Э<EFBFBD>̼<EFBFBD><CCBC><EFBFBD><EFBFBD><EFBFBD>Ƶ
StartCoroutine(LoadAudioClipCoroutine(filePath, onAudioLoaded));
}
private IEnumerator LoadAudioClipCoroutine(string filePath, Action<AudioClip> onAudioLoaded)
{
// <20><><EFBFBD><EFBFBD>UnityWebRequest<73><74><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƶ
UnityWebRequest www = UnityWebRequestMultimedia.GetAudioClip("file://" + filePath, AudioType.WAV);
yield return www.SendWebRequest();
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƿ<EFBFBD><C7B7>ɹ<EFBFBD>
if (www.result != UnityWebRequest.Result.Success)
{
Debug.LogError($"<22><>Ƶ<EFBFBD><C6B5><EFBFBD><EFBFBD>ʧ<EFBFBD><CAA7>: {www.error}");
onAudioLoaded(null); // <20>ص<EFBFBD><D8B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>null
}
else
{
// <20><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD>ؼ<EFBFBD><D8BC>ص<EFBFBD><D8B5><EFBFBD>Ƶ
AudioClip audioClip = DownloadHandlerAudioClip.GetContent(www);
onAudioLoaded(audioClip); // <20>ص<EFBFBD><D8B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݼ<EFBFBD><DDBC>ص<EFBFBD><D8B5><EFBFBD>Ƶ
}
}
public void loadSound()
{
// <20><><EFBFBD>ü<EFBFBD><C3BC><EFBFBD><EFBFBD><EFBFBD>Ƶ<EFBFBD>ķ<EFBFBD><C4B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݻص<DDBB><D8B5><EFBFBD><EFBFBD><EFBFBD>
this.LoadSoundFromSA(buildingName, "sound/", (audioClip) =>
{
if (audioClip != null)
{
Debug.Log("<22><>Ƶ<EFBFBD><C6B5><EFBFBD>سɹ<D8B3><C9B9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƶ<EFBFBD><C6B5>");
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFB2A5><EFBFBD><EFBFBD>Ƶ
AS.clip = audioClip;
}
else
{
Debug.LogError("<22><>Ƶ<EFBFBD><C6B5><EFBFBD><EFBFBD>ʧ<EFBFBD>ܣ<EFBFBD>");
}
});
}
}