private void Update() { if (GameObservables.gamePaused) { GetComponent <Rigidbody2D>().velocity = Vector2.zero; return; } if (!doneAttacking) { return; } attackDelayTimer += Time.deltaTime; willAttackPlayer = aggresive || stats.getCurrentHealth() < stats.GetActualMaxHealth(); if (cat) { willAttackPlayer = true; } vectorToPlayer = player.transform.position - transform.position; distanceToPlayer = Mathf.Abs(vectorToPlayer.magnitude); Vector2 facingDir = vectorToPlayer.normalized; oldFacing = facing; bool horizontal = Mathf.Abs(facingDir.x) > Mathf.Abs(facingDir.y); if (horizontal) { facing = facingDir.x < 0 ? Player.Facing.Left : Player.Facing.Right; } else { facing = facingDir.y < 0 ? Player.Facing.Down : Player.Facing.Up; } Vector3 offset = new Vector3(-0.1f, 0, 0); bool terrainBlocking = false; for (int i = 0; i < 10; ++i) { RaycastHit2D[] hits = new RaycastHit2D[1]; ContactFilter2D filter = new ContactFilter2D(); filter.SetLayerMask(LayerMask.GetMask("Terrain")); Physics2D.Raycast(transform.position + offset, new Vector3(vectorToPlayer.x - offset.x, vectorToPlayer.y, 0), filter, hits, 100); //Debug.DrawRay(transform.position + offset, new Vector3(vectorToPlayer.x - offset.x, vectorToPlayer.y, 0)); offset.x += 0.02f; if (hits[0]) { terrainBlocking = true; Debug.Log(hits[0].transform.parent.name); } } playerInLineOfSight = !terrainBlocking; oldState = state; CheckState(); AnimateFromFacing(); switch (state) { case State.Idle: IdleUpdate(); break; case State.Patrol: PatrolUpdate(); break; case State.Death: DeathUpdate(); break; case State.Attacking: AttackingUpdate(); break; case State.Defending: DefendingUpdate(); break; case State.Hunting: HuntingUpdate(); break; } }
public void SetFacing(Player.Facing facing) { my_facing = facing; }