107 lines
3.1 KiB
C#
107 lines
3.1 KiB
C#
using System.Collections;
|
|
using System.Collections.Generic;
|
|
using Unity.MLAgents;
|
|
using UnityEngine;
|
|
|
|
public class ObstaclePatternBehaviour : MonoBehaviour
|
|
{
|
|
[SerializeField] private GameHandler gameHandler;
|
|
private float gameObjectLength;
|
|
private float gameSpeed;
|
|
|
|
|
|
private GameHandler _gameHandler;
|
|
|
|
// Start is called before the first frame update
|
|
void Awake()
|
|
{
|
|
_gameHandler = GameHandler.Instance;
|
|
|
|
}
|
|
|
|
private void Start()
|
|
{
|
|
gameObjectLength = ComputeLengthRecursive(0.0f, gameObject.transform) - gameObject.transform.position.x;
|
|
}
|
|
|
|
// Update is called once per frame
|
|
void Update()
|
|
{
|
|
// move the obstacle depending on GameHandler's offset value
|
|
gameObject.transform.position += new Vector3(-_gameHandler.FrameDistance, 0, 0);
|
|
|
|
//kill the obstacle if it reach the GameHandler's dead end value
|
|
var position = gameObject.transform.position.x;
|
|
var spawnerPosition = LevelSpawner.Instance.transform.position.x;
|
|
|
|
//Debug.Log("position : " + position+"\n"+"scale : " + gameObjectLength);
|
|
|
|
if(position < -gameObjectLength - spawnerPosition)
|
|
{
|
|
//Debug.Log("DESTROY");
|
|
MonoBehaviour.Destroy(gameObject);
|
|
return;
|
|
}
|
|
}
|
|
|
|
|
|
private float ComputeLengthRecursive(float max, Transform @object)
|
|
{
|
|
foreach (Transform child in @object)
|
|
{
|
|
if(child.position.x > max)
|
|
{
|
|
max = child.position.x;
|
|
}
|
|
max = ComputeLengthRecursive(max, child);
|
|
}
|
|
return max;
|
|
}
|
|
|
|
//private float ComputeLength()
|
|
//{
|
|
// Debug.Log("ComputeLength");
|
|
// CenterAndChildCount centerAndChildCount = new();
|
|
// centerAndChildCount = ComputeCenterRecursive(centerAndChildCount, gameObject.transform);
|
|
|
|
// Vector3 center = centerAndChildCount.center;
|
|
// int childCount = centerAndChildCount.childCount;
|
|
// center /= childCount; //center is average center of children
|
|
|
|
|
|
// Bounds bounds = new Bounds(center, Vector3.zero);
|
|
// bounds = ComputeBoundsRecursive(bounds, gameObject.transform);
|
|
|
|
// return bounds.size.x;
|
|
|
|
//}
|
|
|
|
//private CenterAndChildCount ComputeCenterRecursive(CenterAndChildCount centerAndChildCount, Transform @object)
|
|
//{
|
|
// foreach (Transform child in @object)
|
|
// {
|
|
// centerAndChildCount.center += child.gameObject.GetComponent<Renderer>().bounds.center;
|
|
// centerAndChildCount.childCount++;
|
|
// centerAndChildCount = ComputeCenterRecursive(centerAndChildCount, child);
|
|
// }
|
|
// return centerAndChildCount;
|
|
//}
|
|
|
|
//private Bounds ComputeBoundsRecursive(Bounds bounds, Transform @object)
|
|
//{
|
|
// foreach (Transform child in @object)
|
|
// {
|
|
// ComputeBoundsRecursive(bounds, child);
|
|
// bounds.Encapsulate(child.gameObject.GetComponent<Renderer>().bounds);
|
|
// }
|
|
// return bounds;
|
|
//}
|
|
|
|
//private class CenterAndChildCount
|
|
//{
|
|
// public Vector3 center = Vector3.zero;
|
|
// public int childCount = 0;
|
|
//}
|
|
|
|
}
|