private void Execute(int index, Translation translation, FoodHierarchie hierarchie, ref Condition condition, ref Walker walker) { if (condition.hunger < hungerLimit) { condition.isSet = false; return; } var found = false; var foundPrey = new FoodHierarchieHashMap.MyData(); ForeachAround(translation.Value, condition, walker.direction, hierarchie, ref foundPrey, ref found); if (found) { var foundFood = new EdibleHashMap.MyData { position = foundPrey.position, data = new Edible() { nutrition = foundPrey.data.nutrition, }, entity = foundPrey.entity }; FoundFood(translation, foundFood, index, ref walker, ref condition); } else { condition.isSet = false; } }
private void Foreach(int key, float3 me, Condition condition, float3 direction, FoodHierarchie hierarchie, ref FoodHierarchieHashMap.MyData foundFood, ref bool found) { if (hierarchieMap.TryGetFirstValue(key, out FoodHierarchieHashMap.MyData food, out NativeMultiHashMapIterator <int> iterator)) { do { if (food.data.hierarchieNumber >= hierarchie.hierarchieNumber) { continue; } if (math.length(food.position - me) < 0.01f) { continue; } bool inRadius = IsInRadius(me, condition.viewRadius, condition.viewAngle, direction, food.position); if (!inRadius) { continue; } if (!found) { foundFood = food; found = true; } else { var prev = math.lengthsq(foundFood.position - me); var next = math.lengthsq(food.position - me); if (next < prev) { foundFood = food; } } } while (hierarchieMap.TryGetNextValue(out food, ref iterator)); } }
private void ForeachAround(float3 position, Condition condition, float3 direction, FoodHierarchie hierarchie, ref FoodHierarchieHashMap.MyData foundFood, ref bool found) { var key = QuadrantVariables.GetPositionHashMapKey(position); Foreach(key, position, condition, direction, hierarchie, ref foundFood, ref found); key = QuadrantVariables.GetPositionHashMapKey(position, new float3(1, 0, 0)); Foreach(key, position, condition, direction, hierarchie, ref foundFood, ref found); key = QuadrantVariables.GetPositionHashMapKey(position, new float3(-1, 0, 0)); Foreach(key, position, condition, direction, hierarchie, ref foundFood, ref found); key = QuadrantVariables.GetPositionHashMapKey(position, new float3(0, 0, 1)); Foreach(key, position, condition, direction, hierarchie, ref foundFood, ref found); key = QuadrantVariables.GetPositionHashMapKey(position, new float3(0, 0, -1)); Foreach(key, position, condition, direction, hierarchie, ref foundFood, ref found); }