List of usage examples for com.badlogic.gdx.math Vector2 add
@Override
public Vector2 add(Vector2 v)
From source file:org.destinationsol.game.input.AiPilot.java
License:Apache License
@Override public void updateFar(SolGame game, FarShip farShip) { Vector2 shipPos = farShip.getPos(); HullConfig hullConfig = farShip.getHullConfig(); float maxIdleDist = getMaxIdleDist(hullConfig); myDestProvider.update(game, shipPos, maxIdleDist, hullConfig, null); Vector2 dest = myDestProvider.getDest(); Vector2 spd = farShip.getSpd(); float angle = farShip.getAngle(); EngineItem engine = farShip.getEngine(); float ts = game.getTimeStep(); if (dest == null || engine == null) { if (myPlanetBind == null) { if (myBindAwait > 0) { myBindAwait -= ts;//from w w w .j av a 2 s . co m } else { myPlanetBind = PlanetBind.tryBind(game, shipPos, angle); myBindAwait = MAX_BIND_AWAIT; } } if (myPlanetBind != null) { myPlanetBind.setDiff(spd, shipPos, false); spd.scl(1 / ts); angle = myPlanetBind.getDesiredAngle(); } } else { float toDestLen = shipPos.dst(dest); float desiredAngle; float maxIdleDistHack = .05f; // to avoid StillGuards from getting stuck inside ground if (myDestProvider.shouldStopNearDest() && toDestLen < maxIdleDistHack) { spd.set(myDestProvider.getDestSpd()); desiredAngle = angle; // can be improved } else { desiredAngle = SolMath.angle(shipPos, dest); if (myDestProvider.shouldAvoidBigObjs()) { desiredAngle = myMover.getBigObjAvoider().avoid(game, shipPos, dest, desiredAngle); } float desiredSpdLen = myDestProvider.getDesiredSpdLen(); float spdLenDiff = engine.getAcc() * ts; float spdLen = SolMath.approach(spd.len(), desiredSpdLen, spdLenDiff); if (toDestLen < spdLen) spdLen = toDestLen; SolMath.fromAl(spd, desiredAngle, spdLen); } angle = SolMath.approachAngle(angle, desiredAngle, engine.getMaxRotSpd() * ts); } farShip.setSpd(spd); farShip.setAngle(angle); Vector2 newPos = SolMath.getVec(spd); newPos.scl(ts); newPos.add(shipPos); farShip.setPos(newPos); SolMath.free(newPos); }
From source file:org.destinationsol.game.item.Loot.java
License:Apache License
public void pickedUp(SolGame game, SolShip ship) { myLife = 0;//from ww w.j a v a2 s.c om Vector2 spd = new Vector2(ship.getPosition()); spd.sub(myPos); float fadeTime = .25f; spd.scl(1 / fadeTime); spd.add(ship.getSpd()); game.getPartMan().blip(game, myPos, myAngle, myItem.getItemType().sz, fadeTime, spd, myItem.getIcon(game)); game.getSoundMan().play(game, myItem.getItemType().pickUpSound, null, this); }
From source file:org.destinationsol.game.MapDrawer.java
License:Apache License
private void drawPlanets(GameDrawer drawer, SolGame game, float viewDist, Planet np, Vector2 camPos, float heroDmgCap, float camAngle) { ArrayList<SolSystem> systems = game.getPlanetMan().getSystems(); SolCam cam = game.getCam();//from w ww . ja v a2 s. c o m float circleWidth = cam.getRealLineWidth() * 6; float vh = cam.getViewHeight(myZoom); for (int i3 = 0, systemsSize1 = systems.size(); i3 < systemsSize1; i3++) { SolSystem sys = systems.get(i3); drawer.drawCircle(myLineTex, sys.getPos(), sys.getRadius(), SolColor.UI_MED, circleWidth, vh); } for (int i2 = 0, systemsSize = systems.size(); i2 < systemsSize; i2++) { SolSystem sys = systems.get(i2); float dangerRad = HardnessCalc.isDangerous(heroDmgCap, sys.getDps()) ? sys.getRadius() : 0; Vector2 sysPos = sys.getPos(); float rad = Const.SUN_RADIUS; if (camPos.dst(sysPos) - rad < viewDist) { drawer.draw(myStarTex, 2 * rad, 2 * rad, rad, rad, sysPos.x, sysPos.y, 0, SolColor.W); } Vector2 beltIconPos = SolMath.getVec(); ArrayList<SystemBelt> belts = sys.getBelts(); for (int i1 = 0, beltsSize = belts.size(); i1 < beltsSize; i1++) { SystemBelt belt = belts.get(i1); float beltRad = belt.getRadius(); float halfWidth = belt.getHalfWidth(); int beltIconCount = (int) (.12f * beltRad); for (int i = 0; i < beltIconCount; i++) { float angle = 360f * i / beltIconCount; SolMath.fromAl(beltIconPos, angle, beltRad); beltIconPos.add(sysPos); drawer.draw(myBeltTex, 2 * halfWidth, 2 * halfWidth, halfWidth, halfWidth, beltIconPos.x, beltIconPos.y, angle * 3, SolColor.W); } float outerRad = beltRad + halfWidth; if (dangerRad < outerRad && HardnessCalc.isDangerous(heroDmgCap, belt.getDps())) dangerRad = outerRad; } SolMath.free(beltIconPos); if (dangerRad < sys.getInnerRad() && HardnessCalc.isDangerous(heroDmgCap, sys.getInnerDps())) { dangerRad = sys.getInnerRad(); } if (dangerRad > 0) { drawAreaDanger(drawer, dangerRad, sysPos, .5f, camAngle); } } ArrayList<Planet> planets = game.getPlanetMan().getPlanets(); for (int i = 0, planetsSize = planets.size(); i < planetsSize; i++) { Planet planet = planets.get(i); Vector2 planetPos = planet.getPos(); float fh = planet.getFullHeight(); float dstToPlanetAtm = camPos.dst(planetPos) - fh; if (viewDist < dstToPlanetAtm) continue; drawer.draw(myAtmTex, 2 * fh, 2 * fh, fh, fh, planetPos.x, planetPos.y, 0, SolColor.UI_DARK); float gh; if (dstToPlanetAtm < 0) { gh = planet.getMinGroundHeight() + .5f; drawer.draw(myPlanetCoreTex, 2 * gh, 2 * gh, gh, gh, planetPos.x, planetPos.y, planet.getAngle(), SolColor.W); drawNpGround(drawer, game, viewDist, np, camPos); } else { gh = planet.getGroundHeight(); drawer.draw(myPlanetTex, 2 * gh, 2 * gh, gh, gh, planetPos.x, planetPos.y, camAngle, SolColor.W); } float dangerRad = HardnessCalc.isDangerous(heroDmgCap, planet.getGroundDps()) ? gh + Const.ATM_HEIGHT / 2 : 0; // if (dangerRad < gh && HardnessCalc.isDangerous(heroDmgCap, planet.getGroundDps())) dangerRad = gh; if (dangerRad > 0) { drawAreaDanger(drawer, dangerRad, planetPos, 1, camAngle); } } }
From source file:org.destinationsol.game.maze.MazeBuilder.java
License:Apache License
private Vector2 cellPos(int col, int row, float xOffset, float yOffset) { Vector2 res = new Vector2((col - mySz / 2) * TILE_SZ + xOffset, (row - mySz / 2) * TILE_SZ + yOffset); SolMath.rotate(res, myMazeAngle);//from w ww. ja v a 2 s .c om res.add(myMazePos); return res; }
From source file:org.destinationsol.game.maze.MazeBuilder.java
License:Apache License
private void buildEnemies(SolGame game, Maze maze, MazeLayout layout) { MazeConfig config = maze.getConfig(); float dist = maze.getRadius() - BORDER / 2; float circleLen = dist * SolMath.PI * 2; for (ShipConfig e : config.outerEnemies) { int count = (int) (e.density * circleLen); for (int i = 0; i < count; i++) { Vector2 pos = new Vector2(); SolMath.fromAl(pos, SolMath.rnd(180), dist); pos.add(myMazePos); buildEnemy(pos, game, e, false); }//from w ww. j a v a 2 s .c om } boolean[][] occupiedCells = new boolean[mySz][mySz]; occupiedCells[mySz / 2][mySz / 2] = true; for (ShipConfig e : config.innerEnemies) { int count = (int) (e.density * myInnerRad * myInnerRad * SolMath.PI); for (int i = 0; i < count; i++) { Vector2 pos = getFreeCellPos(occupiedCells); if (pos != null) buildEnemy(pos, game, e, true); } } ShipConfig bossConfig = SolMath.elemRnd(config.bosses); Vector2 pos = cellPos(mySz / 2, mySz / 2, 0f, 0f); buildEnemy(pos, game, bossConfig, true); }
From source file:org.destinationsol.game.particle.PartMan.java
License:Apache License
public void blinks(Vector2 pos, SolGame game, float sz) { int count = (int) (SZ_TO_BLINK_COUNT * sz * sz); for (int i = 0; i < count; i++) { Vector2 lightPos = new Vector2(); SolMath.fromAl(lightPos, SolMath.rnd(180), SolMath.rnd(0, sz / 2)); lightPos.add(pos); float lightSz = SolMath.rnd(.5f, 1) * EXPL_LIGHT_MAX_SZ; float fadeTime = SolMath.rnd(.5f, 1) * EXPL_LIGHT_MAX_FADE_TIME; LightObject light = new LightObject(game, lightSz, true, 1, lightPos, fadeTime, game.getCols().fire); game.getObjMan().addObjDelayed(light); }//from w w w. j a v a 2s.c o m }
From source file:org.destinationsol.game.planet.Planet.java
License:Apache License
@Bound public Vector2 getAdjustedEffectSpd(Vector2 pos, Vector2 spd) { Vector2 r = SolMath.getVec(spd); if (myConfig.skyConfig == null) { return r; }//from w w w . j a va 2s . c o m Vector2 up = SolMath.distVec(myPos, pos); float dst = up.len(); if (dst == 0 || getFullHeight() < dst) { SolMath.free(up); return r; } float smokeConst = 1.2f * myGravConst; if (dst < myGroundHeight) { up.scl(smokeConst / dst / myGroundHeight / myGroundHeight); r.set(up); SolMath.free(up); return r; } float spdPerc = (dst - myGroundHeight) / Const.ATM_HEIGHT; r.scl(spdPerc); up.scl(smokeConst / dst / dst / dst); r.add(up); SolMath.free(up); return r; }
From source file:org.destinationsol.game.planet.Planet.java
License:Apache License
public void calcSpdAtPos(Vector2 spd, Vector2 pos) { Vector2 toPos = SolMath.distVec(myPos, pos); float fromPlanetAngle = SolMath.angle(toPos); float hSpdLen = SolMath.angleToArc(myRotSpd, toPos.len()); SolMath.free(toPos);/*from w ww.j a va 2s . c o m*/ SolMath.fromAl(spd, fromPlanetAngle + 90, hSpdLen); spd.add(mySpd); }
From source file:org.destinationsol.game.planet.PlanetManager.java
License:Apache License
private boolean recoverObj(SolObject obj, float toNp, float npMinH) { if (npMinH < toNp) return false; if (!(obj instanceof SolShip)) return false; SolShip ship = (SolShip) obj;//w w w .j a v a 2 s. co m Hull hull = ship.getHull(); if (hull.config.getType() == HullConfig.Type.STATION) return false; float fh = myNearestPlanet.getFullHeight(); Vector2 npPos = myNearestPlanet.getPos(); Vector2 toShip = SolMath.distVec(npPos, ship.getPosition()); float len = toShip.len(); if (len == 0) { toShip.set(0, fh); } else { toShip.scl(fh / len); } toShip.add(npPos); Body body = hull.getBody(); body.setTransform(toShip, 0); body.setLinearVelocity(Vector2.Zero); SolMath.free(toShip); return true; }
From source file:org.destinationsol.game.planet.PlanetObjectsBuilder.java
License:Apache License
private void addDeco0(SolGame game, float groundHeight, Vector2 planetPos, Map<Vector2, List<Dra>> collector, DecoConfig dc) {//from ww w.ja v a 2s. com World w = game.getObjMan().getWorld(); ConsumedAngles consumed = new ConsumedAngles(); final Vector2 rayCasted = new Vector2(); RayCastCallback rcc = new RayCastCallback() { @Override public float reportRayFixture(Fixture fixture, Vector2 point, Vector2 normal, float fraction) { if (!(fixture.getBody().getUserData() instanceof TileObject)) { return -1; } rayCasted.set(point); return fraction; } }; int decoCount = (int) (2 * SolMath.PI * groundHeight * dc.density); for (int i = 0; i < decoCount; i++) { float decoSz = SolMath.rnd(dc.szMin, dc.szMax); float angularHalfWidth = SolMath.angularWidthOfSphere(decoSz / 2, groundHeight); float decoAngle = 0; for (int j = 0; j < 5; j++) { decoAngle = SolMath.rnd(180); if (!consumed.isConsumed(decoAngle, angularHalfWidth)) { consumed.add(decoAngle, angularHalfWidth); break; } } SolMath.fromAl(rayCasted, decoAngle, groundHeight, true); rayCasted.add(planetPos); w.rayCast(rcc, rayCasted, planetPos); float decoDist = rayCasted.dst(planetPos); float baseAngle = SolMath.windowCenter(decoAngle, DECO_PACK_ANGULAR_WIDTH); float baseDist = SolMath.windowCenter(decoDist, DECO_PACK_SZ); Vector2 basePos = SolMath.fromAl(baseAngle, baseDist).add(planetPos); Vector2 decoRelPos = new Vector2(rayCasted).sub(basePos); SolMath.rotate(decoRelPos, -baseAngle - 90, true); float decoRelAngle = decoAngle - baseAngle; TextureAtlas.AtlasRegion decoTex = SolMath.elemRnd(dc.texs); if (dc.allowFlip && SolMath.test(.5f)) decoTex = game.getTexMan().getFlipped(decoTex); RectSprite s = new RectSprite(decoTex, decoSz, dc.orig.x, dc.orig.y, decoRelPos, DraLevel.DECO, decoRelAngle, 0, SolColor.W, false); List<Dra> ss = collector.get(basePos); if (ss == null) { ss = new ArrayList<Dra>(); collector.put(new Vector2(basePos), ss); } ss.add(s); SolMath.free(basePos); } }