Skip to content

Commit

Permalink
Character Serialization Added (#37)
Browse files Browse the repository at this point in the history
* Started to add the character class into the Game.

* + Added references in game_references.xml for
    - Genders
    - Classes
    - Levels
+ Finalized Warrior Type Classes along with Base Classes
+ Created Barbarian Class
+ Created Util Class to provide helper functions and values
+ Removed CharClass
+ Renamed Core to Score to better explain usage.

* Actually pushed the files

* Started to add the character class into the Game.

* + Added references in game_references.xml for
    - Genders
    - Classes
    - Levels
+ Finalized Warrior Type Classes along with Base Classes
+ Created Barbarian Class
+ Created Util Class to provide helper functions and values
+ Removed CharClass
+ Renamed Core to Score to better explain usage.

* Actually pushed the files

* + Changed the code to use AttributeScores rather than just raw Integers.
+ Created a basic form of Amazon
+ Swapped the ResId in Barbarian for the ResId defined in the Enum.

* + Added Money enum
+ Added Money property to Character
+ Improved the functionality of Barbarian
    - Added LevelUp
    - Added LevelDown
    - Added property to track user choices of leveling up
+ Added Money strings to game_references.xml

+ Created Magician abstract class
+ Created mEffectiveLevel property in base class to ease the burden of leveling up and down.

* + Changed Character class to PlayerCharacter

* + Changed getCoreStatScore to getScore

* + Modified LevelUp and LevelDown to restore the proper scores rather than calculated scores.
---WARNING---
Changes made in a sleepy state, they may not be implemented properly or effectively.

* Removed the EffectiveLevel property from BaseClass
Removed the updateLevel method
Added an example of getting modifier to CharacterSheet

* + Added methods for saving throws in PlayerCharacter.java
    +getAthleticProwess
    +getDangerEvasion
    +getMysticFortitude
    +getPhysicalVigor
    +getCharisma

* + Added the Equipment functionality to Barbarian
+ Changed some int arguments to use Weapon instead
+ Added some documentation to PlayerCharacter
+ Also fixed some typos in method names in PlayerCharacter.

* + Added the equipment functionality to the PlayerCharacter
    - Weapon Attribute
    - Weapon of Choice checking
+ Added weapon of choice to specialist

* + Fixed more typos
+ Added the initializeClass method to ease the burden of switching classes at first.

* + Changed Portfolio to work with the new method of Character Creation

* + Changed mWeapon to mCurrentWeapon
+ Added getWeapons method to PlayerCharacter
+ Fixed issue where PlayerCharacter wouldn't have a weapon equipped.

* + Made getHitTotal function properly
+ Improved documentation on the PlayerCharacter class

* + Removed initialization from PlayerCharacter's constructor.

* + Added GSON lib.
+ Added Saving Functionality
+ Broken Load Functionality at the moment.

* Fixed loading functionality.

* Added javadoc for SaveAndLoadPerformer

* Finished commit.

* Changed and added methods to the Util class.
* Added javadoc to signature roll(int)
* Added method roll(int, int) with javadoc

Started to add Amazon PlayerCharacter class.

* Finished with Amazon

* Created Centaur (should be ready to implement).

* Fixed bugged gold for Amazon and Barb.

* Created and added Noble
Fixed bug where Barb's weapon of choice would always be set to Barb Axe.

* Added and Created Spearman class.
Added Heroic Heritage to Nobles.

* Added Battle Fortune to Noble.

* Setup project on new PC.
Multiple files changed to resolve errors.

* Fully implemented Centaur.
* Finished up the constructor.

* Fully implemented Thief.

* Created Hunter and fully implemented!

Specialist.java:
* Added Special Talent Method

Thief.java:
* Implemented Special Talent Method

* Moved getSpecialTalent to Specialist.java

* Removed getSpecialTalent from the respective classes.

* Added new values.

* Renamed the values.

* Resolved the TODOs in the code.

* Fixed a typo.

* Removed methods that are inside of the Level Interface, and made getLevelDescription abstract.

* Fixed issue #2.

* Added functionality to Patron.

* Fixed Specialist lacking the Level Descriptions.

* Added the instance field for possibleStartWeapons to BaseClass
Also, added the fully implemented feature into Amazon.

* Updated Barbarian to new format.

* Added the instance field mPossibleWeaponsOfChoice to Warrior.
Made the setter for mWeaponOfChoice check if it is valid.

* Changed how Amazon would validate starting weapon.

* Changed Warrior so it would still weaponOfChoice even if argument wasn't valid.

* Changed Amazon and Barbarian to remove their checking of weaponOfChoice.

* Centaur has been brought up-to-date.

* Noble has been brought up-to-date.

* Spearman has been brought up-to-date.

* Added instance field mPossibleWeaponsOfChoice to Specialist.

* Hunter has been brought up-to-date.

* Thief has been brought up-to-date.

* Added safe-checking to Specialist's setWeaponOfChoice

* All available Magicans classes have been brought up-to-date.

* Fixed bug with App Crash

* Fixed EDC issue where it could return the incorrect values.

* Added Patreon instance field to PlayerCharacter

* Created res/dialog_class_selection.xml

* Created the layout of dialog_class_selection.xml

* Created the layout of dialog_class_selection.xml

* Created DetailFragment class

* Have a very rough version of the new dialog working.

* Still a rough version but slightly improved.

* Added a blank construcutor for all subclasses of BaseClass.

* Added values into the Classes Enum

* Created a custom adapter.

* Created the layout for weapons in a spinner.

* Finalized the layout of the spinner items

* Added getters

* Changed startGold to startMoney.

* Fixed a massive issue regarding scope in the character package.

* Incomplete update for editing attribute values on the character

* Added the ability to edit the Might score.

* Added the edit ability to the rest of the attribute scores.

* Modified the layout of attribute editing dialog.

* Added the proper values for the labels on the CharacterSheet.

* Adding mCurrentHits functionality.

* Rearranged the layout of the Attribute edit dialog to fix issues of cropping.

* Added safe-checking when getting a value from the dialog.

* Fixed an issue where it would refresh the UI regardless of change.

* Added value checking onto the setCurHits method of PlayerCharacter.

* Moved StatChangeFragment to fragments package.

* Created the HitsChangeFragment class

* Fixed an issue where newInstance wasn't exposed.

* Added the ability to edit hits on the character sheet.

* The user can change hits now on the character sheet.

* Fixed an issue causing a crash every time the HitsDialog popped up

* Fixed an issue causing a crash every time the HitsDialog's confirm button was pressed

* Fixed setCurHits allowing bad values.

* Removed debugPrintScores function from PlayerCharacter.

* Reformatted some code.

* PlayerCharacter now updates curHits when initalizeClass is called.

* Removed unused instance fields from Util.

* Removed a todo.

* Added a getter for the instance field weapons.

* MID-WORK COMMIT - This is to simply save work.

* Weapon of Choice is now checked when making an attack.

* Melee bonus is now properly updated in the GUI.

* Disabled some stuff to disable crashing.

* Changed the textView's id to make it more unique.

* Implemented a working version of the DetailedDialog.

* Removed the WeaponArrayAdapter.

* Updated values in strings.xml

* Fixed values in layout and strings.xml

* Changed layout to simple support layout.

* Added safe checking to event handlers in DetailDialog.

* Added a default constructor for Priest.

* Rearranged constructor args to be fitting with other code.

* Added getAmmo to Util.

* Removed unused imports.

* Made getAmmo static.

* Changed constructors that had RangedWeapons involved in startGear.

* Made the dialog swap out the starting weapon with chosen starting weapon.

* Fixed the error where Centaur would start with weaponOfChoice.

* Made the dialog properly create an instance with filled in values.

* Binded a PlayerCharacter to the newly created instance.

* Modified the listener's interface.

* Made BaseClass serializable.

* Made a rough version of passing character between the dialog and sheet.

* Added throwing knife as a weapon

* Removed System.out statements.

* Added some error handling to the dialog.

* Fixed bug where the class wasn't fully initialized.

* Feature complete, able to transfer newly created character to sheet.

* Removed invalid weapon, "mace".

* Added null handling Noble.

* Added a Club Entry.

* Fixed Noble crash potential.

* Implemented the new dialog for all of the classes.

* Added more error-handling into the code.

* Removed outdated variables.

* Fixed a bug where the CreateCharacter and CharcterSheetFragment would both be visible.

* Moved most of the code to fill in the fragment into a seperate method.

* Removed unused code.

* Allows the active character to be perserved after the character changes.

* Merge branch 'master' of https://github.com/CIS-Extra/mazes_and_minotaurs

# Conflicts:
#	MazesAndMinotaurs/app/src/main/java/com/example/cis/mazeminotaurs/CharacterSheetFragment.java
#	MazesAndMinotaurs/app/src/main/java/com/example/cis/mazeminotaurs/NewCharacter/CreateCharacter.java
#	MazesAndMinotaurs/app/src/main/java/com/example/cis/mazeminotaurs/rollDice/rollDice.java
#	MazesAndMinotaurs/instapk.log

* Resolved issue with merge.

* Added value for Priest.

* Added handling in case there is no possible starting weapon.

* Added handling for lack of a weapon

* Added handling for the dialog for lack of a weapon as well.

* fixed issue #24, discovered issue #25, and fixed issue #25

* Removed statements related to debuggging.

* Added helper methods,

* Changed the choice weapon spinner to hide if the user selects a Magician.

* Added resIds to Score enum.

* Now have a working implentmention of Noble Heritage.

* Cleaned up some of the code related to Noble creation.

* Added safe checking to doHeritage.

* #27 fixed

* Created DetailedWeaponAdapater

* Changed DeteailedWeaponAdapter to subclass BaseAdapter.

* CreatedlLayout for individual spinner items for DetailedWeaponAdapter

* Exposed some code to make it easier to implement.

* Added the ability to change active weapon. Issue #11 fixed.

* Added handling for null values.

* Fixed #30.

* Simplified SaveAndLoadPerformer

* Changed name to fit with conventions.

* Added layout for character spinner items.

* Added save icon.

* Added action item, "Save Portfolio".

* Added methods to serialize Portfolio.

* Reverted SaveAndLoadPerformer

* Seperated SaveAndLoadPerformer and CharacterSerializer

* Added RuntimeTypeAdapterFactory.

* Fixed with solution located at google/gson#712

* Serialization should finally work as intended aside from issue #34.

* Added ability to handle failed load.

* Labeled certain methods and classes as deprecated

* Added the ability to handle polymorphism in Equipment objects.

* Replaced multiple gson creations with static one(s).

* Created CharacterAdapter

* Added functionality to CharacterAdapter

* Added a character select screen.

* Added a character delete screen.

* The list nows updates when a character is deleted.

* Fixed #34
  • Loading branch information
JayTSmith authored and Thorin Schmidt committed Oct 19, 2017
1 parent 5298169 commit ca5347a
Show file tree
Hide file tree
Showing 23 changed files with 696 additions and 41 deletions.
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
package com.example.cis.mazeminotaurs;

import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.ListView;

/**
* Created by jsmith on 10/18/17.
*/

public class CharacerSelectionFragment extends Fragment {
@Override
public View onCreateView(LayoutInflater li, ViewGroup vg, Bundle b) {
super.onCreateView(li, vg, b);
View view = li.inflate(R.layout.fragment_character_selection, vg, false);

ListView charListView = (ListView) view.findViewById(R.id.character_list_view);
charListView.setAdapter(new CharacterAdapter(getContext()));

charListView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {
Portfolio.get().setActiveCharacterIndex(i);
}
});

return view;
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,62 @@
package com.example.cis.mazeminotaurs;

import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.TextView;

import com.example.cis.mazeminotaurs.character.PlayerCharacter;

import java.util.ArrayList;

/**
* Created by jsmith on 10/18/17.
*/

public class CharacterAdapter extends BaseAdapter {
private Portfolio mPortfolio = Portfolio.get();
private Context mContext;

public CharacterAdapter(Context context) {
mContext = context;
}

public void removeCharacter(int i) {
mPortfolio.deletePlayerCharacter(mPortfolio.getPlayerCharacter(i));
notifyDataSetChanged();
}

@Override
public int getCount() {
return mPortfolio.getPortfolio().size();
}

@Override
public PlayerCharacter getItem(int i) {
return mPortfolio.getPlayerCharacter(i);
}

@Override
public long getItemId(int i) {
return getItem(i).getCharClass().getResId();
}

@Override
public View getView(int i, View view, ViewGroup viewGroup) {
if (view == null) {
view = LayoutInflater.from(mContext)
.inflate(R.layout.spinner_item_character, viewGroup, false);
}

TextView nameView = (TextView) view.findViewById(R.id.character_name_view);
TextView classView = (TextView) view.findViewById(R.id.character_class_view);
TextView levelView = (TextView) view.findViewById(R.id.character_level_view);

nameView.setText(getItem(i).getName());
classView.setText(getItem(i).getCharClass().getResId());
levelView.setText(String.valueOf(getItem(i).getCharClass().getLevel()));
return view;
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
package com.example.cis.mazeminotaurs;

import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.ListView;
import android.widget.Toast;

/**
* Created by jsmith on 10/19/17.
*/

public class CharacterDeletionFragment extends Fragment {
@Override
public View onCreateView(LayoutInflater li, ViewGroup vg, Bundle b) {
super.onCreateView(li, vg, b);
View view = li.inflate(R.layout.fragment_character_selection, vg, false);

final ListView charListView = (ListView) view.findViewById(R.id.character_list_view);
charListView.setAdapter(new CharacterAdapter(getContext()));

charListView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {
if (charListView.getAdapter().getCount() > 1) {
((CharacterAdapter) charListView.getAdapter()).removeCharacter(i);
} else {
Toast.makeText(getContext(), R.string.error_delete_character, Toast.LENGTH_SHORT).show();
}
}
});

return view;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentManager;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
Expand Down Expand Up @@ -77,6 +78,7 @@ public View onCreateView(LayoutInflater li, ViewGroup vg, Bundle b){
View rootView = li.inflate(R.layout.fragment_character_sheet, vg, false);

mCurrentCharacterIndex = mPortfolio.getActiveCharacterIndex();
Log.d(TAG, String.valueOf(mPortfolio.getActiveCharacterIndex()));

mSheetPlayerCharacter = mPortfolio.getPlayerCharacter(mCurrentCharacterIndex);
mCharacterLevelView = (TextView) rootView.findViewById(R.id.character_level_view);
Expand Down Expand Up @@ -208,6 +210,7 @@ public void onClick(View v){
});

mEquippedWeaponSpinner = (Spinner) rootView.findViewById(R.id.equipped_weapon_spinner);
System.out.println(mSheetPlayerCharacter.getInventory());
DetailedWeaponAdapter weaponAdapter = new DetailedWeaponAdapter(getContext(), mSheetPlayerCharacter.getWeapons());
mEquippedWeaponSpinner.setAdapter(weaponAdapter);
//Get equipped weapon from character Class
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -52,8 +52,17 @@ public View getView(int position, @Nullable View convertView, @NonNull ViewGroup
.inflate(R.layout.spinner_item_weapon_detailed, parent, false);
}

((TextView) convertView.findViewById(R.id.detail_weapon_name_view)).setText(mDataset.get(position).getResId());
((TextView) convertView.findViewById(R.id.detail_weapon_encumberance_view)).setText(Integer.toString(mDataset.get(position).getEncumberance()));
Weapon curWep = mDataset.get(position);
TextView nameView = (TextView) convertView.findViewById(R.id.detail_weapon_name_view);
TextView encumbView = (TextView) convertView.findViewById(R.id.detail_weapon_encumberance_view);

if (curWep != null) {
nameView.setText(curWep.getResId());
encumbView.setText(Integer.toString(curWep.getEncumberance()));
} else {
nameView.setText("-");
encumbView.setText("-");
}

return convertView;
}
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
package com.example.cis.mazeminotaurs;

import android.content.Context;
import android.os.Bundle;
import android.support.design.widget.NavigationView;
import android.support.v4.app.Fragment;
Expand All @@ -12,13 +13,25 @@
import android.util.Log;
import android.view.Menu;
import android.view.MenuItem;
import android.widget.Toast;

import com.example.cis.mazeminotaurs.NewCharacter.CharacterCreationFragment;
import com.example.cis.mazeminotaurs.character.PlayerCharacter;
import com.example.cis.mazeminotaurs.character.SaveAndLoadPerformer;
import com.example.cis.mazeminotaurs.util.Util;
import com.example.cis.mazeminotaurs.web_resources.CompanionFragment;
import com.example.cis.mazeminotaurs.web_resources.PlayerManualFragment;
import com.example.cis.mazeminotaurs.web_resources.WebsiteFragment;

import java.io.BufferedInputStream;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;

public class MainMazes extends AppCompatActivity
implements NavigationView.OnNavigationItemSelectedListener {

Expand All @@ -28,8 +41,27 @@ public class MainMazes extends AppCompatActivity
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
try {
String basePath = getApplicationContext().getFilesDir().getPath() + "/";
FileInputStream fis = new FileInputStream(basePath + Portfolio.FILENAME);
BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(new BufferedInputStream(fis)));

StringBuilder builder = new StringBuilder();
String line = bufferedReader.readLine();
while (line != null && !line.equals("")) {
builder.append(line);
line = bufferedReader.readLine();
}
SaveAndLoadPerformer.loadPortfolio(builder.toString());
} catch (IOException e) {
e.printStackTrace();
}

mPortfolio = Portfolio.get();
if (mPortfolio.getPortfolio() == null) {
mPortfolio.resetPortfolio();
mPortfolio.addPlayerCharacter(Util.createDummyCharacter());
}
mEquipment = EquipmentDB.getInstance();

try{
Expand Down Expand Up @@ -85,6 +117,17 @@ public boolean onOptionsItemSelected(MenuItem item) {
//noinspection SimplifiableIfStatement
if (id == R.id.action_settings) {
return true;
} else if (id == R.id.action_save_portfolio) {
try {
FileOutputStream fos = getApplicationContext().openFileOutput(Portfolio.FILENAME, Context.MODE_PRIVATE);
OutputStreamWriter outputStreamWriter = new OutputStreamWriter(fos);
outputStreamWriter.write(SaveAndLoadPerformer.savePortfolio());
outputStreamWriter.close();
fos.close();
} catch (IOException e) {
e.printStackTrace();
}
return true;
}

return super.onOptionsItemSelected(item);
Expand All @@ -105,8 +148,10 @@ public boolean onNavigationItemSelected(MenuItem item) {
contentFragment = new CharacterCreationFragment();
} else if (id == R.id.play_character) {
contentFragment = new CharacterSheetFragment();
} else if (id == R.id.select_character) {
contentFragment = new CharacerSelectionFragment();
} else if (id == R.id.delete_character) {

contentFragment = new CharacterDeletionFragment();
} else if (id == R.id.player_manual) {
contentFragment = new PlayerManualFragment();
} else if (id == R.id.player_comapanion) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,8 @@
*/

public class Portfolio {
public static final String FILENAME = "SavedPortfolio";

private static final String TAG = Portfolio.class.getName();
private ArrayList<PlayerCharacter> portfolio;
private static Portfolio sPortfolio;
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,116 @@
package com.example.cis.mazeminotaurs.character;

/**
* Created by jsmith on 10/17/17.
*/

import com.example.cis.mazeminotaurs.Armor;
import com.example.cis.mazeminotaurs.Equipment;
import com.example.cis.mazeminotaurs.Mythics;
import com.example.cis.mazeminotaurs.Weapon;
import com.example.cis.mazeminotaurs.character.Gender;
import com.example.cis.mazeminotaurs.character.Money;
import com.example.cis.mazeminotaurs.character.PlayerCharacter;
import com.example.cis.mazeminotaurs.character.classes.BaseClass;
import com.example.cis.mazeminotaurs.character.stats.Score;
import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
import com.google.gson.JsonDeserializationContext;
import com.google.gson.JsonDeserializer;
import com.google.gson.JsonElement;
import com.google.gson.JsonObject;
import com.google.gson.JsonParseException;
import com.google.gson.JsonSerializationContext;
import com.google.gson.JsonSerializer;
import com.google.gson.reflect.TypeToken;
import com.google.gson.typeadapters.RuntimeTypeAdapterFactory;

import java.lang.reflect.Type;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Map;

/**
* Custom serializer for transforming the PlayerCharacter class into json.
*/
public class CharacterSerializer implements JsonSerializer<PlayerCharacter>, JsonDeserializer<PlayerCharacter> {

private static Gson sGson = null;

private static Gson getGson() {
if (sGson == null) {
GsonBuilder builder = new GsonBuilder();
RuntimeTypeAdapterFactory adapter = RuntimeTypeAdapterFactory
.of(Equipment.class)
.registerSubtype(Equipment.class)
.registerSubtype(Weapon.class)
.registerSubtype(Armor.class)
.registerSubtype(Mythics.class);
builder.registerTypeAdapterFactory(adapter);
builder.setPrettyPrinting();
sGson = builder.create();
}
return sGson;
}

@Override
public JsonElement serialize(PlayerCharacter src, Type typeOfSrc, JsonSerializationContext context) {
BaseClass characterClass = src.getCharClass();
characterClass.setCharacter(null);

Type equipListType = new TypeToken<ArrayList<Equipment>>() {
}.getType();
Type moneyMapType = new TypeToken<HashMap<Money, Integer>>() {
}.getType();

JsonObject rootObject = new JsonObject();
rootObject.add("mScores", context.serialize(src.getScores()));
rootObject.add("mCharClass", context.serialize(src.getCharClass(), BaseClass.class));
rootObject.add("mGender", context.serialize(src.getGender()));
rootObject.add("mMoney", context.serialize(src.getMoney(), moneyMapType));
rootObject.add("mAge", context.serialize(src.getAge()));
rootObject.add("mName", context.serialize(src.getName()));
System.out.println(getGson().toJsonTree(src.getInventory(), equipListType));
rootObject.add("mInventory", getGson().toJsonTree(src.getInventory(), equipListType));
rootObject.add("mCurrentWeapon", context.serialize(src.getCurrentWeapon()));
rootObject.add("mHelmet", context.serialize(src.getHelmet()));
rootObject.add("mBreastplate", context.serialize(src.getBreastplate()));
rootObject.add("mShield", context.serialize(src.getShield()));
rootObject.add("mPatron", context.serialize(src.getPatron()));

JsonElement classJson = context.serialize(characterClass);
rootObject.add("mCharClass", classJson);

characterClass.setCharacter(src);
return rootObject;
}

@Override
public PlayerCharacter deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext context) throws JsonParseException {
final PlayerCharacter newCharacter = new PlayerCharacter();
JsonObject loadedData = json.getAsJsonObject();
for (Score score : Score.values()) {
int loadedScore = loadedData.getAsJsonObject("mScores").getAsJsonObject(score.toString()).get("mScore").getAsInt();
newCharacter.getScore(score).setScore(loadedScore);
}

Type equipListType = new TypeToken<ArrayList<Equipment>>() {
}.getType();
Type moneyMapType = new TypeToken<HashMap<Money, Integer>>() {
}.getType();

newCharacter.setAge((int) context.deserialize(loadedData.get("mAge"), Integer.class));
newCharacter.setBreastplate((Armor) context.deserialize(loadedData.get("mBreastplate"), Armor.class));
newCharacter.setCharClass((BaseClass) context.deserialize(loadedData.get("mCharClass"), BaseClass.class));
newCharacter.setCurrentWeapon((Weapon) context.deserialize(loadedData.get("mCurrentWeapon"), Weapon.class));
newCharacter.setGender((Gender) context.deserialize(loadedData.get("mGender"), Gender.class));
newCharacter.setHelmet((Armor) context.deserialize(loadedData.get("mHelmet"), Armor.class));
newCharacter.setMoney((HashMap<Money, Integer>) context.deserialize(loadedData.get("mMoney"), moneyMapType));
newCharacter.setName(loadedData.get("mName").getAsString());
newCharacter.setInventory((ArrayList<Equipment>) getGson().fromJson(loadedData.get("mInventory"), equipListType));
newCharacter.setShield((Armor) context.deserialize(loadedData.get("mShield"), Armor.class));
newCharacter.setPatron((Patron) context.deserialize(loadedData.get("mPatron"), Patron.class));

return newCharacter;
}
}
Loading

0 comments on commit ca5347a

Please sign in to comment.