protected override void OnUpdate()
    {
        var collidersTranslations = collider_group.ToComponentDataArray <Translation>(Allocator.TempJob);
        var colliders             = collider_group.ToComponentDataArray <Collider>(Allocator.TempJob);
        var collidersEntities     = collider_group.ToEntityArray(Allocator.TempJob);
        var collidersRigiBody     = collider_group.ToComponentDataArray <RigiBody>(Allocator.TempJob);

        Entities.ForEach((Entity entity, ref Translation translation, ref Collider collider, ref RigiBody rigidBody) => {
            if (collider.bodyType == Collider.BodyType.Terrian)
            {
                return;
            }

            for (int i = 0; i < colliders.Length; i++)
            {
                if (entity == collidersEntities[i])
                {
                    continue;
                }

                bool collied = AreSquaresOverlapping(translation, collider, ref rigidBody, collidersTranslations[i], colliders[i]);
                if (collied)
                {
                    rigidBody.collied  = true;
                    rigidBody.Velocity = new float2(0, 0);
                    if (colliders[i].bodyType == Collider.BodyType.Terrian &&
                        translation.Value.x == collidersTranslations[i].Value.x &&
                        translation.Value.z == collidersTranslations[i].Value.z &&
                        collider.bodyType != colliders[i].bodyType
                        )
                    {
                        rigidBody.colliedEnter = true;
                    }
                    if (collider.bodyType == colliders[i].bodyType)
                    {
                        RigiBody otherRigiBody           = collidersRigiBody[i];
                        otherRigiBody.colliedWithSoldier = true;
                        otherRigiBody.collied            = true;
                        rigidBody.colliedWithSoldier     = true;
                    }
                    break;
                }
            }
        });

        collidersTranslations.Dispose();
        colliders.Dispose();
        collidersEntities.Dispose();
        collidersRigiBody.Dispose();
    }
    static bool AreSquaresOverlapping(Translation translatioinA, Collider colliderA, ref RigiBody rigiBodyA, Translation translatioinB, Collider colliderB)
    {
        float  sizeA = colliderA.Size;
        float  sizeB = colliderB.Size;
        float3 posA  = translatioinA.Value;
        float3 posB  = translatioinB.Value;

        if (colliderA.bodyType != colliderB.bodyType)
        {
            float d = (sizeA / 2) + (sizeB / 2);
            return(math.abs(translatioinA.Value.y - translatioinB.Value.y) <= 0.5 &&
                   math.abs(posA.x + rigiBodyA.Velocity.x - posB.x) < d &&
                   math.abs(posA.z + rigiBodyA.Velocity.y - posB.z) < d);
        }
        else
        {
            float d = (sizeA / 2) + (sizeB / 2);
            return(math.abs(posA.x + rigiBodyA.Velocity.x - posB.x) < d &&
                   math.abs(posA.z + rigiBodyA.Velocity.y - posB.z) < d);
        }
    }