Example usage for com.badlogic.gdx.physics.box2d QueryCallback QueryCallback

List of usage examples for com.badlogic.gdx.physics.box2d QueryCallback QueryCallback

Introduction

In this page you can find the example usage for com.badlogic.gdx.physics.box2d QueryCallback QueryCallback.

Prototype

QueryCallback

Source Link

Usage

From source file:com.dongbat.game.util.WorldQueryUtil.java

/**
 * Find any entity in radius/*from w  w w . j ava  2  s .c  o  m*/
 *
 * @param world artemis world
 * @param location location to find
 * @param radius radius to find
 * @return Array of nearest Entity in radius
 */
public static Array<Entity> findAnyInRadius(final com.artemis.World world, final Vector2 location,
        final float radius) {
    final Array<Entity> entities = new Array<Entity>();

    QueryCallback callback = new QueryCallback() {

        @Override
        public boolean reportFixture(Fixture fixture) {
            Body body = fixture.getBody();
            Entity entity = UuidUtil.getEntityByUuid(world, (UUID) body.getUserData());
            float distanceSq = new Vector2(body.getPosition()).sub(location).len2();
            if (distanceSq <= radius * radius) {
                entities.add(entity);
            }
            return true;
        }
    };
    Vector2 lowerLeft = new Vector2(location).sub(radius, radius);
    Vector2 upperRight = new Vector2(location).add(radius, radius);
    PhysicsUtil.getPhysicsWorld(world).QueryAABB(callback, lowerLeft.x, lowerLeft.y, upperRight.x,
            upperRight.y);

    return entities;
}

From source file:com.dongbat.game.util.WorldQueryUtil.java

/**
 * Find food in radius, centre is an point on map
 *
 * @param world artemis world//w  w w.ja  v a 2  s. com
 * @param location centre of circle
 * @param radius radius to find
 * @return Food entity list
 */
public static Array<Entity> findFoodInRadius(final com.artemis.World world, final Vector2 location,
        final float radius) {
    final Array<Entity> food = new Array<Entity>();

    QueryCallback callback = new QueryCallback() {

        @Override
        public boolean reportFixture(Fixture fixture) {
            Body body = fixture.getBody();
            Entity entity = UuidUtil.getEntityByUuid(world, (UUID) body.getUserData());
            if (entity != null) {
                if (isFood(world, entity.getId())) {
                    float distanceSq = new Vector2(body.getPosition()).sub(location).len2();
                    if (distanceSq <= radius * radius) {
                        food.add(entity);
                    }
                }
            }
            return true;
        }
    };
    Vector2 lowerLeft = new Vector2(location).sub(radius, radius);
    Vector2 upperRight = new Vector2(location).add(radius, radius);
    getPhysicsWorld(world).QueryAABB(callback, lowerLeft.x, lowerLeft.y, upperRight.x, upperRight.y);

    return food;
}

From source file:com.dongbat.game.util.WorldQueryUtil.java

public static Array<Entity> findColdFoodInRadius(final com.artemis.World world, final Vector2 location,
        final float radius) {
    final Array<Entity> food = new Array<Entity>();

    QueryCallback callback = new QueryCallback() {

        @Override/*w ww  .  ja v a  2s . c  o m*/
        public boolean reportFixture(Fixture fixture) {
            Body body = fixture.getBody();
            Entity entity = UuidUtil.getEntityByUuid(world, (UUID) body.getUserData());
            if (entity != null) {
                if (isFood(world, entity.getId())) {
                    float distanceSq = new Vector2(body.getPosition()).sub(location).len2();
                    if (distanceSq <= radius * radius) {
                        Food f = EntityUtil.getComponent(world, entity, Food.class);
                        if (!f.isToxic()) {
                            food.add(entity);
                        }
                    }
                }
            }
            return true;
        }
    };
    Vector2 lowerLeft = new Vector2(location).sub(radius, radius);
    Vector2 upperRight = new Vector2(location).add(radius, radius);
    getPhysicsWorld(world).QueryAABB(callback, lowerLeft.x, lowerLeft.y, upperRight.x, upperRight.y);

    return food;
}

