|
|
- using UnityEngine;
- using System.Collections;
-
- public class MoverController : EnemyController {
-
- public Transform[] moveRoute;
- public float moveSpeed;
- public float moveCoolDown = 2;
-
- public int routeLoc = 0;
- private int routeMax;
-
- private bool isMove = false;
- private float lastMoveTime = 0.5f;
-
- // Use this for initialization
- protected override void Start () {
- base.Start();
- routeMax = moveRoute.Length;
- transform.position = moveRoute[routeLoc % routeMax].position;
- }
-
- // Update is called once per frame
- void FixedUpdate () {
-
- if (Time.time - lastShotTime >= shotCoolDown) {
- lastShotTime = Time.time;
- Vector3 dir1 = (moveRoute[(routeLoc + 1) % routeMax].position - moveRoute[routeLoc % routeMax].position).normalized;
- Vector3 dir2 = (moveRoute[mod ((routeLoc - 1), routeMax)].position - moveRoute[routeLoc % routeMax].position).normalized;
-
- shoot(dir1);
- shoot(dir2);
- }
-
- if (Time.time - lastMoveTime >= moveCoolDown) {
- lastMoveTime = Time.time;
- StartCoroutine(moveLocation(moveSpeed));
- }
-
-
- }
-
- private IEnumerator moveLocation(float time) {
-
- Vector3 start = moveRoute[routeLoc % routeMax].position;
- Vector3 end = moveRoute[(routeLoc + 1 ) % routeMax].position;
-
- float elapsedTime = 0;
- Vector3 pos = start;
-
- while ((elapsedTime / time) <= 1) {
- pos = Vector3.Lerp(start, end, (elapsedTime / time));
-
-
- transform.position = pos;
-
- elapsedTime += Time.deltaTime;
- yield return new WaitForEndOfFrame();
- }
- transform.position = end;
- routeLoc++;
-
-
- }
-
- //c# modulo deals with negatives differently because it is a remainder call
- //this fixes that
- private int mod(int x, int m) {
- return (x % m + m) % m;
- }
-
-
- }
|