I'm trying to make a snake game where I want the user to move 1 square at a time at a regular pace. I want to calculate how far the edge of the screen is and then loop my IEnumerator as many times as it takes to get there. My square character's first movement works as intended, but then it just snaps to the side of the screen where it's going. How do I prevent this ?
bool firstgo = true;
void Start()
{
transform.position = new Vector3(0, 0, 0);
}
void Update()
{
CalculateMovement();
}
private IEnumerator Delay(int x,int y,int z)
{
if (firstgo == true)
{
transform.position += new Vector3(x, y, z);
firstgo = false;
}
else
{
yield return new WaitForSeconds(0.5f);
transform.position += new Vector3(x, y, z);
}
}
void CalculateMovement()
{
if (Input.GetKeyDown(KeyCode.UpArrow))
{
if (transform.position.y != 4)
{
float updistance = 4f - transform.position.y;
for (int i = 0; i < updistance; i++)
{
StartCoroutine(Delay(0, 1, 0));
}
}
}
if (Input.GetKeyDown(KeyCode.DownArrow))
{
if (transform.position.y != -4)
{
float downdistance = 4f + transform.position.y;
for (int i = 0; i < downdistance; i++)
{
StartCoroutine(Delay(0, -1, 0));
}
}
}
if (Input.GetKeyDown(KeyCode.RightArrow))
{
if (transform.position.x != 4)
{
float rightdistance = 4f - transform.position.x;
for (int i = 0; i < rightdistance; i++)
{
StartCoroutine(Delay(1, 0, 0));
}
}
}
if (Input.GetKeyDown(KeyCode.LeftArrow))
{
if (transform.position.x != -4)
{
float leftdistance = 4f + transform.position.x;
for (int i = 0; i < leftdistance; i++)
{
StartCoroutine(Delay(-1, 0, 0));
}
}
}
}