@Override protected void drawWidget( Clock clock, boolean needsCompleteRedraw, LiveGameData gameData, boolean isEditorMode, TextureImage2D texture, int offsetX, int offsetY, int width, int height) { ScoringInfo scoringInfo = gameData.getScoringInfo(); if (needsCompleteRedraw) { int drawncars = Math.min(scoringInfo.getNumVehicles(), numVeh.getValue()); short posOffset; for (int i = 0; i < drawncars; i++) { if (carsOnLeadLap.getValue() > numVeh.getValue() && i != 0) posOffset = (short) (carsOnLeadLap.getValue() - numVeh.getValue()); else posOffset = 0; if (positions[i + posOffset] != -1) { if (positions[i + posOffset] == 1) dsPosTH[i].draw(offsetX, offsetY, "ST", texture); else if (positions[i + posOffset] == 2) dsPosTH[i].draw(offsetX, offsetY, "ND", texture); else if (positions[i + posOffset] == 3) dsPosTH[i].draw(offsetX, offsetY, "RD", texture); else if (positions[i + posOffset] >= 10) dsPosTH[i].draw(offsetX, offsetY, " TH", texture); else dsPosTH[i].draw(offsetX, offsetY, "TH", texture); dsPos[i].draw(offsetX, offsetY, String.valueOf(positions[i + posOffset]), texture); dsNumber[i].draw(offsetX, offsetY, String.valueOf(number[i + posOffset]), texture); dsPit[i].draw(offsetX, offsetY, String.valueOf(pit[i + posOffset]), texture); if (shownData != 1) dsPitLabel[i].draw(offsetX, offsetY, "PIT", texture); } /*else { dsPos[i].draw( offsetX, offsetY, "", texture ); dsNumber[i].draw( offsetX, offsetY, "", texture ); }*/ dsName[i].draw(offsetX, offsetY, names[i + posOffset], texture); dsTime[i].draw(offsetX, offsetY, gaps[i + posOffset], texture); } } }
@Override protected Boolean updateVisibility(LiveGameData gameData, boolean isEditorMode) { super.updateVisibility(gameData, isEditorMode); ScoringInfo scoringInfo = gameData.getScoringInfo(); if (!startedPositionsInitialized) initStartedFromPositions(scoringInfo); if (RaceInfosWidget.visible()) return false; currentLap.update(scoringInfo.getLeadersVehicleScoringInfo().getLapsCompleted()); if (currentLap.hasChanged() && currentLap.getValue() > 0 && (short) (Math.random() * randMulti.getValue()) == 0 || isEditorMode) { // fetch what data is shown others-gaps 1-places gained/lost if (scoringInfo.getLeadersVehicleScoringInfo().getFinishStatus().isFinished() || isEditorMode) shownData = 1; else shownData = (short) (Math.random() * 2); if (scoringInfo.getGamePhase() == GamePhase.SESSION_OVER) visibleEnd = scoringInfo.getSessionNanos() + visibleTime.getDelayNanos() * 3; else visibleEnd = scoringInfo.getSessionNanos() + visibleTime.getDelayNanos(); clearArrayValues(scoringInfo.getNumVehicles()); FillArrayValues(1, scoringInfo, isEditorMode, gameData); if (!isEditorMode) forceCompleteRedraw(true); return true; } if (scoringInfo.getSessionNanos() < visibleEnd || isEditorMode) { // how many on the same lap? int onlap = 0; for (int j = 0; j < scoringInfo.getNumVehicles(); j++) { if (scoringInfo.getVehicleScoringInfo(j).getLapsCompleted() == scoringInfo.getLeadersVehicleScoringInfo().getLapsCompleted()) onlap++; } carsOnLeadLap.update(onlap); if (carsOnLeadLap.hasChanged() && !isEditorMode) { FillArrayValues(onlap, scoringInfo, false, gameData); forceCompleteRedraw(true); } return true; } return false; }
private void FillArrayValues( int onLeaderLap, ScoringInfo scoringInfo, boolean isEditorMode, LiveGameData gameData) { if (isEditorMode) { // data = 4; onLeaderLap = numVeh.getValue(); } int negrand[] = new int[2]; negrand[0] = 1; negrand[1] = -1; for (int i = 0; i < onLeaderLap; i++) { if (positions[i] == -1) { VehicleScoringInfo vsi = scoringInfo.getVehicleScoringInfo(i); positions[i] = vsi.getPlace(false); number[i] = vsi.getVehicleInfo().getCarNumber(); names[i] = ShortName(vsi.getDriverName().toUpperCase()); if (i == 0) gaps[i] = ""; else gaps[i] = TimingUtil.getTimeAsGapString(-vsi.getTimeBehindLeader(false)); switch (shownData) // 0-2-4-gaps 1-place gained { case 1: // places int startedfrom = 0; for (int p = 0; p < scoringInfo.getNumVehicles(); p++) { if (vsi.getDriverId() == startedPositions[p]) { startedfrom = p + 1; break; } } if (isEditorMode) { gainedPlaces[i] = (short) ((Math.random() * 2) * negrand[(short) (Math.random() * 2)]); pit[i] = Math.abs(gainedPlaces[i]); } else { gainedPlaces[i] = (short) (startedfrom - vsi.getPlace(false)); pit[i] = Math.abs(startedfrom - vsi.getPlace(false)); } break; default: // pit pit[i] = vsi.getNumPitstopsMade(); break; } } } }
@Override protected void drawBackground( LiveGameData gameData, boolean isEditorMode, TextureImage2D texture, int offsetX, int offsetY, int width, int height, boolean isRoot) { super.drawBackground(gameData, isEditorMode, texture, offsetX, offsetY, width, height, isRoot); // logCS("test"); ScoringInfo scoringInfo = gameData.getScoringInfo(); int maxNumItems = numVeh.getValue(); int rowHeight = height / maxNumItems; int drawncars = Math.min(scoringInfo.getNumVehicles(), maxNumItems); short posOffset; for (int i = 0; i < drawncars; i++) { if (carsOnLeadLap.getValue() > numVeh.getValue() && i != 0) posOffset = (short) (carsOnLeadLap.getValue() - numVeh.getValue()); else posOffset = 0; if (positions[i + posOffset] != -1 || isEditorMode) { if (scoringInfo .getVehicleScoringInfo(positions[i + posOffset] - 1) .getVehicleInfo() .getManufacturer() .toUpperCase() .equals("FORD") || (isEditorMode && (short) (Math.random() * 2) == 0)) texture.clear(imgFord.getTexture(), offsetX, offsetY + rowHeight * i, false, null); else texture.clear(imgHolden.getTexture(), offsetX, offsetY + rowHeight * i, false, null); if (shownData == 1) { if (gainedPlaces[i + posOffset] > 0) texGainedPlaces = imgPositive .getImage() .getScaledTextureImage( width * 9 / 100, rowHeight, texGainedPlaces, isEditorMode); else if (gainedPlaces[i + posOffset] < 0) texGainedPlaces = imgNegative .getImage() .getScaledTextureImage( width * 9 / 100, rowHeight, texGainedPlaces, isEditorMode); else texGainedPlaces = imgNeutral .getImage() .getScaledTextureImage( width * 9 / 100, rowHeight, texGainedPlaces, isEditorMode); texture.drawImage( texGainedPlaces, offsetX + width * 171 / 200, offsetY + rowHeight * i, true, null); } } } }
@Override protected void initialize( LiveGameData gameData, boolean isEditorMode, DrawnStringFactory drawnStringFactory, TextureImage2D texture, int width, int height) { int maxNumItems = numVeh.getValue(); dsPos = new DrawnString[maxNumItems]; dsPosTH = new DrawnString[maxNumItems]; dsNumber = new DrawnString[maxNumItems]; dsName = new DrawnString[maxNumItems]; dsTime = new DrawnString[maxNumItems]; dsPit = new DrawnString[maxNumItems]; dsPitLabel = new DrawnString[maxNumItems]; int fh = TextureImage2D.getStringHeight("0%C", getFontProperty()); int rowHeight = height / maxNumItems; imgFord.updateSize(width, rowHeight, isEditorMode); imgHolden.updateSize(width, rowHeight, isEditorMode); int top = (rowHeight - fh) / 2; for (int i = 0; i < maxNumItems; i++) { dsPos[i] = drawnStringFactory.newDrawnString( "dsPos", width * 1 / 100 + fontxposoffset.getValue(), top + fontyoffset.getValue(), Alignment.LEFT, false, getFont(), isFontAntiAliased(), fontColor3.getColor()); dsPosTH[i] = drawnStringFactory.newDrawnString( "dsPos", width * 4 / 100 + fontxposoffset.getValue(), top + fontyoffset.getValue(), Alignment.LEFT, false, posFontTH.getFont(), isFontAntiAliased(), fontColor3.getColor()); dsNumber[i] = drawnStringFactory.newDrawnString( "dsNumber", width * 13 / 100 + fontxposoffset.getValue(), top + fontyoffset.getValue(), Alignment.CENTER, false, getFont(), isFontAntiAliased(), fontColor2.getColor()); dsName[i] = drawnStringFactory.newDrawnString( "dsName", width * 19 / 100 + fontxnameoffset.getValue(), top + fontyoffset.getValue(), Alignment.LEFT, false, getFont(), isFontAntiAliased(), fontColor3.getColor()); dsTime[i] = drawnStringFactory.newDrawnString( "dsTime", width * 84 / 100 + fontxtimeoffset.getValue(), top + fontyoffset.getValue(), Alignment.RIGHT, false, getFont(), isFontAntiAliased(), fontColor2.getColor()); dsPit[i] = drawnStringFactory.newDrawnString( "dsTime", width * 98 / 100 + fontxtimeoffset.getValue(), top + fontyoffset.getValue(), Alignment.RIGHT, false, getFont(), isFontAntiAliased(), fontColor2.getColor()); dsPitLabel[i] = drawnStringFactory.newDrawnString( "dsTime", width * 181 / 200 + fontxtimeoffset.getValue(), top + fontyoffset.getValue(), Alignment.CENTER, false, getFont(), isFontAntiAliased(), fontColor3.getColor()); top += rowHeight; } }
@Override protected void initialize( LiveGameData gameData, boolean isEditorMode, DrawnStringFactory drawnStringFactory, TextureImage2D texture, int width, int height) { int fh = TextureImage2D.getStringHeight("0%C", f1_2011Font); imgName.updateSize(width * 94 / 100, height / 2, isEditorMode); dsAmbient = drawnStringFactory.newDrawnString( "dsAmbient", width * 7 / 100, height * 3 / 4 - fh / 2, Alignment.LEFT, false, f1_2011Font.getFont(), isFontAntiAliased(), WhiteFontColor.getColor(), null, ""); dsAmbientTemp = drawnStringFactory.newDrawnString( "dsAmbientTemp", width * 85 / 100, height * 3 / 4 - fh / 2, Alignment.RIGHT, false, f1_2011Font.getFont(), isFontAntiAliased(), WhiteFontColor.getColor(), null, "°C"); dsTrack = drawnStringFactory.newDrawnString( "dsTrack", width * 14 / 100, height / 4 - fh / 2 + fontyoffset.getValue(), Alignment.LEFT, false, f1_2011Font.getFont(), isFontAntiAliased(), WhiteFontColor.getColor(), null, ""); dsTrackTemp = drawnStringFactory.newDrawnString( "dsTrackTemp", width * 92 / 100, height / 4 - fh / 2 + fontyoffset.getValue(), Alignment.RIGHT, false, f1_2011Font.getFont(), isFontAntiAliased(), WhiteFontColor.getColor(), null, "°C"); }
@Override protected void initialize( LiveGameData gameData, boolean isEditorMode, DrawnStringFactory drawnStringFactory, TextureImage2D texture, int width, int height) { team.update(""); name.update(""); pos.update(""); // gap.update( "" ); // time.update( "" ); int rowHeight = height / 2; int fh = TextureImage2D.getStringHeight("0", GP2Font); imgName.updateSize(width, rowHeight * 95 / 100, isEditorMode); imgNameFirst.updateSize(width, rowHeight * 95 / 100, isEditorMode); int top1 = (rowHeight - fh) / 2; int top2 = rowHeight + (rowHeight - fh) / 2; dsName = drawnStringFactory.newDrawnString( "dsName", width * 8 / 100, top1 + fontyoffset.getValue(), Alignment.LEFT, false, GP2Font.getFont(), isFontAntiAliased(), fontColor1.getColor()); dsTeam = drawnStringFactory.newDrawnString( "dsTeam", width * 8 / 100, top2 + fontyoffset.getValue(), Alignment.LEFT, false, GP2Font.getFont(), isFontAntiAliased(), fontColor1.getColor()); // Scan Country Folder File dir = new File( gameData.getFileSystem().getImagesFolder().toString() + "/prunn/PorscheSupercup/Countries"); String[] children = dir.list(); NumOfPNG = 0; listPNG = new String[children.length]; for (int i = 0; i < children.length; i++) { // Get filename of file or directory String filename = children[i]; if (filename.substring(filename.length() - 4).toUpperCase().equals(".PNG")) { // log(filename.substring( 0, filename.length()-4 )); listPNG[NumOfPNG] = filename.substring(0, filename.length() - 4); NumOfPNG++; } } // end of scan }
@Override protected void drawWidget( Clock clock, boolean needsCompleteRedraw, LiveGameData gameData, boolean isEditorMode, TextureImage2D texture, int offsetX, int offsetY, int width, int height) { ScoringInfo scoringInfo = gameData.getScoringInfo(); sessionTime.update(scoringInfo.getSessionTime()); if (needsCompleteRedraw) { VehicleScoringInfo currentcarinfos = gameData.getScoringInfo().getViewedVehicleScoringInfo(); name.update(PrunnWidgetSetPorscheSupercup.ShortName(currentcarinfos.getDriverNameShort())); pos.update(NumberUtil.formatFloat(currentcarinfos.getPlace(false), 0, true)); team.update( PrunnWidgetSetPorscheSupercup.generateShortTeamNames( currentcarinfos.getVehicleInfo().getTeamName(), gameData.getFileSystem().getConfigFolder())); if (team.getValue().length() > 8 && (team.getValue().substring(0, 5).equals("PMSCS") || team.getValue().substring(0, 5).equals("PCCAU"))) team.update(team.getValue().substring(8)); else if (team.getValue().length() > 7 && (team.getValue().substring(0, 4).equals("PMSC") || team.getValue().substring(0, 4).equals("PCCG") || team.getValue().substring(0, 4).equals("PCCA") || team.getValue().substring(0, 4).equals("ALMS"))) team.update(team.getValue().substring(7)); else if (team.getValue().length() > 6 && (team.getValue().substring(0, 3).equals("LMS") || team.getValue().substring(0, 3).equals("FIA"))) team.update(team.getValue().substring(6)); else if (team.getValue().length() > 5 && (team.getValue().substring(0, 2).equals("LM"))) team.update(team.getValue().substring(5)); if (team.getValue().length() > MaxTeamLengh.getValue()) team.update(team.getValue().substring(0, MaxTeamLengh.getValue())); /*if( currentcarinfos.getFastestLaptime() != null && currentcarinfos.getFastestLaptime().getLapTime() > 0 ) { if(currentcarinfos.getPlace( false ) > 1) { time.update( TimingUtil.getTimeAsLaptimeString(currentcarinfos.getBestLapTime() )); gap.update( "+ " + TimingUtil.getTimeAsLaptimeString( currentcarinfos.getBestLapTime() - gameData.getScoringInfo().getLeadersVehicleScoringInfo().getBestLapTime() )); } else { time.update(""); gap.update( TimingUtil.getTimeAsLaptimeString(currentcarinfos.getBestLapTime())); } } else { time.update(""); gap.update(""); }*/ dsName.draw( offsetX, offsetY, name.getValue(), (currentcarinfos.getPlace(false) == 1) ? fontColor2.getColor() : fontColor1.getColor(), texture); dsTeam.draw(offsetX, offsetY, team.getValue(), texture); } }