// Update is called once per frame public void Update() { if (parent.Target != null) { parent.Movement.Move(Vector2.zero); animator.Charge(direction); chargeTime -= Time.deltaTime; if (chargeTime <= 0) { animator.setChargeFalse(); animator.Attack(direction); parent.transform.position = Vector2.MoveTowards(parent.transform.position, headButtTarget, Time.deltaTime * chargeSpeed); if (enemyCollider.IsTouchingLayers(9) && hitted == false) { playerHealth.Reduce(parent.AttackDamage); hitted = true; //Debug.Log("Gotcha Headbutter!"); } if (Vector2.Distance(parent.transform.position, headButtTarget) < 1) { parent.ChangeState(new IdleState()); } } } else { parent.ChangeState(new IdleState()); } }
public void Update() { if (parent.Target != null) { //Debug.Log(parent.Target.position); parent.Movement.Move((parent.Target.position - parent.transform.position).normalized); float distance = Vector2.Distance(parent.Target.position, parent.transform.position); parent.AttackCD -= Time.deltaTime; if (parent.AttackCD <= 0) { parent.AttackAnimationLenght = parent.AttackAnimatiomTMP; if (distance <= parent.AttackRange) { // parent.Movement.Move(Vector2.zero); parent.ChangeState(new AttackState()); } } } else { parent.ChangeState(new RetreatState()); } }
public EnemyBehaviour SpawnEnemy(EnemyData _enemy, bool _addSmallRandomDelay, float _spawnSpeedOverride = -1) { spawning = true; GameObject i_newEnemy = Instantiate(_enemy.prefab).gameObject; EnemyBehaviour i_enemyBehaviour = i_newEnemy.GetComponent <EnemyBehaviour>(); if (attachSpawnedObject) { i_enemyBehaviour.transform.SetParent(transform); } if (i_enemyBehaviour == null) { Destroy(i_newEnemy); Debug.LogWarning("Spawner can't instantiate enemy: invalid prefab"); return(null); } if (i_enemyBehaviour.GetNavMesh() != null) { i_enemyBehaviour.GetNavMesh().enabled = false; } lastSpawnedEnemy = i_enemyBehaviour; currentDelayBeforeBeingFree = delayBeforeBeingFree; i_enemyBehaviour.ChangeState(EnemyState.Spawning); if (i_enemyBehaviour.GetNavMesh() != null) { i_enemyBehaviour.GetNavMesh().enabled = false; } StartCoroutine(SpawnEnemy_C(i_enemyBehaviour, _addSmallRandomDelay, _spawnSpeedOverride)); return(i_enemyBehaviour); }
// Update is called once per frame public void Update() { if (parent.IsRanged || parent.IsBoss) { parent.Animator.setAwakeingTrue(); } parent.transform.position = Vector2.MoveTowards(parent.transform.position, moveSpots[currentSpot].position, parent.Movement.MovementSpeed * Time.deltaTime); parent.Animator.Walk(moveSpots[currentSpot].transform.position - parent.transform.position); if (isWaiting) { parent.Animator.Stay(parent.DefaultDirection); } if (parent.Target != null) { parent.ChangeState(new FollowState()); } else if (Vector2.Distance(parent.transform.position, moveSpots[currentSpot].position) < 0.2f) { if (tmpWaitTime <= 0) { isWaiting = false; currentSpot = (currentSpot + 1) % moveSpots.Length; tmpWaitTime = waitTime; } else { isWaiting = true; tmpWaitTime -= Time.deltaTime; } } }
public void Update() { Vector2 movementVec = (parent.MyStartPosition - parent.transform.position).normalized; parent.Movement.Move(movementVec); float distance = Vector2.Distance(parent.MyStartPosition, parent.transform.position); if (distance < 2) { parent.Movement.Move(Vector2.zero); parent.ChangeState(new IdleState()); } if (parent.Target) { parent.ChangeState(new FollowState()); } }
public void Update() { if (parent.Target != null) { float distance = Vector2.Distance(parent.Target.position, parent.transform.position); parent.Movement.Move(Vector2.zero); parent.AttackCD -= Time.deltaTime; if (parent.AttackCD <= 0) { parent.AttackAnimationLenght -= Time.deltaTime; if (parent.AttackAnimationLenght <= 0) { parent.AttackCD = parent.AttackCDtmp; parent.AttackAnimationLenght = parent.AttackAnimatiomTMP; if (distance <= parent.AttackRange) { if (parent.IsHeadbutt) { //Debug.Log("Change to headbutt"); parent.ChangeState(new HeadButtState()); } else if (parent.IsRanged) { //Debug.Log("Change to RangedState"); parent.ChangeState(new RangedState()); } else if (parent.IsBoss) { // Debug.Log("Change to bossState"); parent.ChangeState(new BossState()); } else { //for ranged attack not good playerHealth.Reduce(parent.AttackDamage); } } } } else if ((parent.IsRanged || parent.IsHeadbutt) && distance <= parent.EvadeDistance) { Debug.Log("Evade!"); parent.ChangeState(new EvadeState()); } else if (distance > parent.AttackRange && !parent.IsRanged) { //Debug.Log("Change from Attack to Follow"); parent.ChangeState(new FollowState()); } else { parent.ChangeState(new IdleState()); } } else { parent.ChangeState(new IdleState()); } }
public void Enter(EnemyBehaviour parent) { Vector2 direction = (parent.Target.position - parent.transform.position).normalized; //vars = parent.Vars; abilityInstance = parent.AbilityInstance; abilityInstance.direction = direction; abilityInstance.Activate(); parent.ChangeState(new IdleState()); }
public void Update() { if (parent.Target != null) { Vector2 retreatVector = (parent.transform.position - parent.Target.position).normalized; parent.Movement.Move(retreatVector); parent.Animator.Walk(-retreatVector); parent.AttackCD -= Time.deltaTime; if (parent.AttackCD <= 0) { parent.ChangeState(new AttackState()); } } else { parent.ChangeState(new RetreatState()); } }
public void Update() { if (parent.IsRanged || parent.IsBoss) { parent.Animator.setAwakeingFalse(); } //change into follow state if player is close if (parent.Target != null) { if (parent.IsRanged || parent.IsBoss) { parent.Animator.setAwakeingTrue(); } float distance = Vector2.Distance(parent.Target.position, parent.transform.position); if (distance <= parent.EvadeDistance) { parent.ChangeState(new EvadeState()); } if (distance >= parent.AttackRange) { parent.ChangeState(new FollowState()); } // parent.ChangeState(new FollowState()); else { parent.AttackCD -= Time.deltaTime; if (parent.AttackCD <= 0) { parent.ChangeState(new AttackState()); } } } //Patroling if moveSpots are available else if (parent.MoveSpots.Length > 0) { parent.ChangeState(new PatrolState()); } }
IEnumerator RetractEnemy_C(EnemyBehaviour _enemy) { opened = true; if (animator) { animator.SetTrigger("Close"); } _enemy.ChangeState(EnemyState.Spawning); if (_enemy.GetNavMesh() != null) { _enemy.GetNavMesh().enabled = false; } PawnController enemyPawn = (PawnController)_enemy; for (float i = 0; i < spawnDuration; i += Time.deltaTime) { RecalculateEndspawnLocation(); _enemy.ChangeState(EnemyState.Spawning); enemyPawn.transform.position = Vector3.Lerp(endPosition, startPosition.position, verticalLerpCurve.Evaluate(i / spawnDuration)); yield return(null); } Destroy(_enemy.gameObject); }
public void Enter(EnemyBehaviour parent) { numOfAbilities = parent.BossAbillites.Length; currentAbility = (int)Random.Range(0, numOfAbilities); //Debug.Log("enter boss"); Vector2 direction = (parent.Target.position - parent.transform.position).normalized; abilityInstance = parent.BossAbilityInstance; abilityInstance.direction = direction; abilityInstance.Activate(); parent.setAbility(currentAbility); parent.ChangeState(new IdleState()); }
private IEnumerator CancelBump_C() { animator.ResetTrigger("FallingTrigger"); animator.ResetTrigger("StandingUpTrigger"); moveState = MoveState.Pushed; float i_restDuration = pushDatas.bumpRestDuration; if (isPlayer) { i_restDuration = pushDatas.bumpPlayerRestDuration; } i_restDuration = i_restDuration + Random.Range(pushDatas.bumpRandomRestModifier.x, pushDatas.bumpRandomRestModifier.y); float i_gettingUpDuration = maxGettingUpDuration; //if (animator != null) { animator.SetTrigger("FallingTrigger"); } if (damageAfterBump > 0) { Damage(damageAfterBump); } //when arrived on ground while (i_restDuration > 0) { i_restDuration -= Time.deltaTime; if (i_restDuration <= 0 && animator != null) { //animator.SetTrigger("StandingUpTrigger"); } yield return(null); } //time to get up if (this != null && transform != null) { EnemyBehaviour i_enemy = GetComponent <EnemyBehaviour>(); while (i_gettingUpDuration > 0) { i_gettingUpDuration -= Time.deltaTime; if (i_gettingUpDuration <= 0 && i_enemy != null) { i_enemy.ChangeState(EnemyState.Following); } yield return(null); } } moveState = MoveState.Idle; }
IEnumerator SpawnEnemy_C(EnemyBehaviour _enemy, bool _addSmallRandomDelay, float _spawnSpeedOverride) { if (_spawnSpeedOverride != -1) { spawnDuration = _spawnSpeedOverride; } //_enemy.transform.localScale = Vector3.one; _enemy.gameObject.SetActive(false); _enemy.transform.position = startPosition.position; if (_addSmallRandomDelay) { yield return(new WaitForSeconds(Random.Range(1.5f, 3f))); } opened = true; if (animator) { animator.SetTrigger("Open"); } if (_spawnSpeedOverride != -1) { yield return(new WaitForSeconds(0.1f)); } _enemy.ChangeState(EnemyState.Spawning); if (_enemy.GetNavMesh() != null) { _enemy.GetNavMesh().enabled = false; } GameObject explosionVisualizer = default; if (type == SpawnerType.Air) { _enemy.gameObject.SetActive(false); explosionVisualizer = Instantiate(Resources.Load <GameObject>("ArenaResource/Spawners/P_ExplosionVisualizer")); explosionVisualizer.transform.position = endPosition + Vector3.up * 0.01f; explosionVisualizer.transform.rotation = Quaternion.LookRotation(Vector3.up); IndianaExplosion ie = explosionVisualizer.GetComponent <IndianaExplosion>(); ie.myScale = _enemy.spawnImpactRadius * 0.33f; ie.waitTimeForExplosion = zonePreviewDuration / 3f; ie.Initiate(); yield return(new WaitForSeconds(zonePreviewDuration / 3f)); _enemy.gameObject.SetActive(true); } else { _enemy.gameObject.SetActive(true); } PawnController enemyPawn = (PawnController)_enemy; if (_enemy.GetNavMesh() != null) { _enemy.GetNavMesh().enabled = false; } for (float i = 0; i < spawnDuration; i += Time.deltaTime) { RecalculateEndspawnLocation(); _enemy.ChangeState(EnemyState.Spawning); if (_enemy.GetNavMesh() != null) { _enemy.GetNavMesh().enabled = false; } switch (type) { case SpawnerType.Ground: Vector3 i_horizontalPosition = Vector3.Lerp(startPosition.position, endPosition, horizontalLerpCurve.Evaluate(i / spawnDuration)); Vector3 i_verticalPosition = Vector3.Lerp(startPosition.position, endPosition, verticalLerpCurve.Evaluate(i / spawnDuration)); Vector3 i_finalPosition = i_horizontalPosition; Vector3 i_flatDirection = endPosition - startPosition.position; i_flatDirection.y = 0; Quaternion i_wantedRotation = Quaternion.Lerp(startPosition.rotation, Quaternion.LookRotation(i_flatDirection), rotationLerpCurve.Evaluate(i / spawnDuration)); i_finalPosition.y = i_verticalPosition.y; enemyPawn.transform.position = i_horizontalPosition; enemyPawn.transform.rotation = i_wantedRotation; break; case SpawnerType.Air: enemyPawn.transform.position = Vector3.Lerp(startPosition.position, endPosition, verticalLerpCurve.Evaluate(i / spawnDuration)); break; case SpawnerType.Underground: enemyPawn.transform.position = Vector3.Lerp(startPosition.position, endPosition, verticalLerpCurve.Evaluate(i / spawnDuration)); break; } yield return(null); } enemyPawn.transform.position = endPosition; if (type == SpawnerType.Air) { Destroy(explosionVisualizer); foreach (Collider col in Physics.OverlapSphere(explosionVisualizer.transform.position, _enemy.spawnImpactRadius)) { IHitable hitableTarget = col.GetComponent <IHitable>(); if (hitableTarget != null) { hitableTarget.OnHit(default, explosionVisualizer.transform.position - col.transform.position, _enemy, _enemy.spawnImpactDamages, DamageSource.SpawnImpact);
public void EndAttack() { enemyScriptRef.ChangeState(EnemyState.PauseAfterAttack); }
private IEnumerator Bump_C(Vector3 _bumpDirectionFlat, BumpForce _force) { animator.SetTrigger("BumpTrigger"); moveState = MoveState.Pushed; FeedbackManager.SendFeedback(eventOnBeingBumpedAway, this); float bumpDistance = 0; float bumpDuration = 0; switch (_force) { case BumpForce.Force1: if (isPlayer) { bumpDistance = pushDatas.BumpPlayerForce1Distance; bumpDuration = pushDatas.BumpPlayerForce1Duration; } else { bumpDistance = pushDatas.BumpForce1Distance; bumpDuration = pushDatas.BumpForce1Duration; } break; case BumpForce.Force2: if (isPlayer) { bumpDistance = pushDatas.BumpPlayerForce2Distance; bumpDuration = pushDatas.BumpPlayerForce2Duration; } else { bumpDistance = pushDatas.BumpForce2Distance; bumpDuration = pushDatas.BumpForce2Duration; } break; case BumpForce.Force3: if (isPlayer) { bumpDistance = pushDatas.BumpPlayerForce3Distance; bumpDuration = pushDatas.BumpPlayerForce3Duration; } else { bumpDistance = pushDatas.BumpForce3Distance; bumpDuration = pushDatas.BumpForce3Duration; } break; } bumpDistance = bumpDistance + Random.Range(pushDatas.bumpRandomRangeModifier.x, pushDatas.bumpRandomRangeModifier.y); bumpDuration = bumpDuration + Random.Range(pushDatas.bumpRandomDurationModifier.x, pushDatas.bumpRandomDurationModifier.y); float i_restDuration = pushDatas.bumpRestDuration; if (isPlayer) { i_restDuration = pushDatas.bumpPlayerRestDuration; } i_restDuration = i_restDuration + Random.Range(pushDatas.bumpRandomRestModifier.x, pushDatas.bumpRandomRestModifier.y); Vector3 i_bumpDirection = _bumpDirectionFlat; i_bumpDirection.y = 0; Vector3 i_bumpInitialPosition = transform.position; Vector3 i_bumpDestinationPosition = transform.position + i_bumpDirection * bumpDistance; transform.rotation = Quaternion.LookRotation(-i_bumpDirection); float i_gettingUpDuration = maxGettingUpDuration; EnemyBehaviour i_enemy = GetComponent <EnemyBehaviour>(); if (i_enemy != null) { i_enemy.ChangeState(EnemyState.Bumped); } float i_bumpTimeProgression = 0; bool i_playedEndOfFall = false; while (i_bumpTimeProgression < 1) { moveState = MoveState.Pushed; i_bumpTimeProgression += Time.deltaTime / bumpDuration; //move ! Vector3 i_newPosition = Vector3.Lerp(i_bumpInitialPosition, i_bumpDestinationPosition, pushDatas.bumpSpeedCurve.Evaluate(i_bumpTimeProgression)); //check of collision Collider i_hitCollider = CheckForCollision(); if (i_hitCollider != null) { if (isPlayer) { WallSplat(WallSplatForce.Heavy, transform.position - i_hitCollider.ClosestPoint(transform.position)); } else { WallSplat(WallSplatForce.Heavy, transform.position - i_hitCollider.ClosestPoint(transform.position)); } } rb.MovePosition(i_newPosition); //trigger end anim if (i_bumpTimeProgression >= whenToTriggerFallingAnim && i_playedEndOfFall == false) { animator.SetTrigger("FallingTrigger"); i_playedEndOfFall = true; } yield return(null); } // After the whole bump-fly-fall sequence if (damageAfterBump > 0) { if ((currentHealth - damageAfterBump) <= 0) { DeathOverrideWithBump(); } Damage(damageAfterBump); } //when arrived on ground while (i_restDuration > 0) { i_restDuration -= Time.deltaTime; if (i_restDuration <= 0) { animator.SetTrigger("StandingUpTrigger"); } yield return(null); } //time to get up while (i_gettingUpDuration > 0) { i_gettingUpDuration -= Time.deltaTime; if (i_gettingUpDuration <= 0 && GetComponent <EnemyBehaviour>() != null) { i_enemy.ChangeState(EnemyState.Following); } yield return(null); } moveState = MoveState.Idle; }