Example #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;
            }
        }
Example #2
0
 private void FoundFood(Translation translation, EdibleHashMap.MyData foundFood, int index, ref Walker walker, ref Condition condition)
 {
     if (IsInRadius(translation.Value, condition.eatingRadius, condition.viewAngle, walker.direction, foundFood.position))
     {
         commandBuffer.DestroyEntity(index, foundFood.entity);
         condition.hunger -= foundFood.data.nutrition;
         if (condition.hunger < 0)
         {
             condition.hunger = 0;
         }
         condition.isSet = false;
         return;
     }
     else
     {
         condition.goal  = foundFood.position;
         condition.isSet = true;
     }
 }
Example #3
0
 private void Foreach(int key, float3 me, Condition condition, float3 direction, ref EdibleHashMap.MyData foundFood, ref bool found)
 {
     if (targetMap.TryGetFirstValue(key, out EdibleHashMap.MyData food, out NativeMultiHashMapIterator <int> iterator))
     {
         do
         {
             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 (targetMap.TryGetNextValue(out food, ref iterator));
     }
 }
Example #4
0
        private void ForeachAround(float3 position, Condition condition, float3 direction, ref EdibleHashMap.MyData foundFood, ref bool found)
        {
            var key = QuadrantVariables.GetPositionHashMapKey(position);

            Foreach(key, position, condition, direction, ref foundFood, ref found);
            key = QuadrantVariables.GetPositionHashMapKey(position, new float3(1, 0, 0));
            Foreach(key, position, condition, direction, ref foundFood, ref found);
            key = QuadrantVariables.GetPositionHashMapKey(position, new float3(-1, 0, 0));
            Foreach(key, position, condition, direction, ref foundFood, ref found);
            key = QuadrantVariables.GetPositionHashMapKey(position, new float3(0, 0, 1));
            Foreach(key, position, condition, direction, ref foundFood, ref found);
            key = QuadrantVariables.GetPositionHashMapKey(position, new float3(0, 0, -1));
            Foreach(key, position, condition, direction, ref foundFood, ref found);
        }