//===================================================== //===================================================== #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; }
private IEnumerator ShiftState(float waitTime, eEnemyState state) { yield return(new WaitForSeconds(waitTime)); mState = state; mStateShiftRoutine = null; }
//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; }
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에 넣으면됨. } }
private void OnEnable() { mAnim.SetBool(AnimHash.Dead, false); mCurrentHP = mMaxHP; mState = eEnemyState.Idel; StartCoroutine(Statemachine()); }
// 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; } }
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); } }
private void OnEnable() { anim.SetBool(AnimationHashList.AnimHashDead, false); player = null; hpBar = null; state = eEnemyState.SeekPlayer; }
private void OnEnable() { mAnim.SetBool(AnimHash.Dead, false); mCurrentHP = mMaxHP; mState = eEnemyState.Idel; mDelayCount = 0; }
public void Hit(int damage) { mCurrentHP = mCurrentHP - damage; if (mCurrentHP <= 0) { mState = eEnemyState.Dead; } }
private void OnCollisionEnter2D(Collision2D collision) { if (collision.gameObject.CompareTag("Player")) { state = eEnemyState.FindPlayer; player = collision.gameObject.GetComponent <PlayerController>(); } }
public void EnterAttackArea(bool isEnter) { mAttackFlag = isEnter; if (mAttackFlag) { mState = eEnemyState.Attack; } }
private void OnEnable() { mAnim.SetBool(AnimHash.Dead, false); mCurrentHP = mMaxHP; mState = eEnemyState.Idel; mBody.transform.position = Vector3.zero; mDelayCount = 0; }
private void OnCollisionEnter2D(Collision2D collision) { if (collision.gameObject.CompareTag("Player")) { enemystate = eEnemyState.Attack; target = collision.gameObject.GetComponent <Player>(); //targetObj = collision.gameObject; } }
public void Hit(float amount) { mCurrentHP -= amount; if (mCurrentHP <= 0) { mState = eEnemyState.Die; mDelayCount = 0; mController.AddCoin(mReward); } }
public void Hit(int damage) { mCurrentHP = mCurrentHP - damage; if (mCurrentHP <= 0) { mState = eEnemyState.Dead; mCurrentHP = 0; } HPBar.ShowGauge(mCurrentHP, MaxHP); }
// Start is called before the first frame update void Start() { mCurrentHP = MaxHP; mRB2D = GetComponent <Rigidbody2D>(); mAnim = GetComponent <Animator>(); mState = eEnemyState.Idle; StartCoroutine(AI()); }
public void SetupData(float _HP = -1) { if (_HP > 0) { MaxHP = _HP; } currentHP = MaxHP; enemystate = eEnemyState.Idle; StartCoroutine(EnemyState()); }
private void OnCollisionEnter2D(Collision2D collision) { if (collision.gameObject.CompareTag("Wall") && mbDead == false) { mState = eEnemyState.Idle; if (mStateShiftRoutine != null) { StopCoroutine(mStateShiftRoutine); mStateShiftRoutine = null; } } }
private void OnCollisionExit2D(Collision2D collision) { if (mState == eEnemyState.Die) { return; } if (collision.gameObject.CompareTag("Player")) { mTarget = null; mState = eEnemyState.Idle; } }
// 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()); }
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); } }
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; } } }
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; } }
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; } } }
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; }
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()); } }
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 } } }
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 } }
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개가능 } }
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); }
public void Homing(Player player) { mHomingPlayer = player; mState = eEnemyState.HOMING; }
public void Fire(Vector2 direction) { mFireDir = direction; mFireDir.Normalize(); mVelocity = mFireDir * 500; mFireTime = mTimer; mState = eEnemyState.FIRE; }
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); }