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)); } } }
// 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) { } }