Example usage for com.badlogic.gdx.math Vector2 scl

List of usage examples for com.badlogic.gdx.math Vector2 scl

Introduction

In this page you can find the example usage for com.badlogic.gdx.math Vector2 scl.

Prototype

@Override
    public Vector2 scl(Vector2 v) 

Source Link

Usage

From source file:com.o2d.pkayjava.editor.view.stage.Sandbox.java

License:Apache License

public Vector2 screenToWorld(Vector2 vector) {
    // TODO: now unproject doesnot do well too. I am completely lost here. how hard is it to do screen to world, madafakas.
    //getViewport().unproject(vector);
    int pixelPerWU = sceneControl.sceneLoader.getRm().getProjectVO().pixelToWorld;
    OrthographicCamera camera = com.o2d.pkayjava.editor.view.stage.Sandbox.getInstance().getCamera();
    Viewport viewport = com.o2d.pkayjava.editor.view.stage.Sandbox.getInstance().getViewport();

    vector.x = (vector.x - (viewport.getScreenWidth() / 2 - camera.position.x * pixelPerWU / camera.zoom))
            * camera.zoom;//from   w w w  .  j  a  va2s  . c  om
    vector.y = (vector.y - (viewport.getScreenHeight() / 2 - camera.position.y * pixelPerWU / camera.zoom))
            * camera.zoom;

    vector.scl(1f / pixelPerWU);

    return vector;
}

From source file:com.o2d.pkayjava.editor.view.stage.Sandbox.java

License:Apache License

public Vector2 worldToScreen(Vector2 vector) {
    // TODO: WTF, project had to work instead I am back to this barbarian methods of unholy land!
    //vector = getViewport().project(vector);
    int pixelPerWU = sceneControl.sceneLoader.getRm().getProjectVO().pixelToWorld;
    OrthographicCamera camera = com.o2d.pkayjava.editor.view.stage.Sandbox.getInstance().getCamera();
    Viewport viewport = com.o2d.pkayjava.editor.view.stage.Sandbox.getInstance().getViewport();
    vector.x = vector.x / camera.zoom + (viewport.getWorldWidth() / 2 - (camera.position.x) / camera.zoom);
    vector.y = vector.y / camera.zoom + (viewport.getWorldHeight() / 2 - (camera.position.y) / camera.zoom);

    vector.scl(pixelPerWU);

    return vector;
}

From source file:com.ore.infinium.systems.MovementSystem.java

License:Open Source License

