void Update() { if (_alive && chasing) { //if very far away zombie speed = 0: idle animation //if somewhat close zombie speed = walking speed: walking animation //if near zombie speed = 8.0*walking speed:running animation Quaternion initial = playerObject.transform.rotation; Vector3 diff = playerObject.transform.position - transform.position; float range = diff.magnitude; if (range > maxDistance && !waiting) //very far away and we want to redirect toward player //anim.SetInteger("zombieToState", 0); { transform.rotation = Quaternion.LookRotation(Vector3.forward, diff); _multiplier = 0.1f; //playerCaught = false; } else if (range > closeToPlayer && range <= maxDistance && !waiting) //off screen so can just stay still { _multiplier = 0f; playerCaught = false; if (siren != null) { siren.TurnOff(); } } else if (range <= closeToPlayer && !waiting) //on screen so have wander { _multiplier = 4f; if (range <= visibility && (playerObject.GetComponent <PlayerMovement>().isBoost() || playerCaught || playerObject.GetComponent <PlayerMovement>().isLooting() || isPirate)) { if (!playerCaught) { playerCaught = true; } transform.rotation = Quaternion.LookRotation(Vector3.forward, diff); if (running) { transform.Rotate(new Vector3(0, 0, 180)); } if (range <= tooClose) { _multiplier = 0.0f; } else { _multiplier = 7.0f; } } else { playerCaught = false; if (siren != null) { siren.TurnOff(); } if (shouldTurn >= 4) { shouldTurn = 0; //float angle = Random.Range(0, 360); //Debug.Log("randomTurn"); transform.Rotate(new Vector3(0, 0, Random.Range(0, 360))); } else { shouldTurn += Time.deltaTime; } } } else { //normal distance away, let wander if (range <= visibility && !running && !isPirate && (playerObject.GetComponent <PlayerMovement>().isBoost() || playerCaught || playerObject.GetComponent <PlayerMovement>().isLooting())) { if (siren != null) { siren.TurnOn(); } playerCaught = true; } _multiplier = 4.0f; //dont move if not close to player } //cargoship is within range and player has not yet looted it if (running && !playerObject.GetComponent <PlayerMovement>().isLooting()) { if (!canLoot && range <= tooClose) { canLoot = true; gameObject.GetComponent <CargoShip>().CanLoot(); } else if (canLoot && range > tooClose) { canLoot = false; gameObject.GetComponent <CargoShip>().ClearLootState(); } } //cargoship was being looted, but player stopped, so reset progress if (canLoot && !(playerObject.GetComponent <PlayerMovement>().isLooting()) && beingLooted > 0) { Debug.Log("Resetloot timer"); beingLooted = 0; gameObject.GetComponent <CargoShip>().StartLooting(); } //Looting cargo ship if (running && range <= tooClose && playerObject.GetComponent <PlayerMovement>().isLooting()) { //playerObject.transform.rotation = initial; Debug.Log("Cargoship being looted"); playerCaught = true; _multiplier = 0.0f; if (beingLooted < Time.deltaTime) { GetComponent <CargoShip>().StartLooting(); } if (beingLooted > 2) { GetComponent <ReactiveTarget>().ReactToHit(); _scoreController.AddScore(1000); RunStats.Current.CargoShipsLooted++; } else { beingLooted += Time.deltaTime; GetComponent <CargoShip>().SetLootProgress(beingLooted / 2f); } //add different particle effect? } _leftThrust.SetIntensity(_multiplier / 7f); _rightThrust.SetIntensity(_multiplier / 7f); transform.Translate(0, 0.5f * Time.deltaTime * _multiplier * speed, 0); //Debug.DrawRay(transform.position + transform.up*0.57f , transform.up * 10f, Color.red); // If it hits something... int grnd = 1 << LayerMask.NameToLayer("Default"); int fly = 1 << LayerMask.NameToLayer("Player"); int mask = grnd | fly; RaycastHit2D hit = Physics2D.Raycast(transform.position + transform.up * 0.57f, transform.up, 8f, mask); if (hit.collider != null) { GameObject hitObject = hit.transform.gameObject; if (hitObject.GetComponent <PlayerMovement>()) { if (!running && hitObject.GetComponent <PlayerMovement>().alive&& playerCaught) { if (siren != null && !isPirate) { siren.TurnOn(); } // if(hit.distance < 0.05f){ // hitObject.GetComponent<PlayerHealth>().Die(); // Debug.Log("caught charcter"); // chasing = false; // } //else{ //shoot at player if (reloadTime >= timeBetweenshot) { reloadTime = 0; AudioSource.PlayClipAtPoint(lazerShot, Camera.main.transform.position); Instantiate(lazer, new Vector3(transform.position.x, transform.position.y, 0), transform.rotation); } else { reloadTime += Time.deltaTime * 50; } //} } } else if (hitObject.GetComponent <EnemyLazer>() || hitObject.GetComponent <RepairStation>() || hitObject.GetComponent <FuelStation>()) { Debug.Log("saw collier that should be ignored"); } else { if (hit.distance < 0.2) { GetComponent <ReactiveTarget>().ReactToHit(); } else if (hit.distance < obstacleRange) { if (goLeft(hit)) { transform.Rotate(0, 0, 10); } else { transform.Rotate(0, 0, -10); } waitFor = 300f * Time.deltaTime; waiting = true; //extraTurn = true; } } } else { _leftThrust.SetIntensity(0f); _rightThrust.SetIntensity(0f); if (waitFor > 0) { // if(extraTurn){ // transform.Rotate(0,0,10); // extraTurn = false; // } waitFor -= 1f * Time.deltaTime; } else if (waiting) { waiting = false; } } } }