Пример #1
0
    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;
        }
    }
Пример #2
0
 public void SetFacing(Player.Facing facing)
 {
     my_facing = facing;
 }