private void UpdateDisengageState() { anim.SetInteger(SkunkMovement, 3); float animDuration = anim.GetCurrentAnimatorStateInfo(0).length; if (Time.time - disengageTimer >= animDuration) { currState = SkunkState.Patrolling; } if (!attackHive && distToPlayer >= minDistToAttack && distToPlayer <= maxDistToAttack) { // Disengaging from player, but player has returned to attacking radius currState = SkunkState.Attacking; } if (attackHive && distToHive <= maxDistToAttackHive && (Time.time - hiveAttackTimer) >= hiveAttackCooldown) { // Disengaging from hive, but hive has returned to attacking radius and cooldown isn't in effect currState = SkunkState.Attacking; } guiObject.SetActive(false); }
/////////////////////////////////////////////// //// Attacking State ////////////////////////// private void UpdateAttackState() { if (!attackHive) { FaceTargetReverse(player.transform.position); } else { FaceTargetReverse(hive.transform.position); } if (!attackHive && distToPlayer < minDistToAttack || !attackHive && distToPlayer > maxDistToAttack) { // Player was being attacked but is out of the radius currState = SkunkState.Disengaging; disengageTimer = Time.time; } if (attackHive && distToHive > maxDistToAttackHive) { // Hive was being attacked but is out of radius currState = SkunkState.Disengaging; disengageTimer = Time.time; } agent.speed = 0; guiObject.SetActive(true); anim.SetInteger(SkunkMovement, 2); // attack EnemyAttack(); }
void FindTarget() { gasTimer += gasMultiplier * Time.deltaTime; spray_range = Physics.OverlapSphere(transform.position, 5, LayerMask.GetMask("Player")); if (fow.visibleTargets.Contains(sesame.transform)) { //float random_x = Random.Range(8.5f, 48.5f); //float random_z = Random.Range(1.5f, 45.5f); //fack_target = new Vector3(random_x, 0.5f, random_z); target = sesame; gasMultiplier = 1; fow.viewAngle = 360; if (gasTimer > 10) { ParticleSystem gas_prefab; gas_prefab = Instantiate(gas, transform.position, Quaternion.identity); Destroy(gas_prefab, 10); gasTimer = 0; } //fart.Play(); skunkState = SkunkState.gas; } else { target = null; skunkState = SkunkState.wander; } }
void CheckScales() { if (target) { if (target.GetComponent <Character>().scales.magnitude < scales.magnitude) { skunkState = SkunkState.attack; } else if (target.GetComponent <Character>().scales.magnitude > scales.magnitude || allyInTrouble) { skunkState = SkunkState.flee; } } }
private void EnemyAttack() { if (Time.time - lastTimeShot > shootRate) { GameObject proj = Instantiate(projectilePrefab, projectileSpawn.transform.position, projectileSpawn.transform.rotation); if (attackHive) { proj.GetComponent <SkunkProjectileBehaviour>().SetTarget(hive.transform); // cooldown hive attacks disengageTimer = Time.time; currState = SkunkState.Disengaging; } else { proj.GetComponent <SkunkProjectileBehaviour>().SetTarget(player.transform); } proj.transform.parent = projectilesParent.transform; lastTimeShot = Time.time; } }
/////////////////////////////////////////////// //// Basic Movement States //////////////////// public override void UpdatePatrolState() { agent.speed = enemySpeed; agent.stoppingDistance = patrolStoppingDist; float dist = Utils.Distance2D(transform.position, nextPoint); if (Utils.Distance2D(transform.position, nextPoint) <= patrolStoppingDist) { FindNextPoint(); agent.velocity = Vector3.zero; agent.SetDestination(nextPoint); } if (distToPlayer >= minDistToAttack && distToPlayer <= maxDistToAttack && sight.InFOV(player.transform, "Player")) { // Player is in attacking radius lastTimeShot = Time.time - shootRate - 0.1f; attackHive = false; currState = SkunkState.Attacking; } else if (hiveFound && distToHive <= maxDistToAttackHive && sight.InFOV(hive.transform, "Hive") && (Time.time - hiveAttackTimer) >= hiveAttackCooldown) { // Hive is in attacking radius and hiveAttack has cooled down lastTimeShot = Time.time - shootRate - 0.1f; hiveAttackTimer = Time.time; attackHive = true; currState = SkunkState.Attacking; } guiObject.SetActive(false); FaceTarget(nextPoint); anim.SetInteger(SkunkMovement, 4); // walking }
//Defeated public override void EnemyDefeated() { Destroy(gameObject, 1.5f); currState = SkunkState.Dead; UpdateDeadState(); }