List of usage examples for org.apache.commons.math3.geometry.euclidean.threed Vector3D getZ
public double getZ()
From source file:org.jtrfp.trcl.core.Renderer.java
public void setSunVector(Vector3D sv) { factory.getDeferredProgram().use();//from ww w. jav a 2 s . c o m factory.getSunVectorUniform().set((float) sv.getX(), (float) sv.getY(), (float) sv.getZ()); gpu.defaultProgram(); }
From source file:org.jtrfp.trcl.core.TR.java
public static Vector3D twosComplimentSubtract(Vector3D l, Vector3D r) { return new Vector3D(deltaRollover(l.getX() - r.getX()), deltaRollover(l.getY() - r.getY()), deltaRollover(l.getZ() - r.getZ())); }
From source file:org.jtrfp.trcl.DEFObjectPlacer.java
@Override public void placeObjects(RenderableSpacePartitioningGrid target, Vector3D positionOffset) { final List<EnemyDefinition> defs = def.getEnemyDefinitions(); final List<EnemyPlacement> places = def.getEnemyPlacements(); final Model[] models = new Model[defs.size()]; //final TR tr = world.getTr(); final LoadingProgressReporter[] defReporters = rootReporter.generateSubReporters(defs.size()); final LoadingProgressReporter[] placementReporters = rootReporter.generateSubReporters(places.size()); for (int i = 0; i < defs.size(); i++) { defReporters[i].complete();/*from w ww. ja va 2s .c o m*/ final int index = i;//??? final EnemyDefinition def = defs.get(index); try { models[index] = tr.getResourceManager().getBINModel(def.getComplexModelFile(), tr.getGlobalPaletteVL(), null, tr.gpu.get().getGl()); } catch (Exception e) { e.printStackTrace(); } if (models[index] == null) System.out.println( "Failed to get a model from BIN " + def.getComplexModelFile() + " at index " + index); final Reporter reporter = tr.getReporter(); reporter.report("org.jtrfp.trcl.DEFObjectPlacer.def." + defs.get(i).getDescription().replace('.', ' ') + ".complexModelFile", defs.get(i).getComplexModelFile()); reporter.report("org.jtrfp.trcl.DEFObjectPlacer.def." + defs.get(i).getDescription().replace('.', ' ') + ".logic", defs.get(i).getLogic()); reporter.report("org.jtrfp.trcl.DEFObjectPlacer.def." + defs.get(i).getDescription().replace('.', ' ') + ".simpleModelFile", defs.get(i).getSimpleModel()); } //end for(i:defs) int placementReporterIndex = 0; for (EnemyPlacement pl : places) { placementReporters[placementReporterIndex++].complete(); Model model = models[pl.getDefIndex()]; if (model != null) { final EnemyDefinition def = defs.get(pl.getDefIndex()); final DEFObject obj = new DEFObject(tr, model, def, pl); if (defList != null) defList.add(obj); if (def.isShowOnBriefing() && !enemyPlacementMap.containsKey(def)) { enemyPlacementMap.put(def, obj); } //end //USING z,x coords final double[] objPos = obj.getPosition(); objPos[0] = TR.legacy2Modern(pl.getLocationOnMap().getZ()) + positionOffset.getX(); objPos[1] = (TR.legacy2Modern(pl.getLocationOnMap().getY()) / TR.mapWidth) * 16. * tr.getWorld().sizeY + positionOffset.getY(); objPos[2] = TR.legacy2Modern(pl.getLocationOnMap().getX()) + positionOffset.getZ(); obj.notifyPositionChange(); if (def.getLogic() == EnemyLogic.groundStaticRuin) { //Spawn a second, powerup-free model using the simplemodel Model simpleModel = null; try { simpleModel = tr.getResourceManager().getBINModel(def.getSimpleModel(), tr.getGlobalPaletteVL(), null, tr.gpu.get().getGl()); } catch (Exception e) { e.printStackTrace(); } EnemyDefinition ed = new EnemyDefinition(); ed.setLogic(EnemyLogic.groundDumb); ed.setDescription("auto-generated enemy rubble def"); ed.setPowerupProbability(0); EnemyPlacement simplePlacement = pl.clone(); final DEFObject ruin = new DEFObject(tr, simpleModel, ed, simplePlacement); ruin.setVisible(false); ruin.setIsRuin(true); obj.setRuinObject(ruin); ruin.setPosition(obj.getPosition()); try { ruin.setDirection(new ObjectDirection(pl.getRoll(), pl.getPitch(), pl.getYaw() + 65536)); } catch (MathArithmeticException e) { e.printStackTrace(); } target.add(ruin); } //end if(groundStaticRuin) if (pl.getRoll() != 0 || pl.getPitch() != 0 || pl.getYaw() != 0)//Only set if not 0,0,0 try { obj.setDirection(new ObjectDirection(pl.getRoll(), pl.getPitch(), pl.getYaw() + 65536)); } catch (MathArithmeticException e) { e.printStackTrace(); } if (headingOverride != null) { final double[] headingArray = obj.getHeadingArray(); headingArray[0] = headingOverride.getX(); headingArray[1] = headingOverride.getY(); headingArray[2] = headingOverride.getZ(); } //end if(headingOverride) target.add(obj); } //end if(model!=null) else { System.out.println("Skipping triangle list at index " + pl.getDefIndex()); } } //end for(places) for (EnemyDefinition ed : enemyPlacementMap.keySet()) { enemyIntros.add(new EnemyIntro(enemyPlacementMap.get(ed), ed.getDescription())); } }
From source file:org.jtrfp.trcl.flow.Mission.java
public void setSatelliteView(boolean satelliteView) { if (!(getMissionMode() instanceof AboveGroundMode) && satelliteView) throw new IllegalArgumentException("Cannot activate satellite view while mission mode is " + getMissionMode().getClass().getSimpleName()); if (satelliteView && tr.getGame().isPaused()) throw new IllegalArgumentException("Cannot activate satellite view while paused."); pcs.firePropertyChange(SATELLITE_VIEW, this.satelliteView, satelliteView); if (satelliteView != this.satelliteView) { final Game game = tr.getGame(); final Camera cam = tr.mainRenderer.get().getCamera(); if (satelliteView) {//Switched on tr.getThreadManager().setPaused(true); game.getNavSystem().deactivate(); game.getHUDSystem().deactivate(); cam.setFogEnabled(false);/*from ww w . j a v a 2 s . com*/ cam.probeForBehavior(MatchPosition.class).setEnable(false); cam.probeForBehavior(MatchDirection.class).setEnable(false); final Vector3D pPos = new Vector3D(game.getPlayer().getPosition()); final Vector3D pHeading = tr.getGame().getPlayer().getHeading(); cam.setPosition(new Vector3D(pPos.getX(), TR.mapSquareSize * 25, pPos.getZ())); cam.setHeading(Vector3D.MINUS_J); cam.setTop(new Vector3D(pHeading.getX(), .0000000001, pHeading.getZ()).normalize()); tr.getGame().getSatDashboard().setVisible(true); } else {//Switched off tr.getThreadManager().setPaused(false); tr.getGame().getNavSystem().activate(); game.getHUDSystem().activate(); cam.setFogEnabled(true); cam.probeForBehavior(MatchPosition.class).setEnable(true); cam.probeForBehavior(MatchDirection.class).setEnable(true); tr.getGame().getSatDashboard().setVisible(false); } //end !satelliteView } //end if(change) this.satelliteView = satelliteView; }
From source file:org.jtrfp.trcl.LineSegment.java
public static Triangle[] buildTriPipe(Vector3D start, Vector3D end, TextureDescription texture, int thickness, Triangle[] dest, int destOffset) { Rotation rot = new Rotation(Vector3D.PLUS_K, end.subtract(start).normalize()); final double len = start.distance(end); // Start/*from www . j a v a2 s .com*/ Vector3D sbl = new Vector3D(-thickness, -thickness, 0);// bottom left Vector3D sbr = new Vector3D(thickness, -thickness, 0);// bottom right Vector3D stp = new Vector3D(0, thickness, 0); // End Vector3D ebl = new Vector3D(-thickness, -thickness, len); Vector3D ebr = new Vector3D(thickness, -thickness, len); Vector3D etp = new Vector3D(0, thickness, len); Vector3D cl = new Vector3D(-1, 1, 0).normalize(); Vector3D cr = new Vector3D(1, 1, 0).normalize(); Vector3D cb = new Vector3D(0, -1, 0); cl = rot.applyTo(cl); cr = rot.applyTo(cr); cb = rot.applyTo(cb); sbl = rot.applyTo(sbl).add(start); sbr = rot.applyTo(sbr).add(start); stp = rot.applyTo(stp).add(start); ebl = rot.applyTo(ebl).add(start); ebr = rot.applyTo(ebr).add(start); etp = rot.applyTo(etp).add(start); final double u[] = { 0, 1, 1, 0 }; final double v[] = { 1, 1, 0, 0 }; // TOP LEFT Triangle.quad2Triangles(new double[] { sbl.getX(), stp.getX(), etp.getX(), ebl.getX() }, new double[] { sbl.getY(), stp.getY(), etp.getY(), ebl.getY() }, new double[] { sbl.getZ(), stp.getZ(), etp.getZ(), ebl.getZ() }, u, v, texture, RenderMode.STATIC, false, cl, dest, destOffset, "LineSegment.topLeft"); // TOP RIGHT Triangle.quad2Triangles(new double[] { sbr.getX(), stp.getX(), etp.getX(), ebr.getX() }, new double[] { sbr.getY(), stp.getY(), etp.getY(), ebr.getY() }, new double[] { sbr.getZ(), stp.getZ(), etp.getZ(), ebr.getZ() }, u, v, texture, RenderMode.STATIC, false, cr, dest, destOffset + 2, "LineSegment.topRight"); // BOTTOM Triangle.quad2Triangles(new double[] { sbl.getX(), sbr.getX(), ebr.getX(), ebl.getX() }, new double[] { sbl.getY(), sbr.getY(), ebr.getY(), ebl.getY() }, new double[] { sbr.getZ(), sbr.getZ(), ebr.getZ(), ebl.getZ() }, u, v, texture, RenderMode.STATIC, false, cb, dest, destOffset + 4, "LineSegment.bottom"); return dest; }
From source file:org.jtrfp.trcl.obj.DEFObject.java
private void fallingObjectBehavior() { canTurn = false;/* ww w .j a v a 2 s .c o m*/ mobile = false;//Technically wrong but propulsion is unneeded. //addBehavior(new PulledDownByGravityBehavior()); final MovesByVelocity mbv = new MovesByVelocity(); mbv.setVelocity(new Vector3D(3500, -100000, 5000)); addBehavior(mbv); //addBehavior(new VelocityDragBehavior().setDragCoefficient(.99)); // For some reason it falls like pine tar addBehavior(new DamageableBehavior().setMaxHealth(10).setHealth(10)); addBehavior(new DeathBehavior()); addBehavior(new CollidesWithTerrain().setIgnoreCeiling(true)); addBehavior(new DamagedByCollisionWithSurface()); addBehavior(new RotationalMomentumBehavior().setEquatorialMomentum(.01).setLateralMomentum(.02) .setPolarMomentum(.03)); { final DEFObject thisObject = this; final TR thisTr = getTr(); addBehavior(new ResetsRandomlyAfterDeath().setMinWaitMillis(1000).setMaxWaitMillis(5000) .setRunOnReset(new Runnable() { @Override public void run() { final Vector3D centerPos = thisObject.probeForBehavior(DeathBehavior.class) .getLocationOfLastDeath(); thisObject.probeForBehavior(MovesByVelocity.class) .setVelocity(new Vector3D(7000, -200000, 1000)); final double[] pos = thisObject.getPosition(); pos[0] = centerPos.getX() + Math.random() * TR.mapSquareSize * 3 - TR.mapSquareSize * 1.5; pos[1] = thisTr.getWorld().sizeY / 2 + thisTr.getWorld().sizeY * (Math.random()) * .3; pos[2] = centerPos.getZ() + Math.random() * TR.mapSquareSize * 3 - TR.mapSquareSize * 1.5; thisObject.notifyPositionChange(); }//end run() })); } }
From source file:org.jtrfp.trcl.obj.Explosion.java
public Explosion(TR tr, ExplosionType type) { super(tr, type.getMillisPerFrame(), type.getAnimationFiles().length); final Vector3D origin = type.getOrigin(); this.setModelOffset(origin.getX() * type.getBillboardSize().getWidth() * -.5, origin.getY() * type.getBillboardSize().getHeight() * -.5, origin.getZ()); this.type = type; setBillboardSize(type.getBillboardSize()); if (type.isRandomRotate()) setRotation(2 * Math.PI * Math.random()); String[] aniFiles = type.getAnimationFiles(); Texture[] frames = new Texture[aniFiles.length]; try {// w w w . j a v a2 s . c o m for (int i = 0; i < aniFiles.length; i++) { frames[i] = frame(aniFiles[i]); } } //end try{} catch (Exception e) { e.printStackTrace(); } setTexture(new AnimatedTexture(getSequencer(), frames), true); }
From source file:org.jtrfp.trcl.obj.ExplosionSystem.java
public Explosion triggerExplosion(Vector3D loc, ExplosionType type) { if (!isNewExplosionFeasible(loc, type)) return null; indices[type.ordinal()]++;//from www . jav a 2s .c o m indices[type.ordinal()] %= MAX_EXPLOSIONS_PER_POOL; Explosion result = allExplosions[type.ordinal()][indices[type.ordinal()]]; result.destroy(); result.reset(); result.setPosition(loc.getX(), loc.getY(), loc.getZ()); result.notifyPositionChange(); final SmokeSystem sf = tr.getResourceManager().getSmokeSystem(); final int NUM_PUFFS = 1; for (int i = 0; i < NUM_PUFFS; i++) { sf.triggerSmoke(loc.add(new Vector3D(Math.random() * 10000 - 5000, Math.random() * 10000 - 5000, Math.random() * 10000 - 5000)), SmokeType.Puff); } //end for(i) add(result); return result; }
From source file:org.jtrfp.trcl.obj.TunnelSegment.java
private static Model createModel(Segment s, double segLen, TextureDescription[] tunnelTexturePalette, double endX, double endY, final TR tr) { Model mainModel = new Model(true, tr); mainModel.setDebugName("tunnelSegment main."); final int numPolys = s.getNumPolygons(); double startWidth = getStartWidth(s); double startHeight = getStartHeight(s); double endWidth = getEndWidth(s); double endHeight = getEndHeight(s); final FlickerLightType lightType = s.getFlickerLightType(); // TODO: Cleanup. final double startAngle1 = ((double) s.getStartAngle1() / 65535.) * 2. * Math.PI; final double startAngle2 = ((double) s.getStartAngle2() / 65535.) * 2. * Math.PI; final double startAngle = startAngle1; final double endAngle1 = ((double) s.getEndAngle1() / 65535.) * 2. * Math.PI; final double endAngle2 = ((double) s.getEndAngle2() / 65535.) * 2. * Math.PI; double endAngle = endAngle1; final double dAngleStart = (startAngle2 - startAngle1) / (double) numPolys; final double dAngleEnd = (endAngle2 - endAngle1) / (double) numPolys; final double startX = 0; final double startY = 0; final double zStart = 0; final double zEnd = segLen; final int numPolygonsMinusOne = s.getNumPolygons() - 1; final int lightPoly = s.getLightPolygon(); final boolean hasLight = lightPoly != -1; if (hasLight) { mainModel.setAnimateUV(true);/* w w w . java2s . co m*/ mainModel.setSmoothAnimation(false); if (lightType == FlickerLightType.noLight) { //Do nothing. } else if (lightType == FlickerLightType.off1p5Sec) { mainModel.setController(new Controller() { private final int off = (int) (Math.random() * 2000); @Override public double getCurrentFrame() { return (off + System.currentTimeMillis() % 2000) > 1500 ? 1 : 0; } @Override public void setDebugMode(boolean b) { //Not implemented. } }); } else if (lightType == FlickerLightType.on1p5Sec) { mainModel.setController(new Controller() { private final int off = (int) (Math.random() * 2000); @Override public double getCurrentFrame() { return (off + System.currentTimeMillis() % 2000) < 1500 ? 1 : 0; } @Override public void setDebugMode(boolean b) { //Not implemented. } }); } else if (lightType == FlickerLightType.on1Sec) { mainModel.setController(new Controller() { private final int off = (int) (Math.random() * 2000); @Override public double getCurrentFrame() { return (off + System.currentTimeMillis() % 2000) > 1000 ? 1 : 0; } @Override public void setDebugMode(boolean b) { //Not implemented. } }); } } //end (has light) final double[] noLightU = new double[] { 1, 1, 0, 0 }; final double[] noLightV = new double[] { 0, 1, 1, 0 }; final double[] lightOffU = new double[] { 1, 1, .5, .5 }; final double[] lightOffV = new double[] { .5, 1, 1, .5 }; final double[] lightOnU = new double[] { .5, .5, 0, 0 }; final double[] lightOnV = new double[] { .5, 1, 1, .5 }; double rotPeriod = (1000. * 32768.) / (double) s.getRotationSpeed(); final boolean reverseDirection = rotPeriod < 0; if (reverseDirection) rotPeriod *= -1; final int numFramesIfRotating = 30; final int numFramesIfStatic = 2; final boolean isRotating = !Double.isInfinite(rotPeriod); int numAnimFrames = isRotating ? numFramesIfRotating : numFramesIfStatic; if (isRotating) mainModel.setFrameDelayInMillis((int) (rotPeriod / (numAnimFrames))); final double animationDeltaRadians = isRotating ? ((reverseDirection ? 1 : -1) * (2 * Math.PI) / (double) numAnimFrames) : 0; //FRAME LOOP for (int frameIndex = 0; frameIndex < numAnimFrames; frameIndex++) { final Model m = new Model(false, tr); m.setDebugName("TunnelSegment frame " + frameIndex + " of " + numAnimFrames); final double frameAngleDeltaRadians = animationDeltaRadians * (double) frameIndex; double frameStartAngle = startAngle + frameAngleDeltaRadians; double frameEndAngle = endAngle + frameAngleDeltaRadians; final double frameStartAngle1 = startAngle1 + frameAngleDeltaRadians; final double frameStartAngle2 = startAngle2 + frameAngleDeltaRadians; final double frameEndAngle1 = endAngle + frameAngleDeltaRadians; double[] thisU = noLightU, thisV = noLightV;//Changeable u/v references, default to noLight // Poly quads for (int pi = 0; pi < numPolygonsMinusOne; pi++) { Vector3D p0 = segPoint(frameStartAngle, zStart, startWidth, startHeight, startX, startY); Vector3D p1 = segPoint(frameEndAngle, zEnd, endWidth, endHeight, endX, endY); Vector3D p2 = segPoint(frameEndAngle + dAngleEnd, zEnd, endWidth, endHeight, endX, endY); Vector3D p3 = segPoint(frameStartAngle + dAngleStart, zStart, startWidth, startHeight, startX, startY); TextureDescription tex = tunnelTexturePalette[s.getPolyTextureIndices().get(pi)]; if (pi == lightPoly && lightType != FlickerLightType.noLight) { if (frameIndex == 0) { thisU = lightOnU; thisV = lightOnV; } else { thisU = lightOffU; thisV = lightOffV; } /*try { final int flickerThresh = flt == FlickerLightType.off1p5Sec ? (int) (-.3 * (double) Integer.MAX_VALUE) : flt == FlickerLightType.on1p5Sec ? (int) (.4 * (double) Integer.MAX_VALUE) : flt == FlickerLightType.on1Sec ? (int) (.25 * (double) Integer.MAX_VALUE) : Integer.MAX_VALUE; m.addTickableAnimator(new Tickable() { @Override public void tick() { if (flickerRandom.transfer(Math.abs((int) System .currentTimeMillis())) > flickerThresh) st.setFrame(1); else st.setFrame(0); } }); } catch (Exception e) { e.printStackTrace(); }*/ } else { thisU = noLightU; thisV = noLightV; } // No light m.addTriangles(Triangle.quad2Triangles(new double[] { p3.getX(), p2.getX(), p1.getX(), p0.getX() }, new double[] { p3.getY(), p2.getY(), p1.getY(), p0.getY() }, new double[] { p3.getZ(), p2.getZ(), p1.getZ(), p0.getZ() }, thisU, thisV, tex, RenderMode.DYNAMIC, new Vector3D[] { new Vector3D(Math.cos(frameStartAngle + dAngleStart), -Math.sin(frameStartAngle + dAngleStart), 0), new Vector3D(Math.cos(frameEndAngle + dAngleEnd), -Math.sin(frameEndAngle + dAngleEnd), 0), new Vector3D(Math.cos(frameEndAngle), -Math.sin(frameEndAngle), 0), new Vector3D(Math.cos(frameStartAngle), -Math.sin(frameStartAngle), 0) }, 0)); frameStartAngle += dAngleStart; frameEndAngle += dAngleEnd; } // for(polygons) if (s.isCutout()) { // The slice quad // INWARD Vector3D p0 = segPoint(frameStartAngle, zStart, startWidth, startHeight, startX, startY); Vector3D p1 = segPoint(frameEndAngle, zEnd, endWidth, endHeight, endX, endY); Vector3D p2 = segPoint(frameEndAngle1, zEnd, 0, 0, endX, endY); Vector3D p3 = segPoint(frameStartAngle1, zStart, 0, 0, startX, startY); m.addTriangles(Triangle.quad2Triangles(new double[] { p3.getX(), p2.getX(), p1.getX(), p0.getX() }, new double[] { p3.getY(), p2.getY(), p1.getY(), p0.getY() }, new double[] { p3.getZ(), p2.getZ(), p1.getZ(), p0.getZ() }, new double[] { 1, 1, 0, 0 }, new double[] { 0, 1, 1, 0 }, tunnelTexturePalette[s.getPolyTextureIndices().get(numPolygonsMinusOne)], RenderMode.DYNAMIC, new Vector3D[] { new Vector3D(Math.cos(frameStartAngle + dAngleStart), -Math.sin(frameStartAngle + dAngleStart), 0), new Vector3D(Math.cos(frameEndAngle + dAngleEnd), -Math.sin(frameEndAngle + dAngleEnd), 0), new Vector3D(Math.cos(frameEndAngle), -Math.sin(frameEndAngle), 0), new Vector3D(Math.cos(frameStartAngle), -Math.sin(frameStartAngle), 0) }, 0)); // OUTWARD p3 = segPoint(frameStartAngle1, zStart, startWidth, startHeight, startX, startY); p2 = segPoint(frameEndAngle1, zEnd, endWidth, endHeight, endX, endY); p1 = segPoint(frameEndAngle1, zEnd, 0, 0, endX, endY); p0 = segPoint(frameStartAngle1, zStart, 0, 0, startX, startY); m.addTriangles(Triangle.quad2Triangles(new double[] { p3.getX(), p2.getX(), p1.getX(), p0.getX() }, new double[] { p3.getY(), p2.getY(), p1.getY(), p0.getY() }, new double[] { p3.getZ(), p2.getZ(), p1.getZ(), p0.getZ() }, new double[] { 1, 1, 0, 0 }, new double[] { 0, 1, 1, 0 }, tunnelTexturePalette[s.getPolyTextureIndices().get(numPolygonsMinusOne)], RenderMode.DYNAMIC, new Vector3D[] { new Vector3D(Math.cos(frameStartAngle + dAngleStart), -Math.sin(frameStartAngle + dAngleStart), 0), new Vector3D(Math.cos(frameEndAngle + dAngleEnd), -Math.sin(frameEndAngle + dAngleEnd), 0), new Vector3D(Math.cos(frameEndAngle), -Math.sin(frameEndAngle), 0), new Vector3D(Math.cos(frameStartAngle), -Math.sin(frameStartAngle), 0) }, 0)); } else { // The slice quad Vector3D p0 = segPoint(frameStartAngle, zStart, startWidth, startHeight, startX, startY); Vector3D p1 = segPoint(frameEndAngle, zEnd, endWidth, endHeight, endX, endY); Vector3D p2 = segPoint(frameEndAngle1, zEnd, endWidth, endHeight, endX, endY); Vector3D p3 = segPoint(frameStartAngle1, zStart, startWidth, startHeight, startX, startY); m.addTriangles(Triangle.quad2Triangles(new double[] { p3.getX(), p2.getX(), p1.getX(), p0.getX() }, new double[] { p3.getY(), p2.getY(), p1.getY(), p0.getY() }, new double[] { p3.getZ(), p2.getZ(), p1.getZ(), p0.getZ() }, new double[] { 1, 1, 0, 0 }, new double[] { 0, 1, 1, 0 }, tunnelTexturePalette[s.getPolyTextureIndices().get(numPolygonsMinusOne)], RenderMode.DYNAMIC, new Vector3D[] { new Vector3D(Math.cos(frameStartAngle + dAngleStart), -Math.sin(frameStartAngle + dAngleStart), 0), new Vector3D(Math.cos(frameEndAngle + dAngleEnd), -Math.sin(frameEndAngle + dAngleEnd), 0), new Vector3D(Math.cos(frameEndAngle), -Math.sin(frameEndAngle), 0), new Vector3D(Math.cos(frameStartAngle), -Math.sin(frameStartAngle), 0) }, 0)); } //end !cutout //if(numAnimFrames!=1)//Push frame if animated. mainModel.addFrame(m); } //end for(frames) return mainModel; }
From source file:org.jtrfp.trcl.obj.WorldObject.java
protected void attemptLoop() { if (LOOP) {/*from w w w . j a v a 2 s . c o m*/ final Vector3D camPos = tr.mainRenderer.get().getCamera().getCameraPosition(); double delta = position[0] - camPos.getX(); if (delta > TR.mapWidth / 2.) { position[0] -= TR.mapWidth; needToRecalcMatrix = true; } else if (delta < -TR.mapWidth / 2.) { position[0] += TR.mapWidth; needToRecalcMatrix = true; } delta = position[1] - camPos.getY(); if (delta > TR.mapWidth / 2.) { position[1] -= TR.mapWidth; needToRecalcMatrix = true; } else if (delta < -TR.mapWidth / 2.) { position[1] += TR.mapWidth; needToRecalcMatrix = true; } delta = position[2] - camPos.getZ(); if (delta > TR.mapWidth / 2.) { position[2] -= TR.mapWidth; needToRecalcMatrix = true; } else if (delta < -TR.mapWidth / 2.) { position[2] += TR.mapWidth; needToRecalcMatrix = true; } } //end if(LOOP) }