This repository has been archived on 2024-11-03. You can view files and clone it, but cannot push or open issues or pull requests.
snakeinabox/Assets/Scripts/AI.cs
2020-09-04 22:31:02 -07:00

43 lines
No EOL
1.3 KiB
C#

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