Example #1
0
    //=====================================================

    //=====================================================

    #region Private Methods

    #region Unity Calls

    private void Awake()
    {
        _wayPoints   = new List <PathNode>();
        _currentJobs = new List <Job>();
        _gems        = new Queue <Transform>();

        _maskPlayer = 1 << LayerMask.NameToLayer("Player") | 1 << LayerMask.NameToLayer("Collidable");
        _maskShield = 1 << LayerMask.NameToLayer("Collidable");

        _thisTransform = this.transform;
        _thisAgent     = _thisTransform.GetComponent <NavMeshAgent>();
        _thisRigidbody = _thisTransform.GetComponent <Rigidbody>();
        _audioSource   = _thisRigidbody.GetComponent <AudioSource>();
        //guard_motor = GetComponent<BotFreeMovementMotor>();
        _triggerFindTarget = _thisTransform.Find("TriggerFindTarget");
        _triggerFindTarget.GetComponent <SphereCollider>().radius = _triggerTargetRadius;
        _animation = _thisTransform.GetComponentInChildren <EnemyAnimation>();
        _psDeathFx = _thisTransform.FindChild("psDeathFx").gameObject;
        //_debugStateRenderer = _thisTransform.FindChild( "DebugState" ).GetComponent<Renderer>();
        _triggerTargetInRange = _thisTransform.FindChild("TriggerFindTarget").gameObject;

        // Set other defaults
        _currentState = eEnemyState.INIT;
        _health       = Convert.ToInt32(SettingsManager.GetSettingsItem("ENEMY_HEALTH", GameDataManager.Instance.PlayerBossLevel));
        _isPaused     = false;
    }
Example #2
0
    private IEnumerator ShiftState(float waitTime, eEnemyState state)
    {
        yield return(new WaitForSeconds(waitTime));

        mState             = state;
        mStateShiftRoutine = null;
    }
Example #3
0
    //Basic movement using preset nodes. Ignores the current and last nodes when making a decision
    private void NodeMovement()
    {
        float minDistance  = 1000;
        int   tempPosition = 0;


        for (int i = 0; i < sNodeManager.GetNodePositions().Length; i++)
        {
            float tempDistance = Vector3.Distance(transform.position, sNodeManager.GetNodePositions()[i]);

            if (i == CurrentPosition || i == LastPosition)
            {
            }
            else if (tempDistance < minDistance)
            {
                minDistance  = tempDistance;
                Target       = sNodeManager.GetNodePositions()[i];
                tempPosition = i;
            }
        }

        LastPosition    = CurrentPosition;
        CurrentPosition = tempPosition;

        eCurrentState = eEnemyState.Moving;
    }
Example #4
0
File: Enemy.cs Project: Comts/git1
    public void Hit(float amount)
    {
        mCurrentHP -= amount;
        //Show HPBar
        if (mHPBar == null)
        {
            mHPBar = GaugeBarPool.Instance.GetFromPool();
        }
        if (mCurrentHP <= 0)
        {
            mState      = eEnemyState.Die;
            mDelayCount = 0;
            mController.AddCoin(mReward);

            mHPBar.gameObject.SetActive(false);
            mHPBar = null;
            TextEffect textEffect = mController.GetTextEffect();
            textEffect.ShowText(mReward);
            textEffect.transform.position = mHPBarPos.position;// 월드좌표 카메라
            //textEffect.transform.position = Camera.main.WorldToScreenPoint(mHPBarPos.position);// 오버레이일때  tag가 MainCamera돼어야 Camera.가능
            //text effect
        }
        else
        {
            mHPBar.SetGauge(mCurrentHP, mMaxHP);
            mHPBar.transform.position = mHPBarPos.position; // 위치 변경하려면  Update에 넣으면됨.
        }
    }
Example #5
0
File: Enemy.cs Project: Comts/git1
 private void OnEnable()
 {
     mAnim.SetBool(AnimHash.Dead, false);
     mCurrentHP = mMaxHP;
     mState     = eEnemyState.Idel;
     StartCoroutine(Statemachine());
 }
