List of usage examples for com.badlogic.gdx.math Vector2 scl
@Override
public Vector2 scl(Vector2 v)
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); }