public airEnemyState setEnemyState(airEnemyState newState) { switch (newState) { case airEnemyState.idle: //rb2d.gravityScale = 0f; rb2d.velocity = Vector2.zero; break; case airEnemyState.patrol: startPosition = rb2d.position; direction = patrolDirection(); rb2d.velocity = direction * patrolSpeed; break; case airEnemyState.pursue: idleTimer = 10f; break; case airEnemyState.goHome: break; case airEnemyState.waterSurface: //rb2d.gravityScale = .5f; break; } return(newState); }
// Update is called once per frame void Update() { idleTimer = (idleTimer > 0 && (Vector2)transform.position != startPosition)? idleTimer - Time.deltaTime : 0f; enemyToPuffin = (puffin.transform.position - transform.position); flipSprite(); if (enemyToPuffin.sqrMagnitude < pursuitRange * pursuitRange && enemyInAir && GameManager.instance.score > 0) { state = setEnemyState(airEnemyState.pursue); idleTimer = 10f; //print ("pursue"); //print (enemyToPuffin.sqrMagnitude); } if (idleTimer == 0f && ((Vector2)transform.position - startPosition).sqrMagnitude > 5f) { //state = setEnemyState (airEnemyState.goHome); } /*if (enemyInWater) * { * state = setEnemyState (airEnemyState.idle); * * }*/ switch (state) { case airEnemyState.idle: rb2d.velocity = Vector2.zero; if (idleTimer == 0 && ((Vector2)transform.position - startPosition).sqrMagnitude > 5f * 5f) { state = setEnemyState(airEnemyState.goHome); } break; case airEnemyState.patrol: rb2d.velocity = direction * patrolSpeed; if ((((Vector2)transform.position - startPosition).sqrMagnitude > 10f * 10f) || transform.position.y >= maxHeight) // && changeDir == false) { state = setEnemyState(airEnemyState.patrol); //direction = patrolDirection (); //direction = -direction; //print ("Switch"); //changeDir = true; //startPosition = rb2d.position; } if (enemyInWater) { state = setEnemyState(airEnemyState.goHome); //direction.y = 1; } /*if (((Vector2)transform.position - startPosition).sqrMagnitude < 10f * 10f) * { * changeDir = false; * } */ break; case airEnemyState.pursue: // right now it is normalized. Try to think of another way to get direction, this is expensive? direction = enemyToPuffin.normalized; rb2d.velocity = direction * pursuitSpeed; idleTimer = 5f; if (enemyToPuffin.sqrMagnitude > pursuitRange * pursuitRange || GameManager.instance.score == 0) { state = setEnemyState(airEnemyState.idle); } if (enemyInWater) { state = setEnemyState(airEnemyState.waterSurface); } break; case airEnemyState.goHome: direction = (startPosition - (Vector2)transform.position).normalized; rb2d.velocity = direction * pursuitSpeed; if (((Vector2)transform.position - startPosition).sqrMagnitude < 1f) //((Vector2)transform.position - startPosition).sqrMagnitude <5f) //(Vector2)transform.position == startPosition { state = setEnemyState(airEnemyState.patrol); } break; case airEnemyState.waterSurface: if (enemyToPuffin.sqrMagnitude < pursuitRange * pursuitRange && enemyToPuffin.y > 0 && GameManager.instance.score > 0) { state = setEnemyState(airEnemyState.pursue); } else if (idleTimer == 0f) { state = setEnemyState(airEnemyState.goHome); } break; } }