Example #6
0
    // Use this for initialization
    void Start()
    {
        CurrentPosition = 100;
        LastPosition    = 100;

        //EnemySpeed = 0.05f;
        PlayerTarget  = GameObject.FindGameObjectWithTag("Player").transform;
        sGameManager  = GameObject.FindGameObjectWithTag("GameManager").GetComponent <GameManager>();
        sSoundManager = GameObject.FindGameObjectWithTag("Sound Manager").GetComponent <SoundManager>();
        sNodeManager  = GameObject.FindGameObjectWithTag("Nodes").GetComponent <NodeManager>();
        sEnemyGen     = GameObject.FindGameObjectWithTag("Enemy Generator").GetComponent <EnemyGenerator>();

        CanFire = true;

        //if light no seekingnodes
        if (gameObject.CompareTag("Medium Enemy"))
        {
            eCurrentState = eEnemyState.SeekingNode;
            Health        = 3;
        }
        else if (gameObject.CompareTag("Enemy"))
        {
            eCurrentState = eEnemyState.Moving;
            Health        = 1;
        }
    }
Example #7
0
    private IEnumerator EnemyState()
    {
        WaitForSeconds oneSec = new WaitForSeconds(1);

        while (true)
        {
            switch (enemystate)
            {
            case eEnemyState.Idle:
                anim.SetBool(AnimHash.Walk, false);
                rb2d.velocity = Vector2.zero;
                enemystate    = eEnemyState.Move;
                break;

            case eEnemyState.Move:
                anim.SetBool(AnimHash.Walk, true);
                rb2d.velocity = transform.right * Speed;
                enemystate    = eEnemyState.Idle;
                break;

            case eEnemyState.Attack:
                anim.SetBool(AnimHash.Walk, false);
                anim.SetBool(AnimHash.Attack, true);
                rb2d.velocity = Vector2.zero;
                break;

            case eEnemyState.Dead:
                break;
            }
            yield return(oneSec);
        }
    }
Example #8
0
 private void OnEnable()
 {
     anim.SetBool(AnimationHashList.AnimHashDead, false);
     player = null;
     hpBar  = null;
     state  = eEnemyState.SeekPlayer;
 }
Example #9
0
File: Enemy.cs Project: Comts/git1
 private void OnEnable()
 {
     mAnim.SetBool(AnimHash.Dead, false);
     mCurrentHP  = mMaxHP;
     mState      = eEnemyState.Idel;
     mDelayCount = 0;
 }
Example #10
0
 public void Hit(int damage)
 {
     mCurrentHP = mCurrentHP - damage;
     if (mCurrentHP <= 0)
     {
         mState = eEnemyState.Dead;
     }
 }
Example #11
0
 private void OnCollisionEnter2D(Collision2D collision)
 {
     if (collision.gameObject.CompareTag("Player"))
     {
         state  = eEnemyState.FindPlayer;
         player = collision.gameObject.GetComponent <PlayerController>();
     }
 }
Example #12
0
 public void EnterAttackArea(bool isEnter)
 {
     mAttackFlag = isEnter;
     if (mAttackFlag)
     {
         mState = eEnemyState.Attack;
     }
 }
Example #13
0
File: Enemy.cs Project: Comts/git1
 private void OnEnable()
 {
     mAnim.SetBool(AnimHash.Dead, false);
     mCurrentHP = mMaxHP;
     mState     = eEnemyState.Idel;
     mBody.transform.position = Vector3.zero;
     mDelayCount = 0;
 }
Example #14
0
 private void OnCollisionEnter2D(Collision2D collision)
 {
     if (collision.gameObject.CompareTag("Player"))
     {
         enemystate = eEnemyState.Attack;
         target     = collision.gameObject.GetComponent <Player>();
         //targetObj = collision.gameObject;
     }
 }
Example #15
0
File: Enemy.cs Project: Comts/git1
 public void Hit(float amount)
 {
     mCurrentHP -= amount;
     if (mCurrentHP <= 0)
     {
         mState      = eEnemyState.Die;
         mDelayCount = 0;
         mController.AddCoin(mReward);
     }
 }
Example #16
0
 public void Hit(int damage)
 {
     mCurrentHP = mCurrentHP - damage;
     if (mCurrentHP <= 0)
     {
         mState     = eEnemyState.Dead;
         mCurrentHP = 0;
     }
     HPBar.ShowGauge(mCurrentHP, MaxHP);
 }
