public void nextTarget(Vector3 target, Vector2 dir) { lastDir = tempDir; lastTarget = targetPosition; tempDir = dir; targetPosition = target; DoTurn(tempDir); if (child != null) { child.nextTarget(lastTarget, lastDir); } }
public void SpawnFollower(GameObject prefab, float cellLen) { if (child != null) { child.SpawnFollower(prefab, cellLen); } else { GameObject c = Instantiate(prefab, transform.parent); Vector3 minusLastDir3D = new Vector3(-lastDir.x, 0, -lastDir.y); c.transform.position = transform.position + (minusLastDir3D * cellLen); child = c.GetComponent <ChildMove>(); child.nextTarget(lastTarget, lastDir); child.speed = speed; } }
void Prosper() { AudioManager.singleton.PlayEat(); if (child != null) { child.SpawnFollower(catPrefab, grid.getCellLength()); } else { GameObject c = Instantiate(catPrefab, transform.parent); Vector3 disDir3D = new Vector3(disabledDir.x, 0, disabledDir.y); c.transform.position = transform.position + (disDir3D * grid.getCellLength()); child = c.GetComponent <ChildMove>(); child.nextTarget(lastTarget, lastDir); child.speed = speed; } }
IEnumerator Move() { yield return(new WaitForEndOfFrame()); Debug.Log(targetX + " " + targetY); targetPosition = grid.getTarget(targetX, targetY); Debug.Log(targetPosition); transform.position = targetPosition; while (true) { while (Vector3.Distance(transform.position, targetPosition) > 0.01) { transform.position = Vector3.MoveTowards(transform.position, targetPosition, speed * Time.deltaTime); yield return(null); } targetX += (int)tempDir.x; targetY += (int)tempDir.y; if (targetX < 0 || targetX > grid.getGridSize() - 1 || targetY < 0 || targetY > grid.getGridSize() - 1) { targetX = (int)Mathf.Clamp(targetX, 0, grid.getGridSize() - 1); targetY = (int)Mathf.Clamp(targetY, 0, grid.getGridSize() - 1); yield return(null); continue; } if (child != null) { child.nextTarget(lastTarget, lastDir); } DoTurn(tempDir); lastTarget = targetPosition; targetPosition = grid.getTarget(targetX, targetY); disabledDir = -tempDir; lastDir = tempDir; } }