From source file:com.dongbat.game.util.WorldQueryUtil.java

/**
 * Find enemy in radius, centre is an point on map
 *
 * @param world artemis world//from www  .j  a  v a 2  s  .c  om
 * @param location centre of circle
 * @param radius radius to find
 * @return Enemy entity list
 */
public static Array<Entity> findEnemyInRadius(final com.artemis.World world, final Vector2 location,
        final float radius) {
    // TODO: to be fixed
    final Array<Entity> enemy = new Array<Entity>();

    QueryCallback callback = new QueryCallback() {

        @Override
        public boolean reportFixture(Fixture fixture) {
            Body body = fixture.getBody();
            Entity entity = UuidUtil.getEntityByUuid(world, (UUID) body.getUserData());
            boolean isEnemy = false;
            if (isEnemy) {
                float distanceSq = new Vector2(body.getPosition()).sub(location).len2();
                if (distanceSq <= radius * radius) {
                    enemy.add(entity);
                }
            }
            return true;
        }
    };

    Vector2 lowerLeft = new Vector2(location).sub(radius, radius);
    Vector2 upperRight = new Vector2(location).add(radius, radius);
    getPhysicsWorld(world).QueryAABB(callback, lowerLeft.x, lowerLeft.y, upperRight.x, upperRight.y);

    return enemy;
}

From source file:com.dongbat.game.util.WorldQueryUtil.java

/**
 * Find player in radius from a location
 *
 * @param world artemis world/*from w ww .  j a  v  a 2  s  .  co m*/
 * @param location location that you want to find
 * @param radius radius to find
 * @return Player entity list
 */
public static Array<Entity> findPlayerNonAiInRadius(final com.artemis.World world, final Vector2 location,
        final float radius) {
    final Array<Entity> playerAndAIList = new Array<Entity>();

    QueryCallback callback = new QueryCallback() {

        @Override
        public boolean reportFixture(Fixture fixture) {
            Body body = fixture.getBody();
            Entity entity = UuidUtil.getEntityByUuid(world, (UUID) body.getUserData());
            if (isPlayerNonAiUnit(world, entity.getId())) {
                float distanceSq = new Vector2(body.getPosition()).sub(location).len2();
                if (distanceSq <= radius * radius) {
                    playerAndAIList.add(entity);
                }
            }
            return true;
        }
    };
    Vector2 lowerLeft = new Vector2(location).sub(radius, radius);
    Vector2 upperRight = new Vector2(location).add(radius, radius);
    getPhysicsWorld(world).QueryAABB(callback, lowerLeft.x, lowerLeft.y, upperRight.x, upperRight.y);

    return playerAndAIList;
}

From source file:com.dongbat.game.util.WorldQueryUtil.java

public static Array<Entity> findQueenInRadius(final com.artemis.World world, final Vector2 location,
        final float radius) {
    final Array<Entity> queenList = new Array<Entity>();

    QueryCallback callback = new QueryCallback() {

        @Override//from   w  w w .ja  v a  2  s.  c  o  m
        public boolean reportFixture(Fixture fixture) {
            Body body = fixture.getBody();
            Entity entity = UuidUtil.getEntityByUuid(world, (UUID) body.getUserData());
            if (isQueen(world, entity.getId())) {
                float distanceSq = new Vector2(body.getPosition()).sub(location).len2();
                if (distanceSq <= radius * radius) {
                    queenList.add(entity);
                }
                return false;
            }
            return true;
        }
    };
    Vector2 lowerLeft = new Vector2(location).sub(radius, radius);
    Vector2 upperRight = new Vector2(location).add(radius, radius);
    getPhysicsWorld(world).QueryAABB(callback, lowerLeft.x, lowerLeft.y, upperRight.x, upperRight.y);

    return queenList;
}

From source file:com.dongbat.game.util.WorldQueryUtil.java