Example #17
0
    // Start is called before the first frame update
    void Start()
    {
        mCurrentHP = MaxHP;

        mRB2D = GetComponent <Rigidbody2D>();
        mAnim = GetComponent <Animator>();

        mState = eEnemyState.Idle;
        StartCoroutine(AI());
    }
Example #18
0
 public void SetupData(float _HP = -1)
 {
     if (_HP > 0)
     {
         MaxHP = _HP;
     }
     currentHP  = MaxHP;
     enemystate = eEnemyState.Idle;
     StartCoroutine(EnemyState());
 }
Example #19
0
 private void OnCollisionEnter2D(Collision2D collision)
 {
     if (collision.gameObject.CompareTag("Wall") && mbDead == false)
     {
         mState = eEnemyState.Idle;
         if (mStateShiftRoutine != null)
         {
             StopCoroutine(mStateShiftRoutine);
             mStateShiftRoutine = null;
         }
     }
 }
Example #20
0
 private void OnCollisionExit2D(Collision2D collision)
 {
     if (mState == eEnemyState.Die)
     {
         return;
     }
     if (collision.gameObject.CompareTag("Player"))
     {
         mTarget = null;
         mState  = eEnemyState.Idle;
     }
 }
Example #21
0
    // Start is called before the first frame update
    void Start()
    {
        HPBar      = HPBarPool.GetFromPool();
        mCurrentHP = MaxHP;
        HPBar.ShowGauge(mCurrentHP, MaxHP);

        mRB2D = GetComponent <Rigidbody2D>();
        mAnim = GetComponent <Animator>();

        mState = eEnemyState.Idle;
        StartCoroutine(AI());
    }
Example #22
0
 public void Hit(float damage)
 {
     currentHP -= damage;
     hpBar.ShowGauge(currentHP, MaxHP);
     if (currentHP <= 0)
     {
         enemystate = eEnemyState.Dead;
         anim.SetBool(AnimHash.Dead, true);
         GameController.instance.AddKillCount();
         hpBar.gameObject.SetActive(false);
     }
 }
Example #23
0
File: Enemy.cs Project: Comts/git1
    private IEnumerator Statemachine()
    {
        WaitForSeconds PointOne = new WaitForSeconds(.1f);

        while (true)
        {
            yield return(PointOne);

            switch (mState)
            {
            case eEnemyState.Idel:
                if (mDelayCount > 20)
                {
                    mState = eEnemyState.Walk;
                    mAnim.SetBool(AnimHash.Walk, true);
                    //방향
                    //속도
                    mRB2D.velocity = transform.right * mSpeed;
                    mDelayCount    = 0;
                }
                else
                {
                    mDelayCount++;
                }
                break;

            case eEnemyState.Walk:
                if (mDelayCount > 10)
                {
                    mState = eEnemyState.Idel;
                    mAnim.SetBool(AnimHash.Walk, false);
                    mRB2D.velocity = Vector2.zero;
                    mDelayCount    = 0;
                }
                else
                {
                    mDelayCount++;
                }
                break;

            case eEnemyState.Attack:
                break;

            case eEnemyState.Die:
                break;

            default:
                Debug.LogError("wrong state: " + mState);
                break;
            }
        }
    }
Example #24
0
    public void StateCheck()
    {
        switch (mState)
        {
        case eEnemyState.Idle:
            mAnim.SetBool(AnimHash.Walk, false);
            mAnim.SetBool(AnimHash.Attack, false);
            mRB2D.velocity = Vector2.zero;
            mState         = eEnemyState.Walk;
            break;

        case eEnemyState.Walk:
            if (Random.Range(0, 2) < 1)
            {
                mRB2D.velocity     = Vector2.right * mSpeed;
                transform.rotation = Quaternion.Euler(0, 0, 0);
            }
            else
            {
                mRB2D.velocity     = Vector2.left * mSpeed;
                transform.rotation = Quaternion.Euler(0, 180, 0);
            }
            mAnim.SetBool(AnimHash.Walk, true);
            mAnim.SetBool(AnimHash.Attack, false);
            mState = eEnemyState.Idle;
            break;

        case eEnemyState.Attack:
            mAnim.SetBool(AnimHash.Walk, false);
            mAnim.SetBool(AnimHash.Attack, true);

            Vector2 dir = mTarget.transform.position - transform.position;
            if (dir.x > 0)
            {
                transform.rotation = Quaternion.Euler(0, 0, 0);
            }
            else
            {
                transform.rotation = Quaternion.Euler(0, 180, 0);
            }
            mRB2D.velocity = Vector2.zero;
            break;

        case eEnemyState.Die:
            mAnim.SetBool(AnimHash.Dead, true);
            mAnim.SetBool(AnimHash.Walk, false);
            mAnim.SetBool(AnimHash.Attack, false);
            mRB2D.velocity = Vector2.zero;
            mTimer.enabled = true;
            break;
        }
    }
