public void Attack(EnemiesAIStateController controller) { if (controller.m_EnemyController.currentPathTimer <= 0 && controller.m_EnemyController.agent.enabled) { controller.m_EnemyController.agent.destination = GMController.instance.playerInfo[controller.m_EnemyController.playerSeenIndex].Player.transform.position; controller.m_EnemyController.currentPathTimer = controller.enemyStats.pathCheckFrequenzy; } if (controller.m_EnemyController.agent.isOnOffMeshLink) { controller.m_EnemyController.agent.speed = controller.enemyStats.jumpSpeed; } else { controller.m_EnemyController.agent.speed = controller.enemyStats.runSpeed; } //--------------------------------------------------------------------------------------- if (controller.enemyStats.enemyLevel == 3 && !controller.m_EnemyController.mine.isActive) { //drop bombs controller.m_EnemyController.mine.isActive = true; } // explosions timer controller.m_EnemyController.currentExplosionTimer -= Time.deltaTime; if (controller.m_EnemyController.currentExplosionTimer <= 0) { controller.m_EnemyController.canExplode = true; } }
public void Move(EnemiesAIStateController controller) { if (controller.m_EnemyController.agent.isOnOffMeshLink) { controller.m_EnemyController.agent.speed = controller.enemyStats.jumpSpeed; } else { controller.m_EnemyController.agent.speed = controller.enemyStats.speed; } //--------------------------------------------------------------------------------------- if (!controller.m_EnemyController.firstPatrolSet && controller.m_EnemyController.agent.destination != controller.m_EnemyController.patrolPoints[controller.m_EnemyController.currentDestinationCount].position) { controller.m_EnemyController.agent.destination = controller.m_EnemyController.patrolPoints[controller.m_EnemyController.currentDestinationCount].position; controller.m_EnemyController.firstPatrolSet = true; //Debug.Log(controller.m_EnemyController.agent.destination); } //--------------------------------------------------------------------------------------- // check if has reached the next patrol point. I am using a normal distance check for this, don't need the remainingPath precision in this case if (controller.m_EnemyController.firstPatrolSet && (controller.m_EnemyController.thisTransform.position - controller.m_EnemyController.patrolPoints[controller.m_EnemyController.currentDestinationCount].position).sqrMagnitude <= controller.m_EnemyController.agent.stoppingDistance * controller.m_EnemyController.agent.stoppingDistance) { //Debug.Log("Next"); controller.m_EnemyController.SetNextPatrolPoint(); } }
public void Sight(EnemiesAIStateController controller) { if (controller.m_EnemyController.currentViewTimer <= 0) { // check distance between target and enemy without Vector2.Distance float rayDistance = (controller.m_EnemyController.thisTransform.position - GMController.instance.playerInfo[controller.m_EnemyController.playerSeenIndex].PlayerController.TargetForEnemies.position).sqrMagnitude; if (rayDistance <= (controller.enemyStats.chasingView * controller.enemyStats.chasingView) && GMController.instance.playerInfo[controller.m_EnemyController.playerSeenIndex].PlayerController.isAlive) { controller.m_EnemyController.numRayHitPlayer = 0; for (int y = 0; y < controller.m_EnemyController.raycastEyes.Length; y++) { Debug.DrawLine(controller.m_EnemyController.raycastEyes[y].position, GMController.instance.playerInfo[controller.m_EnemyController.playerSeenIndex].PlayerController.TargetForEnemies.position, Color.red); if (Physics2D.LinecastNonAlloc(controller.m_EnemyController.raycastEyes[y].position, GMController.instance.playerInfo[controller.m_EnemyController.playerSeenIndex].PlayerController.TargetForEnemies.position, controller.m_EnemyController.lineCastHits, controller.enemyStats.obstacleMask) <= 0) { controller.m_EnemyController.numRayHitPlayer++; } } if (controller.m_EnemyController.numRayHitPlayer == 0) { controller.m_EnemyController.playerSeen = false; } } else { controller.m_EnemyController.playerSeen = false; } controller.m_EnemyController.currentViewTimer = controller.enemyStats.viewCheckFrequenzy; } }
public void MoveAnim(EnemiesAIStateController controller) { if (controller.m_EnemyController.agent.isOnOffMeshLink) { controller.m_EnemyController.enemyAnim.SetBool("Jump", true); } else { controller.m_EnemyController.enemyAnim.SetBool("Jump", false); } //--------------------------------------------------------------------------------------- Vector3 move = controller.m_EnemyController.agent.velocity; if (move.magnitude > 1f) { move.Normalize(); } move = controller.m_EnemyController.thisTransform.InverseTransformDirection(move); move = Vector3.ProjectOnPlane(move, Vector3.up); float m_ForwardAmount = move.z; m_ForwardAmount = Mathf.Clamp(Mathf.Abs(m_ForwardAmount), 0, 1f); controller.m_EnemyController.enemyAnim.SetFloat("Forward", m_ForwardAmount, 0.1f, Time.deltaTime); }
public void Move(EnemiesAIStateController controller) { if (controller.m_EnemyController.agent.isOnOffMeshLink) // on NavMesh Link change the speed to "jump" { controller.m_EnemyController.agent.speed = controller.enemyStats.jumpSpeed; } else // if not on NavMesh Link return to normal speed { controller.m_EnemyController.agent.speed = controller.enemyStats.speed; } //--------------------------------------------------------------------------------------- if (!controller.m_EnemyController.firstPatrolSet && controller.m_EnemyController.agent.destination != controller.m_EnemyController.patrolPoints[controller.m_EnemyController.currentDestinationCount].position) { controller.m_EnemyController.agent.destination = controller.m_EnemyController.patrolPoints[controller.m_EnemyController.currentDestinationCount].position; controller.m_EnemyController.firstPatrolSet = true; //Debug.Log(controller.m_EnemyController.agent.destination); } //--------------------------------------------------------------------------------------- // check if has reached the next patrol point if (controller.m_EnemyController.firstPatrolSet && (controller.m_EnemyController.thisTransform.position - controller.m_EnemyController.agent.destination).sqrMagnitude <= controller.m_EnemyController.agent.stoppingDistance * controller.m_EnemyController.agent.stoppingDistance) { controller.m_EnemyController.SetNextPatrolPoint(); } }
public void Attack(EnemiesAIStateController controller) { if (controller.enemyStats.enemyLevel == 3 && !controller.m_EnemyController.swoopCoroutineInExecution && controller.m_EnemyController.playerSeen) { controller.m_EnemyController.startSwoopCR = true; } }
public void Sight(EnemiesAIStateController controller) { if (controller.m_EnemyController.currentViewTimer <= 0) { // check distance between players and enemy without Vector2.Distance for (int i = 0; i < GMController.instance.playerInfo.Length; i++) { controller.m_EnemyController.playerSeenDistance[i] = new TargetDistance(i, (controller.m_EnemyController.thisTransform.position - GMController.instance.playerInfo[i].PlayerController.TargetForEnemies.position).sqrMagnitude); } System.Array.Sort(controller.m_EnemyController.playerSeenDistance); // check if the target is in sight based on the distance (check first the closer one) for (int i = 0; i < controller.m_EnemyController.playerSeenDistance.Length; i++) { // if the target is in range and is alive if (controller.m_EnemyController.playerSeenDistance[i].distance <= (controller.enemyStats.attackView * controller.enemyStats.attackView) && GMController.instance.playerInfo[controller.m_EnemyController.playerSeenDistance[i].targetIndex].PlayerController.isAlive) { for (int y = 0; y < controller.m_EnemyController.raycastEyes.Length; y++) { Debug.DrawLine(controller.m_EnemyController.raycastEyes[y].position, GMController.instance.playerInfo[controller.m_EnemyController.playerSeenDistance[i].targetIndex].PlayerController.TargetForEnemies.position, Color.red); if (Physics2D.LinecastNonAlloc(controller.m_EnemyController.raycastEyes[y].position, GMController.instance.playerInfo[controller.m_EnemyController.playerSeenDistance[i].targetIndex].PlayerController.TargetForEnemies.position, controller.m_EnemyController.lineCastHits, controller.enemyStats.obstacleMask) <= 0) { controller.m_EnemyController.playerSeenIndex = controller.m_EnemyController.playerSeenDistance[i].targetIndex; controller.m_EnemyController.playerSeen = true; } } } } controller.m_EnemyController.currentViewTimer = controller.enemyStats.viewCheckFrequenzy; } }
public void Move(EnemiesAIStateController controller) { if (!controller.m_EnemyController.mine.isActive)// activate mines { //drop mines controller.m_EnemyController.mine.isActive = true; } //--------------------------------------------------------------------------------------- if (controller.m_EnemyController.agent.isOnOffMeshLink) { controller.m_EnemyController.agent.speed = controller.enemyStats.jumpSpeed; } else { controller.m_EnemyController.agent.speed = controller.enemyStats.speed; } //--------------------------------------------------------------------------------------- if (!controller.m_EnemyController.firstPatrolSet && controller.m_EnemyController.agent.destination != controller.m_EnemyController.patrolPoints[controller.m_EnemyController.currentDestinationCount].position) { controller.m_EnemyController.agent.destination = controller.m_EnemyController.patrolPoints[controller.m_EnemyController.currentDestinationCount].position; controller.m_EnemyController.firstPatrolSet = true; } //--------------------------------------------------------------------------------------- // check if has reached the next patrol point if (controller.m_EnemyController.firstPatrolSet && (controller.m_EnemyController.thisTransform.position - controller.m_EnemyController.agent.destination).sqrMagnitude <= controller.m_EnemyController.agent.stoppingDistance * controller.m_EnemyController.agent.stoppingDistance) { //Debug.Log("Next"); controller.m_EnemyController.SetNextPatrolPoint(); } }
public void Timer(EnemiesAIStateController controller) { if (controller.m_EnemyController.currentBiteTimer > 0) { controller.m_EnemyController.currentBiteTimer -= Time.deltaTime; } }
public void Life(EnemiesAIStateController controller) { //enemy die if (controller.m_EnemyController.currentLife <= 0 && !controller.m_EnemyController.startDieCoroutine) { controller.m_EnemyController.startDieCoroutine = true; } }
public void Move(EnemiesAIStateController controller) { controller.m_EnemyController.agent.velocity = Vector3.zero; controller.m_EnemyController.agent.enabled = false; controller.m_EnemyController.rb.velocity = Vector2.zero; controller.m_EnemyController.rb.AddRelativeForce((controller.m_EnemyController.thisTransform.forward * controller.enemyStats.ninjaJumpLenght) + (Vector3.up * controller.enemyStats.ninjaJumpHeight), ForceMode2D.Impulse); controller.m_EnemyController.currentJumpTimer = controller.enemyStats.ninjaJumpCooldown; }
public void Attack(EnemiesAIStateController controller) { controller.m_EnemyController.isAggroAnim = true; controller.m_EnemyController.enemyAnim.SetTrigger("Aggro"); controller.m_EnemyController.agent.enabled = false; //controller.m_EnemyController.agent.isStopped = true; controller.m_EnemyController.agent.speed = 0; }
public void Move(EnemiesAIStateController controller) { //controller.m_EnemyController.worldDeltaPosition = controller.m_EnemyController.agent.nextPosition - controller.m_EnemyController.playerMesh.position; ////Pull agent towards character //if (controller.m_EnemyController.worldDeltaPosition.magnitude > controller.m_EnemyController.agent.radius) // controller.m_EnemyController.agent.nextPosition = controller.m_EnemyController.playerMesh.position + 0.9f * controller.m_EnemyController.worldDeltaPosition; controller.m_EnemyController.rb.velocity = Vector2.zero; controller.m_EnemyController.agent.enabled = true; }
public void MoveAnim(EnemiesAIStateController controller) { controller.m_EnemyController.agent.isStopped = true; if (controller.enemyStats.enemyLevel == 3) { controller.m_EnemyController.mine.MineGrapple(); } controller.m_EnemyController.startDieCoroutine = true; }
public override bool Decide(EnemiesAIStateController controller) { if (!controller.m_EnemyController.onGround) { return(true); } else { return(false); } }
public override bool Decide(EnemiesAIStateController controller) { if (controller.m_EnemyController.currentLife <= 0) { return(true); } else { return(false); } }
public void Move(EnemiesAIStateController controller) { if (controller.enemyStats.enemyLevel >= 2) { controller.m_EnemyController.rb.velocity = new Vector2(controller.enemyStats.speed * controller.m_EnemyController.direction, controller.m_EnemyController.rb.velocity.y); } else { controller.m_EnemyController.rb.velocity = Vector2.zero; } }
public void MoveCheck(EnemiesAIStateController controller) { RaycastHit2D groundCheck = Physics2D.Raycast(controller.m_EnemyController.checkPosition.position, Vector2.down, controller.enemyStats.groundRayDistance, controller.enemyStats.obstacleMask); Debug.DrawRay(controller.m_EnemyController.checkPosition.position, Vector2.down, Color.red); if (!groundCheck) { controller.m_EnemyController.direction *= -1; controller.m_EnemyController.RotateTowardDirection(controller.m_EnemyController.thisTransform, controller.m_EnemyController.direction); } }
public override bool Decide(EnemiesAIStateController controller) { if (GMController.instance.GetGameStatus() && GMController.instance.gameStart) { return(true); } else { return(false); } }
public override bool Decide(EnemiesAIStateController controller) { if (controller.m_EnemyController.playerSeen) { return(true); } else { return(false); } }
public override bool Decide(EnemiesAIStateController controller) { if (controller.m_EnemyController.currentJumpTimer <= 0 && controller.m_EnemyController.onGround && !controller.m_EnemyController.agent.isOnOffMeshLink) { return(true); } else { return(false); } }
public override bool Decide(EnemiesAIStateController controller) { if (!controller.m_EnemyController.playerSeen || !GMController.instance.playerInfo[controller.m_EnemyController.playerSeenIndex].PlayerController.isAlive) { return(true); } else { return(false); } }
public override bool Decide(EnemiesAIStateController controller) { if (!controller.m_EnemyController.isAggroAnim) { return(true); } else { return(false); } }
public void Attack(EnemiesAIStateController controller) { if (controller.enemyStats.enemyLevel < 3 && controller.m_EnemyController.currentBulletTimer <= 0) { controller.m_EnemyController.bullet.EmitBullet(controller.m_EnemyController.attackSpawn, controller.m_EnemyController.thisMesh.forward); controller.m_EnemyController.currentBulletTimer = controller.enemyStats.bulletCooldown; } else if (controller.enemyStats.enemyLevel == 3 && controller.m_EnemyController.currentBulletTimer <= 0 && controller.m_EnemyController.isBarrageDone) { controller.m_EnemyController.canBarrageCR = true; } }
public void Turn(EnemiesAIStateController controller) { Vector3 relativePoint = controller.m_EnemyController.thisTransform.InverseTransformPoint(GMController.instance.playerInfo[controller.m_EnemyController.playerSeenIndex].Player.transform.position); if (relativePoint.x < 0.0) { controller.m_EnemyController.MeshLookAtPlayerDir(-1, 90); } else if (relativePoint.x > 0.0) { controller.m_EnemyController.MeshLookAtPlayerDir(1, 90); } }
public void Sight(EnemiesAIStateController controller) { if (controller.m_EnemyController.playerSeen && controller.m_EnemyController.currentBulletTimer <= 0) { controller.m_EnemyController.bullet.EmitBullet(controller.m_EnemyController.attackSpawn, controller.m_EnemyController.playerSeenIndex); controller.m_EnemyController.currentBulletTimer = controller.enemyStats.bulletCooldown; controller.m_EnemyController.playerSeen = false; } else { controller.m_EnemyController.playerSeen = false; } }
public void Move(EnemiesAIStateController controller) { //sinusoidal movement if (!controller.m_EnemyController.playerSeen) { if (controller.m_EnemyController.m_EnemyStats.enemyLevel == 1) // if lvl 1 moves in a straight line { controller.m_EnemyController.thisTransform.position += new Vector3(controller.enemyStats.speed * controller.m_EnemyController.direction * Time.deltaTime, 0, 0); } else if (controller.m_EnemyController.m_EnemyStats.enemyLevel >= 2)// if lvl 2 or more moves in a sine movement { controller.m_EnemyController.thisTransform.position += new Vector3(controller.enemyStats.speed * controller.m_EnemyController.direction * Time.deltaTime, Mathf.Sin(Time.time * controller.enemyStats.sinusoidalMovement) * Time.deltaTime * controller.enemyStats.sinusoidalMovement, 0); } } }
public void MoveAnim(EnemiesAIStateController controller) { if (!controller.m_EnemyController.playerSeen) { if (controller.m_EnemyController.agent.isOnOffMeshLink) { controller.m_EnemyController.enemyAnim.SetBool("Jump", true); } else { controller.m_EnemyController.enemyAnim.SetBool("Jump", false); } //--------------------------------------------------------------------------------------- Vector3 move = controller.m_EnemyController.agent.velocity; if (move.magnitude > 1f) { move.Normalize(); } move = controller.m_EnemyController.thisTransform.InverseTransformDirection(move); move = Vector3.ProjectOnPlane(move, Vector3.down); float m_ForwardAmount = move.z; m_ForwardAmount = Mathf.Clamp(m_ForwardAmount, 0, 0.5f); controller.m_EnemyController.enemyAnim.SetFloat("Forward", m_ForwardAmount, 0.1f, Time.deltaTime); //--------------------------------------------------------------------------------------- //Vector3 worldDeltaPosition = controller.m_EnemyController.agent.nextPosition - controller.m_EnemyController.thisTransform.position; //// Map 'worldDeltaPosition' to local space //float dx = Vector3.Dot(controller.m_EnemyController.thisTransform.right, worldDeltaPosition); //float dz = Vector3.Dot(controller.m_EnemyController.thisTransform.forward, worldDeltaPosition); //Vector3 deltaPosition = new Vector3(dx, controller.m_EnemyController.thisTransform.position.y, dz); //// Low-pass filter the deltaMove //float smooth = Mathf.Min(1.0f, Time.deltaTime / 0.15f); //controller.m_EnemyController.smoothDeltaPosition = Vector3.Lerp(controller.m_EnemyController.smoothDeltaPosition, deltaPosition, smooth); //// Update velocity if time advances //if (Time.deltaTime > 1e-5f) // controller.m_EnemyController.velocity = controller.m_EnemyController.smoothDeltaPosition / Time.deltaTime; //controller.m_EnemyController.enemyAnim.SetFloat("Forward", Mathf.Clamp((controller.m_EnemyController.velocity.magnitude), 0, 0.5f)); //controller.m_EnemyController.agent.speed = (controller.m_EnemyController.enemyAnim.deltaPosition / Time.deltaTime).magnitude; } }
public void Attack(EnemiesAIStateController controller) { // set the player as destination--------------------------------------------------------- if (controller.m_EnemyController.currentPathTimer <= 0 && controller.enemyStats.enemyLevel <= 2) { controller.m_EnemyController.agent.destination = GMController.instance.playerInfo[controller.m_EnemyController.playerSeenIndex].Player.transform.position; controller.m_EnemyController.currentPathTimer = controller.enemyStats.pathCheckFrequenzy; } //change agent speed if is on NavLink---------------------------------------------------- if (controller.m_EnemyController.agent.isOnOffMeshLink) { controller.m_EnemyController.agent.speed = controller.enemyStats.jumpSpeed; } // USING REMAINING DISTANCE else if (!controller.m_EnemyController.agent.isOnOffMeshLink && controller.m_EnemyController.agent.remainingDistance > controller.m_EnemyController.agent.stoppingDistance) { controller.m_EnemyController.agent.speed = controller.enemyStats.runSpeed; } else // if the agent is closer than the stopping distance then stops itself { controller.m_EnemyController.agent.velocity = Vector3.zero; controller.m_EnemyController.lookAtPlayer = new Vector3(GMController.instance.playerInfo[controller.m_EnemyController.playerSeenIndex].Player.transform.position.x, controller.m_EnemyController.thisTransform.position.y, 0); controller.m_EnemyController.thisTransform.LookAt(controller.m_EnemyController.lookAtPlayer); } //--------------------------------------------------------------------------------------- // if the player is in reach the agent will attack float biteDistance = (controller.m_EnemyController.thisTransform.position - GMController.instance.playerInfo[controller.m_EnemyController.playerSeenIndex].Player.transform.position).sqrMagnitude; if (biteDistance <= (controller.enemyStats.triggerBiteDistance * controller.enemyStats.triggerBiteDistance) && controller.m_EnemyController.currentBiteTimer <= 0) { controller.m_EnemyController.enemyAnim.SetTrigger("Bite"); Collider2D hit = Physics2D.OverlapCircle(controller.m_EnemyController.attackSpawn.position, controller.enemyStats.biteRadius, controller.enemyStats.hitMask); if (hit != null) { controller.m_EnemyController.DamagePlayer(hit); } controller.m_EnemyController.currentBiteTimer = controller.enemyStats.biteCooldown; } }
public void Life(EnemiesAIStateController controller) { if (controller.m_EnemyController.agent.enabled) { controller.m_EnemyController.agent.isStopped = true; } //enemy die // if the timer is up and die from explosion don't give points to players if (controller.m_EnemyController.canExplode) { controller.m_EnemyController.enemyOwnership = -1; } // if timer is up or is lv 2+ trigger the explosion if (controller.m_EnemyController.canExplode || controller.enemyStats.enemyLevel >= 2) { controller.m_EnemyController.enemyAnim.SetTrigger("Explosion"); } // if is lv 1 and died from being hit then gives the points to players and die else { controller.m_EnemyController.enemyAnim.SetTrigger("Death"); } }