private void dodge() { // print("in DODGE!"); if (MOVEMENT == BLOCKED.NULL) { dodging = false; TURN = DODGE.NULL; return; } var direction = new Vector3(0, 0, 0); var translation = new Vector3(0, 0, 0); switch (TURN) { case DODGE.UP: translation = moveSpeed * Vector3.up * Time.deltaTime; if (transform.position.y >= 1.76f) { TURN = DODGE.DOWN; } else { transform.Translate(translation); } break; case DODGE.DOWN: translation = moveSpeed * Vector3.down * Time.deltaTime; if (transform.position.y <= 0.18f) { TURN = DODGE.UP; } else { transform.Translate(translation); } break; case DODGE.RIGHT: if (faceRight) { direction += Vector3.left; } else { direction += Vector3.right; } transform.Translate(moveSpeed * direction.normalized * Time.deltaTime); break; case DODGE.LEFT: if (faceRight) { transform.Translate(moveSpeed * Vector3.right * Time.deltaTime); } else { transform.Translate(moveSpeed * Vector3.left * Time.deltaTime); } break; default: break; } }
// Update is called once per frame private void Update() { if (!isRegistered) { // print("registering ennemy"); GameManager.registerEnemy(gameObject); isRegistered = true; } if (!gotPlayerPoint && GameManager.isFreePoints()) { _enemyInfoHolder = GameManager.getInfo4Enemy(gameObject.transform); } if (!stop) { if (GameManager.isFreePoints()) { range = Vector3.Distance(transform.position, _enemyInfoHolder.point.dockPoint.position); if (range <= 0.2f) // checks when enemy is near the player dock point and then occupies it { if (!gotPlayerPoint) { GameManager.OccupyPoint(_enemyInfoHolder.point); gotPlayerPoint = true; pointHolding = _enemyInfoHolder.point.name; } if (STATE != ANIM.ATTACKING) { // print(gameObject.name); STATE = ANIM.ATTACKING; } timer += Time.deltaTime; if (gotPlayerPoint && timer >= timeBetweenAttacks) { AttackPlayer(); } else { // animator.Play("stand"); } } else if (range > 0.3f) { timer = 0f; if (STATE != ANIM.WALKING) { if (gotPlayerPoint) { GameManager.ReleasePoint(_enemyInfoHolder.point); } gotPlayerPoint = false; isMoving = true; STATE = ANIM.WALKING; animator.Play("Walking"); } } if (STATE == ANIM.WALKING) { if (dodging) { dodge(); } else if (MOVEMENT == BLOCKED.NULL) { float oldY = transform.position.y; transform.position = Vector3.MoveTowards(transform.position, _enemyInfoHolder.point.dockPoint.position, moveSpeed * Time.deltaTime); isMoving = true; if (transform.position.y >= 1.76f) { transform.position = new Vector3(transform.position.x, oldY, transform.position.z); MOVEMENT = BLOCKED.UP; TURN = DODGE.DOWN; dodging = true; isMoving = true; } else if (transform.position.y <= 0.18f) { transform.position = new Vector3(transform.position.x, oldY, transform.position.z); MOVEMENT = BLOCKED.DOWN; TURN = DODGE.UP; dodging = true; isMoving = true; } } else { rayHit(); } } } } CheckSide(_enemyInfoHolder); // this changes rotation according to player location }
private void rayHit() { print("in RAYHIT!"); if (!dodging) { switch (MOVEMENT) { case BLOCKED.DOWN: case BLOCKED.UP: // direction += Vector3.down; if (dodgeByPlayerPos) { if (_enemyInfoHolder.point.dockPoint.transform.position.x < transform.position.x) { TURN = DODGE.LEFT; } else { TURN = DODGE.RIGHT; } } else // random { if (Random.value < 0.5f) { TURN = DODGE.LEFT; } else { TURN = DODGE.RIGHT; } } if (predictPlayerMovment) { float absDiff = Math.Abs(_enemyInfoHolder.point.dockPoint.transform.position.y - transform.position.y); if (absDiff < 0.25) { if (GameObject.FindGameObjectWithTag("player").GetComponent <boxMov>().moveLeft) { TURN = DODGE.LEFT; } else { TURN = DODGE.RIGHT; } } } dodging = true; break; case BLOCKED.RIGHT: case BLOCKED.LEFT: if (dodgeByPlayerPos) { if ((_enemyInfoHolder.point.dockPoint.transform.position.y > transform.position.y || transform.position.y <= 1.76f) && !(transform.position.y <= 0.18f)) { TURN = DODGE.UP; } else { TURN = DODGE.DOWN; } } else // random { if (Random.value < 0.5f) { TURN = DODGE.UP; } else { TURN = DODGE.DOWN; } } if (predictPlayerMovment) { float absDiff = Math.Abs(_enemyInfoHolder.point.dockPoint.transform.position.x - transform.position.x); if (absDiff < 0.25) { if (GameObject.FindGameObjectWithTag("player").GetComponent <boxMov>().moveUp) { TURN = DODGE.UP; } else { TURN = DODGE.DOWN; } } } dodging = true; break; } } }