Example #25
0
 private void OnCollisionEnter2D(Collision2D collision)
 {
     Debug.Log("Collision " + collision.gameObject.tag);
     if (collision.gameObject.CompareTag("Wall"))
     {
         Debug.Log("sasssssss");
         mState = eEnemyState.Idle;
         if (mStateShiftRoutine != null)
         {
             StopCoroutine(mStateShiftRoutine);
             mStateShiftRoutine = null;
         }
     }
 }
Example #26
0
    private void OnEnable()
    {
        mTimer.StopWorking();
        mState         = eEnemyState.Idle;
        mTimer.enabled = false;
        mStateMachine  = StartCoroutine(AutoMove());
        mCurrentHP     = mHP;
        Debug.Log(EnemyHPBarPool.Instance);
        mHPBar = EnemyHPBarPool.Instance.GetFromPool();

        mHPBar.ShowGauge(mCurrentHP, mHP);
        //Vector3 screenPos = Camera.main.WorldToScreenPoint(mHPBarPos.position);
        mHPBar.transform.position = mHPBarPos.position;
    }
Example #27
0
 private void OnCollisionEnter2D(Collision2D collision)
 {
     if (mState == eEnemyState.Die)
     {
         return;
     }
     if (collision.gameObject.CompareTag("Player"))
     {
         mState  = eEnemyState.Attack;
         mTarget = collision.gameObject.GetComponent <Player>();
         StateCheck();
         StopCoroutine(mStateMachine);
         mStateMachine = StartCoroutine(AutoMove());
     }
 }
Example #28
0
 private void OnCollisionEnter2D(Collision2D collision)
 {
     //Debug.Log("Collision" + collision.gameObject.tag);
     if (collision.gameObject.CompareTag("Wall"))
     {
         mState = eEnemyState.Idle;
         //mAnim.SetBool(AnimHash.Walk, false);
         if (mStateShiftRoutine != null)
         {
             StopCoroutine(mStateShiftRoutine);
             mStateShiftRoutine = null;
             //should reset as null becuase the corouitne overlaps and does not function effectively
         }
     }
 }
Example #29
0
File: Enemy.cs Project: Comts/git1
 public void Hit(float amount)
 {
     mCurrentHP -= amount;
     //Show HPBar
     if (mCurrentHP <= 0)
     {
         mState      = eEnemyState.Die;
         mDelayCount = 0;
         mController.AddCoin(mReward);
         TextEffect textEffect = mController.GetTextEffect();
         textEffect.ShowText(mReward);
         textEffect.transform.position = mHPBarPos.position;// 월드좌표 카메라
         //textEffect.transform.position = Camera.main.WorldToScreenPoint(mHPBarPos.position);// 오버레이일때  tag가 MainCamera돼어야 Camera.가능
         //text effect
     }
 }
Example #30
0
File: Enemy.cs Project: Comts/git1
 private void OnCollisionEnter2D(Collision2D collision)
 {
     if (collision.gameObject.CompareTag("Player"))
     {
         if (mTarget == null)
         {
             mTarget = collision.gameObject.GetComponent <Player>();
         }
         mAnim.SetBool(AnimHash.Walk, false);
         mState      = eEnemyState.Attack;
         mDelayCount = 0;
         //Player p = collision.gameObject.GetComponent<Player>();
         //p.Hit(1);
         //collision.gameObject.SendMessage("Hit",1, SendMessageOptions.DontRequireReceiver); //파라메터 1개가능
     }
 }
