|
@@ -200,7 +200,7 @@ public class SearchTrigger : MonoBehaviour
|
|
|
return list;
|
|
return list;
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
- public Character GetMinDisTarget(List<TargetType> targetTypes, bool canHitFly,SearchMode searchMode)
|
|
|
|
|
|
|
+ public Character GetTarget(List<TargetType> targetTypes, bool canHitFly,SearchMode searchMode)
|
|
|
{
|
|
{
|
|
|
if (!enabled || !gameObject.activeInHierarchy)
|
|
if (!enabled || !gameObject.activeInHierarchy)
|
|
|
{
|
|
{
|
|
@@ -221,106 +221,69 @@ public class SearchTrigger : MonoBehaviour
|
|
|
downAngle = am.maxDownAngle;
|
|
downAngle = am.maxDownAngle;
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
- switch (searchMode)
|
|
|
|
|
|
|
+ Character targetChar = null;
|
|
|
|
|
+ float targetDistance = -1;
|
|
|
|
|
+ for (int i = 0; i < list.Count; i++)
|
|
|
{
|
|
{
|
|
|
- case SearchMode.MinDistance:
|
|
|
|
|
- Character minDisChar = null;
|
|
|
|
|
- float minDistance = -1;
|
|
|
|
|
- for (int i = 0; i < list.Count; i++)
|
|
|
|
|
|
|
+ Character character = list[i];
|
|
|
|
|
+ //判断对象是否在远程单位的射击夹角范围内
|
|
|
|
|
+ if (isShootAttack)
|
|
|
|
|
+ {
|
|
|
|
|
+ Vector3 dir = character.beSearchTrigger.transform.position - transform.position;
|
|
|
|
|
+ float angle = Vector3.Angle(dir, Vector3.left * ownerBodyScale.x);
|
|
|
|
|
+ if ((dir.y > 0 && angle > upAngle) || (dir.y < 0 && angle > downAngle))
|
|
|
{
|
|
{
|
|
|
- Character character = list[i];
|
|
|
|
|
- //判断对象是否在远程单位的射击夹角范围内
|
|
|
|
|
- if (isShootAttack)
|
|
|
|
|
- {
|
|
|
|
|
- if (character.beSearchTrigger == null || character == null) continue;
|
|
|
|
|
- Vector3 dir = character.beSearchTrigger.transform.position - transform.position;
|
|
|
|
|
- float angle = Vector3.Angle(dir, Vector3.left * ownerBodyScale.x);
|
|
|
|
|
- if ((dir.y > 0 && angle > upAngle) || (dir.y < 0 && angle > downAngle))
|
|
|
|
|
- {
|
|
|
|
|
- continue;
|
|
|
|
|
- }
|
|
|
|
|
- }
|
|
|
|
|
- //判断是否在攻击范围内
|
|
|
|
|
- float distance = Mathf.Abs(character.transform.position.x - ownerPosition.x);
|
|
|
|
|
- if (minDisChar == null || minDistance == -1 || minDistance > distance)
|
|
|
|
|
- {
|
|
|
|
|
- minDisChar = character;
|
|
|
|
|
- minDistance = distance;
|
|
|
|
|
- }
|
|
|
|
|
|
|
+ continue;
|
|
|
}
|
|
}
|
|
|
- return minDisChar;
|
|
|
|
|
- case SearchMode.MaxDistance:
|
|
|
|
|
- Character maxDisChar = null;
|
|
|
|
|
- float maxDistance = -1;
|
|
|
|
|
- for (int i = 0; i < list.Count; i++)
|
|
|
|
|
|
|
+ }
|
|
|
|
|
+ float distance = Mathf.Abs(character.transform.position.x - ownerPosition.x);
|
|
|
|
|
+ if (targetChar == null)
|
|
|
|
|
+ {
|
|
|
|
|
+ targetChar = character;
|
|
|
|
|
+ targetDistance = distance;
|
|
|
|
|
+ }
|
|
|
|
|
+ else
|
|
|
|
|
+ {
|
|
|
|
|
+ switch (searchMode)
|
|
|
{
|
|
{
|
|
|
- Character character = list[i];
|
|
|
|
|
- //判断对象是否在远程单位的射击夹角范围内
|
|
|
|
|
- if (isShootAttack)
|
|
|
|
|
- {
|
|
|
|
|
- Vector3 dir = character.beSearchTrigger.transform.position - transform.position;
|
|
|
|
|
- float angle = Vector3.Angle(dir, Vector3.left * ownerBodyScale.x);
|
|
|
|
|
- if ((dir.y > 0 && angle > upAngle) || (dir.y < 0 && angle > downAngle))
|
|
|
|
|
|
|
+ case SearchMode.MinDistance:
|
|
|
|
|
+ if (targetDistance > distance)
|
|
|
{
|
|
{
|
|
|
- continue;
|
|
|
|
|
|
|
+ targetChar = character;
|
|
|
|
|
+ targetDistance = distance;
|
|
|
}
|
|
}
|
|
|
- }
|
|
|
|
|
- //判断是否在攻击范围内
|
|
|
|
|
- float distance = Mathf.Abs(character.transform.position.x - ownerPosition.x);
|
|
|
|
|
- if (maxDisChar == null || maxDistance == -1 || maxDistance < distance)
|
|
|
|
|
- {
|
|
|
|
|
- maxDisChar = character;
|
|
|
|
|
- maxDistance = distance;
|
|
|
|
|
- }
|
|
|
|
|
- }
|
|
|
|
|
- //Debug.Log(maxDisChar);
|
|
|
|
|
- return maxDisChar;
|
|
|
|
|
- case SearchMode.MinHp:
|
|
|
|
|
- Character minHPChar = null;
|
|
|
|
|
- for (int i = 0; i < list.Count; i++)
|
|
|
|
|
- {
|
|
|
|
|
- Character character = list[i];
|
|
|
|
|
- //判断对象是否在远程单位的射击夹角范围内
|
|
|
|
|
- if (isShootAttack)
|
|
|
|
|
- {
|
|
|
|
|
- Vector3 dir = character.beSearchTrigger.transform.position - transform.position;
|
|
|
|
|
- float angle = Vector3.Angle(dir, Vector3.left * ownerBodyScale.x);
|
|
|
|
|
- if ((dir.y > 0 && angle > upAngle) || (dir.y < 0 && angle > downAngle))
|
|
|
|
|
|
|
+ break;
|
|
|
|
|
+ case SearchMode.MaxDistance:
|
|
|
|
|
+ if (targetDistance < distance)
|
|
|
{
|
|
{
|
|
|
- continue;
|
|
|
|
|
|
|
+ targetChar = character;
|
|
|
|
|
+ targetDistance = distance;
|
|
|
}
|
|
}
|
|
|
- }
|
|
|
|
|
- if (minHPChar == null || minHPChar.hp < character.hp)
|
|
|
|
|
- {
|
|
|
|
|
- minHPChar = character;
|
|
|
|
|
- }
|
|
|
|
|
- }
|
|
|
|
|
- return minHPChar;
|
|
|
|
|
- case SearchMode.MaxHp:
|
|
|
|
|
- Character maxHPChar = null;
|
|
|
|
|
- for (int i = 0; i < list.Count; i++)
|
|
|
|
|
- {
|
|
|
|
|
- Character character = list[i];
|
|
|
|
|
- //判断对象是否在远程单位的射击夹角范围内
|
|
|
|
|
- if (isShootAttack)
|
|
|
|
|
- {
|
|
|
|
|
- Vector3 dir = character.beSearchTrigger.transform.position - transform.position;
|
|
|
|
|
- float angle = Vector3.Angle(dir, Vector3.left * ownerBodyScale.x);
|
|
|
|
|
- if ((dir.y > 0 && angle > upAngle) || (dir.y < 0 && angle > downAngle))
|
|
|
|
|
|
|
+ break;
|
|
|
|
|
+ case SearchMode.MinHp:
|
|
|
|
|
+ if (targetChar.hp < character.hp)
|
|
|
{
|
|
{
|
|
|
- continue;
|
|
|
|
|
|
|
+ targetChar = character;
|
|
|
}
|
|
}
|
|
|
- }
|
|
|
|
|
- if (maxHPChar == null || maxHPChar.hp > character.hp)
|
|
|
|
|
- {
|
|
|
|
|
- maxHPChar = character;
|
|
|
|
|
- }
|
|
|
|
|
|
|
+ break;
|
|
|
|
|
+ case SearchMode.MaxHp:
|
|
|
|
|
+ if (targetChar.hp > character.hp)
|
|
|
|
|
+ {
|
|
|
|
|
+ targetChar = character;
|
|
|
|
|
+ }
|
|
|
|
|
+ break;
|
|
|
|
|
+ case SearchMode.MinDisTank:
|
|
|
|
|
+ if (targetDistance < distance)
|
|
|
|
|
+ {
|
|
|
|
|
+ targetChar = character;
|
|
|
|
|
+ targetDistance = distance;
|
|
|
|
|
+ }
|
|
|
|
|
+ break;
|
|
|
}
|
|
}
|
|
|
- return maxHPChar;
|
|
|
|
|
- case SearchMode.ByType:
|
|
|
|
|
- break;
|
|
|
|
|
|
|
+
|
|
|
|
|
+ }
|
|
|
}
|
|
}
|
|
|
- return null;
|
|
|
|
|
|
|
+ return targetChar;
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
public Character GetMinHPCharacter(List<TargetType> targetTypes, bool canHitFly)
|
|
public Character GetMinHPCharacter(List<TargetType> targetTypes, bool canHitFly)
|
|
@@ -346,5 +309,6 @@ public enum SearchMode
|
|
|
MaxDistance,
|
|
MaxDistance,
|
|
|
MinHp,
|
|
MinHp,
|
|
|
MaxHp,
|
|
MaxHp,
|
|
|
|
|
+ MinDisTank,
|
|
|
ByType
|
|
ByType
|
|
|
}
|
|
}
|