private void OnTriggerEnter2D(Collider2D collision) { if (collision.tag == "PlayerBullet") { Destroy(collision.gameObject); bodySR.material = matWhite; if (genEnemy.health <= 0) { currenState = GoblinStates.Die; gameObject.GetComponent <BoxCollider2D>().enabled = false; } else { counter = TimetoTakeDamage; currenState = GoblinStates.TakeDamage; Invoke("ResetMaterial", 0.1f); } } }
// Update is called once per frame void Update() { if (!theRoom.roomActive) { return; } Vector2 direction = playerTransform.position - transform.position; angle = (Mathf.Atan2(direction.y, direction.x) * Mathf.Rad2Deg); firePoint.rotation = Quaternion.Euler(0, 0, angle); if (playerTransform.position.x > transform.position.x) { gameObject.transform.rotation = Quaternion.Euler(0, 0, 0); } else { gameObject.transform.rotation = Quaternion.Euler(0, -180, 0); } /* * if (playerTransform.position.x > transform.position.x) * { * gameObject.transform.rotation = Quaternion.Euler(0, 0, 0); * * if (angle < maxAngle) * { * if(playerTransform.position.y > transform.position.y) * { * swordTransform.rotation = Quaternion.Euler(0, 0, angle); * } * else * { * swordTransform.rotation = Quaternion.Euler(0, 0, -angle); * } * } * } * else * { * gameObject.transform.rotation = Quaternion.Euler(0, -180, 0); * * if (angle < maxAngle) * { * if(playerTransform.position.y > transform.position.y) * { * swordTransform.rotation = Quaternion.Euler(0, 0, angle); * } * else * { * swordTransform.rotation = Quaternion.Euler(0, 0, -angle); * } * } * * } */ switch (currenState) { case GoblinStates.Idle: ChangeAnimationState("RedGoblin_Idle"); if (Vector2.Distance(transform.position, playerTransform.position) < triggerDistance) { currenState = GoblinStates.Walk; } break; case GoblinStates.Walk: ChangeAnimationState("RedGoblin_Walk"); transform.position = Vector2.MoveTowards(transform.position, playerTransform.position, speed * Time.deltaTime); if (counter > 0) { counter -= Time.deltaTime; } allFirePoints.rotation = Quaternion.Euler(0, 0, angle + 90); if (Vector2.Distance(transform.position, playerTransform.position) < distanceToAttack) { if (counter <= 0) { foreach (Transform t in shotgunFirePoints) { Instantiate(bullet, t.position, t.rotation); } counter = TimeBetweenAttacks; } } break; case GoblinStates.TakeDamage: ChangeAnimationState("RedGoblin_TakeDamage"); if (counter > 0) { counter -= Time.deltaTime; Vector3 moveDirection = transform.position - playerTransform.position; moveDirection.Normalize(); rb.velocity = moveDirection * speedWhenHit; } else { rb.velocity = Vector2.zero; counter = TimeBetweenAttacks; currenState = GoblinStates.Walk; } break; case GoblinStates.Die: Invoke("ResetMaterial", 0.1f); //jak dlugo ma byc bialy ChangeAnimationState("RedGoblin_TakeDamage"); Vector3 movingWay = transform.position - playerTransform.position; movingWay.Normalize(); rb.velocity = movingWay * speedWhenDie; Invoke("KillSelf", howLongAwayAfterDestroyed); CameraShaker.ShakeStrong(.20f, .25f); currenState = GoblinStates.PostMortem; break; case GoblinStates.PostMortem: break; } }