public StateBasicEnemyAir(BasicEnemy _p, float _speedX=-1) { p = _p; speedX = _speedX; if (speedX != -1) p.rb().velocity = new Vector3(speedX, p.rb().velocity.y, 0); }
void Start() { basicEnemy = enemy.GetComponent <BasicEnemy>(); playerInViewRange = false; }
private void SpawnEnemies(List <WaveEntity> selectedFormationEntities, int[] shipTypes, float minVerticalStartCoord, float maxVerticalStartCoord, float enemyHorizontalDist, float enemyVerticalDist, float maxEnemyHorizontalDist) { bool waveManeuvers = false; Vector2 maneuveringVector; float maneuveringVerticalLength = 0.0f; float selectedVerticalStartCoord = Random.Range(minVerticalStartCoord, maxVerticalStartCoord); float diffFromCeiling = maxVerticalStartCoord - selectedVerticalStartCoord; float diffFromFloor = selectedVerticalStartCoord - minVerticalStartCoord; float waveManeuveringRoom; if (diffFromCeiling > diffFromFloor) { waveManeuveringRoom = diffFromCeiling; maneuveringVector = Vector2.up * ManeuveringDirectionMoveSpeed; } else { waveManeuveringRoom = diffFromFloor; maneuveringVector = Vector2.down * ManeuveringDirectionMoveSpeed; } if (waveManeuveringRoom > ShipColliderVertSize) { //20 40 60 80 100 percent chance of a maneuvering wave depending on difficulty coefficient float waveManeuveringChangePercentage = (float)(_difficultyManagerScript.DifficultyCoefs[DifficultyParameter.DpWaveManeuveringChance] * 100) / GameConstants.MaxDifficulty; int doManeuver = Random.Range(0, 100); if (doManeuver < waveManeuveringChangePercentage) { waveManeuvers = true; maneuveringVerticalLength = Random.Range(ShipColliderVertSize, waveManeuveringRoom); } } //VII. Spawn Enemies GameObject waveScoreIndicator = Instantiate(WaveScoreIndicatorPrefab); waveScoreIndicator.transform.SetParent(CanvasScorePanel.transform, false); GameObject lineRendererObject = Instantiate(ShipConnectionPrefab, Vector3.zero, Quaternion.identity); EnemyWave curEnemyWave = new EnemyWave(_playerScript, lineRendererObject.GetComponent <LineRenderer>(), _canvasRectTransform, waveScoreIndicator, _scoreLeftAnchorXPos, _scoreRightAnchorXPos); for (int i = 0; i < selectedFormationEntities.Count; i++) { int enemyKind = shipTypes[i]; GameObject enemyPrefab = EnemyPrefabArray[enemyKind]; BasicEnemy enemyPrefabScript = enemyPrefab.GetComponent <BasicEnemy>(); Vector2 enemyPos; if (i > 0) { Vector2 posDiff = selectedFormationEntities[i].Position - selectedFormationEntities[i - 1].Position; int xPosDiff = (int)posDiff.x; int yPosDiff = (int)posDiff.y; int xIncrement = xPosDiff != 0 ? Math.Sign(xPosDiff) : 0; int yIncrement = yPosDiff != 0 ? Math.Sign(yPosDiff) : 0; Vector3 previousEnemyPos = curEnemyWave.GetLastEnemyPosition(); enemyPos = new Vector2(previousEnemyPos.x + xIncrement * enemyHorizontalDist, previousEnemyPos.y + yIncrement * enemyVerticalDist); } else { //determining first enemy position enemyPos = new Vector2(enemyPrefabScript.HorizontalSpawnCoord + selectedFormationEntities[i].Position.x * maxEnemyHorizontalDist, selectedVerticalStartCoord); } GameObject enemy = Instantiate(enemyPrefab, enemyPos, Quaternion.identity); Assert.IsNotNull(enemy); BasicEnemy basicEnemyScript = enemy.GetComponent <BasicEnemy>(); BasicMove basicMoveScript = enemy.GetComponent <BasicMove>(); curEnemyWave.AddNewEnemy(enemy, basicEnemyScript); basicEnemyScript.Initialize(_playerScript, _difficultyManagerScript, basicMoveScript, selectedFormationEntities[i].MoveDir, curEnemyWave); basicEnemyScript.SetMoveDir(selectedFormationEntities[i].MoveDir); } curEnemyWave.FinalizeAfterWaveIsFilled(waveManeuvers, maneuveringVector, maneuveringVerticalLength); _enemyWaves.Add(curEnemyWave); }
public override void OnEnterState(BasicEnemy enemy) { currentTime = 0; }
// Use this for initialization void Start() { player = GameObject.FindGameObjectWithTag("Player"); basicenemy = enemy.GetComponent <BasicEnemy>(); playerInTerritory = false; }
// Start is called before the first frame update void Start() { target = Waypoints.points[0]; enemy = GetComponent <BasicEnemy>(); lastPosition = transform.position; }
public override Vector2 GetSteering(BasicEnemy enemy, Vector2 currentSteering) { return(Vector2.zero); }
public EnemyAttributes(BasicEnemy b, int h) { myType = b; health = h; }
/// <summary> /// Removes an enemy from the list of enemies that can be assasinated. /// </summary> /// <param name="enemy"> /// The enemy that can no longer be assasinated. /// </param> public void RemoveAssasinatableEnemy(BasicEnemy enemy) { _assasinatableEnemies.Remove(enemy); }
private void Awake() { basicEnemy = GetComponent <BasicEnemy>(); shellCollider.gameObject.SetActive(false); rb = GetComponent <Rigidbody2D>(); }
public override void Update() { Position.X += velocity; if (this.CollideFirst((int)GameTags.Solid, Position) != null) { RemoveSelf(); } if (this.CollideFirst((int)GameTags.MovingPlatform, Position) != null) { RemoveSelf(); } if (this.CollideFirst((int)GameTags.MovingPlatformVert, Position) != null) { RemoveSelf(); } if (this.CollideFirst((int)GameTags.FallingPlatform, Position) != null) { RemoveSelf(); } using (List <Entity> .Enumerator enumerator = base.Scene[(int)GameTags.Enemy].GetEnumerator()) { while (enumerator.MoveNext()) { BasicEnemy enemy = (BasicEnemy)enumerator.Current; if (this.CollideFirst((int)GameTags.Enemy, Position) != null) { enemy.Hit(); enemy.HitPoints -= 6; RemoveSelf(); } } } using (List <Entity> .Enumerator enumerator = base.Scene[(int)GameTags.Player].GetEnumerator()) { while (enumerator.MoveNext()) { Player player = (Player)enumerator.Current; foreach (Hitbox hurt in player.Hurtboxes) { if (hurt.Intersects((Hitbox)Collider) == true && player.Action == PlayerAction.Parry && bounceBack == false) { player.Pause(pauseTime); counters["parryTimer"] = pauseTime; bounceBack = true; velocity = 0; return; } } if (this.CollideFirst((int)GameTags.Player, Position) != null && bounceBack == false) { player.Hurt(hurtPoints); RemoveSelf(); } } } base.Update(); if (counters["parryTimer"] > 0) { return; } if (bounceBack == true) { velocity = -speed; bounceBack = false; } }
public virtual void onHeroGetsDamagedByEnemy(BasicEnemy enemy, int damage, bool critical) { }
public virtual void onEnemySpawn(BasicEnemy enemy) { }
// Start is called before the first frame update void Start() { _basicenemy = enemy.GetComponent <BasicEnemy> (); _playerInTerritory = false; }
public MoveState(BasicEnemy basicEnemy) { this.basicEnemy = basicEnemy; }
public void QueueDestruction(BasicEnemy enemy) { active_enemies.Remove(enemy); enemy.SpawnDeathPart(); }
// Use this for initialization void Start() { myScript = GetComponent <BasicEnemy>(); myMaxHealth = myScript.health; }
public override void OnClick() { int posX, posY; //将游戏地图上的坐标转换为地图数组的下标 Vector2 pos = m_UISelectedArea.GetClickMapPos(); posX = (int)pos.x; posY = (int)pos.y; GameObject m_SelectedTower = m_UISelectedArea.GetSelectedTower(); GameObject m_SelectedEnemy = m_UISelectedArea.GetEnemy(); //如果在地图范围内 if (m_UISelectedArea.IsOutRange() == false) { MapType mapType = m_MapManager.GetMap(posX, posY); //如果点击到怪物 if (m_SelectedEnemy != null) { //隐藏UI m_ConstructUIController.Hide(); m_UIRangeIndicator.Disable(); BasicEnemy m_BasicEnemy = m_SelectedEnemy.GetComponent <BasicEnemy>(); if (m_MonsterManager.m_FocusedEnemy == null) { m_BasicEnemy.isFocused = true; m_MonsterManager.m_FocusedEnemy = m_BasicEnemy; } else if (m_MonsterManager.m_FocusedEnemy == m_BasicEnemy) { //如果已经被标记,则取消标记 m_BasicEnemy.isFocused = false; m_MonsterManager.m_FocusedEnemy = null; } else { //取消之前的标记,标记新的怪物 m_MonsterManager.m_FocusedEnemy.isFocused = false; m_BasicEnemy.isFocused = true; m_MonsterManager.m_FocusedEnemy = m_BasicEnemy; } } else { //如果处于升级模式,则不能建造塔,也不能显示UI if (TowerManager.isOnUpdate) { GameObject m_MergeableTower = m_UISelectedArea.GetUpdateTower(); //如果用户点击的塔可以合并 if (m_MergeableTower != null) { GameObject m_UpdatableTower = m_ConstructUIController.GetTowerGameObject(); pos = m_UISelectedArea.RealPosToMapPos(m_MergeableTower.transform.position); posX = (int)pos.x; posY = (int)pos.y; m_MapManager.DeleteTower(posX, posY); //只有在建造塔的状态时 奖励塔的机制才会启动 if (currentStateName == "Construct") { m_TowerManager.UpdateTower(m_UpdatableTower, m_MergeableTower, true); } else { m_TowerManager.UpdateTower(m_UpdatableTower, m_MergeableTower, false); } //升级后销毁被升级的塔 m_TowerManager.DestroyTower(m_MergeableTower); //显示升级后的塔的范围 m_UIRangeIndicator.ShowTowerRangeIndicator(m_UpdatableTower); //再次搜索 m_TowerManager.RetrieveUpdatableTower(); } else { //取消升级状态 TowerManager.isOnUpdate = false; m_TowerManager.RetrieveUpdatableTower(); //隐藏所有UI m_ConstructUIController.Hide(); m_UIRangeIndicator.Disable(); } } else { switch (mapType) { case MapType.Empty: { //隐藏UI m_ConstructUIController.Hide(); m_UIRangeIndicator.Disable(); //如果现在允许建造 if (currentStateName == "Construct") { //如果现在允许建造石头 if (ConstructState.isStone) { //直接建造 不经过UI确认 //如果可以添加到地图 if (m_MapManager.ModifyMap(posX, posY, MapType.Basic)) { m_TowerManager.RandomInstantiateStone(m_UISelectedArea.GetClickOffsetRealPos()); } } } break; } case MapType.Basic: { //隐藏范围指示器 m_UIRangeIndicator.Disable(); //如果现在允许建造 if (currentStateName == "Construct") { //如果现在允许建造石头 if (ConstructState.isStone) { //直接删除 不经过UI确认 if (m_MapManager.GetMap(posX, posY) == MapType.Basic) { //先删除石头实体模型,再删除地图上的石头信息,防止石头模型实体未被删除,地图已被删除的情况,石头的Collider未覆盖整个石头建造区域 //由于边界的石头没有实体模型,所以同时可以防止边界石头的地图信息被删除 if (m_TowerManager.DestroyStone(m_UISelectedArea.GetCameraRay())) { m_MapManager.DeleteStone(posX, posY); } } } else { //如果点击的是地图外围的石头 则不会相应 //虽然看不到外围石头 但在地图数据上存在,用于方便约束寻路 if (posX == 0 || posX == MapManager.mapRegionX - 1 || posY == 0 || posY == MapManager.mapRegionY - 1) { return; } //如果还有剩余的建造塔数量,显示建造UI if (UIRemainTowerCount.remainTowerCount > 0) { UpdateConstructUIConstroller("Tower"); } else { m_ConstructUIController.Hide(); } } } else { m_ConstructUIController.Hide(); } break; } case MapType.Tower: { //如果现在允许建造石头 if (ConstructState.isStone) { return; } //显示范围指示器 m_UIRangeIndicator.ShowTowerRangeIndicator(m_SelectedTower); GameObject m_Tower = m_UISelectedArea.GetUpdateTower(); //如果该塔可以升级 if (m_Tower != null) { UpdateConstructUIConstroller("Upgrade"); m_ConstructUIController.SetTowerGameObject(m_Tower); } else { m_ConstructUIController.Hide(); } break; } } } } } else { //在地图外,隐藏所有UI m_ConstructUIController.Hide(); m_UIRangeIndicator.Disable(); } }
public SearchForPlayer(BasicEnemy basicEnemy) { this.basicEnemy = basicEnemy; }
//Code will need to be altered for different enemy types private void SlowEnemy(BasicEnemy enemy) { enemy.ChangeSpeed(0.5f, true); }
public override float GetWeight(BasicEnemy enemy, int numSteerables) { return(0); }
private void ResetEnemy(BasicEnemy enemy) { enemy.ChangeSpeed(1, false); }
public void Init(float fireDamage, float fireStrikeArmor, float fireStunTime, int slowDownLevel, Vector3 m_AttackerPotision, BasicEnemy m_BasicEnemy) { this.fireDamage = fireDamage; this.fireStrikeArmor = fireStrikeArmor; this.fireStunTime = fireStunTime; this.slowDownLevel = slowDownLevel; this.m_AttackerPotision = m_AttackerPotision; this.m_BasicEnemy = m_BasicEnemy; }
public RemoveWayPointState(BasicEnemy basicEnemy) { this.basicEnemy = basicEnemy; }
void Update() { variate = !variate; deathTimer -= Time.deltaTime; timedUncontrollable -= Time.deltaTime; dashTime -= Time.deltaTime; meleeTime -= Time.deltaTime; animationOverride -= Time.deltaTime; timedInvulnerable -= Time.deltaTime; curA *= 0.95f; if (curA < 0.05f) { if (cr.gameObject.activeSelf) { cr.gameObject.SetActive(false); } } else if (cr.gameObject.activeSelf) { cr.SetAlpha(Mathf.Min(curA, 1)); } else { cr.gameObject.SetActive(true); } if (deathTimer <= 0f) { respawn(); } if (noUpdate) { return; } if (!shadow) { genShadow(); } else { if (shadow.GetComponent <SpriteRenderer>().sprite != sr.sprite) { genShadow(); } shadow.GetComponent <SpriteRenderer>().flipX = sr.flipX; } if (fallTime <= deathFallTime) { fallTime -= Time.deltaTime; gameObject.layer = noclipLayer; pysc.gravityScale = 7f; gameObject.layer = dashLayer; if (fallTime <= 0f) { kill(); } transform.position = new Vector3(transform.position.x, transform.position.y, (transform.position.y + autoOrderOffset) / 100f); return; } if (light.barPercent <= 0f) { kill(); return; } Vector2 redirect = Vector2.right; feetPos = pysc.position + cc.offset; armPos = pysc.position + (Vector2)(fireArm.transform.localPosition); if (isDashing = dashPos.sqrMagnitude > 0.1f) { gameObject.layer = dashLayer; if (shadow.activeSelf && overAir) { shadow.SetActive(false); } } else { gameObject.layer = playerLayer; if (!shadow.activeSelf && overAir) { shadow.SetActive(true); } } float closestA = float.PositiveInfinity; Activatable aInRange = null; foreach (RaycastHit2D rh in Physics2D.CircleCastAll(feetPos, 0.5f, Vector2.down, 0f)) { if (rh.collider.isTrigger) { if (!isDashing && rh.collider.gameObject.GetComponent <Air>()) { fallTime = deathFallTime; if (Mathf.Abs(lastInput.x) >= Mathf.Abs(lastInput.y)) { ani.Play(lastInput.x > 0 ? "RightFall" : "LeftFall", 0); } else { ani.Play(lastInput.y > 0 ? "UpFall" : "DownFall", 0); } return; } else if (rh.collider.gameObject.GetComponent <Activatable>() && rh.distance < closestA) { closestA = rh.distance; aInRange = rh.collider.gameObject.GetComponent <Activatable>(); } if (rh.collider.gameObject.GetComponent <MovementRedirect>()) { redirect = rh.collider.gameObject.GetComponent <MovementRedirect>().dir; } } } if (timedUncontrollable < 0f) { if (controllable) { Vector2 input = new Vector2(Input.GetAxisRaw("Horizontal"), Input.GetAxisRaw("Vertical")); Vector2 rPosFromArm = ((Vector2)(Camera.main.ScreenToWorldPoint(Input.mousePosition)) - armPos).normalized; if (animationOverride <= 0f) { rooted = false; } if (!isDashing) { if (input.sqrMagnitude != 0f && animationOverride <= 0f && !arrowLoaded) { comboCount = 0; rooted = false; lastInput = input; input = input.normalized; input = redirect * input.x + new Vector2(-redirect.y, redirect.x) * input.y; pysc.AddForce((input * charSpeed - pysc.velocity) * pysc.mass, ForceMode2D.Impulse); if (Mathf.Abs(input.x) >= Mathf.Abs(input.y)) { ani.Play(input.x > 0 ? "RightWalk" : "LeftWalk", 0); } else { ani.Play(input.y > 0 ? "UpWalk" : "DownWalk", 0); } } else { brake(); if (!(rooted || arrowLoaded)) { playIdleAnimation(); } } if (Input.GetKeyDown(Settings.keys[Settings.player, Settings.dash]) && !arrowLoaded && dashTime <= 0f) { comboCount = 0; float closest = dashDist; lastInput = rPosFromArm; overAir = false; foreach (RaycastHit2D rh in Physics2D.RaycastAll(feetPos, rPosFromArm, dashDist)) { if (!rh.collider.isTrigger && rh.distance < closest && !(rh.collider.attachedRigidbody && rh.collider.attachedRigidbody.gameObject == gameObject) && rh.collider.gameObject != gameObject) { closest = rh.distance; } if (!overAir && rh.collider.gameObject.GetComponent <Air>()) { overAir = true; } } dashPos = rPosFromArm * closest; if (Mathf.Abs(dashPos.x) > Mathf.Abs(dashPos.y)) { ani.Play(overAir ? dashPos.x > 0 ? "RightDash" : "LeftDash" : dashPos.x > 0 ? "RightRoll" : "LeftRoll", 0); } else { ani.Play(overAir ? dashPos.y > 0 ? "UpDash" : "DownDash" : dashPos.y > 0 ? "UpRoll" : "DownRoll", 0); } dashTime = dashCoolDown; SoundManager.script.playOnListener(SoundManager.script.dash, 0.7f); } if (!arrowLoaded && Input.GetMouseButtonDown(0)) { comboCount++; } if ((light.barPercent > arrowCost || !usingLight) && Input.GetMouseButtonDown(1) && canAfford(arrowCost)) { arrowLoaded = true; comboCount = 0; handAni.Play("boxWindUp", 0); SoundManager.script.playOnListener(SoundManager.script.bowDraw); } if (arrowLoaded && Input.GetMouseButton(1)) { arrowTime += Time.deltaTime; if (Input.GetKeyDown(Settings.keys[Settings.player, Settings.cancel])) { arrowLoaded = false; handAni.Play("NoAnimation", 0); arrowTime = 0f; arrowLoaded = false; } fireArm.transform.localRotation = Quaternion.LookRotation(Vector3.forward, -rPosFromArm); if (Mathf.Abs(rPosFromArm.x) > Mathf.Abs(rPosFromArm.y)) { ani.Play(rPosFromArm.x < 0 ? "LeftFireState" : "RightFireState", 0); if (fireHand.transform.localPosition.z != 0.01f) { fireArm.transform.localPosition = new Vector3(fireArm.transform.localPosition.x, fireArm.transform.localPosition.y, 0.0001f); } } else if (rPosFromArm.y > 0) { ani.Play("UpFireState", 0); if (fireHand.transform.localPosition.z != 0.01f) { fireArm.transform.localPosition = new Vector3(fireArm.transform.localPosition.x, fireArm.transform.localPosition.y, 0.0001f); } } else if (fireHand.transform.localPosition.z != -0.01f) { ani.Play("DownFireState", 0); fireArm.transform.localPosition = new Vector3(fireArm.transform.localPosition.x, fireArm.transform.localPosition.y, -0.0001f); } } else { if (arrowTime >= arrowWindUp) { fire(rPosFromArm); } handAni.Play("NoAnimation", 0); arrowTime = 0f; arrowLoaded = false; } if (!arrowLoaded && meleeTime <= 0f && comboCount > 0) { comboCount--; BasicEnemy be = null; foreach (RaycastHit2D rh in Physics2D.CircleCastAll(pysc.position, meleeRadius, Vector2.down, 0f)) { if (!rh.collider.isTrigger && (be = rh.collider.gameObject.GetComponent <BasicEnemy>()) && Vector2.Dot((rh.point - pysc.position).normalized, rPosFromArm) >= meleeField) { be.damage((int)(meleeDamage / diff), BasicEnemy.MELEE_DAMAGE); corrupt(meleeDamage); SoundManager.script.playOnListener(variate ? SoundManager.script.enemyHit1 : SoundManager.script.enemyHit2, 0.8f); } } SoundManager.script.playOnListener(variate ? SoundManager.script.sword1 : SoundManager.script.sword2, 0.8f); meleeTime = meleeCoolDown; rooted = true; animationOverride = meleeCoolDown; if (Mathf.Abs(rPosFromArm.x) >= Mathf.Abs(rPosFromArm.y)) { if (variate) { ani.Play(rPosFromArm.x > 0 ? "RightAttack1" : "LeftAttack1", 0, 0); } else { ani.Play(rPosFromArm.x > 0 ? "RightAttack2" : "LeftAttack2", 0, 0); } } else if (variate) { ani.Play(rPosFromArm.y > 0 ? "UpAttack" : "DownAttack", 0, 0); } else { ani.Play(rPosFromArm.y > 0 ? "UpAttack2" : "DownAttack2", 0, 0); } lastInput = rPosFromArm; pysc.AddForce(rPosFromArm * meleeAdv); } } else { brake(); } if (Input.GetKeyDown(Settings.keys[Settings.player, Settings.use])) { if (aInRange && aInRange.playerActivatable) { aInRange.activate(this); } else { SoundManager.script.playOnListener(SoundManager.script.lightSwitch, 1f); usingLight = !usingLight; gem.isLight = usingLight; (usingLight ? lightP : darkP).GetComponent <ParticleSystem>().Play(); } } } else { playIdleAnimation(); brake(); } } if ((lastJuicePosition - pysc.position).sqrMagnitude >= sqrUnitPerSound) { lastJuicePosition = pysc.position; if (!isDashing && fallTime > deathFallTime) { SoundManager.script.playOnListener(variate ? SoundManager.script.step1 : SoundManager.script.step2, 0.8f); } } transform.position = new Vector3(transform.position.x, transform.position.y, (transform.position.y + autoOrderOffset) / 100f); }
//Determines what targeting method is being used and calls the appropraite method. void TargetEnemy(string targetCase) { GameObject[] enemies = GameObject.FindGameObjectsWithTag(enemyTag); float shortestDistance = Mathf.Infinity; GameObject nearestEnemy = null; switch (targetCase) { //Targets closest enemy in range case "TargetClosest": foreach (GameObject enemy in enemies) { float distanceToEnemy = Vector2.Distance(transform.position, enemy.transform.position); if (distanceToEnemy < shortestDistance) { shortestDistance = distanceToEnemy; nearestEnemy = enemy; } } if (nearestEnemy != null && shortestDistance <= range) { //sets the old target as no longer under fire if (target != null) { targetEnemy.underFire = false; } target = nearestEnemy.transform; targetEnemy = nearestEnemy.GetComponent <BasicEnemy>(); } else { //sets the last target to leave range as no longer under fire. if (target != null) { targetEnemy.underFire = false; } target = null; } break; //Targets the enemy with the most health in range case "TargetStrong": float mostHealth = 0f; GameObject strongestEnemy = null; foreach (GameObject enemy in enemies) { float distanceToEnemy = Vector2.Distance(transform.position, enemy.transform.position); BasicEnemy enemyScript = enemy.GetComponent <BasicEnemy>(); if (distanceToEnemy <= range && enemyScript.currentHealth > mostHealth) { Debug.Log("Reached"); mostHealth = enemyScript.currentHealth; strongestEnemy = enemy; } } if (strongestEnemy != null) { if (target != null) { targetEnemy.underFire = false; } target = strongestEnemy.transform; targetEnemy = strongestEnemy.GetComponent <BasicEnemy>(); } else { if (target != null) { targetEnemy.underFire = false; } target = null; } break; //Targets Last enemy in range case "TargetLast": float leastTraveled = Mathf.Infinity; GameObject lastEnemy = null; foreach (GameObject enemy in enemies) { float distanceToEnemy = Vector2.Distance(transform.position, enemy.transform.position); EnemyMovement mvmtScrpt = enemy.GetComponent <EnemyMovement>(); if (distanceToEnemy <= range && mvmtScrpt.distanceTraveled < leastTraveled) { Debug.Log("Reached"); leastTraveled = mvmtScrpt.distanceTraveled; lastEnemy = enemy; } } if (lastEnemy != null) { if (target != null) { targetEnemy.underFire = false; } target = lastEnemy.transform; targetEnemy = lastEnemy.GetComponent <BasicEnemy>(); } else { if (target != null) { targetEnemy.underFire = false; } target = null; } break; //Targets First enemy in range default: float mostTraveled = 0f; GameObject firstEnemy = null; foreach (GameObject enemy in enemies) { float distanceToEnemy = Vector2.Distance(transform.position, enemy.transform.position); EnemyMovement mvmtScrpt = enemy.GetComponent <EnemyMovement>(); if (distanceToEnemy <= range && mvmtScrpt.distanceTraveled > mostTraveled) { mostTraveled = mvmtScrpt.distanceTraveled; firstEnemy = enemy; } } if (firstEnemy != null) { if (target != null) { targetEnemy.underFire = false; } target = firstEnemy.transform; targetEnemy = firstEnemy.GetComponent <BasicEnemy>(); } else { if (target != null) { targetEnemy.underFire = false; } target = null; } break; } }
private void ResetMinEnemyHealth() { minEnemyHealth = 500000; m_BasicEnemyMinHealth = null; }
public override void Update(GameTime gameTime) { switch (ScreenState) { case ScreenStates.TransitionIn: if (!IsTransitionDone(gameTime.TotalGameTime, TransitionInTime)) { } else { ScreenState = ScreenStates.Active; } break; case ScreenStates.TransitionOut: if (!IsTransitionDone(gameTime.TotalGameTime, TransitionOutTime)) { alpha += 127 / (float)(TransitionOutTime.TotalMilliseconds / gameTime.ElapsedGameTime.TotalMilliseconds); } break; case ScreenStates.TransitionNextArea: if (wrapAround) { wrapAroundXDest -= 10; } backgroundRectangle.X += 10; foreach (Player player in PlayerManager.Players) { // move player back to left player.Character.Position.X -= 7.5F; player.Character.DrawHealthBar = false; player.Character.CurrentAnimation.Update(gameTime); } foreach (Enemy enemy in enemyManager.Enemies) { enemy.Position.X -= 10; } if (wrapAround && wrapAroundXDest == 0) { backgroundRectangle = new Rectangle(0, 0, 1280, 720); wrapAround = false; ScreenState = ScreenStates.Active; } else if (backgroundRectangle.X == 1280 * (areaCounter - 1)) { ScreenState = ScreenStates.Active; } break; case ScreenStates.Active: bool allPlayersDead = true; bool allPlayersOnRightEdge = true; foreach (Player player in PlayerManager.Players) { player.Character.DrawHealthBar = true; if (!player.Character.MarkForDelete) { allPlayersDead = false; } if (player.Character.Position.X < 1000) { allPlayersOnRightEdge = false; } } if (allPlayersDead) { ScreenState = ScreenStates.TransitionOut; } if (enemyManager.Enemies.Count == 0 && allPlayersOnRightEdge && areaCounter == 1) { areaCounter++; foreach (Player player in PlayerManager.Players) { player.Character.FacingLeft = false; player.Character.SelectAnimation(player.Character.RunningAnimation); player.Character.Health = Math.Max(player.Character.Health + player.Character.MaxHealth / 3, player.Character.MaxHealth); } for (int i = 0; i < 3; i++) { Chaser basicEnemy = new Chaser(PlayerManager); basicEnemy.Position.X = (i * 50) + 800 + 1280; basicEnemy.Position.Y = (i * 100) + 275; enemyManager.Enemies.Add(basicEnemy); } for (int i = 0; i < 4; i++) { Chaser chaser = new Chaser(PlayerManager); chaser.Position.X = (i * 50) + 1000 + 1280; chaser.Position.Y = (i * 100) + 225; enemyManager.Enemies.Add(chaser); } enemyManager.LoadContent(ContentManager); ScreenState = ScreenStates.TransitionNextArea; break; } else if (enemyManager.Enemies.Count == 0 && allPlayersOnRightEdge && areaCounter == 2) { areaCounter++; foreach (Player player in PlayerManager.Players) { player.Character.FacingLeft = false; player.Character.SelectAnimation(player.Character.RunningAnimation); player.Character.Health = Math.Max(player.Character.Health + player.Character.MaxHealth / 3, player.Character.MaxHealth); } for (int i = 0; i < 3; i++) { BasicEnemy chaser = new BasicEnemy(PlayerManager); chaser.Position.X = (i * 50) + 800 + 1280; chaser.Position.Y = (i * 100) + 275; enemyManager.Enemies.Add(chaser); } for (int i = 0; i < 4; i++) { Chaser chaser = new Chaser(PlayerManager); chaser.Position.X = (i * 50) + 1000 + 1280; chaser.Position.Y = (i * 100) + 225; enemyManager.Enemies.Add(chaser); } enemyManager.LoadContent(ContentManager); ScreenState = ScreenStates.TransitionNextArea; break; } else if (enemyManager.Enemies.Count == 0 && allPlayersOnRightEdge && areaCounter == 3) { areaCounter = 1; wrapAround = true; foreach (Player player in PlayerManager.Players) { player.Character.FacingLeft = false; player.Character.SelectAnimation(player.Character.RunningAnimation); player.Character.Health = Math.Max(player.Character.Health + player.Character.MaxHealth / 3, player.Character.MaxHealth); } for (int i = 0; i < 3; i++) { BasicEnemy chaser = new BasicEnemy(PlayerManager); chaser.Position.X = (i * 50) + 800 + 1280; chaser.Position.Y = (i * 100) + 275; enemyManager.Enemies.Add(chaser); } for (int i = 0; i < 4; i++) { BasicEnemy chaser = new BasicEnemy(PlayerManager); chaser.Position.X = (i * 50) + 1000 + 1280; chaser.Position.Y = (i * 100) + 225; enemyManager.Enemies.Add(chaser); } enemyManager.LoadContent(ContentManager); ScreenState = ScreenStates.TransitionNextArea; break; } PlayerManager.Update(gameTime); entityManager.Update(gameTime); enemyManager.Update(gameTime); break; } }
public override void OnLeaveState(BasicEnemy enemy) { }
void attackEnemy(BasicEnemy enemy) { enemy.dealDamage(damage); }
public StateBasicEnemyNormal(BasicEnemy _p) { p = _p; totalTime = 0; }
public Dead(BasicEnemy basicEnemy, Collider playerMovementCollider) { this.basicEnemy = basicEnemy; this.playerMovementCollider = playerMovementCollider; }