Projet-IA-Madelaine/Scripts/GameObjectsScripts/ObstaclePatternBehaviour.cs
2024-06-12 21:03:42 +02:00

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;
//}
}