Files
2026-04-30 12:04:09 +03:00

97 lines
2.8 KiB
C#

using System.Collections.Generic;
using UnityEngine;
public class RunlinePlacer : MonoBehaviour
{
[Header("Runway Properties")]
public float radiusX = 105f;
public float radiusZ = 55f;
public Vector3 center;
public List<Transform> linePositions = new List<Transform>();
public GameObject startLinePrefab;
public GameObject endLinePrefab;
public AmyRunScript amy;
private float largeTurnOffset = 50f;
private GameObject activeStartLine;
private GameObject activeEndLine;
private DrawDistanceLine drawDistanceLine;
private void Awake()
{
center = transform.position;
drawDistanceLine = GetComponent<DrawDistanceLine>();
}
[ContextMenu("Respawn lines")]
public void RuntimePlace()
{
drawDistanceLine.ClearArc();
foreach (Transform t in linePositions)
{
foreach (Transform child in t)
{
Destroy(child.gameObject);
}
}
int firstPositionIndex = Random.Range(0, 4);
int secondPositionIndex;
do
{
secondPositionIndex = Random.Range(0, 4);
} while (secondPositionIndex == firstPositionIndex);
PlaceLine(firstPositionIndex, startLinePrefab, true);
PlaceLine(secondPositionIndex, endLinePrefab);
amy.PlaceOnStartAngle();
// Experiment 2
if (Lesson1Controller.Instance.activeExperiment == 2) drawDistanceLine.DrawDistanceArc();
}
private void PlaceLine(int positionIndex, GameObject prefabIfSmall, bool isStart = false)
{
GameObject instantiatedLine = Instantiate(prefabIfSmall);
instantiatedLine.transform.SetParent(linePositions[positionIndex]);
instantiatedLine.transform.localPosition = Vector3.zero;
instantiatedLine.transform.localRotation = Quaternion.identity;
if (positionIndex > 1)
{
Vector3 pos = instantiatedLine.transform.localPosition;
pos.x = Random.Range(-largeTurnOffset, largeTurnOffset);
instantiatedLine.transform.localPosition = pos;
}
LineData ilinedata = instantiatedLine.GetComponent<LineData>();
ilinedata.FindCurrentAngle(radiusX, radiusZ);
if (isStart)
{
amy.SetAngle(ilinedata.angle);
amy.startAngle = ilinedata.angle;
activeStartLine = instantiatedLine;
} else
{
activeEndLine = instantiatedLine;
}
}
public float GetStartLineAngle()
{
LineData ilinedata = activeStartLine.GetComponent<LineData>();
return ilinedata.angle;
}
public float GetEndLineAngle()
{
LineData ilinedata = activeEndLine.GetComponent<LineData>();
return ilinedata.angle;
}
public GameObject GetStartLineGameObject()
{
return activeStartLine;
}
}