/** * What happens with the widget when another widget touches it. * * @param other_body The body that touched it. * @param f The x,y coordinate that is the contact point. */ public void reactToTouchingBody(CollisionEvent e) { float speed = MOVEMENT_SPEED + (MOVEMENT_SPEED * bounces * 0.05f); if (currentDirection == Direction.WEST) { currentDirection = direction.EAST; body.setForce(2 * speed, 0); } else if (currentDirection == Direction.EAST) { currentDirection = Direction.WEST; body.setForce(-2 * speed, 0); } else if (currentDirection == Direction.NORTH) { currentDirection = Direction.SOUTH; body.setForce(0, 2 * speed); } else if (currentDirection == Direction.SOUTH) { currentDirection = direction.NORTH; body.setForce(0, -2 * speed); } bounces++; }
/** Resets the widget to start state. */ public void resetWidget() { // Reset has been made, so we CAN activate this later. reset = true; // Make inactive active = false; // Not collided. collided = false; bounces = 0; currentDirection = direction; image = frames.get(0); body.setEnabled(false); // Move to initial position. body.set(shape, MASS); body.setPosition(position.x + WIDTH / 2, position.y + HEIGHT / 2); // Make sure the gameplay didn't mess with any initial properties. body.setCanRest(true); body.setDamping(0.0f); body.setFriction(0.01f); body.setGravityEffected(false); body.setIsResting(true); body.setMoveable(true); body.setRestitution(1.5f); body.setRotatable(true); body.setRotation(0.0f); body.setRotDamping(0.0f); body.setMaxVelocity(50f, 50f); body.setForce(-body.getForce().getX(), -body.getForce().getY()); if (currentDirection == Direction.WEST) { body.setForce(-MOVEMENT_SPEED, 0); } else if (currentDirection == Direction.EAST) { body.setForce(MOVEMENT_SPEED, 0); } if (currentDirection == Direction.NORTH) { body.setForce(0, -MOVEMENT_SPEED); } else if (currentDirection == Direction.SOUTH) { body.setForce(0, MOVEMENT_SPEED); } body.adjustVelocity(new Vector2f(-body.getVelocity().getX(), -body.getVelocity().getY())); body.adjustAngularVelocity(-body.getAngularVelocity()); }