private void StateTimeFlow(EnemyBehaviours nexState, float changeStatePercent) { timeOnCurrentState -= Time.deltaTime; if (timeOnCurrentState <= 0) { Random.InitState((int)System.DateTime.Now.Ticks); float f = Random.Range(0f, 1f); if (f < changeStatePercent) { if (currentBehaviour != EnemyBehaviours.MeleeAttackPlayer && currentBehaviour != EnemyBehaviours.RangeAttackPlayer) { currentBehaviour = nexState; hasTransitionedIn = false; } } else { RandomStateTime(); } } }
private void ChasePlayer() { if (!hasTransitionedIn) { TransitionIn(hasRandomStateTime: true, ChaseTrans); } float distanceToPlayer = GetDistanceToPlayer(); if (distanceToPlayer < attackRange) { hasTransitionedIn = false; lastBehaviour = currentBehaviour; currentBehaviour = EnemyBehaviours.MeleeAttackPlayer; } /* * else if (distanceToPlayer < rangedAttackRange) * { * hasTransitionedIn = false; * lastBehaviour = currentBehaviour; * currentBehaviour = EnemyBehaviours.RangeAttackPlayer; * } */ else if (distanceToPlayer > giveUpChaseDistance) { hasTransitionedIn = false; lastBehaviour = currentBehaviour; currentBehaviour = EnemyBehaviours.Idle; } else { agent.SetDestination(playerT.position); animator.SetFloat("Blend", 1f, animChangeDampTime, Time.deltaTime); animator.SetFloat("TorsoBlend", 1f, animChangeDampTime, Time.deltaTime); } StateTimeFlow(EnemyBehaviours.RangeAttackPlayer, 0.80f); }
private void MeleeAttackEndAnimEvent() { if (currentBehaviour != EnemyBehaviours.Dead && currentBehaviour != EnemyBehaviours.FleeFromPlayer && currentBehaviour != EnemyBehaviours.Knockback) { float distanceToPlayer = GetDistanceToPlayer(); if ((distanceToPlayer > attackRange && distanceToPlayer < attackRange * 3f) || distanceToPlayer > rangedAttackRange) { lastBehaviour = currentBehaviour; currentBehaviour = EnemyBehaviours.ChasePlayer; hasTransitionedIn = false; } else if (distanceToPlayer < rangedAttackRange && distanceToPlayer > attackRange) { lastBehaviour = currentBehaviour; currentBehaviour = EnemyBehaviours.RangeAttackPlayer; hasTransitionedIn = false; } /* * else if (distanceToPlayer > rangedAttackRange) * { * lastBehaviour = currentBehaviour; * currentBehaviour = EnemyBehaviours.ChasePlayer; * hasTransitionedIn = false; * } */ /* * else * { * lastBehaviour = currentBehaviour; * currentBehaviour = EnemyBehaviours.ChasePlayer; * hasTransitionedIn = false; * } */ } }
private void HandleEnemyKilledEvent(EnemyBehaviours enemy) { playerScore += enemy.ScoreValue; // public property Debug.Log("Score :" + playerScore); UpdateScore(); }
// Update is called once per frame void Update() { if (enemyResources.GetHealth() <= 0) { enemyBehaviour = EnemyBehaviours.Dead; } if (enemyResources.GetHealth() <= 10 && enemyResources.GetHealth() > 0 && enemyBehaviour == EnemyBehaviours.Attacking) { enemyBehaviour = EnemyBehaviours.Fleeing; } playerVelocity = player.GetComponent <PlayerVelocity>().velocity; if (!attacking) { // Look at target RotateTowardsTarget(new Vector3(target.x, transform.position.y, target.z)); } if (playerVelocity > 0.5f && enemyBehaviour != EnemyBehaviours.Fleeing && enemyBehaviour != EnemyBehaviours.Dead && !weaponBehaviour.swordBroken) { // ...player location and AI location as Vector3s //Vector3 origin = transform.position; //Vector3 position = collider.position; // ...Calculate direction and distance from the AI to the location //Vector3 dir = position - origin; //RaycastHit hit; // If player can be seen... //if(Physics.Raycast(origin, dir, out hit) && hit.transform.gameObject.tag == "Player") //{ // Update player last known location & attack playerLastKnownLocation = player.GetComponent <PlayerVelocity>().head.transform.position; enemyBehaviour = EnemyBehaviours.Attacking; //} } // Enemy Behaviours State Switch switch (enemyBehaviour) { case EnemyBehaviours.Scouting: Scouting(); break; case EnemyBehaviours.Attacking: Attacking(); break; case EnemyBehaviours.Fleeing: Fleeing(); break; case EnemyBehaviours.Dead: Dead(); break; } // check hit or miss if (attackingMiss) { if (Time.time > missTimer) { if (!hitOrMiss) { enemyBehaviour = EnemyBehaviours.Fleeing; } hitOrMiss = false; attackingMiss = false; } } }
public abstract void EndBehaviour(EnemyController ec, EnemyBehaviours forceNewBehaviour = EnemyBehaviours.None);
public BasicEnemy BehaviourSetter(EnemyBehaviours b) { behaviour = b; return(this); }
public EnemyAttributes SetBehaviours(EnemyBehaviours b) { behaviour = b; return(this); }