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

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

Introduction

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

Prototype

@Override
    public Vector2 add(Vector2 v) 

Source Link

Usage

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);
    }
}