protected boolean checkCanKickBomb(Body body, Vector2 fromV, Vector2 toV) { World b2dWorld = body.getWorld(); kickingBomb = null; kicking = false; RayCastCallback rayCastCallback = new RayCastCallback() { @Override public float reportRayFixture(Fixture fixture, Vector2 point, Vector2 normal, float fraction) { if (fixture.getFilterData().categoryBits == GameManager.BOMB_BIT) { Entity bombEntity = (Entity) fixture.getBody().getUserData(); kickingBomb = bombEntity.getComponent(Bomb.class); return 0; } return 0; } }; b2dWorld.rayCast(rayCastCallback, fromV, toV); if (kickingBomb != null) { kicking = true; } return kicking; }
ActorBuilder actorBuilder = ActorBuilder.init(body.getWorld(), world); actorBuilder.createPortal(); GameManager.getInstance().playSound("PortalAppears.ogg"); ActorBuilder actorBuilder = ActorBuilder.init(body.getWorld(), world); actorBuilder.createPowerUp(body.getPosition().x, body.getPosition().y); body.getWorld().destroyBody(body); mRigidBody.set(entityId, false); mEnemy.set(entityId, false);
private boolean checkMovable(Body body, Vector2 from, Vector2 to) { World b2dWorld = body.getWorld(); moveable = true; RayCastCallback rayCastCallback = new RayCastCallback() { @Override public float reportRayFixture(Fixture fixture, Vector2 point, Vector2 normal, float fraction) { if (fixture.getFilterData().categoryBits == GameManager.INDESTRUCTIIBLE_BIT | fixture.getFilterData().categoryBits == GameManager.BREAKABLE_BIT | fixture.getFilterData().categoryBits == GameManager.BOMB_BIT | fixture.getFilterData().categoryBits == GameManager.ENEMY_BIT | fixture.getFilterData().categoryBits == GameManager.PLAYER_BIT) { moveable = false; return 0; } return 0; } }; b2dWorld.rayCast(rayCastCallback, from, to); return moveable; } }
protected boolean hitBombVertical(final Body body, Vector2 fromV, Vector2 toV) { World b2dWorld = body.getWorld(); hitting = false; RayCastCallback rayCastCallback = new RayCastCallback() { @Override public float reportRayFixture(Fixture fixture, Vector2 point, Vector2 normal, float fraction) { if (fixture.getBody() == body) { return 1; } if (fraction < 1.0f && fixture.getFilterData().categoryBits == GameManager.BOMB_BIT) { hitting = true; } return 0; } }; for (int i = 0; i < 3; i++) { Vector2 tmpV = new Vector2(toV); b2dWorld.rayCast(rayCastCallback, fromV, tmpV.add((1 - i) * 0.4f, 0)); } return hitting; }
protected boolean hitSomethingVertical(final Body body, Vector2 fromV, Vector2 toV) { World b2dWorld = body.getWorld(); hit = false; RayCastCallback rayCastCallback = new RayCastCallback() { @Override public float reportRayFixture(Fixture fixture, Vector2 point, Vector2 normal, float fraction) { // if hit the player, ignore it if (fixture.getFilterData().categoryBits == GameManager.PLAYER_BIT || fixture.getFilterData().categoryBits == GameManager.POWERUP_BIT) { return 0; } if (fraction < 1.0f) { hit = true; } return 0; } }; for (int i = 0; i < 3; i++) { Vector2 tmpV = new Vector2(toV); b2dWorld.rayCast(rayCastCallback, fromV, tmpV.add((1 - i) * 0.4f, 0)); } return hit; }
protected boolean hitSomethingHorizontal(final Body body, Vector2 fromV, Vector2 toV) { World b2dWorld = body.getWorld(); hit = false; RayCastCallback rayCastCallback = new RayCastCallback() { @Override public float reportRayFixture(Fixture fixture, Vector2 point, Vector2 normal, float fraction) { // if hit the player or power-up item, ignore it if (fixture.getFilterData().categoryBits == GameManager.PLAYER_BIT || fixture.getFilterData().categoryBits == GameManager.POWERUP_BIT) { return 0; } if (fraction < 1.0f) { hit = true; } return 0; } }; for (int i = 0; i < 3; i++) { Vector2 tmpV = new Vector2(toV); b2dWorld.rayCast(rayCastCallback, fromV, tmpV.add(0, (1 - i) * 0.4f)); } return hit; }
protected boolean hitBombHorizontal(final Body body, Vector2 fromV, Vector2 toV) { World b2dWorld = body.getWorld(); hitting = false; RayCastCallback rayCastCallback = new RayCastCallback() { @Override public float reportRayFixture(Fixture fixture, Vector2 point, Vector2 normal, float fraction) { if (fixture.getBody() == body) { return 1; } if (fraction < 1.0f && fixture.getFilterData().categoryBits == GameManager.BOMB_BIT) { hitting = true; } return 0; } }; for (int i = 0; i < 3; i++) { Vector2 tmpV = new Vector2(toV); b2dWorld.rayCast(rayCastCallback, fromV, tmpV.add(0, (1 - i) * 0.4f)); } return hitting; } }
@Override protected void process(int entityId) { // Explosion explosion = mExplosion.get(entityId); RigidBody rigidBody = mRigidBody.get(entityId); State state = mState.get(entityId); if (state.getStateTime() > 0.75f) { rigidBody.body.getWorld().destroyBody(rigidBody.body); world.delete(entityId); } }
@Override protected void process(int entityId) { Breakable breakable = mBreakable.get(entityId); State state = mState.get(entityId); RigidBody rigidBody = mRigidBody.get(entityId); Body body = rigidBody.body; switch (breakable.state) { case EXPLODING: state.setCurrentState("exploding"); if (state.getStateTime() > 0.6f) { body.getWorld().destroyBody(body); world.delete(entityId); // chance to create PowerUp item if (Math.random() < 0.2) { ActorBuilder actorBuilder = ActorBuilder.init(body.getWorld(), world); actorBuilder.createPowerUp(body.getPosition().x, body.getPosition().y); } } break; case NORMAL: default: state.setCurrentState("normal"); break; } }
@Override protected void process(int entityId) { PowerUp powerUp = mPowerUp.get(entityId); RigidBody rigidBody = mRigidBody.get(entityId); Renderer renderer = mRenderer.get(entityId); State state = mState.get(entityId); // flash before disappearing if (state.getStateTime() > powerUp.life - 2.0f) { renderer.setColor(new Color(1.0f, 1.0f, 1.0f, 1.0f - MathUtils.sin(state.getStateTime() * 20))); } if (state.getStateTime() > powerUp.life) { // destroy rigidBody.body.getWorld().destroyBody(rigidBody.body); world.delete(entityId); } }
GameManager.getInstance().playSound("Explosion.ogg", 1.0f, MathUtils.random(0.6f, 0.8f), 0); ActorBuilder actorBuilder = ActorBuilder.init(body.getWorld(), world); actorBuilder.createExplosion(body.getPosition().x, body.getPosition().y, bomb.power); World b2dWorld = body.getWorld(); b2dWorld.destroyBody(body); world.delete(entityId);