Notifications now contain location, and are clickable when appropriate

This commit is contained in:
Yair Morgenstern 2018-01-08 22:42:09 +02:00
parent 6c035c79b6
commit 5b28840940
7 changed files with 42 additions and 14 deletions

View File

@ -22,7 +22,7 @@ android {
minSdkVersion 9 minSdkVersion 9
targetSdkVersion 25 targetSdkVersion 25
versionCode 18 versionCode 18
versionName "0.9" versionName "1.0"
} }
buildTypes { buildTypes {
release { release {

View File

@ -65,7 +65,7 @@ public class CityConstructions
currentConstruction = null; currentConstruction = null;
if(!construction.isBuildable(this)){ if(!construction.isBuildable(this)){
// We can't build this building anymore! (Wonder has been built / resource is gone / etc.) // We can't build this building anymore! (Wonder has been built / resource is gone / etc.)
CivilizationInfo.current().notifications.add("Cannot continue work on "+saveCurrentConstruction); CivilizationInfo.current().addNotification("Cannot continue work on "+saveCurrentConstruction,cityLocation);
chooseNextConstruction(); chooseNextConstruction();
construction = getConstruction(currentConstruction); construction = getConstruction(currentConstruction);
} }
@ -76,7 +76,7 @@ public class CityConstructions
{ {
construction.postBuildEvent(this); construction.postBuildEvent(this);
inProgressConstructions.remove(currentConstruction); inProgressConstructions.remove(currentConstruction);
CivilizationInfo.current().notifications.add(currentConstruction +" has been built in "+getCity().name); CivilizationInfo.current().addNotification(currentConstruction +" has been built in "+getCity().name,cityLocation);
chooseNextConstruction(); chooseNextConstruction();
} }
@ -93,7 +93,7 @@ public class CityConstructions
}); });
if (currentConstruction == null) currentConstruction = Worker; if (currentConstruction == null) currentConstruction = Worker;
CivilizationInfo.current().notifications.add("Work has started on "+ currentConstruction); CivilizationInfo.current().addNotification("Work has started on "+ currentConstruction,cityLocation);
} }

View File

