package rabbitescape.ui.android; import android.app.AlertDialog; import android.content.DialogInterface; import android.text.Html; import android.text.method.LinkMovementMethod; import android.widget.TextView; import java.util.HashMap; import java.util.Map; import rabbitescape.engine.World; import rabbitescape.engine.util.Util; import static rabbitescape.engine.i18n.Translation.t; import static rabbitescape.engine.util.NamedFieldFormatter.format; public class Dialogs { static class IntroDialogs { private final AndroidGameActivity activity; private final World world; private int hintNum; private final String[] hints; DialogInterface.OnClickListener onOk = new DialogInterface.OnClickListener() { @Override public void onClick( DialogInterface dialogInterface, int i ) { activity.currentDialog = null; activity.setPaused( world, false ); } }; public IntroDialogs( AndroidGameActivity activity, World world ) { this.activity = activity; this.world = world; this.hintNum = 0; activity.setPaused( world, true ); hints = new String[4]; hints[0] = introMessage(); for ( int i = 1, j = 0 ; i < 4 ; i++, j++ ) { while ( j < world.hints.length && Util.isEmpty( world.hints[j] ) ) { j++; } if ( j >= world.hints.length ) { hints[i] = "Hint " + i + " needed."; } else { hints[i] = world.hints[j]; } } } DialogInterface.OnClickListener onHint = new DialogInterface.OnClickListener() { @Override public void onClick( DialogInterface dialogInterface, int i ) { hintNum = ( hintNum + 1 ) % 4 ; show(); } }; public void show() { AlertDialog.Builder dialogBuilder = new AlertDialog.Builder( activity ) .setTitle( t( world.name ) ) .setPositiveButton( t( "Start" ), onOk ); dialogBuilder.setNeutralButton( t( hintName() ), onHint ); activity.currentDialog = dialogBuilder.create(); TextView view = new TextView( activity.currentDialog.getContext() ); view.setText( Html.fromHtml( hints[hintNum] ) ); view.setMovementMethod( LinkMovementMethod.getInstance() ); view.setPadding( 10, 10, 10, 10 ); activity.currentDialog.setView( view ); activity.currentDialog.show(); } private String hintName() { switch ( hintNum ) { case 0: return "Hint"; case 1: return "Hint 2"; case 2: return "Hint 3"; default: return "Info"; } } private String introMessage() { return format( "<p><b>${description}</b></p>" + "<p>Rabbits: ${num_rabbits} Must save: ${num_to_save}</p>" + "${author}", Util.newMap( "description", readyForDialog( world.description ), "num_rabbits", Integer.toString( world.num_rabbits ), "num_to_save", Integer.toString( world.num_to_save ), "author", authorHtml( world ) ) ); } static String authorHtml( World world ) { if ( Util.isEmpty( world.author_name ) ) { return ""; } String ret = "<p>"; if ( Util.isEmpty( world.author_url ) ) { ret += t( "by ${author_name}", Util.newMap( "author_name", world.author_name ) ); } else { ret += t( "by <a href='${author_url}'>${author_name}</a>", Util.newMap( "author_name", world.author_name, "author_url", world.author_url ) ); } ret += "</p>"; return ret; } private String readyForDialog( String message ) { return t( message ); } } public static void intro( final AndroidGameActivity activity, final World world ) { new IntroDialogs( activity, world ).show(); } public static void explode( final AndroidGameActivity activity, final World world ) { DialogInterface.OnClickListener onCancelButton = new DialogInterface.OnClickListener() { @Override public void onClick( DialogInterface dialogInterface, int i ) { activity.currentDialog = null; activity.setPaused( world, false ); } }; DialogInterface.OnClickListener onExplode = new DialogInterface.OnClickListener() { @Override public void onClick( DialogInterface dialogInterface, int i ) { activity.currentDialog = null; activity.setPaused( world, false ); world.changes.explodeAllRabbits(); } }; activity.setPaused( world, true ); activity.currentDialog = new AlertDialog.Builder( activity ) .setMessage( t( "Explode all rabbits?" ) ) .setNegativeButton( t( "Cancel" ), onCancelButton ) .setPositiveButton( t( "Explode!" ), onExplode ) .create(); activity.currentDialog.show(); } public static void finished( final AndroidGameActivity activity, String message, String ok ) { DialogInterface.OnClickListener onOk = new DialogInterface.OnClickListener() { @Override public void onClick( DialogInterface dialogInterface, int i ) { activity.currentDialog = null; activity.finish(); } }; activity.currentDialog = new AlertDialog.Builder( activity ) .setMessage( finishedMessage( activity.world, message ) ) .setPositiveButton( ok, onOk ) .create(); activity.currentDialog.show(); } private static String finishedMessage( World world, String message ) { return ( message + "\n" + t( "Saved: ${num_saved} Needed: ${num_to_save}", statsValues( world ) ) ); } private static Map<String, Object> statsValues( World world ) { Map<String, Object> values = new HashMap<String, Object>(); values.put( "num_rabbits", world.num_rabbits ); values.put( "num_to_save", world.num_to_save ); values.put( "num_saved", world.num_saved ); return values; } }