Beispiel #1
0
 public DummyAttAnt(EState <TrueDummyEnemy.DummyEnemyInputs> myState, EventStateMachine <TrueDummyEnemy.DummyEnemyInputs> _sm,
                    float _rotSpeed, ICombatDirector _enemy) : base(myState, _sm)
 {
     cd            = 5;
     enemy         = _enemy;
     rotationSpeed = _rotSpeed;
 }
    private void Update()
    {
        if (run)
        {
            timer += Time.deltaTime;

            if (timer >= timeToAttack)
            {
                timer = 0;
                CalculateTimer();

                if (toAttack.Count > 0)
                {
                    ICombatDirector enemy = toAttack[Random.Range(0, toAttack.Count)];
                    enemy.ToAttack();

                    AddOrRemoveToList(enemy);
                }

                if (listAttackTarget.Count > 0)
                {
                    foreach (var item in listAttackTarget)
                    {
                        if (item.Value.Count > 0)
                        {
                            ICombatDirector enemy = item.Value[Random.Range(0, item.Value.Count)];
                            enemy.ToAttack();

                            RemoveToAttack(enemy, item.Key);
                        }
                    }
                }
            }
        }
    }
    void AssignPos(ICombatDirector e)
    {
        Transform toFollow = GetNearPos(e.CurrentPos(), e.GetDistance());

        e.SetTargetPosDir(toFollow);

        e.SetBool(true);
    }
    public void GetNewNearPos(ICombatDirector e)
    {
        Transform pos = e.CurrentTargetPosDir();

        positionsToAttack.Add(pos);

        e.SetTargetPosDir(GetNearPos(e.CurrentPos(), e.GetDistance()));
    }
 public DummyIdleState(EState <TrueDummyEnemy.DummyEnemyInputs> myState, EventStateMachine <TrueDummyEnemy.DummyEnemyInputs> _sm,
                       Func <bool> _isAttack, Func <Transform> _isTarget, float _disInCom, float _disNormal, float _rotSpeed, ICombatDirector _enemy) : base(myState, _sm)
 {
     IsAttack     += _isAttack;
     MyPos        += _isTarget;
     distanceMax   = _disNormal;
     distanceMin   = _disInCom;
     enemy         = _enemy;
     rotationSpeed = _rotSpeed;
 }
    void AssignPos()
    {
        ICombatDirector randomEnemy = waitToAttack[Random.Range(0, waitToAttack.Count)];

        waitToAttack.Remove(randomEnemy);
        toAttack.Add(randomEnemy);

        AssignPos(randomEnemy);

        randomEnemy.SetBool(true);
    }
 public void AddAwake(ICombatDirector enemy)
 {
     if (!initialize)
     {
         awakeList.Add(enemy);
     }
     else
     {
         AddOrRemoveToList(enemy);
         enemy.SetTarget(head);
     }
 }
 public void AttackRelease(ICombatDirector e)
 {
     if (inAttack.Contains(e))
     {
         positionsToAttack.Add(e.CurrentTargetPosDir());
         e.SetBool(false);
         inAttack.Remove(e);
         if (waitToAttack.Count > 0)
         {
             AssignPos();
         }
     }
 }
    public void AddToAttack(ICombatDirector e, EntityBase target)
    {
        if (target == head)
        {
            AddOrRemoveToList(e);
        }
        else
        {
            if (listAttackTarget.ContainsKey(target))
            {
                if (listAttackTarget[target].Count >= maxEnemies)
                {
                    e.SetTarget(head);
                    AddOrRemoveToList(e);
                }
                else
                {
                    Transform toFollow = GetNearPos(e.CurrentPos(), target);

                    listAttackTarget[target].Add(e);

                    e.SetTargetPosDir(toFollow);

                    e.SetBool(true);
                }
            }
        }

        if (!run && listAttackTarget.Count > 0)
        {
            foreach (var item in listAttackTarget)
            {
                if (item.Value.Count >= 0)
                {
                    RunDirector();
                    return;
                }
            }
        }
    }
    Transform GetNearPos(Vector3 p, float distance, ICombatDirector enemy)
    {
        Transform current = null;

        for (int i = 0; i < positionsToAttack.Count; i++)
        {
            if (current == null)
            {
                current = positionsToAttack[i];
            }
            else
            {
                if (Vector3.Distance(current.position * distance, p) > Vector3.Distance(positionsToAttack[i].position * distance, p))
                {
                    current = positionsToAttack[i];
                }
            }
        }

        positionsToAttack.Remove(current);

        return(current);
    }
