using UnityEngine; public class AI { public int aiChances; public Quaternion rot = Quaternion.identity; public Vector3Int InputDirection(Main main) { Vector3 headPos = main.snake[0]; float dist = Vector3.Distance(headPos, main.food); float turnRate = (1 + Mathf.Sin(Time.time)) + (1 + Mathf.Sin(Time.time / 3)) * (1 - (dist / ((float)main.design.bounds.x * 2))); if (main.food != headPos && aiChances == main.design.aiMaxChances) { rot = Quaternion.Lerp(rot, Quaternion.LookRotation(main.food - headPos), turnRate * main.design.aiIQ * main.bpm * Time.deltaTime); Vector3Int newDir = Main.SnapDir(rot * Vector3.forward); // rethink this system now that it is seperated from the player inputs // chances get refueled each *ai* step while (aiChances > 0 && main.snake.Contains(main.snake[0] + newDir) || Main.OutOfBounds(main.snake[0] + newDir, main.design.bounds)) { newDir = Main.dirs[Random.Range(0, Main.dirs.Length)]; aiChances--; } // NO neck snaps, ok? if (aiChances > 0 && main.snake[0] + newDir != main.snake[1]) { if (aiChances < main.design.aiMaxChances) { rot = Quaternion.LookRotation((Vector3)newDir); } return newDir; } } return main.dir; } }