Exemple #1
0
    // 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());
        }
    }
Exemple #2
0
    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());
        }
    }
Exemple #3
0
    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);
    }
Exemple #4
0
    // 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;
            }
        }
    }
Exemple #5
0
    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());
        }
    }
Exemple #6
0
    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());
        }
    }
Exemple #7
0
    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());
    }
Exemple #8
0
    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());
        }
    }
Exemple #9
0
    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());
        }
    }
Exemple #10
0
    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);
    }
Exemple #11
0
    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());
    }
Exemple #12
0
    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;
    }
Exemple #13
0
    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);
 }
Exemple #15
0
    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;
    }