public static Array<Entity> findPlayerWithAiInRadius(final com.artemis.World world, final Entity e,
        final Vector2 location, final float radius) {
    final Array<Entity> entities = new Array<Entity>();

    QueryCallback callback = new QueryCallback() {

        @Override//from  w  w w.  j ava  2s.c o  m
        public boolean reportFixture(Fixture fixture) {
            Body body = fixture.getBody();
            Entity entity = UuidUtil.getEntityByUuid(world, (UUID) body.getUserData());
            if (EntityUtil.getComponent(world, e, SubUnit.class) != null
                    || isPlayer(world, entity.getId()) && !e.equals(entity)) {
                float distanceSq = new Vector2(body.getPosition()).sub(location).len2();
                if (distanceSq <= radius * radius) {
                    entities.add(entity);
                }
            }
            return true;
        }
    };
    Vector2 lowerLeft = new Vector2(location).sub(radius, radius);
    Vector2 upperRight = new Vector2(location).add(radius, radius);
    PhysicsUtil.getPhysicsWorld(world).QueryAABB(callback, lowerLeft.x, lowerLeft.y, upperRight.x,
            upperRight.y);

    return entities;
}

From source file:com.dongbat.game.util.WorldQueryUtil.java

public static Vector2 getQueenPosition(final com.artemis.World world) {
    final Vector2 queenPosition = null;
    QueryCallback callback = new QueryCallback() {

        @Override// w  w  w.j  av a2  s.  c  o m
        public boolean reportFixture(Fixture fixture) {
            Body body = fixture.getBody();
            Entity entity = UuidUtil.getEntityByUuid(world, (UUID) body.getUserData());
            if (isQueen(world, entity.getId())) {
                queenPosition.x = body.getPosition().x;
                queenPosition.y = body.getPosition().y;
                return false;
            }
            return true;
        }

    };
    PhysicsUtil.getPhysicsWorld(world).QueryAABB(callback, -scaleX, -scaleY, scaleX, scaleY);

    return queenPosition;

}

From source file:com.dongbat.game.util.WorldQueryUtil.java

public static Array<Entity> findFood(final com.artemis.World world, final Vector2 location,
        final float radius) {
    final Array<Entity> entities = new Array<Entity>();

    QueryCallback callback = new QueryCallback() {

        @Override//ww w.  j a v  a 2 s  .  c o  m
        public boolean reportFixture(Fixture fixture) {
            Body body = fixture.getBody();
            Entity entity = UuidUtil.getEntityByUuid(world, (UUID) body.getUserData());
            if (isFood(world, entity.getId())) {
                float distanceSq = new Vector2(body.getPosition()).sub(location).len2();
                if (distanceSq <= radius * radius) {
                    entities.add(entity);
                }
            }
            return true;
        }
    };
    Vector2 lowerLeft = new Vector2(location).sub(radius, radius);
    Vector2 upperRight = new Vector2(location).add(radius, radius);
    PhysicsUtil.getPhysicsWorld(world).QueryAABB(callback, lowerLeft.x, lowerLeft.y, upperRight.x,
            upperRight.y);

    return entities;
}

From source file:com.dongbat.invasion.util.PhysicsUtil.java

public static Array<Entity> findEnemiesInRadius(final Vector2 location, final float radius) {
    final Array<Entity> enemies = new Array<Entity>();

    QueryCallback callback = new QueryCallback() {

        @Override/*from   w w  w . jav a 2  s.co m*/
        public boolean reportFixture(Fixture fixture) {
            Body body = fixture.getBody();
            Entity entity = (Entity) body.getUserData();
            if (EntityUtil.isEnemy(entity)) {
                float distanceSq = new Vector2(body.getPosition()).sub(location).len2();
                if (distanceSq <= radius * radius) {
                    enemies.add(entity);
                }
            }
            return true;
        }
    };
    Vector2 lowerLeft = new Vector2(location).sub(radius, radius);
    Vector2 upperRight = new Vector2(location).add(radius, radius);
    getWorld().QueryAABB(callback, lowerLeft.x, lowerLeft.y, upperRight.x, upperRight.y);

    return enemies;
}