Beispiel #1
0
    private void DecideActionDelay()
    {
        if (_curUnit.HP_Percent() < 0.5f && _curUnit._AIPattern != ChrController.AIPatterns.Retreat && Random.Range(0, 10) > 7)
        {
            GameManager.Instance._curPlayerEnemy = null;
            RandomWander();
        }
        else
        {
            //_target = AStarPathfinding.Instance.FindRandomTarget();
            switch (_curUnit._AIPattern)
            {
            case ChrController.AIPatterns.Random:
            {
                if (_target != null && Random.Range(0, 2) == 0)
                {
                    GameManager.Instance._curPlayerEnemy = _target._targetChr;
                    _target.GetRandomAttackRoute();
                }
                else
                {
                    GameManager.Instance._curPlayerEnemy = null;
                    RandomWander();
                    if (Random.Range(0, 10) > 6)
                    {
                        _curUnit._AIPattern = ChrController.AIPatterns.Guard;
                    }
                }
                //GameManager.Instance.MoveCurrentUnit();
            }
            break;

            case ChrController.AIPatterns.Guard:
            {
                if (_target != null)
                {
                    GameManager.Instance._curPlayerEnemy = _target._targetChr;
                    _target.GetRandomAttackRoute();
                }
                else
                {
                    GameManager.Instance._curPlayerEnemy = null;
                    AStarPathfinding.Instance.ClearPath();
                    if (_curUnit.HP_Percent() < 0.9f && Random.Range(0, 10) > 6)
                    {
                        _curUnit._AIPattern = ChrController.AIPatterns.Approach;
                    }
                }
            }
            break;

            case ChrController.AIPatterns.Approach:
            {
                if (_target != null)
                {
                    GameManager.Instance._curPlayerEnemy = _target._targetChr;
                    _target.GetRandomAttackRoute();
                }
                else
                {
                    GameManager.Instance._curPlayerEnemy = null;
                    FindPathtoEnemy();
                }
            }
            break;

            case ChrController.AIPatterns.Patrol:
            {
                if (_target != null)
                {
                    GameManager.Instance._curPlayerEnemy = _target._targetChr;
                    _target.GetRandomAttackRoute();
                }
                else
                {
                    GameManager.Instance._curPlayerEnemy = null;
                    PatrolToPoint();
                }
            }
            break;

            case ChrController.AIPatterns.Retreat:
            {
                if (_target != null)
                {
                    if (CalcDistance(_curUnit._position, _target._targetChr._position) <= 2)
                    {
                        if (Random.Range(0, 10) > 6)
                        {
                            GameManager.Instance._curPlayerEnemy = _target._targetChr;
                            _target.GetRandomAttackRoute();
                        }
                        else
                        {
                            GameManager.Instance._curPlayerEnemy = null;
                            RetreatToPoint();
                        }
                    }
                    else
                    {
                        if (Random.Range(0, 10) > 8)
                        {
                            GameManager.Instance._curPlayerEnemy = _target._targetChr;
                            _target.GetRandomAttackRoute();
                        }
                        else
                        {
                            GameManager.Instance._curPlayerEnemy = null;
                            RetreatToPoint();
                        }
                    }
                }
                else
                {
                    GameManager.Instance._curPlayerEnemy = null;
                    RetreatToPoint();
                }
            }
            break;
            } // end of switch
        }
        GameManager.Instance.MoveCurrentUnit();
    }