Esempio n. 1
0
    private void Update()
    {
        AiAnimations.Walk(agentAnim);
        float playDist = Vector2.Distance(player.transform.position, transform.position);

        if (playDist < 2)
        {
            AiAnimations.Attack(agentAnim);
            attackBox.SetActive(true);
            //attackBox.SetActive(false);
        }
        else if (playDist < 5)
        {
            float dotProd = player.transform.position.x - transform.position.x;
            if (dotProd > 0)
            {
                transform.localScale = new Vector3(1, transform.localScale.y, transform.localScale.z);
            }
            else if (dotProd < 0)
            {
                transform.localScale = new Vector3(-1, transform.localScale.y, transform.localScale.z);
            }


            Vector2 playerDirection = new Vector2(player.transform.position.x - transform.position.x, player.transform.position.y - transform.position.y);
            playerDirection.Normalize();
            agentRig.AddForce(playerDirection * playDist + new Vector2(0, 2));
        }
        else
        {
            float   startDist      = Vector3.Distance(startPos, transform.position);
            Vector2 startDirection = new Vector2(startPos.x - transform.position.x, startPos.y - transform.position.y);
            startDirection.Normalize();
            if (startDist > 10)
            {
                float dotProd = startPos.x - transform.position.x;
                if (dotProd > 0)
                {
                    transform.localScale = new Vector3(1, transform.localScale.y, transform.localScale.z);
                }
                else if (dotProd < 0)
                {
                    transform.localScale = new Vector3(-1, transform.localScale.y, transform.localScale.z);
                }
                agentRig.AddForce(startDirection * (startDist * 0.5f));
            }
            else
            {
                if (transform.position.y > startPos.y + 1)
                {
                    flyAmount = 1;
                }
                else
                {
                    flyAmount = 5;
                }
                agentRig.AddForce(new Vector2(0, flyAmount));
            }
        }
    }
Esempio n. 2
0
    IEnumerator DoAttack()
    {
        AiAnimations.Attack(agentAnimator);
        attackBox.SetActive(true);
        yield return(new WaitForSeconds(0.3f));

        //yield return new WaitForSeconds(0.5f);
        attackBox.SetActive(false);
        isAttacking = false;
    }
Esempio n. 3
0
    // Update is called once per frame
    void Update()
    {
        //Debug.DrawRay(agentCollider.bounds.center, Vector2.right, Color.red);
        //Get TerrainMap
        if (!getTerrain)
        {
            terrainMap = GameObject.FindGameObjectWithTag("TerrainMap").GetComponent <GridSettings>().GetGrid();
            getTerrain = true;
        }

        if (currentState == AiStates.Patrol)
        {
            path.Clear();
            AiAnimations.Walk(agentAnimator);
            if (AiMaths.SightSphere(agentCollider, agentInfo.sightRange, playerMask))
            {
                currentState = AiStates.Chase;
            }

            else if (AiMaths.raycastSides(agentCollider.GetComponent <Collider2D>(), floorMask, (int)transform.localScale.x, gameObject))
            {
                transform.localScale = new Vector3(transform.localScale.x * -1, transform.localScale.y, transform.localScale.z);
            }

            GetComponent <Rigidbody2D>().velocity = new Vector2(3 * (int)transform.localScale.x, GetComponent <Rigidbody2D>().velocity.y);
        }
        else if (currentState == AiStates.Chase)
        {
            if (KylesFunctions.IsNextToWall2D(transform.localScale.x, agentCollider, 0.5f, playerMask))
            {
                path.Clear();
                currentState = AiStates.Attack;
            }
            else
            {
                AiAnimations.Walk(agentAnimator);



                if (AiMaths.SightSphere(agentCollider, agentInfo.sightRange, playerMask))
                {
                    Vector2 agentNewHeight = new Vector2(GetComponent <CapsuleCollider2D>().bounds.center.x, GetComponent <CapsuleCollider2D>().bounds.center.y - GetComponent <CapsuleCollider2D>().bounds.extents.y);
                    if (!getPlayerPos)
                    {
                        // KylesFunctions.GetXY(agentNewHeight, terrainMap.GetOriginPos(), terrainMap.GetCellSize(), out playerGridPos);
                        KylesFunctions.GetXY(player.transform.position, terrainMap.GetOriginPos(), terrainMap.GetCellSize(), out playerGridPos);
                        getPlayerPos = true;
                    }

                    KylesFunctions.GetXY(agentNewHeight, terrainMap.GetOriginPos(), terrainMap.GetCellSize(), out agentGridPos);
                    KylesFunctions.GetXY(player.transform.position, terrainMap.GetOriginPos(), terrainMap.GetCellSize(), out newPlayerPos);


                    if (newPlayerPos != playerGridPos)
                    {
                        // playerGridPos = newPlayerPos;
                        getPlayerPos = false;
                        path.Clear();
                        findPath = true;
                    }

                    if (path.Count == 0 && !KylesFunctions.IsNextToWall2D(transform.localScale.x, agentCollider, 0.5f, playerMask))
                    {
                        findPath = true;
                    }

                    if (findPath)
                    {
                        KylesFunctions.AStar(terrainMap, agentGridPos.x, agentGridPos.y, playerGridPos.x, playerGridPos.y, 2, false, ref path);
                        findPath = false;
                    }
                }
                else
                {
                    currentState = AiStates.Patrol;
                }
            }
        }
        else if (currentState == AiStates.Attack)
        {
            timer = Time.deltaTime + timer;
            if (!AiMaths.SightSphere(agentCollider, 1.0f, playerMask))
            {
                currentState = AiStates.Chase;
                timer        = 3;
            }

            else if (!isAttacking && timer > 3.0f)
            {
                isAttacking = true;
                audioManager.Play("MantisAttack", gameObject);

                StartCoroutine(DoAttack());
                timer = 0;
            }
            else
            {
                AiAnimations.Walk(agentAnimator);
            }
        }
        else if (currentState == AiStates.AmountOfStates)
        {
        }
    }