Vector3 weightedAveragePosition <T>(List <T> objects, object2Position <T> obj2Pos, object2Priority <T> obj2Pri) { if (objects == null || objects.Count == 0 || obj2Pos == null || obj2Pri == null) { return(Vector3.zero); } float x = 0f; float y = 0f; float z = 0f; float total = 0f; foreach (var obj in objects) { Vector3 vector = obj2Pos.Invoke(obj); float priority = obj2Pri.Invoke(obj); total += priority; x += vector.x * priority; y += vector.y * priority; z += vector.z * priority; } x /= total; y /= total; z /= total; return(new Vector3(x, y, z)); }
Vector3 weightedAveragePosition <T>(List <T> objects, object2Position <T> obj2Pos) { return(weightedAveragePosition(objects, obj2Pos, f => 1f)); }