bool CircleUpdate() { circleTimeElapsed += Time.deltaTime; circleIntervalElapsed += Time.deltaTime; if (shotElapsed >= shotTime) { shotElapsed = 0f; circles[Random.Range(0, circles.Count - 1)].entity.GetComponent <Enemy>().Shoot(); } for (int i = 0; i < circles.Count; i++) { circles[i] = Circle(circles[i]); } circles.RemoveAll(z => z.circleStage > 3); if (circleTimeElapsed >= circleTime) { return(circles.Count == 0); } if (circleIntervalElapsed >= circleInterval) { circleIntervalElapsed = 0f; Transform t; bool contains; int itrs = 0; do { if (++itrs > Enemy.enemies.Count) { return(false); } t = Enemy.enemies[Random.Range(0, Enemy.enemies.Count - 1)].transform; contains = false; foreach (CircleHolder c in circles) { if (t == c.entity) { contains = true; break; } } } while (contains); CircleHolder circle = new CircleHolder(); circle.Initialize(t, circleRadius, FindObjectOfType <Player>().transform.position); circles.Add(circle); } return(false); }
CircleHolder Circle(CircleHolder c) { if (c.circleStage > 3) { Debug.Log("Invalid"); } else if (c.circleStage > 2) { c.entity.LookAt(c.origPos); c.entity.position += c.entity.forward * circleMoveSpeed * Time.deltaTime; if (Vector3.Distance(c.entity.position, c.origPos) <= circleEpsilon) { c.circleStage = 4; c.entity.rotation = Quaternion.identity; } } else if (c.circleStage > 1) { c.entity.RotateAround(c.center, c.entity.up, circleRotateSpeed * Time.deltaTime); if (Vector3.Distance(c.entity.position, c.origPos) > c.curDist + circleEpsilon) { c.passed = true; } if (c.passed && Vector3.Distance(c.entity.position, c.origPos) <= c.curDist + circleEpsilon) { c.circleStage = 3; } } else { c.entity.LookAt(c.center); c.entity.position += c.entity.forward * circleMoveSpeed * Time.deltaTime; if (Vector3.Distance(c.entity.position, c.center) <= c.radius + circleEpsilon) { c.entity.rotation = Quaternion.identity; c.curDist = Vector3.Distance(c.entity.position, c.origPos); c.circleStage = 2; } } return(c); }