public void Attack() { //To-Do Debug.Log("attacking"); defenceLock = false; attackTimeCounter += Time.deltaTime; if (attackTimeCounter > attackTime) { previousState = enemyBrain.GetCurrentState(); enemyBrain.PopState(); enemyBrain.PushState(EnumsScript.Enemy_State.NO_ACTION); attackTimeCounter = 0; } /* * if (Vector3.Distance(transform.position, target.position) < distance) * { * //transform.Translate(target.position); * } * else if (Vector3.Distance(transform.position, target.position) > distance) * { * previousState = enemyBrain.GetCurrentState(); * enemyBrain.PopState(); * enemyBrain.PushState(EnumsScript.Enemy_State.SEEK); * } */ }
public void UseAbility() { Debug.Log("Use ability"); //To-Do previousState = enemyBrain.GetCurrentState(); enemyBrain.PopState(); enemyBrain.PushState(EnumsScript.Enemy_State.NO_ACTION); }
// Update is called once per frame void Update() { checkDistance = Vector3.Distance(transform.position, target.position); currentState = enemyBrain.GetCurrentState(); if (brainAction) { TakeAction(); enemyBrain.GetCurrentState(); } }
//first execution when the fight starts public void AtStartFight() { Debug.Log("Initial State"); //To-Do //target = allTargets[Random.Range(0, allTargets.Length)].transform; //enable animations when the animator is implemented /*if (myAnimator.GetCurrentAnimatorStateInfo(0).IsName("StartAnimation")) * { * enemyBrain.PopState(); * enemyBrain.PushState(EnumsScript.Enemy_State.SEEK); * }*/ previousState = enemyBrain.GetCurrentState(); enemyBrain.PopState(); enemyBrain.PushState(EnumsScript.Enemy_State.SEEK); }
public void Defend() { Debug.Log("Defend"); defenceLock = false; defendTimeCounter += Time.deltaTime; if (defendTimeCounter > defendTime) { defendTimeCounter = 0; previousState = enemyBrain.GetCurrentState(); enemyBrain.PopState(); if (currentState != EnumsScript.Enemy_State.SEEK) { enemyBrain.PushState(EnumsScript.Enemy_State.SEEK); } } }
//Seek the target for pushing other states like attacking public void SeekTarget() { Debug.Log("seeking target"); //To-Do //add animations if (hasAbility) { attackTimeCounter += Time.deltaTime; if (attackTimeCounter > attackTime) { attackTimeCounter = 0; previousState = enemyBrain.GetCurrentState(); enemyBrain.PopState(); enemyBrain.PushState(EnumsScript.Enemy_State.ABILITY); } } //if(the enemy is far, then approach if ((Vector3.Distance(transform.position, target.position) > distance && playerStateReference != EnumsScript.Player_State.ATTACK) || (Vector3.Distance(transform.position, target.position) > distance && defenceLock)) { transform.position = Vector3.MoveTowards(transform.position, target.position, velocity * Time.deltaTime); } //if the enemy isn't in defend distance and the player is attacking, then block defend condition and just ram to the player else if (Vector3.Distance(transform.position, target.position) > defenceDistance && playerStateReference == EnumsScript.Player_State.ATTACK && !defenceLock) { transform.position = Vector3.MoveTowards(transform.position, target.position, velocity * Time.deltaTime); defenceLock = true; } //if the enemy isn't close enough for attacking and the player is attacking and the enemy is in the determined defend range, then start defending else if (Vector3.Distance(transform.position, target.position) > distance && Vector3.Distance(transform.position, target.position) < defenceDistance && playerStateReference == EnumsScript.Player_State.ATTACK) { enemyBrain.PushState(EnumsScript.Enemy_State.DEFEND); } //if the player is in attack range, then attack else if (Vector3.Distance(transform.position, target.position) < distance) { previousState = enemyBrain.GetCurrentState(); enemyBrain.PopState(); enemyBrain.PushState(EnumsScript.Enemy_State.ATTACK); } }
public void NoAction() { Debug.Log("No action"); noActionTimeCount += Time.deltaTime; if (noActionTimeCount > noActionTime) { noActionTimeCount = 0; previousState = enemyBrain.GetCurrentState(); enemyBrain.PopState(); if (playerStateReference == EnumsScript.Player_State.ATTACK) { enemyBrain.PushState(EnumsScript.Enemy_State.DEFEND); } else { enemyBrain.PushState(EnumsScript.Enemy_State.SEEK); } } }
public void PushState(EnumsScript.Enemy_State newState) { states.Push(newState); }