private void simulate(Entity entity, float delta) {
    //fixme maybe make a dropped component?
    if (controlMapper.get(entity) == null) {
        if (m_world.isServer()) {
            ItemComponent itemComponent = itemMapper.get(entity);
            if (itemComponent != null && itemComponent.state == ItemComponent.State.DroppedInWorld) {
                simulateDroppedItem(entity, delta);
            }/*from  ww  w .  ja v a2  s.  c o m*/
        }

        return;
    }

    if (m_world.isServer()) {
        return;
    }

    //fixme handle noclip
    final SpriteComponent spriteComponent = spriteMapper.get(entity);
    final Vector2 origPosition = new Vector2(spriteComponent.sprite.getX(), spriteComponent.sprite.getY());

    final VelocityComponent velocityComponent = velocityMapper.get(entity);

    final Vector2 oldVelocity = new Vector2(velocityComponent.velocity);
    Vector2 newVelocity = new Vector2(oldVelocity);

    final Vector2 desiredDirection = controlMapper.get(entity).desiredDirection;

    //acceleration due to gravity
    Vector2 acceleration = new Vector2(desiredDirection.x * PlayerComponent.movementSpeed, World.GRAVITY_ACCEL);

    JumpComponent jumpComponent = jumpMapper.get(entity);
    if (jumpComponent.canJump && jumpComponent.shouldJump) {

        if (jumpComponent.jumpTimer.milliseconds() >= jumpComponent.jumpInterval) {
            //good to jump, actually do it now.
            jumpComponent.jumpTimer.reset();

            acceleration.y = -PlayerComponent.jumpVelocity;
        }
    }

    jumpComponent.canJump = false;
    jumpComponent.shouldJump = false;

    newVelocity = newVelocity.add(acceleration.x * delta, acceleration.y * delta);

    final float epsilon = 0.00001f;
    if (Math.abs(newVelocity.x) < epsilon && Math.abs(newVelocity.y) < epsilon) {
        //gets small enough velocity, cease movement/sleep object.
        newVelocity.set(0.0f, 0.0f);
    }

    newVelocity.x *= 0.8f;

    //    newVelocity = glm::clamp(newVelocity, glm::vec2(-maxMovementSpeed, PLAYER_JUMP_VELOCITY), glm::vec2(maxMovementSpeed, 9999999999999));//(9.8f / PIXELS_PER_METER) * 4.0));
    //    newVelocity = glm::clamp(newVelocity, glm::vec2(-maxMovementSpeed, PLAYER_JUMP_VELOCITY), glm::vec2(maxMovementSpeed, (9.8f / PIXELS_PER_METER) * 4.0));

    //clamp both axes between some max/min values..
    Vector2 dt = new Vector2(delta, delta);
    //        newVelocity.x = MathUtils.clamp(newVelocity.x, -PlayerComponent.maxMovementSpeed, PlayerComponent.maxMovementSpeed);
    //        newVelocity.y = MathUtils.clamp(newVelocity.y, PlayerComponent.jumpVelocity, World.GRAVITY_ACCEL_CLAMP);

    ///////// velocity verlet integration
    // http://lolengine.net/blog/2011/12/14/understanding-motion-in-games

    //HACK if i do 0.5f * delta, it doesn't move at all??
    // * delta
    //OLD CODE desiredPosition = ((origPosition.xy() + (oldVelocity + newVelocity)) * glm::vec2(0.5f) * dt);

    //TODO: add threshold to nullify velocity..so we don't infinitely move and thus burn through ticks/packets

    velocityComponent.velocity.set(newVelocity.x, newVelocity.y);

    // newVelocity is now invalid, note.
    Vector2 desiredPosition = origPosition.add(oldVelocity.add(newVelocity.scl(0.5f * delta)));
    final Vector2 finalPosition = performCollision(desiredPosition, entity);

    spriteComponent.sprite.setPosition(finalPosition.x, finalPosition.y);
    //        Gdx.app.log("player pos", finalPosition.toString());

    //FIXME: do half-ass friction, to feel better than this. and then when movement is close to 0, 0 it.
}

From source file:com.ore.infinium.systems.MovementSystem.java

License:Open Source License

