// constructor -------------------------------------------------------------------------- public ScoreBoardScreen(EndMissionReport missionData) { super(); // table setup // ******************************************************************************************************* int score = 0; boolean success = missionData.isSuccess(); // -- title ******************************************************* final Label title = new Label(success ? "Success" : "Failure", menuSkin, "title"); table.add(title).padTop(50).padBottom(40).padLeft(10).padRight(10).center().colspan(2); // -- team summary ************************************************ table.row().padBottom(10); final Label teamHeader = new Label("Team", menuSkin, "subTitle"); table.add(teamHeader).padLeft(20).spaceRight(40).left(); HorizontalGroup teammates = new HorizontalGroup(); teammates.space(10); int index = 0; for (int i = 0; i < missionData.safeMates.size; i++) { Image image = new Image(menuSkin.getDrawable(missionData.safeMates.get(i).getItemRegionName(false))); teammates.addActorAt(index, image); index++; } for (int i = 0; i < missionData.lostMates.size; i++) { Image image = new Image(menuSkin.getDrawable(missionData.lostMates.get(i).getItemRegionName(true))); teammates.addActorAt(index, image); score += LOST_MATE_SCORE; index++; } teammates.pack(); table.add(teammates).padRight(20).center(); // -- substance summary ************************************************ table.row().padBottom(10); final Label harvestHeader = new Label("Harvest", menuSkin, "subTitle"); table.add(harvestHeader).padLeft(20).spaceRight(40).left(); HorizontalGroup substances = new HorizontalGroup(); substances.space(10); if (missionData.collectedSubstance > 0) { Image banner = new Image(menuSkin.getDrawable("banner" + missionData.collectedSubstance)); banner.setScaling(Scaling.none); banner.setAlign(Align.bottomRight); Stack stack = new Stack(); stack.addActor(new Image(menuSkin.getDrawable("item_substance"))); stack.addActor(banner); score += SUBSTANCE_SCORE * missionData.collectedSubstance; substances.addActor(stack); } if (missionData.targetSubstance - missionData.collectedSubstance > 0) { Image banner = new Image( menuSkin.getDrawable( "banner" + (missionData.targetSubstance - missionData.collectedSubstance))); banner.setScaling(Scaling.none); banner.setAlign(Align.bottomRight); Stack stack = new Stack(); stack.addActor(new Image(menuSkin.getDrawable("item_outSubstance"))); stack.addActor(banner); substances.addActor(stack); } table.add(substances).padRight(20).center(); // consumption summary ************************************************ table.row().padBottom(10); final Label usedHeader = new Label("Used", menuSkin, "subTitle"); table.add(usedHeader).padLeft(20).spaceRight(40).left(); HorizontalGroup collectibles = new HorizontalGroup(); collectibles.space(10); score += USED_SUPPLY_SCORE * missionData.usedSupply; int itemCount = missionData.usedSupply / 10; // supplies ******* for (int i = 0; i < itemCount; i++) { Image banner = new Image(menuSkin.getDrawable("banner10")); banner.setScaling(Scaling.none); banner.setAlign(Align.bottomRight); Stack stack = new Stack(); stack.addActor(new Image(menuSkin.getDrawable("item_supply"))); stack.addActor(banner); collectibles.addActor(stack); } int extraItems = missionData.usedSupply % 10; if (extraItems > 0) { Image banner = new Image(menuSkin.getDrawable("banner" + extraItems)); banner.setScaling(Scaling.none); banner.setAlign(Align.bottomRight); Stack stack = new Stack(); stack.addActor(new Image(menuSkin.getDrawable("item_supply"))); stack.addActor(banner); collectibles.addActor(stack); } // materials ******* score += USED_MATERIAL_SCORE * missionData.usedMaterial; itemCount = missionData.usedMaterial / 10; for (int i = 0; i < itemCount; i++) { Image banner = new Image(menuSkin.getDrawable("banner10")); banner.setScaling(Scaling.none); banner.setAlign(Align.bottomRight); Stack stack = new Stack(); stack.addActor(new Image(menuSkin.getDrawable("item_material"))); stack.addActor(banner); collectibles.addActor(stack); } extraItems = missionData.usedMaterial % 10; if (extraItems > 0) { Image banner = new Image(menuSkin.getDrawable("banner" + extraItems)); banner.setScaling(Scaling.none); banner.setAlign(Align.bottomRight); Stack stack = new Stack(); stack.addActor(new Image(menuSkin.getDrawable("item_material"))); stack.addActor(banner); collectibles.addActor(stack); } collectibles.pack(); // -- time bonus summary ************************************************ table.add(collectibles).padRight(20).center(); table.row().padBottom(10); final Label timeHeader = new Label("Time Bonus", menuSkin, "subTitle"); table.add(timeHeader).padLeft(20).spaceRight(40).left(); float timeBonus; if (missionData.missionTimeLeft <= 0f) { timeBonus = TIMEUP_SCOREMULT; } else if (missionData.missionTimeLeft <= 60f) { timeBonus = ONTIME_SCOREMULT; } else if (missionData.missionTimeLeft <= 120f) { timeBonus = GOODTIME_SCOREMULT; } else timeBonus = GREATTIME_SCOREMULT; table.add(new Label("x" + timeBonus, menuSkin, "title")).padRight(10).center(); // -- score summary ***************************************************** table.row().padTop(10).padBottom(50); final Label scoreHeader = new Label("Score", menuSkin, "subTitle"); table.add(scoreHeader).padLeft(20).spaceRight(40).left(); if (score > 0) score = Math.round(timeBonus * (float) score); float maxScore = GREATTIME_SCOREMULT * Math.min(missionData.targetSubstance, missionData.targetSubstance + 2) * SUBSTANCE_SCORE; int star_count = Math.max(1, MathUtils.floor(4f * score / maxScore)); star_count = (!success || missionData.lostMates.size > 0 ? 1 : star_count); HorizontalGroup scoreStars = new HorizontalGroup(); scoreStars.space(5); for (int i = 0; i < star_count; i++) { Image image = new Image(menuSkin.getDrawable(success ? "goldStar" : "silverStar")); scoreStars.addActorAt(i, image); } table.add(scoreStars).padRight(10).center(); }