/// <summary> /// Test a given entity to determine if it is the best target. /// Overwrites currentTarget if the tested entity is best. /// </summary> /// <param name="targetIndex">index of entity to test</param> /// <param name="score">the current score, to beat</param> /// <param name=""></param> /// <param name="currentTarget">the current target entity</param> public void CheckTarget( Team pickerTeam, Team targetTeam, float3 targetPos, float3 pickerPos, float aggroRadius, TargetingOrders orders, AgentCategory.eType targetType, ref float score, ref Entity currentTarget, Entity candidate) { // Cannot target if on the same team. if (pickerTeam.ID == targetTeam.ID) { return; } // Cannot target if outside aggro radius. var newScore = math.lengthsq(targetPos - pickerPos); if (newScore > aggroRadius * aggroRadius) { return; } // Favored and discouraged targets. if ((orders.Preferred & targetType) > 0) { newScore /= 5f; } if ((orders.Discouraged & targetType) > 0) { newScore *= 5f; } if (newScore < score) { score = newScore; currentTarget = candidate; } }
void OnGUI() { AgentType = (AgentCategory.eType)EditorGUILayout.EnumFlagsField("Type of this entity", AgentType); }
void OnGUI() { PreferredTargets = (AgentCategory.eType)EditorGUILayout.EnumFlagsField("Preferred Targets", PreferredTargets); DiscouragedTargets = (AgentCategory.eType)EditorGUILayout.EnumFlagsField("Discouraged Targets", DiscouragedTargets); }