diff --git a/app/src/main/java/com/kauron/dungeonmanager/Introduction.java b/app/src/main/java/com/kauron/dungeonmanager/Introduction.java index d4e28f9..2280a7f 100644 --- a/app/src/main/java/com/kauron/dungeonmanager/Introduction.java +++ b/app/src/main/java/com/kauron/dungeonmanager/Introduction.java @@ -23,7 +23,7 @@ public class Introduction extends ActionBarActivity { getSupportActionBar().setDisplayHomeAsUpEnabled(true); setContentView(com.kauron.dungeonmanager.R.layout.activity_introduction); name = (EditText) findViewById(com.kauron.dungeonmanager.R.id.editNameIntro); - level = (EditText) findViewById(com.kauron.dungeonmanager.R.id.editLevelIntro); + level = (EditText) findViewById(com.kauron.dungeonmanager.R.id.editPxIntro); fue = (EditText) findViewById(com.kauron.dungeonmanager.R.id.FUE); con = (EditText) findViewById(com.kauron.dungeonmanager.R.id.CON); @@ -37,7 +37,7 @@ public class Introduction extends ActionBarActivity { new ArrayAdapter<>( this, android.R.layout.simple_spinner_dropdown_item, - Player.classStrings + Player.CLASS_STRINGS ) ); @@ -46,7 +46,7 @@ public class Introduction extends ActionBarActivity { new ArrayAdapter<>( this, android.R.layout.simple_spinner_dropdown_item, - Player.raceStrings + Player.RACE_STRINGS ) ); } @@ -88,12 +88,12 @@ public class Introduction extends ActionBarActivity { SharedPreferences p = getSharedPreferences("basics", MODE_PRIVATE); SharedPreferences.Editor ed = p.edit(); String nameString = name.getText().toString(); - String classString = Player.classStrings[classSpinner.getSelectedItemPosition()]; - String raceString = Player.raceStrings[raceSpinner.getSelectedItemPosition()]; + int classInt = classSpinner.getSelectedItemPosition(); + int raceInt = raceSpinner.getSelectedItemPosition(); - int levelInt = 0; + int pxInt = 0; if (!level.getText().toString().isEmpty()) - levelInt = Integer.parseInt(level.getText().toString()); + pxInt = Integer.parseInt(level.getText().toString()); int fue = 0, con = 0, des = 0, intel = 0, sab = 0, car = 0; if (!this.car.getText().toString().isEmpty()) @@ -112,9 +112,9 @@ public class Introduction extends ActionBarActivity { if(getIntent().getExtras().getBoolean("first_time")) { if ( !nameString.isEmpty() && - !classString.equals(Player.classStrings[0]) && - !raceString.equals(Player.raceStrings[0]) && - levelInt != 0 && + classInt != Player.NULL && + raceInt != Player.NULL && + pxInt != 0 && car != 0 && fue != 0 && con != 0 && @@ -124,9 +124,9 @@ public class Introduction extends ActionBarActivity { ) { //first save it all ed.putString("playerName", nameString); - ed.putString("className", classString); - ed.putString("raceName", raceString); - ed.putInt("level", levelInt); + ed.putInt("classInt", classInt); + ed.putInt("raceInt", raceInt); + ed.putInt("px", pxInt); ed.putInt("fue", fue); ed.putInt("car", car); @@ -141,9 +141,9 @@ public class Introduction extends ActionBarActivity { } } else { if (!nameString.isEmpty()) ed.putString("playerName", nameString); - if (!classString.isEmpty()) ed.putString("className", classString); - if (!raceString.isEmpty()) ed.putString("raceName", raceString); - if (levelInt != 0) ed.putInt("level", levelInt); + if (classInt != Player.NULL) ed.putInt("classInt", classInt); + if (raceInt != Player.NULL) ed.putInt("raceInt", raceInt); + if (pxInt != 0) ed.putInt("px", pxInt); if (fue != 0) ed.putInt("fue", fue); if (car != 0) ed.putInt("car", car); diff --git a/app/src/main/java/com/kauron/dungeonmanager/MainActivity.java b/app/src/main/java/com/kauron/dungeonmanager/MainActivity.java index 9339be7..f736d72 100644 --- a/app/src/main/java/com/kauron/dungeonmanager/MainActivity.java +++ b/app/src/main/java/com/kauron/dungeonmanager/MainActivity.java @@ -1,7 +1,6 @@ package com.kauron.dungeonmanager; import android.app.AlertDialog; -import android.app.DialogFragment; import android.content.DialogInterface; import android.content.Intent; import android.content.SharedPreferences; @@ -9,10 +8,11 @@ import android.graphics.Color; import android.support.v7.app.ActionBarActivity; import android.os.Bundle; import android.text.InputType; -import android.util.Log; +import android.view.KeyEvent; import android.view.Menu; import android.view.MenuItem; import android.view.View; +import android.view.inputmethod.EditorInfo; import android.widget.Button; import android.widget.EditText; import android.widget.TextView; @@ -30,7 +30,7 @@ public class MainActivity extends ActionBarActivity{ @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); - setContentView(com.kauron.dungeonmanager.R.layout.activity_main); + setContentView(R.layout.activity_main); undo = false; invalidateOptionsMenu(); } @@ -38,13 +38,13 @@ public class MainActivity extends ActionBarActivity{ @Override public boolean onCreateOptionsMenu(Menu menu) { // Inflate the menu; this adds items to the action bar if it is present. - getMenuInflater().inflate(com.kauron.dungeonmanager.R.menu.menu_main, menu); + getMenuInflater().inflate(R.menu.menu_main, menu); return true; } @Override public boolean onPrepareOptionsMenu (Menu menu) { - menu.findItem(com.kauron.dungeonmanager.R.id.action_undo).setVisible(undo); + menu.findItem(R.id.action_undo).setVisible(undo); return true; } @@ -56,7 +56,7 @@ public class MainActivity extends ActionBarActivity{ int id = item.getItemId(); //noinspection SimplifiableIfStatement - if (id == com.kauron.dungeonmanager.R.id.action_cure) { + if (id == R.id.action_cure) { if(player.getMaxPg() <= player.getPg()){ Toast.makeText( getApplicationContext(), @@ -67,7 +67,7 @@ public class MainActivity extends ActionBarActivity{ healDialog(); } return true; - } else if (id == com.kauron.dungeonmanager.R.id.action_edit_basics) { + } else if (id == R.id.action_edit_basics) { //TODO: try this startChildActivity() SharedPreferences p = getSharedPreferences("basics", MODE_PRIVATE); Intent intent = new Intent(this, Introduction.class); @@ -77,32 +77,62 @@ public class MainActivity extends ActionBarActivity{ )); restoreData(); return true; - } else if (id == com.kauron.dungeonmanager.R.id.action_undo) { + } else if (id == R.id.action_undo) { undo(); return true; - } else if (id == com.kauron.dungeonmanager.R.id.action_reset) { + } else if (id == R.id.action_reset) { AlertDialog.Builder alert = new AlertDialog.Builder(this); - alert.setTitle(getString(com.kauron.dungeonmanager.R.string.reset_confirmation_title)); - alert.setMessage(getString(com.kauron.dungeonmanager.R.string.reset_confirmation)); - alert.setPositiveButton("Ok", new DialogInterface.OnClickListener() { + alert.setTitle(R.string.reset_confirmation_title); + alert.setMessage(R.string.reset_confirmation); + alert.setPositiveButton(R.string.ok, new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int whichButton) { Toast.makeText( getApplicationContext(), - com.kauron.dungeonmanager.R.string.message_reset, + R.string.message_reset, Toast.LENGTH_LONG ).show(); getSharedPreferences("basics", MODE_PRIVATE).edit().clear().apply(); restoreData(); } }); - - alert.setNegativeButton("Cancel", new DialogInterface.OnClickListener() { + alert.setNegativeButton(R.string.cancel, new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int whichButton) { // Canceled. } }); alert.show(); + return true; + } else if (id == R.id.action_time_encounter_end) { + AlertDialog.Builder alert = new AlertDialog.Builder(this); + alert.setTitle(R.string.px_awarded_title); + final EditText input = new EditText(this); + input.setInputType(InputType.TYPE_CLASS_NUMBER); + input.setHint(R.string.px_awarded_hint); + alert.setCancelable(false); + alert.setView(input); + alert.setPositiveButton(R.string.ok, new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + try { + if (player.addPx(Integer.parseInt(input.getText().toString()))) { + //levelUp + player.setMaxPgOnLevelUp(); + ((TextView) findViewById(R.id.lvl)).setText( + String.valueOf(player.getLevel()) + ); + } + } catch(Exception e) { + Toast.makeText( + getApplicationContext(), + R.string.message_no_px, + Toast.LENGTH_LONG + ).show(); + } + } + }); + alert.show(); + return true; } return super.onOptionsItemSelected(item); @@ -116,20 +146,19 @@ public class MainActivity extends ActionBarActivity{ updateCurativeString(); } - public void heal(boolean usesEffort - ) { + public void heal(boolean usesEffort) { int hasCured = player.recoverPg(Player.USE_CURATIVE_EFFORT, usesEffort); if (hasCured == Player.NOT_CURED) { Toast.makeText( getApplicationContext(), - com.kauron.dungeonmanager.R.string.no_curative_efforts_error, + R.string.no_curative_efforts_error, Toast.LENGTH_LONG ).show(); } else { if(hasCured == Player.MAXED){ Toast.makeText( getApplicationContext(), - com.kauron.dungeonmanager.R.string.maxed_curative, + R.string.maxed_curative, Toast.LENGTH_LONG ).show(); } @@ -144,20 +173,20 @@ public class MainActivity extends ActionBarActivity{ public void healDialog() { AlertDialog.Builder alert = new AlertDialog.Builder(this); - alert.setMessage(com.kauron.dungeonmanager.R.string.new_energies_message) - .setTitle(com.kauron.dungeonmanager.R.string.new_energies) - .setPositiveButton(com.kauron.dungeonmanager.R.string.me, new DialogInterface.OnClickListener() { + alert.setMessage(R.string.new_energies_message) + .setTitle(R.string.new_energies) + .setPositiveButton(R.string.me, new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int id) { heal(true); } }) - .setNegativeButton(com.kauron.dungeonmanager.R.string.other, new DialogInterface.OnClickListener() { + .setNegativeButton(R.string.other, new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int id) { heal(false); } }) - .setNeutralButton(com.kauron.dungeonmanager.R.string.cancel, new DialogInterface.OnClickListener() { + .setNeutralButton(R.string.cancel, new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int id) { dialog.cancel(); @@ -168,18 +197,18 @@ public class MainActivity extends ActionBarActivity{ public void damage(final View view){ AlertDialog.Builder alert = new AlertDialog.Builder(this); - alert.setTitle(getString(com.kauron.dungeonmanager.R.string.suffer_damage)); + alert.setTitle(R.string.suffer_damage); // Set an EditText view to get user input final EditText input = new EditText(this); input.setInputType(InputType.TYPE_CLASS_NUMBER); - input.setHint(com.kauron.dungeonmanager.R.string.suffer_damage_hint); + input.setHint(R.string.suffer_damage_hint); alert.setView(input); - alert.setPositiveButton("Ok", new DialogInterface.OnClickListener() { + alert.setPositiveButton(R.string.ok, new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int whichButton) { - Button pg = (Button) findViewById(com.kauron.dungeonmanager.R.id.pgCurrent); + Button pg = (Button) findViewById(R.id.pgCurrent); try { int preValue = Integer.parseInt(pg.getText().toString()); int damage = Integer.parseInt(input.getText().toString()); @@ -200,7 +229,7 @@ public class MainActivity extends ActionBarActivity{ } }); - alert.setNegativeButton("Cancel", new DialogInterface.OnClickListener() { + alert.setNegativeButton(R.string.cancel, new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int whichButton) { // Canceled. } @@ -212,26 +241,26 @@ public class MainActivity extends ActionBarActivity{ private void healthStatusCheck() { int status = player.getState(); int lastState = player.getLastState(); - Button pg = (Button) findViewById(com.kauron.dungeonmanager.R.id.pgCurrent); + Button pg = (Button) findViewById(R.id.pgCurrent); pg.setText(String.valueOf(player.getPg())); if (status == Player.MUERTO) { pg.setTextColor(Color.BLACK); pg.setBackgroundColor(Color.RED); AlertDialog.Builder alert = new AlertDialog.Builder(this); - alert.setTitle(getString(com.kauron.dungeonmanager.R.string.reset_confirmation_title)); - alert.setMessage(getString(com.kauron.dungeonmanager.R.string.reset_confirmation)); - alert.setPositiveButton(com.kauron.dungeonmanager.R.string.action_undo, new DialogInterface.OnClickListener() { + alert.setTitle(getString(R.string.reset_confirmation_title)); + alert.setMessage(getString(R.string.reset_confirmation)); + alert.setPositiveButton(R.string.action_undo, new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int whichButton) { undo(); } }); - alert.setNegativeButton(com.kauron.dungeonmanager.R.string.die, new DialogInterface.OnClickListener() { + alert.setNegativeButton(R.string.die, new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int whichButton) { Toast.makeText( getApplicationContext(), - com.kauron.dungeonmanager.R.string.message_death, + R.string.message_death, Toast.LENGTH_LONG ).show(); getSharedPreferences("basics", MODE_PRIVATE).edit().clear().apply(); @@ -246,7 +275,7 @@ public class MainActivity extends ActionBarActivity{ if(lastState != Player.SAME) { Toast.makeText( getApplicationContext(), - com.kauron.dungeonmanager.R.string.state_changed_debilitado, + R.string.state_changed_debilitado, Toast.LENGTH_LONG ).show(); } @@ -256,19 +285,21 @@ public class MainActivity extends ActionBarActivity{ if(lastState != Player.SAME) { Toast.makeText( getApplicationContext(), - com.kauron.dungeonmanager.R.string.state_changed_malherido, + R.string.state_changed_malherido, Toast.LENGTH_LONG ).show(); } } else { - pg.setTextColor(getResources().getColor( - com.kauron.dungeonmanager.R.color.abc_primary_text_material_dark - )); + if(player.getPg() >= player.getMaxPg()) + pg.setTextColor(Color.GREEN); + else + pg.setTextColor(getResources().getColor( + R.color.abc_primary_text_material_dark + )); pg.setBackgroundColor(android.R.drawable.btn_default); } } - private void restoreData(){ SharedPreferences p = getSharedPreferences("basics", MODE_PRIVATE); //restore state @@ -281,10 +312,10 @@ public class MainActivity extends ActionBarActivity{ } if(player == null) { player = new Player( - p.getString("playerName", getString(com.kauron.dungeonmanager.R.string.adventurer_name)), - p.getString("className", getString(com.kauron.dungeonmanager.R.string.class_name)), - p.getString("raceName", getString(com.kauron.dungeonmanager.R.string.race_name)), - p.getInt("level", 1), + p.getString("playerName", getString(R.string.adventurer_name)), + p.getInt("classInt", Player.NULL), + p.getInt("raceInt", Player.NULL), + p.getInt("px", 0), new int[] { p.getInt("fue", 10), p.getInt("con", 10), @@ -296,10 +327,10 @@ public class MainActivity extends ActionBarActivity{ new int[18], new Power[4]); } else { - player.setName(p.getString("playerName", getString(com.kauron.dungeonmanager.R.string.adventurer_name))); - player.setClassName(p.getString("className", getString(com.kauron.dungeonmanager.R.string.class_name))); - player.setRaceName(p.getString("raceName", getString(com.kauron.dungeonmanager.R.string.race_name))); - player.setLevel(p.getInt("level", 1)); + player.setName(p.getString("playerName", getString(R.string.adventurer_name))); + player.setClassInt(p.getInt("classInt", Player.NULL)); + player.setRaceInt(p.getInt("raceInt", Player.NULL)); + player.setPx(p.getInt("px", 0)); player.setAtk(new int[]{ p.getInt("fue", 10), p.getInt("con", 10), @@ -310,67 +341,60 @@ public class MainActivity extends ActionBarActivity{ }); } + if(player.getLevel() != 1 && player.getMaxPg() == 0) { + pgDialog(); + } player.setCurativeEffort(p.getInt("curativeEfforts", player.getCurativeEfforts())); player.setPg(p.getInt("pg", player.getPg())); healthStatusCheck(); updateCurativeString(); //set restored values to the respective fields - ((TextView) findViewById(com.kauron.dungeonmanager.R.id.nameText)).setText(player.getName()); - ((TextView) findViewById(com.kauron.dungeonmanager.R.id.raceText)).setText(player.getRaceName()); - ((TextView) findViewById(com.kauron.dungeonmanager.R.id.classText)).setText(player.getClassName()); - ((TextView) findViewById(com.kauron.dungeonmanager.R.id.lvl)).setText(String.valueOf(player.getLevel())); + ((TextView) findViewById(R.id.nameText)).setText(player.getName()); + ((TextView) findViewById(R.id.raceText)).setText(player.getRaceName()); + ((TextView) findViewById(R.id.classText)).setText(player.getClassName()); + ((TextView) findViewById(R.id.lvl)).setText(String.valueOf(player.getLevel())); - ((Button) findViewById(com.kauron.dungeonmanager.R.id.pgCurrent)).setText(String.valueOf(player.getPg())); + ((Button) findViewById(R.id.pgCurrent)).setText(String.valueOf(player.getPg())); //attacks - ((TextView) findViewById(com.kauron.dungeonmanager.R.id.FUE)).setText( - getString(com.kauron.dungeonmanager.R.string.FUE) + ":" + player.getFue() + ((TextView) findViewById(R.id.FUE)).setText( + getString(R.string.FUE) + ":" + player.getFue() ); - ((TextView) findViewById(com.kauron.dungeonmanager.R.id.CON)).setText( - getString(com.kauron.dungeonmanager.R.string.CON) + ":" + player.getCon() + ((TextView) findViewById(R.id.CON)).setText( + getString(R.string.CON) + ":" + player.getCon() ); - ((TextView) findViewById(com.kauron.dungeonmanager.R.id.DES)).setText( - getString(com.kauron.dungeonmanager.R.string.DES) + ":" + player.getDes() + ((TextView) findViewById(R.id.DES)).setText( + getString(R.string.DES) + ":" + player.getDes() ); - ((TextView) findViewById(com.kauron.dungeonmanager.R.id.INT)).setText( - getString(com.kauron.dungeonmanager.R.string.INT) + ":" + player.getInt() + ((TextView) findViewById(R.id.INT)).setText( + getString(R.string.INT) + ":" + player.getInt() ); - ((TextView) findViewById(com.kauron.dungeonmanager.R.id.SAB)).setText( - getString(com.kauron.dungeonmanager.R.string.SAB) + ":" + player.getSab() + ((TextView) findViewById(R.id.SAB)).setText( + getString(R.string.SAB) + ":" + player.getSab() ); - ((TextView) findViewById(com.kauron.dungeonmanager.R.id.CAR)).setText( - getString(com.kauron.dungeonmanager.R.string.CAR) + ":" + player.getCar() + ((TextView) findViewById(R.id.CAR)).setText( + getString(R.string.CAR) + ":" + player.getCar() ); //defenses - ((TextView) findViewById(com.kauron.dungeonmanager.R.id.CA)).setText( - getString(com.kauron.dungeonmanager.R.string.CA) + ": " + player.getCa() + ((TextView) findViewById(R.id.CA)).setText( + getString(R.string.CA) + ": " + player.getCa() ); - ((TextView) findViewById(com.kauron.dungeonmanager.R.id.FORT)).setText( - getString(com.kauron.dungeonmanager.R.string.FORT) + ":" + player.getFort() + ((TextView) findViewById(R.id.FORT)).setText( + getString(R.string.FORT) + ":" + player.getFort() ); - ((TextView) findViewById(com.kauron.dungeonmanager.R.id.REF)).setText( - getString(com.kauron.dungeonmanager.R.string.REF) + ":" + player.getRef() + ((TextView) findViewById(R.id.REF)).setText( + getString(R.string.REF) + ":" + player.getRef() ); - ((TextView) findViewById(com.kauron.dungeonmanager.R.id.VOL)).setText( - getString(com.kauron.dungeonmanager.R.string.VOL) + ": " + player.getVol() + ((TextView) findViewById(R.id.VOL)).setText( + getString(R.string.VOL) + ": " + player.getVol() ); } -// private void saveData() { -// getSharedPreferences("basics", MODE_PRIVATE).edit() -// .putInt("level", player.getLevel()) -// .putInt("maxPg", player.getMaxPg()) -// .putInt("pg", player.getPg()) -// .putInt("maxCurativeEfforts", player.getMaxCurativeEfforts()) -// .putInt("curativeEfforts", player.getCurativeEfforts()) -// .apply(); -// } - private void updateCurativeString() { - ((TextView) findViewById(com.kauron.dungeonmanager.R.id.curativeEffortsText)).setText( + ((TextView) findViewById(R.id.curativeEffortsText)).setText( getString( R.string.curative_display_text, player.getCurativeEfforts(), @@ -386,10 +410,10 @@ public class MainActivity extends ActionBarActivity{ private void undo() { String message = ""; if(undoObject == CURRENT_PG){ - ((Button) findViewById(com.kauron.dungeonmanager.R.id.pgCurrent)).setText(String.valueOf(undoPreviousValue)); + ((Button) findViewById(R.id.pgCurrent)).setText(String.valueOf(undoPreviousValue)); player.setPg(undoPreviousValue); undoObject = NULL; - message = getString(com.kauron.dungeonmanager.R.string.action_undo_current_pg); + message = getString(R.string.action_undo_current_pg); } Toast.makeText( getApplicationContext(), @@ -399,4 +423,52 @@ public class MainActivity extends ActionBarActivity{ undo = false; invalidateOptionsMenu(); } + + private void pgDialog() { + AlertDialog.Builder dialog = new AlertDialog.Builder(this); + final EditText input = new EditText(this); + final AlertDialog d; + input.setHint(R.string.dialog_resolve_max_pg_hint); + input.setInputType(InputType.TYPE_CLASS_NUMBER); + input.setImeOptions(EditorInfo.IME_ACTION_DONE); + input.setOnKeyListener(new View.OnKeyListener() { + @Override + public boolean onKey(View v, int keyCode, KeyEvent event) { + if(keyCode == KeyEvent.FLAG_EDITOR_ACTION) { + if (input.getText().toString().isEmpty()){ + Toast.makeText( + getApplicationContext(), + R.string.empty_field, + Toast.LENGTH_LONG + ).show(); + pgDialog(); + } else { + player.setMaxPg(Integer.parseInt(input.getText().toString())); + } + } + return false; + } + }); + dialog + .setView(input) + .setCancelable(false) + .setTitle(R.string.dialog_resolve_max_pg_title) + .setMessage(R.string.dialog_resolve_max_pg_message) + .setPositiveButton(R.string.ok, new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + if (input.getText().toString().isEmpty()){ + Toast.makeText( + getApplicationContext(), + R.string.empty_field, + Toast.LENGTH_LONG + ).show(); + pgDialog(); + } else { + player.setMaxPg(Integer.parseInt(input.getText().toString())); + } + } + }); + dialog.show(); + } } \ No newline at end of file diff --git a/app/src/main/java/com/kauron/dungeonmanager/Player.java b/app/src/main/java/com/kauron/dungeonmanager/Player.java index acc986e..a23435f 100644 --- a/app/src/main/java/com/kauron/dungeonmanager/Player.java +++ b/app/src/main/java/com/kauron/dungeonmanager/Player.java @@ -5,16 +5,54 @@ public class Player { /** * Names for the classes */ - public static final String[] classStrings = { + public static final String[] CLASS_STRINGS = { "Clase", "Ardiente", "Brujo", "Buscador", "Clérigo", "Explorador", "Guerrero", "Mago", "Mente de Batalla", "Monje", "Paladín", "Pícaro", "Psiónico", "Sacerdote Rúnico", "Señor de la guerra" }; + /** + * Values for classes + */ + public static final int NULL = 0, ARDIENTE = 1, BRUJO = 2, BUSCADOR = 3, CLÉRIGO = 4, + EXPLORADOR = 5, GUERRERO = 6, MAGO = 7, MENTE_DE_BATALLA = 8, MONJE = 9, PALADÍN = 10, + PÍCARO = 11, PSIÓNICO = 12, SACERDOTE_RÚNICO = 13, SEÑOR_DE_LA_GUERRA = 14; + + /** + * Values for level - px computation + */ + public static final int[] LEVEL_PX = new int[]{ + 0, 1000, 2250, 3750, 5500, 7500, 10000, 13000, 16500, 20500, 26000, + 32000, 39000, 47000, 57000, 69000, 83000, 99000, 119000, 143000, 175000, + 210000, 255000, 310000, 375000, 450000, 550000, 675000, 825000, 1000000 + }; + + /** + * Values for each class' characteristics + */ + public static final int[][] CLASS_STATS = new int[][] { + //pg on level up + {0, 5, 5, 5, 5, 5, 6, 4, 6, 5, 6, 5, 4, 5, 5}, + //defenses bonus: fort, ref, vol + {0, 1, 0, 0, 0, 1, 2, 0, 0, 1, 1, 0, 0, 0, 1}, + {0, 0, 1, 1, 0, 1, 0, 0, 0, 1, 1, 2, 0, 0, 0}, + {0, 1, 1, 1, 2, 0, 0, 2, 2, 1, 1, 0, 2, 2, 1}, + //initial pg bonus + {0,12,12,12,12,12,15,10,15,12,15,12,12,12,12}, + //daily curative efforts + {0, 7, 6, 7, 7, 6, 9, 6, 9, 7,10, 6, 6, 7, 7} + }; + + /** + * Identifiers for each class characteristic + */ + public static final int PG_ON_LEVEL_UP = 0, DEF_FORT = 1, DEF_REF = 2, DEF_VOL = 3, + INITIAL_PG = 4, DAILY_CURATIVE_EFFORTS = 5; + /** * Names for the races */ - public static final String[] raceStrings = new String[] { + public static final String[] RACE_STRINGS = new String[] { "Raza", "Dracónido", "Eladrín", "Elfo", "Enano", "Gitzherai", "Humanos", "Medianos", "Mente del Fragmento", "Minotauro", "Salvaje", "Semielfo", "Tiflin" }; @@ -40,8 +78,8 @@ public class Player { /** * Names for the abilities */ - public static final String[] abilityString = new String[] { - "Acrobacias", "Aguante", "Arcanos", "Atletismo", "Diplomacia", "Dungeons", "Engañar", + public static final String[] ABILITY_STRING = new String[] { + "Habilidades", "Acrobacias", "Aguante", "Arcanos", "Atletismo", "Diplomacia", "Dungeons", "Engañar", "Historia", "Hurto", "Intimidar", "Naturaleza", "Percepción", "Perspicacia", "Recursos", "Religión", "Sanar", "Sigilo" }; @@ -52,35 +90,45 @@ public class Player { public static final int OK = 1, MALHERIDO = 2, DEBILITADO = 3, MUERTO = 4, SAME = 5, USE_CURATIVE_EFFORT = -1, CURED = 1, NOT_CURED = 0, MAXED = -1; - private int pg, maxPg; + private int pg, maxPg, px; private int state, lastState; private int curativeEfforts, maxCurativeEfforts; - //TODO: convert race and class to integer values private int classInt, raceInt; - private String name, className, raceName; + private String name; private int level; private int[] atk, def, abilities; private Power[] powers; public Player( - String name, String className, String raceName, - int level, int[] atk, int[] abilities, + String name, int classInt, int raceInt, + int px, int[] atk, int[] abilities, Power[] powers ){ this.name = name; - this.level = level; - this.raceName = raceName; - this.className = className; + this.px = px; + setLevel(); + this.raceInt = raceInt; + this.classInt = classInt; this.def = new int[4]; setAtk(atk); setState(); + pg = maxPg; + curativeEfforts = maxCurativeEfforts; this.abilities = abilities; this.powers = powers; } + public int getPx() {return px;} + public void setPx (int px) {this.px = px; setLevel();} + public boolean addPx(int px) { + int lastLevel = level; + setPx(this.px + px); + return lastLevel < level; + } + public int getMaxCurativeEfforts() {return maxCurativeEfforts;} public void setMaxCurativeEfforts(int maxCurativeEfforts) {this.maxCurativeEfforts = maxCurativeEfforts;} @@ -88,10 +136,24 @@ public class Player { public void setCurativeEffort(int curativeEfforts) {this.curativeEfforts = curativeEfforts;} public int getLevel() {return level;} - public void setLevel(int level) {this.level = level;} + public void setLevel() { + for (int i = 0; i < LEVEL_PX.length; i++){ + if(px < LEVEL_PX[i]) { + level = i; return; + } + } + level = LEVEL_PX.length; + //TODO: substitute level by px and autoconvert + } + public int getMaxPg() {return maxPg;} - public void setMaxPg(int maxPg) {this.maxPg = maxPg;} + public void setMaxPg(int maxPg) { + if(this.maxPg == 0) + this.pg = maxPg; + this.maxPg = maxPg; + } + public void setMaxPgOnLevelUp() {maxPg += CLASS_STATS[PG_ON_LEVEL_UP][classInt];} public int getPg() {return pg;} public void setPg(int pg) {this.pg = pg; setState();} @@ -137,14 +199,16 @@ public class Player { public String getName() {return name;} public void setName(String name) {this.name = name;} - public String getClassName() {return className;} - public void setClassName(String className) { - this.className = className; - if(atk!=null) setClass(); + public int getClassInt() {return classInt;} + public void setClassInt(int classInt) { + this.classInt = classInt; + if (atk != null) setClass(); } + public String getClassName() {return CLASS_STRINGS[classInt];} - public String getRaceName() {return raceName;} - public void setRaceName(String raceName) {this.raceName = raceName;} + public String getRaceName() {return RACE_STRINGS[raceInt];} + public void setRaceInt(int raceInt) {this.raceInt= raceInt;} + public int getRaceInt() {return raceInt;} //TODO: implement time in the app public void rest(boolean length) { @@ -156,7 +220,7 @@ public class Player { } } - public void setAtk(int[] atk) {this.atk = atk; if(className!=null) setClass();} + public void setAtk(int[] atk) {this.atk = atk; if(classInt != NULL) setClass();} public int getFue() {return atk[FUE];} public int getCon() {return atk[CON];} @@ -169,66 +233,17 @@ public class Player { public int getRef() {return def[REF];} public int getVol() {return def[VOL];} - //TODO: set the pg level dependant - //TODO: only setPg if the public void setClass() { - int pgExtra = 0, curativeEffortsExtra = 0, defCA = 0, defFORT = 0, defVOL = 0, defREF = 0; - if(className.equals(classStrings[1])){ - //Ardiente - } else if (className.equals(classStrings[2])) { - //Brujo - //TODO: Kauron - pgExtra = 12; - curativeEffortsExtra = 6; - defVOL = defREF = 1; - } else if (className.equals(classStrings[3])) { - //Buscador - } else if (className.equals(classStrings[4])) { - //Clérigo - //TODO: Gárafran - pgExtra = 12; - curativeEffortsExtra = 7; - defVOL = 2; - } else if (className.equals(classStrings[5])) { - //Explorador - //TODO: Aria Saferi - pgExtra = 12; - curativeEffortsExtra= 6; - defFORT = 1; - defREF = 1; - } else if (className.equals(classStrings[6])) { - //Guerrero - } else if (className.equals(classStrings[7])) { - //Mago - } else if (className.equals(classStrings[8])) { - //Mente de Batalla - } else if (className.equals(classStrings[9])) { - //Monje - } else if (className.equals(classStrings[10])) { - //Paladín - //TODO: Ceaelynna - pgExtra = 15; - curativeEffortsExtra = 10; - defFORT = defREF = defVOL = 1; - } else if (className.equals(classStrings[11])) { - //Pícaro - } else if (className.equals(classStrings[12])) { - //Psiónico - } else if (className.equals(classStrings[13])) { - //Sacerdote rúnico - } else { - //Señor de la Guerra - //TODO: Mushu - pgExtra = 12; - curativeEffortsExtra = 7; - defVOL = 2; - } - pg = maxPg = atk[CON] + pgExtra; - curativeEfforts = maxCurativeEfforts = Player.getModifier(atk[CON]) + curativeEffortsExtra; - def[CA] = 10 + level / 2 + Player.getModifier(Math.max(atk[CON], atk[FUE])) + defCA; - def[FORT] = 10 + level / 2 + Player.getModifier(Math.max(atk[CON], atk[FUE])) + defFORT; - def[REF] = 10 + level / 2 + Player.getModifier(Math.max(atk[DES], atk[INT])) + defREF; - def[VOL] = 10 + level / 2 + Player.getModifier(Math.max(atk[CAR], atk[SAB])) + defVOL; + if(level == 1) maxPg = atk[CON] + CLASS_STATS[INITIAL_PG][classInt]; + maxCurativeEfforts = Player.getModifier(atk[CON]) + CLASS_STATS[DAILY_CURATIVE_EFFORTS][classInt]; + //TODO: fix ca bonuses! + def[CA] = 10 + level / 2; + def[FORT] = 10 + level / 2 + Player.getModifier(Math.max(atk[CON], atk[FUE])) + + CLASS_STATS[DEF_FORT][classInt]; + def[REF] = 10 + level / 2 + Player.getModifier(Math.max(atk[DES], atk[INT])) + + CLASS_STATS[DEF_REF][classInt]; + def[VOL] = 10 + level / 2 + Player.getModifier(Math.max(atk[CAR], atk[SAB])) + + CLASS_STATS[DEF_VOL][classInt]; } public static int getModifier(int i) { @@ -238,8 +253,4 @@ public class Player { public int getTotalModifier(int i) { return getModifier(i) + level / 2; } - - public static int getLevel (int px) { - return 0; //TODO: substitute level by px and autoconvert - } } \ No newline at end of file diff --git a/app/src/main/res/layout/activity_introduction.xml b/app/src/main/res/layout/activity_introduction.xml index 0b10890..633ccb6 100644 --- a/app/src/main/res/layout/activity_introduction.xml +++ b/app/src/main/res/layout/activity_introduction.xml @@ -26,8 +26,8 @@ android:layout_height="wrap_content" android:inputType="number" android:ems="10" - android:id="@+id/editLevelIntro" - android:hint="@string/level" + android:id="@+id/editPxIntro" + android:hint="@string/px" android:layout_weight="1"/> diff --git a/app/src/main/res/menu/menu_main.xml b/app/src/main/res/menu/menu_main.xml index e3f355d..3990e01 100644 --- a/app/src/main/res/menu/menu_main.xml +++ b/app/src/main/res/menu/menu_main.xml @@ -29,22 +29,22 @@ diff --git a/app/src/main/res/values-es/strings.xml b/app/src/main/res/values-es/strings.xml index 3980b9c..2879c5e 100644 --- a/app/src/main/res/values-es/strings.xml +++ b/app/src/main/res/values-es/strings.xml @@ -52,10 +52,18 @@ REF VOL Avanzar tiempo - Día + Día siguiente Fin de encuentro Descanso largo Descanso corto Turno siguiente Tienes %1$d de %2$d esfuerzos curativos + PX + PX del encuentro + Introduce los PX ganados + No has ganado ningún PX + Máx PG + No se han podido calcular tus PG a partir de tu nivel + Atención + Por favor, escribe algo \ No newline at end of file diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index d5cda7b..4d9527c 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -54,7 +54,11 @@ Input the damage suffered PG lost Me + Input XP awarded + XP from the encounter + You haven\'t won any XP Otro + XP FUE CON @@ -63,4 +67,8 @@ CAR SAB Save + Max PG + Please input something + Alert + Couldn\'t compute your max PG based on your level