Example #31
0
        public override void Update(GameTime gameTime)
        {
            float mls = (float)gameTime.ElapsedGameTime.TotalMilliseconds / 1000.0f;
            mTimer += (float)gameTime.ElapsedGameTime.TotalMilliseconds;

            if (mState == eEnemyState.FLOCK)
            {
                this.mAnimPlayer0.Update(gameTime);
                this.mAnimPlayer1.Update(gameTime);
                this.mAnimPlayer2.Update(gameTime);
                this.mAnimPlayer3.Update(gameTime);
                this.mAnimPlayer4.Update(gameTime);

                // move towards nearest owner
                if (mOwner != null)
                {
                    Vector2 dir = mOwner.mPOI - mPosition;
                    dir.Normalize();

                    mVelocity = mVelocity + mls * (dir * mChaseStrength);

                    if (mTimer - mOwnedTime > mOwnedDuration)
                    {
                        mOwner.mOwnedCount--;
                        mOwner.UnOwnEnemy(this);
                        mOwner = null;
                    }
                }
                else
                {
                    // no owner, so move towards current point of interest

                    Vector2 dir = Program.Instance.GetCurrentPointOfInterest() - mPosition;

                    if (dir.Length() > InterestRadius)
                    {
                        dir.Normalize();

                        mVelocity = mVelocity + mls * (dir * mChaseStrength);
                    }
                }

                // move away from nearest predator
                Player predator = GetNearestPredator();

                if (predator != null)
                {
                    Vector2 dir = mPosition - predator.mPosition;
                    if (dir.Length() - Radius - predator.Radius < InterestRadius)
                    {
                        dir.Normalize();

                        mVelocity = mVelocity + mls * (dir * mAvoidPlayerStrength);
                    }
                }

                // move away from nearest enemy
                Enemy enemy = GetNearestEnemy();

                if (enemy != this)
                {
                    Vector2 dir = mPosition - enemy.mPosition;
                    if (dir.Length() - Radius - enemy.Radius < InterestRadius)
                    {
                        dir.Normalize();

                        mVelocity = mVelocity + mls * (dir * mAvoidEnemyStrength);
                    }
                }

                Enemy ownedEnemy = GetNearestOwnedEnemy();
                if (ownedEnemy != null)
                {
                    Vector2 dir = mPosition - enemy.mPosition;
                    if (dir.Length() - Radius - enemy.Radius < InterestRadius)
                    {
                        if (dir.Length() - Radius - enemy.Radius < Radius)
                        {
                            if (mOwner != null && enemy.mOwner != null && mOwner != enemy.mOwner)
                            {
                                // destroy both
                                Program.Instance.DestroyEnemy(this);
                                Program.Instance.DestroyEnemy(enemy);
                            }
                            else if (mOwner != null && enemy.mOwner == null && mState != eEnemyState.FIRE && enemy.mState != eEnemyState.FIRE)
                            {
                                // convert enemy
                                mOwner.OwnEnemy(enemy);
                                enemy.SetOwned(mOwner);
                            }
                            else if (mOwner == null && enemy.mOwner != null && mState != eEnemyState.FIRE && enemy.mState != eEnemyState.FIRE)
                            {
                                // convert this
                                enemy.mOwner.OwnEnemy(this);
                                SetOwned(enemy.mOwner);
                            }
                        }
                    }
                }

                // add drag
                Vector2 drag = new Vector2(-mVelocity.X, -mVelocity.Y);
                if (drag.Length() != 0)
                {
                    drag.Normalize();
                    mVelocity = mVelocity + mls * (drag * (mVelocity.Length() * 2));
                }

                if (mVelocity.Length() > mMaxSpeed)
                {
                    mVelocity.Normalize();
                    mVelocity = mVelocity * mMaxSpeed;
                }

                // set position
                mPositionX = mPosition.X + mls * mVelocity.X;
                mPositionY = mPosition.Y + mls * mVelocity.Y;
            }
            else if (mState == eEnemyState.FIRE)
            {
                if (mVelocity.Length() > mMaxSpeed)
                {
                    mVelocity.Normalize();
                    mVelocity = mVelocity * mMaxSpeed;
                }

                // set position
                mPositionX = mPosition.X + mls * mVelocity.X;
                mPositionY = mPosition.Y + mls * mVelocity.Y;

                if (mPosition.X > Config.Instance.GetAsInt("ScreenWidth") ||
                    mPosition.Y > Config.Instance.GetAsInt("ScreenHeight") ||
                    mPosition.X < 0 ||
                    mPosition.Y < 0)
                {
                    Program.Instance.DestroyEnemy(this);
                }

                if (mPrevOwner != null)
                {
                    if (mTimer - mFireTime > 100)
                    {
                        mState = eEnemyState.FLOCK;
                        mPrevOwner.OwnEnemy(this);
                        mPrevOwner = null;
                    }
                }

            }
            else if (mState == eEnemyState.HOMING)
            {
                if (mHomingPlayer.mHealth > 0)
                {
                    Vector2 dir = mHomingPlayer.mPosition - mPosition;
                    dir.Normalize();

                    mVelocity = mVelocity + mls * (dir * mChaseStrength);
                }
                else
                {
                    /*
                    mOwner.mOwnedCount--;
                    mOwner.UnOwnEnemy(this);
                    mOwner = null;
                     * */
                }

                // add drag
                Vector2 drag = new Vector2(-mVelocity.X, -mVelocity.Y);
                if (drag.Length() != 0)
                {
                    drag.Normalize();
                    mVelocity = mVelocity + mls * (drag * (mVelocity.Length() * 2));
                }

                if (mVelocity.Length() > mMaxSpeed)
                {
                    mVelocity.Normalize();
                    mVelocity = mVelocity * mMaxSpeed;
                }

                // set position
                mPositionX = mPosition.X + mls * mVelocity.X;
                mPositionY = mPosition.Y + mls * mVelocity.Y;
            }

            base.Update(gameTime);
        }
