bad-piggies-0.1.3-porting/Assets/Scripts/Assembly-CSharp/LevelClickDetector.cs
2024-02-24 22:40:44 -05:00

92 lines
2.6 KiB
C#

using System.Collections;
using UnityEngine;
public class LevelClickDetector : MonoBehaviour
{
private const float PigDistanceLimit = 0.1f;
private const float PigMovementSpeed = 5f;
[SerializeField]
private LevelButtonConnection[] connections;
[SerializeField]
private LineRenderer connectionLinePrefab;
private Camera guiCamera;
private GameObject pigIcon;
private LevelButton targetButton;
private bool pigIsMoving;
private void Start()
{
guiCamera = GameObject.Find("MainCamera").GetComponent<Camera>();
Assert.IsValid(guiCamera, "guiCamera");
pigIcon = GameObject.Find("CharacterPigOnMap");
Assert.IsValid(pigIcon, "pigIcon");
DrawConnections();
}
private void DrawConnections()
{
Vector3 vector = new Vector3(0f, 0f, 1f);
LevelButtonConnection[] array = connections;
foreach (LevelButtonConnection levelButtonConnection in array)
{
LineRenderer lineRenderer = (LineRenderer)Object.Instantiate(connectionLinePrefab);
lineRenderer.SetPosition(0, levelButtonConnection.levelButton1.transform.position + vector);
lineRenderer.SetPosition(1, levelButtonConnection.levelButton2.transform.position + vector);
}
}
private void Update()
{
if (pigIsMoving || !Input.GetMouseButtonDown(0))
{
return;
}
Ray ray = guiCamera.ScreenPointToRay(Input.mousePosition);
Debug.DrawRay(ray.origin, ray.direction * 100f, Color.yellow, 2f);
RaycastHit hitInfo;
if (!Physics.Raycast(ray, out hitInfo))
{
return;
}
targetButton = hitInfo.collider.gameObject.GetComponent<LevelButton>();
if ((bool)targetButton)
{
string text = targetButton.OnLevelButtonClicked();
Debug.Log("Level button clicked " + text + " distance: " + Vector3.Distance(targetButton.transform.position, pigIcon.transform.position));
if (Vector3.Distance(targetButton.transform.position, pigIcon.transform.position) <= 0.1f)
{
Debug.Log("Pig is in target, start level: " + text);
}
else
{
StartCoroutine(MovePig(text));
}
}
}
private IEnumerator MovePig(string levelToStart)
{
pigIsMoving = true;
while (Vector3.Distance(targetButton.transform.position, pigIcon.transform.position) > 0.1f)
{
yield return new WaitForEndOfFrame();
Vector3 direction = targetButton.transform.position - pigIcon.transform.position;
direction.Normalize();
pigIcon.transform.position += direction * Time.deltaTime * 5f;
pigIcon.transform.position = new Vector3(pigIcon.transform.position.x, pigIcon.transform.position.y, -0.1f);
}
yield return new WaitForSeconds(0.1f);
pigIsMoving = false;
if (levelToStart != string.Empty)
{
Loader.Instance.LoadLevel(levelToStart, true);
}
}
}