1
0
Fork 0

General Improvement

Changed class and race attributes to int,  built table for class modifiers and simplified its association with the attributes. Added support for level up, currently not working.
This commit is contained in:
Carlos Galindo 2015-02-24 15:32:17 +01:00
parent ca51347522
commit d6daf98b74
7 changed files with 293 additions and 194 deletions

View file

@ -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);

View file

@ -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 {
if(player.getPg() >= player.getMaxPg())
pg.setTextColor(Color.GREEN);
else
pg.setTextColor(getResources().getColor(
com.kauron.dungeonmanager.R.color.abc_primary_text_material_dark
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();
}
}

View file

@ -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;
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
}
}

View file

@ -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"/>
</LinearLayout>

View file

@ -29,22 +29,22 @@
<item
android:title="@string/action_time_rest"
android:id="@+id/action_time_rest"
android:orderInCategory="2"
android:orderInCategory="4"
app:showAsAction="never"/>
<item
android:title="@string/action_time_day"
android:id="@+id/action_time_day"
android:orderInCategory="5"
android:orderInCategory="3"
app:showAsAction="never"/>
<item
android:title="@string/action_time_long_rest"
android:id="@+id/action_time_long_rest"
android:orderInCategory="4"
android:orderInCategory="5"
app:showAsAction="never"/>
<item
android:title="@string/action_time_encounter_end"
android:id="@+id/action_time_encounter_end"
android:orderInCategory="5"
android:orderInCategory="2"
app:showAsAction="never"/>
</menu>

View file

@ -52,10 +52,18 @@
<string name="REF">REF</string>
<string name="VOL">VOL</string>
<string name="action_time">Avanzar tiempo</string>
<string name="action_time_day">Día</string>
<string name="action_time_day">Día siguiente</string>
<string name="action_time_encounter_end">Fin de encuentro</string>
<string name="action_time_long_rest">Descanso largo</string>
<string name="action_time_rest">Descanso corto</string>
<string name="action_time_turn">Turno siguiente</string>
<string name="curative_display_text">Tienes %1$d de %2$d esfuerzos curativos</string>
<string name="px">PX</string>
<string name="px_awarded_hint">PX del encuentro</string>
<string name="px_awarded_title">Introduce los PX ganados</string>
<string name="message_no_px">No has ganado ningún PX</string>
<string name="dialog_resolve_max_pg_hint">Máx PG</string>
<string name="dialog_resolve_max_pg_message">No se han podido calcular tus PG a partir de tu nivel</string>
<string name="dialog_resolve_max_pg_title">Atención</string>
<string name="empty_field">Por favor, escribe algo</string>
</resources>

View file

@ -54,7 +54,11 @@
<string name="suffer_damage">Input the damage suffered</string>
<string name="suffer_damage_hint">PG lost</string>
<string name="me">Me</string>
<string name="px_awarded_title">Input XP awarded</string>
<string name="px_awarded_hint">XP from the encounter</string>
<string name="message_no_px">You haven\'t won any XP</string>
<string name="other">Otro</string>
<string name="px">XP</string>
<string name="FUE">FUE</string>
<string name="CON">CON</string>
@ -63,4 +67,8 @@
<string name="CAR">CAR</string>
<string name="SAB">SAB</string>
<string name="action_save">Save</string>
<string name="dialog_resolve_max_pg_hint">Max PG</string>
<string name="empty_field">Please input something</string>
<string name="dialog_resolve_max_pg_title">Alert</string>
<string name="dialog_resolve_max_pg_message">Couldn\'t compute your max PG based on your level</string>
</resources>