Example #32
0
 public void Homing(Player player)
 {
     mHomingPlayer = player;
     mState = eEnemyState.HOMING;
 }
Example #33
0
        public void Fire(Vector2 direction)
        {
            mFireDir = direction;
            mFireDir.Normalize();
            mVelocity = mFireDir * 500;
            mFireTime = mTimer;

            mState = eEnemyState.FIRE;
        }
Example #34
0
        public override void Update(GameTime gameTime)
        {
            float mls = (float)gameTime.ElapsedGameTime.TotalMilliseconds / 1000.0f;

            this.mAttackSide.Update(gameTime);
            this.mRunSide.Update(gameTime);

            // move towards nearest prey
            Player prey = GetNearestPrey();

            if (prey != null)
            {
                Vector2 dir = prey.mPosition - mPosition;
                dir.Normalize();

                mVelocity = mVelocity + mls * (dir * mChaseStrength);
                EnemyState = eEnemyState.ATTACK;
            }
            else
            {
                // no prey, so take a leisurely walk
                Vector2 dir = mTarget - mPosition;

                if (dir.Length() > InterestRadius)
                {
                    dir.Normalize();

                    mVelocity = mVelocity + mls * (dir * mChaseStrength);
                }
                else
                {
                    GetNewTarget();
                }
                EnemyState = eEnemyState.RUN;
            }

            // move away from nearest predator
            Player predator = GetNearestPredator();

            if (predator != null)
            {
                Vector2 dir = mPosition - predator.mPosition;
                if (dir.Length() - Radius - predator.Radius < InterestRadius)
                {
                    dir.Normalize();

                    mVelocity = mVelocity + mls * (dir * mAvoidStrength);
                }
            }

            // move away from nearest enemy
            Enemy enemy = GetNearestEnemy();

            if (enemy != this)
            {
                Vector2 dir = mPosition - enemy.mPosition;
                if (dir.Length() - Radius - enemy.Radius < InterestRadius)
                {
                    dir.Normalize();

                    mVelocity = mVelocity + mls * (dir * mAvoidStrength);
                }
            }

            // add drag
            Vector2 drag = new Vector2(-mVelocity.X, -mVelocity.Y);
            if (drag.Length() != 0)
            {
                drag.Normalize();
                mVelocity = mVelocity + mls * (drag * (mVelocity.Length() * 2));
            }

            if (mVelocity.Length() > mMaxSpeed)
            {
                mVelocity.Normalize();
                mVelocity = mVelocity * mMaxSpeed;
            }

            // set position
            mPositionX = mPosition.X + mls * mVelocity.X;
            mPositionY = mPosition.Y + mls * mVelocity.Y;

            base.Update(gameTime);
        }