private void simulateDroppedItem(Entity item, float delta) {
    ItemComponent itemComponent = itemMapper.get(item);
    if (itemComponent.state != ItemComponent.State.DroppedInWorld) {
        return;/*from   www.  ja  va2  s .  c o  m*/
        //only interested in simulating gravity for dropped items
    }

    SpriteComponent itemSpriteComponent = spriteMapper.get(item);
    VelocityComponent itemVelocityComponent = velocityMapper.get(item);

    Vector2 itemPosition = new Vector2(itemSpriteComponent.sprite.getX(), itemSpriteComponent.sprite.getY());

    int x = (int) (itemPosition.x / World.BLOCK_SIZE);
    int y = (int) (itemPosition.y / World.BLOCK_SIZE);

    Entity playerWhoDropped = m_world.playerForID(itemComponent.playerIdWhoDropped);

    VelocityComponent playerVelocityComponent = velocityMapper.get(playerWhoDropped);
    Vector2 playerVelocity = new Vector2(playerVelocityComponent.velocity);

    Vector2 acceleration = new Vector2(0.0f, World.GRAVITY_ACCEL);

    if (itemComponent.justDropped) {
        //acceleration.x += Math.max(playerVelocity.x * 0.5f, World.GRAVITY_ACCEL);
        acceleration.x += 2;//Math.max(playerVelocity.x * 0.5f, World.GRAVITY_ACCEL);
        acceleration.y += -World.GRAVITY_ACCEL * 8.0f;

        //only add player velocity the first tick, as soon as they drop it.
        itemComponent.justDropped = false;
    }

    final Vector2 itemOldVelocity = new Vector2(itemVelocityComponent.velocity);
    Vector2 itemNewVelocity = new Vector2(itemVelocityComponent.velocity);

    itemNewVelocity.add(acceleration);

    itemNewVelocity.x *= 0.95f;

    itemNewVelocity.x = MathUtils.clamp(itemNewVelocity.x, -PlayerComponent.maxMovementSpeed,
            PlayerComponent.maxMovementSpeed);
    //        newVelocity.y = MathUtils.clamp(newVelocity.y, PlayerComponent.jumpVelocity, World.GRAVITY_ACCEL_CLAMP);
    itemNewVelocity.y = MathUtils.clamp(itemNewVelocity.y, -World.GRAVITY_ACCEL_CLAMP * 10,
            World.GRAVITY_ACCEL_CLAMP);

    //clamp both axes between some max/min values..
    //    newVelocity = glm::clamp(newVelocity, glm::vec2(-maxMovementSpeed, PLAYER_JUMP_VELOCITY), glm::vec2(maxMovementSpeed, 9.8f / PIXELS_PER_METER /10.0f));

    //reset velocity once it gets small enough, and consider it non-moved.
    float epsilon = 0.00001f;
    if (Math.abs(itemNewVelocity.x) < epsilon && Math.abs(itemNewVelocity.y) < epsilon) {
        itemNewVelocity.setZero();
    } else {
        itemVelocityComponent.velocity.set(itemNewVelocity);
        Vector2 desiredPosition = itemPosition.add(itemOldVelocity.add(itemNewVelocity.scl(0.5f * delta)));
        Vector2 finalPosition = performCollision(desiredPosition, item);

        //TODO: add threshold to nullify velocity..so we don't infinitely move and thus burn through ticks/packets

        //HACK: obviously
        //    positionComponent->setPosition(desiredPosition);

        //    const glm::vec3 finalPosition ;

        //qCDebug(ORE_IMPORTANT) << "dropped item opsition: " << desiredPosition << " Id: " << entity.getId() << " velcotiy: " << v;

        itemSpriteComponent.sprite.setPosition(finalPosition.x, finalPosition.y);
        maybeSendEntityMoved(item);
    }
}

From source file:com.pcg.roguelike.entity.systems.MovementSystem.java

@Override
public void processEntity(Entity entity, float deltaTime) {
    Body body = bm.get(entity).body;//from w ww  .j  a v  a 2 s  . c  o  m

    if (body == null) {
        return;
    }

    Vector2 movement = mm.get(entity).movement.cpy();

    float speed = 1;
    SpeedComponent sc = sm.get(entity);
    if (sc != null) {
        speed = sc.speed;
        movement.scl(speed);
    }

    System.out.println("Movement: " + movement);

    body.setLinearVelocity(movement);
    //body.applyLinearImpulse(movement, body.getPosition(), true);
}

From source file:com.punchables.rainbowdad.entity.Enemy.java

public void steerTo(Coord target, int radius, boolean avoidTiles) {
    //System.out.println(new Vector2(pos.x - getPos().x, pos.y - getPos().y));
    //setAccel(new Vector2(pos.x - getPos().x, pos.y - getPos().y).scl(200));

    boolean withinRadius = abs(target.x - getPos().x) <= radius && abs(target.y - getPos().y) <= radius;

    if (!withinRadius) {
        Vector2 desiredVel = new Vector2(target.x - getPos().x, target.y - getPos().y).nor().scl(getMaxVel());
        Vector2 steeringVel = desiredVel.sub(getVel());
        //System.out.println(desiredVel + " " + steeringVel);

        if (avoidTiles) {
            int maxAvoidForce = 64;
            ArrayList<MapTile> collidableTiles = refreshCollidableTiles(128);
            MapTile closestTile = null;//w  ww.ja  va2s .c  om
            int closestTileDist = Coord.getDistanceSquared(new Coord(getPos()),
                    collidableTiles.get(0).getPos());
            for (MapTile tile : collidableTiles) {
                //float[] collideArray = Collider.checkCollision(new Circle(ahead, 1), tile, GameScreen.tileSize, true);
                int distSquared = Coord.getDistanceSquared(new Coord(getPos()), tile.getPos());
                if (distSquared < closestTileDist) {
                    closestTileDist = distSquared;
                    closestTile = tile;
                }
            }

            Vector2 avoidanceVelocity = new Vector2();
            if (closestTile != null) {
                avoidanceVelocity = new Vector2(closestTile.getPos().x - getPos().x,
                        closestTile.getPos().y - getPos().y).nor();
                avoidanceVelocity.scl(maxAvoidForce);
            } else {
                avoidanceVelocity = new Vector2();
                System.out.println("no close tiles");
            }

            steeringVel.add(avoidanceVelocity.scl(-1));

        }

        getVel().add(steeringVel);
    }

}