Beispiel #11
0
 public DummyAttackState(EState <TrueDummyEnemy.DummyEnemyInputs> myState, EventStateMachine <TrueDummyEnemy.DummyEnemyInputs> _sm,
                         float _cd, ICombatDirector _enemy) : base(myState, _sm)
 {
     cd    = _cd;
     enemy = _enemy;
 }
    void AddOrRemoveToList(ICombatDirector e)
    {
        if (!toAttack.Contains(e) && !waitToAttack.Contains(e))
        {
            if (toAttack.Count + inAttack.Count < maxEnemies)
            {
                toAttack.Add(e);
                AssignPos(e);
            }
            else
            {
                waitToAttack.Add(e);
            }
        }
        else
        {
            if (toAttack.Contains(e))
            {
                toAttack.Remove(e);
                inAttack.Add(e);
            }
            else if (waitToAttack.Contains(e))
            {
                waitToAttack.Remove(e);
            }
            else if (inAttack.Contains(e))
            {
                positionsToAttack.Add(e.CurrentTargetPosDir());
                e.SetBool(false);
                inAttack.Remove(e);
                if (waitToAttack.Count > 0)
                {
                    AssignPos();
                }
            }
        }

        if (!run)
        {
            if (toAttack.Count > 0)
            {
                RunDirector();
                return;
            }

            else if (listAttackTarget.Count > 0)
            {
                foreach (var item in listAttackTarget)
                {
                    if (item.Value.Count >= 0)
                    {
                        RunDirector();
                        return;
                    }
                }
            }
        }
        else
        {
            if (listAttackTarget.Count > 0)
            {
                foreach (var item in listAttackTarget)
                {
                    if (item.Value.Count >= 0)
                    {
                        return;
                    }
                }
            }

            if (toAttack.Count == 0)
            {
                StopDirector();
            }
        }
    }
    public void RemoveToAttack(ICombatDirector e, EntityBase target)
    {
        if (toAttack.Contains(e))
        {
            positionsToAttack.Add(e.CurrentTargetPosDir());
            e.SetBool(false);
            toAttack.Remove(e);
            if (waitToAttack.Count > 0)
            {
                AssignPos();
            }
        }
        else if (waitToAttack.Contains(e))
        {
            waitToAttack.Remove(e);
        }
        else if (inAttack.Contains(e))
        {
            positionsToAttack.Add(e.CurrentTargetPosDir());
            e.SetBool(false);
            inAttack.Remove(e);
            if (waitToAttack.Count > 0)
            {
                AssignPos();
            }
        }

        if (listAttackTarget.ContainsKey(target))
        {
            otherTargetPos[target].Add(e.CurrentTargetPosDir());
            listAttackTarget[target].Remove(e);
        }

        if (!run)
        {
            if (toAttack.Count > 0)
            {
                RunDirector();
                return;
            }

            else if (listAttackTarget.Count > 0)
            {
                foreach (var item in listAttackTarget)
                {
                    if (item.Value.Count >= 0)
                    {
                        RunDirector();
                        return;
                    }
                }
            }
        }
        else
        {
            if (listAttackTarget.Count > 0)
            {
                foreach (var item in listAttackTarget)
                {
                    if (item.Value.Count >= 0)
                    {
                        return;
                    }
                }
            }

            if (toAttack.Count == 0)
            {
                StopDirector();
            }
        }
    }