@ -60,6 +60,7 @@ public class CityInfo {
name = CityNames[civInfo.cities.size()]; name = CityNames[civInfo.cities.size()];
this.cityLocation = cityLocation; this.cityLocation = cityLocation;
civInfo.cities.add(this); civInfo.cities.add(this);
CivilizationInfo.current().addNotification(name+" has been founded!",cityLocation);
cityConstructions = new CityConstructions(this); cityConstructions = new CityConstructions(this);
if(civInfo.policies.contains("Legalism") && civInfo.cities.size() <= 4) cityConstructions.addCultureBuilding(); if(civInfo.policies.contains("Legalism") && civInfo.cities.size() <= 4) cityConstructions.addCultureBuilding();
if(civInfo.cities.size()==1) { if(civInfo.cities.size()==1) {
@ -275,7 +276,7 @@ public class CityInfo {
{ {
population--; population--;
foodStored = 0; foodStored = 0;
CivilizationInfo.current().notifications.add(name+" is starving!"); CivilizationInfo.current().addNotification(name+" is starving!",cityLocation);
} }
if (foodStored >= foodToNextPopulation()) // growth! if (foodStored >= foodToNextPopulation()) // growth!
{ {
@ -283,7 +284,7 @@ public class CityInfo {
if(getBuildingUniques().contains("FoodCarriesOver")) foodStored+=0.4f*foodToNextPopulation(); // Aqueduct special if(getBuildingUniques().contains("FoodCarriesOver")) foodStored+=0.4f*foodToNextPopulation(); // Aqueduct special
population++; population++;
autoAssignWorker(); autoAssignWorker();
CivilizationInfo.current().notifications.add(name+" has grown!"); CivilizationInfo.current().addNotification(name+" has grown!",cityLocation);
} }
cityConstructions.nextTurn(stats); cityConstructions.nextTurn(stats);
@ -291,7 +292,7 @@ public class CityInfo {
cultureStored+=stats.culture; cultureStored+=stats.culture;
if(cultureStored>=getCultureToNextTile()){ if(cultureStored>=getCultureToNextTile()){
addNewTile(); addNewTile();
CivilizationInfo.current().notifications.add(name+" has expanded its borders!"); CivilizationInfo.current().addNotification(name+" has expanded its borders!",cityLocation);
} }
} }

View File

@ -14,10 +14,14 @@ import com.unciv.models.stats.CivStats;
import com.unciv.models.stats.FullStats; import com.unciv.models.stats.FullStats;
import java.util.Collection; import java.util.Collection;
import java.util.Vector;
/** /**
* Created by LENOVO on 10/18/2017. * Created by LENOVO on 10/18/2017.
*/ */
public class CivilizationInfo { public class CivilizationInfo {
public static CivilizationInfo current(){ return UnCivGame.Current.civInfo; } public static CivilizationInfo current(){ return UnCivGame.Current.civInfo; }
@ -34,7 +38,20 @@ public class CivilizationInfo {
public LinqCollection<String> policies = new LinqCollection<String>(); public LinqCollection<String> policies = new LinqCollection<String>();
public int freePolicies=0; public int freePolicies=0;
public int turns = 1; public int turns = 1;
public LinqCollection<String> notifications = new LinqCollection<String>();
public class Notification{
public final String text;
public final Vector2 location;
Notification(String text, Vector2 location) {
this.text = text;
this.location = location;
}
}
public LinqCollection<Notification> notifications = new LinqCollection<Notification>();
public void addNotification(String text, Vector2 location){
notifications.add(new Notification(text,location));
}
public LinqCollection<String> tutorial = new LinqCollection<String>(); public LinqCollection<String> tutorial = new LinqCollection<String>();
public LinqCollection<CityInfo> cities = new LinqCollection<CityInfo>(); public LinqCollection<CityInfo> cities = new LinqCollection<CityInfo>();
@ -116,7 +133,7 @@ public class CivilizationInfo {
public void addGreatPerson(String unitName){ // This is also done by some wonders and social policies, remember public void addGreatPerson(String unitName){ // This is also done by some wonders and social policies, remember
tileMap.placeUnitNearTile(cities.get(0).cityLocation,unitName); tileMap.placeUnitNearTile(cities.get(0).cityLocation,unitName);
notifications.add("A "+unitName+" has been born!"); addNotification("A "+unitName+" has been born!",cities.get(0).cityLocation);
} }
public void greatPersonPointsForTurn(){ public void greatPersonPointsForTurn(){
@ -150,7 +167,7 @@ public class CivilizationInfo {
if(getBuildingUniques().contains("GoldenAgeLengthIncrease")) turnsToGoldenAge*=1.5; if(getBuildingUniques().contains("GoldenAgeLengthIncrease")) turnsToGoldenAge*=1.5;
if(policies.contains("Freedom Complete")) turnsToGoldenAge*=1.5; if(policies.contains("Freedom Complete")) turnsToGoldenAge*=1.5;
turnsLeftForCurrentGoldenAge += turnsToGoldenAge; turnsLeftForCurrentGoldenAge += turnsToGoldenAge;
notifications.add("You have entered a golden age!"); addNotification("You have entered a golden age!",null);
} }
public CivStats getStatsForNextTurn() { public CivStats getStatsForNextTurn() {

View File

@ -47,7 +47,7 @@ public class CivilizationTech{
techsInProgress.remove(CurrentTechnology); techsInProgress.remove(CurrentTechnology);
techsToResearch.remove(CurrentTechnology); techsToResearch.remove(CurrentTechnology);
techsResearched.add(CurrentTechnology); techsResearched.add(CurrentTechnology);
CivilizationInfo.current().notifications.add("Research of "+CurrentTechnology+ " has completed!"); CivilizationInfo.current().addNotification("Research of "+CurrentTechnology+ " has completed!",null);
} }
} }

View File

@ -5,6 +5,7 @@ import com.badlogic.gdx.math.Vector2;
import com.badlogic.gdx.scenes.scene2d.Group; import com.badlogic.gdx.scenes.scene2d.Group;
import com.badlogic.gdx.scenes.scene2d.InputEvent; import com.badlogic.gdx.scenes.scene2d.InputEvent;
import com.badlogic.gdx.scenes.scene2d.Touchable; import com.badlogic.gdx.scenes.scene2d.Touchable;
import com.badlogic.gdx.scenes.scene2d.ui.Cell;
import com.badlogic.gdx.scenes.scene2d.ui.Label; import com.badlogic.gdx.scenes.scene2d.ui.Label;
import com.badlogic.gdx.scenes.scene2d.ui.ScrollPane; import com.badlogic.gdx.scenes.scene2d.ui.ScrollPane;
import com.badlogic.gdx.scenes.scene2d.ui.Table; import com.badlogic.gdx.scenes.scene2d.ui.Table;
@ -146,8 +147,8 @@ public class WorldScreen extends CameraStageBaseScreen {
private void updateNotificationsList() { private void updateNotificationsList() {
notificationsTable.clearChildren(); notificationsTable.clearChildren();
for (String notification : game.civInfo.notifications) { for (final CivilizationInfo.Notification notification : game.civInfo.notifications) {
Label label = new Label(notification, skin); Label label = new Label(notification.text, skin);
label.setColor(Color.WHITE); label.setColor(Color.WHITE);
label.setFontScale(1.2f); label.setFontScale(1.2f);
Table minitable = new Table(); Table minitable = new Table();
@ -156,6 +157,15 @@ public class WorldScreen extends CameraStageBaseScreen {
.tint(new Color(0x004085bf))); .tint(new Color(0x004085bf)));
minitable.add(label).pad(5); minitable.add(label).pad(5);
if(notification.location!=null){
minitable.addListener(new ClickListener(){
@Override
public void clicked(InputEvent event, float x, float y) {
setCenterPosition(notification.location);
}
});
}
notificationsTable.add(minitable).pad(5); notificationsTable.add(minitable).pad(5);
notificationsTable.row(); notificationsTable.row();
} }

View File

@ -68,7 +68,7 @@ public class TechPickerScreen extends PickerScreen {
if (isFreeTechPick) { if (isFreeTechPick) {
civTech.techsResearched.add(selectedTech.name); civTech.techsResearched.add(selectedTech.name);
civTech.freeTechs-=1; civTech.freeTechs-=1;
game.civInfo.notifications.add("We have stumbled upon the discovery of "+selectedTech.name+"!"); game.civInfo.addNotification("We have stumbled upon the discovery of "+selectedTech.name+"!",null);
if(selectedTech.name.equals(civTech.currentTechnology())) if(selectedTech.name.equals(civTech.currentTechnology()))
civTech.techsToResearch.remove(selectedTech.name); civTech.techsToResearch.remove(selectedTech.name);
} }