private void ForeachAround(EntitiesHashMap.MyData me, ref float3 correction, ref CollisionParameters collision) { var position = me.position; var key = QuadrantVariables.GetPositionHashMapKey(position); Foreach(key, me, ref correction, ref collision); key = QuadrantVariables.GetPositionHashMapKey(position, new float3(1, 0, 0)); Foreach(key, me, ref correction, ref collision); key = QuadrantVariables.GetPositionHashMapKey(position, new float3(-1, 0, 0)); Foreach(key, me, ref correction, ref collision); key = QuadrantVariables.GetPositionHashMapKey(position, new float3(0, 0, 1)); Foreach(key, me, ref correction, ref collision); key = QuadrantVariables.GetPositionHashMapKey(position, new float3(0, 0, -1)); Foreach(key, me, ref correction, ref collision); key = QuadrantVariables.GetPositionHashMapKey(position, new float3(1, 0, 1)); Foreach(key, me, ref correction, ref collision); key = QuadrantVariables.GetPositionHashMapKey(position, new float3(-1, 0, 1)); Foreach(key, me, ref correction, ref collision); key = QuadrantVariables.GetPositionHashMapKey(position, new float3(-1, 0, -1)); Foreach(key, me, ref correction, ref collision); key = QuadrantVariables.GetPositionHashMapKey(position, new float3(1, 0, -1)); Foreach(key, me, ref correction, ref collision); }
private void Foreach(int key, EntitiesHashMap.MyData me, ref float3 avoidanceForce, ref CollisionParameters collision) { if (targetMap.TryGetFirstValue(key, out EntitiesHashMap.MyData other, out NativeMultiHashMapIterator <int> iterator)) { do { InForeach(other, me, ref avoidanceForce, ref collision); } while (targetMap.TryGetNextValue(out other, ref iterator)); } }
private void InForeach(EntitiesHashMap.MyData other, EntitiesHashMap.MyData me, ref float3 avoidanceForce, ref CollisionParameters collision) { var direction = me.position - other.position; var length = math.length(direction); if (length > 0.01f) { var distance = math.max(0f, me.data.innerRadius + other.data.innerRadius - length); var distanceOuter = math.max(0f, me.data.innerRadius + other.data.outerRadius - length); if (distance > 0f) { avoidanceForce += distance * math.normalizesafe(direction); collision.collided++; } if (distanceOuter > 0f) { collision.near++; if (me.data2.broId != other.data2.broId) { collision.nearOther++; } } } }