public void die() { dead = true; health = 0; sluggish = false; FindObjectOfType <Platforms.Floor>().Reset(); gameObject.transform.localScale = new Vector3(.001f, .001f, .001f); if (!ragdollIsActive) { ragdollIsActive = true; tempRag = GameObject.Instantiate <ragdollBody>(ragdoll); tempRag.transform.position = this.transform.position; tempRag.destructionTimer = respawnTimer; //We set this so the ragdoll only exists as long as we're dead } }
void Update() { if (Util.GameState.state == Util.GameState.State.Playing) { if (paused) { paused = false; anim.speed = animSpeed; GetComponent<Rigidbody>().useGravity = true; GetComponent<Rigidbody>().velocity = vel; } if (state != prevState) { doOnce = false; prevState = state; anim.SetInteger("state", state); if (attackInstance != null) Destroy(attackInstance.gameObject); } Vector3 dirTowardsPlayer = player.transform.position - transform.position; float angle = Vector3.Angle(dirTowardsPlayer, transform.forward); angle = angle > 180f ? angle - 360f : angle; float distance = Vector3.Distance(player.transform.position, transform.position); RaycastHit[] obstacles = Physics.RaycastAll(transform.position, dirTowardsPlayer, distance, navObjectMask); bool canSeePlayer = (obstacles.Length == 0) && (distance < sightDistance) && (angle > -(fov / 2)) && (angle < fov / 2); bool infrontOfPlayer = (obstacles.Length == 0) && (distance < Vector3.Distance(attackPos.position, transform.position)) && (angle > -(fov / 4)) && (angle < fov / 4); state = machine.Run(animDone, canSeePlayer, player.dead, health < 2, infrontOfPlayer, distance, hit, anim.GetCurrentAnimatorClipInfo(0)); switch (state) { case (int)EnemyStateMachine.State.Wait: Wait(); break; case (int)EnemyStateMachine.State.Patrol: Patrol(); break; case (int)EnemyStateMachine.State.Flee: Flee(); break; case (int)EnemyStateMachine.State.Chase: Chase(); break; case (int)EnemyStateMachine.State.Tired: Tired(); break; case (int)EnemyStateMachine.State.Attack: Attack(); break; case (int)EnemyStateMachine.State.Hit: Hit(); break; } if (hit) { hit = false; health--; } if (health <= 0) { tempRag = GameObject.Instantiate<ragdollBody>(ragdoll); tempRag.transform.position = this.transform.position; tempRag.shouldDisappear = false; Destroy(this.gameObject); } } else { if (!paused) { animSpeed = anim.speed; anim.speed = 0; GetComponent<Rigidbody>().useGravity = false; vel = GetComponent<Rigidbody>().velocity; GetComponent<Rigidbody>().velocity = new Vector3(); paused = true; } } }