From source file:com.redtoorange.game.components.physics.BulletPhysicsComponent.java

License:Open Source License

/**
 * @param position The position to spawn the bullet.
 * @param velocity The velocity of the bullet (in x, y).
 * @param rotation The rotation of the bullet.
 *//*from www .  ja va2  s  .  c o m*/
private void createBulletBody(Vector2 position, Vector2 velocity, float rotation) {
    body = Box2DFactory.createBody(physicsSystem, bulletBoundingRect, BodyDef.BodyType.DynamicBody, 10f, 0, 0,
            true, true);

    body.setUserData(controlledBullet);
    body.setTransform(position, (float) Math.toRadians(rotation));
    body.applyLinearImpulse(velocity.scl(bulletSpeedMultiplier), body.getWorldCenter(), true);
}

From source file:com.redtoorange.game.components.PlayerGunComponent.java

License:Open Source License

/** Fire a bullet from the gun and create the muzzle flash. */
private void fireBullet() {
    //set timers//w  ww .  j  a v  a2 s. com
    fireBullet = false;
    timeTillFire += coolDown;

    //grab the next available bullet
    Bullet b = bulletPool.get(bulletIndex);
    bulletIndex++;
    if (bulletIndex == MAX_BULLETS)
        bulletIndex = 0;

    //set the bullet's position and velocity.
    Vector2 bulletPosition = sc.getCenter();
    bulletPosition.add(new Vector2(0.35f, -0.3f).rotate(player.getRotation()));

    Vector2 velocity = new Vector2(in.getMousePosition().x - bulletPosition.x,
            in.getMousePosition().y - bulletPosition.y).nor();
    velocity.scl(speed);

    b.fire(bulletPosition, velocity, player.getRotation());

    //Fire off the muzzle flash
    muzzelFlash.setPosition(bulletPosition);
    muzzelFlash.setColor(Color.FIREBRICK);
    muzzelFlash.setActive(true);
    muzzleFlashTimer = muzzelFlashDwell;
}

From source file:com.redtoorange.game.gameobject.GameMap.java

License:Open Source License

/**
 * Strip the rectangle objects from the TMX file and resize them to the correct scale for the game world.
 *
 * @param source      The collection of source rectangles from the TMX file.
 * @param destination The collection to place the resized rectangles.
 *///w w  w  . j  a  v a 2s  . c om
private void pullAndAddRectangles(Array<RectangleMapObject> source, Array<Rectangle> destination) {
    for (RectangleMapObject r : source) {
        Rectangle rectangle = r.getRectangle();

        Vector2 size = new Vector2();
        Vector2 center = new Vector2();

        rectangle.getSize(size);
        rectangle.getCenter(center);

        size.scl(mapScale);
        center.scl(mapScale);

        rectangle.setSize(size.x, size.y);
        rectangle.setCenter(center.x, center.y);

        destination.add(rectangle);
    }
}

From source file:com.tnf.ptm.common.Shard.java

License:Apache License

@Override
public void receiveForce(Vector2 force, PtmGame game, boolean acc) {
    if (acc) {//from w  w  w.jav  a2s . c  om
        force.scl(myMass);
    }
    myBody.applyForceToCenter(force, true);
}