void CalCurrentAttackTarget() { RemoveNull(); if (enemiesInAttackAreas.Count == 0) { currentAttackTarget = null; return; } if (enemiesInAttackAreas.Count == 1) { currentAttackTarget = enemiesInAttackAreas[0]; return; } float distance = float.MaxValue; BaseEnemy target = null; foreach (BaseEnemy item in enemiesInAttackAreas) { float tmpDistance = (item.transform.position - transform.position).magnitude; if (tmpDistance < distance) { distance = tmpDistance; target = item; } } currentAttackTarget = target; }
void RemoveEnermy(BaseEnemy enermyToBeRemoved) { if (enemiesInAttackAreas.Contains(enermyToBeRemoved)) { enemiesInAttackAreas.Remove(enermyToBeRemoved); Debug.LogFormat("remove{0}", enermyToBeRemoved); } }
virtual public void SetAttackAreas(PlaceDirection dir) { enemiesInAttackAreas.Clear(); currentAttackTarget = null; RemoveListener(); attackAreas.Clear(); attackAreasPos = new Vector2[] { new Vector2(1, 0), new Vector2(-1, 0), new Vector2(1, 1), new Vector2(-1, 1), new Vector2(0, 1), new Vector2(0, 2) }; switch (dir) { case PlaceDirection.up: break; case PlaceDirection.down: for (int i = 0; i < attackAreasPos.Length; i++) { attackAreasPos[i] = -attackAreasPos[i]; } break; case PlaceDirection.left: for (int i = 0; i < attackAreasPos.Length; i++) { float xTmp = attackAreasPos[i].x; float yTmp = -attackAreasPos[i].y; attackAreasPos[i].x = yTmp; attackAreasPos[i].y = xTmp; } break; case PlaceDirection.right: for (int i = 0; i < attackAreasPos.Length; i++) { float xTmp = attackAreasPos[i].x; float yTmp = attackAreasPos[i].y; attackAreasPos[i].x = yTmp; attackAreasPos[i].y = xTmp; //Debug.Log(attackAreasPos[i]); } break; default: break; } foreach (Vector2 item in attackAreasPos) { MapUnitPre t = MapInSceneManager.Instance.GetMapUnitPre((int)item.x + (int)transform.position.x, (int)item.y + (int)transform.position.y); if (t != null) { attackAreas.Add(t); } } }