// Returns false if its not within AI Range public static bool CheckAIRange(int EntityID, int targetEntity) { EntityAlive myEntity = GameManager.Instance.World.GetEntity(EntityID) as EntityAlive; if (myEntity == null) { return(false); } EntityAlive myTarget = GameManager.Instance.World.GetEntity(targetEntity) as EntityAlive; if (myTarget == null) { return(false); } // Find the max range for the weapon // Example Range: 50 // Hold Ground Distance between 20 to 50 // Retreat distance is 20%, so 20 float MaxRangeForWeapon = EffectManager.GetValue(PassiveEffects.MaxRange, myEntity.inventory.holdingItemItemValue, 60f, myEntity, null, myEntity.inventory.holdingItem.ItemTags, true, true, true, true, 1, true); MaxRangeForWeapon = MaxRangeForWeapon * 2; float HoldGroundDistance = (float)MaxRangeForWeapon * 0.80f; // minimum range to hold ground float RetreatDistance = (float)MaxRangeForWeapon * 0.30f; // start retreating at this distance. float distanceSq = myTarget.GetDistanceSq(myEntity); float MinMeleeRange = GetFloatValue(EntityID, "MinimumMeleeRange"); if (MinMeleeRange == -1) { MinMeleeRange = 4; } DisplayLog(myEntity.EntityName + " Max Range: " + MaxRangeForWeapon + " Hold Ground: " + HoldGroundDistance + " Retreatdistance: " + RetreatDistance + " Entity Distance: " + distanceSq); // if they are too close, switch to melee if (distanceSq <= MinMeleeRange) { return(false); } // Hold your ground if (distanceSq > RetreatDistance && distanceSq <= HoldGroundDistance) // distance greater than 20% of the range of the weapon { Stop(EntityID); } // Back away! if (distanceSq > MinMeleeRange && distanceSq <= RetreatDistance) { BackupHelper(EntityID, myTarget.position, 40); } return(true); }
public static bool CheckAIRange(int EntityID, int targetEntity) { EntityAlive myEntity = GameManager.Instance.World.GetEntity(EntityID) as EntityAlive; if (myEntity == null) { return(false); } EntityAlive myTarget = GameManager.Instance.World.GetEntity(targetEntity) as EntityAlive; if (myTarget == null) { return(false); } float distanceSq = myTarget.GetDistanceSq(myEntity); // Let the entity move closer, without walking a few steps and trying to fire, which can make the entity stutter as it tries to keep up with a retreating enemey. if (distanceSq > 50 && distanceSq < 60) { ChangeHandholdItem(EntityID, EntityUtilities.Need.Ranged); return(false); } // Hold your ground if (distanceSq > 20f && distanceSq < 60) { ChangeHandholdItem(EntityID, EntityUtilities.Need.Ranged); myEntity.navigator.clearPath(); myEntity.moveHelper.Stop(); return(false); } // Back away! if (distanceSq > 2 && distanceSq < 21) { BackupHelper(EntityID, myTarget.position, 40); ChangeHandholdItem(EntityID, EntityUtilities.Need.Ranged); return(false); } if (distanceSq < 2) { ChangeHandholdItem(EntityID, Need.Melee); return(true); } return(false); }
public static bool CheckAIRange(int EntityID, int targetEntity) { EntityAlive myEntity = GameManager.Instance.World.GetEntity(EntityID) as EntityAlive; if (myEntity == null) { return(false); } EntityAlive myTarget = GameManager.Instance.World.GetEntity(targetEntity) as EntityAlive; if (myTarget == null) { return(false); } // Find the max range for the weapon // Example Range: 50 // Hold Ground Distance between 20 to 50 // Retreat distance is 20%, so 20 float MaxRangeForWeapon = EffectManager.GetValue(PassiveEffects.MaxRange, myEntity.inventory.holdingItemItemValue, 60f, myEntity, null, myEntity.inventory.holdingItem.ItemTags, true, true, true, true, 1, true); float HoldGroundDistance = (float)MaxRangeForWeapon * 0.80f; // minimum range to hold ground float RetreatDistance = (float)MaxRangeForWeapon * 0.10f; // start retreating at this distance. float distanceSq = myTarget.GetDistanceSq(myEntity); float MinMeleeRange = GetFloatValue(EntityID, "MinimumMeleeRange"); if (MinMeleeRange == -1) { MinMeleeRange = 4; } DisplayLog(myEntity.EntityName + " Max Range: " + MaxRangeForWeapon + " Hold Ground: " + HoldGroundDistance + " Retreatdistance: " + RetreatDistance + " Entity Distance: " + distanceSq); myEntity.navigator.clearPath(); myEntity.moveHelper.Stop(); // Let the entity move closer, without walking a few steps and trying to fire, which can make the entity stutter as it tries to keep up with a retreating enemey. if (distanceSq > HoldGroundDistance) // 80% of range { Debug.Log("moving forward"); ChangeHandholdItem(EntityID, EntityUtilities.Need.Ranged); myEntity.moveHelper.SetMoveTo(myEntity.position, true); return(true); } // Hold your ground if (distanceSq > RetreatDistance && distanceSq <= HoldGroundDistance) // distance greater than 20% of the range of the weapon { Debug.Log("Holding ground"); ChangeHandholdItem(EntityID, EntityUtilities.Need.Ranged); return(false); } // Back away! if (distanceSq > MinMeleeRange && (distanceSq <= RetreatDistance || distanceSq < 8)) { Debug.Log("backing away"); BackupHelper(EntityID, myTarget.position, 40); ChangeHandholdItem(EntityID, EntityUtilities.Need.Ranged); return(false); } if (distanceSq <= MinMeleeRange) // if they are too close, switch to melee { ChangeHandholdItem(EntityID, Need.Melee); return(true); } Debug.Log("nothing"); return(false); }