Beispiel #1
0
        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;
            }
        }
Beispiel #2
0
 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));
     }
 }
Beispiel #3
0
        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);
        }