forked from CIS-Stars/mazes_and_minotaurs
-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Merge pull request #35 from JayTSmith/saving-loading
Serialization of Character Data
- Loading branch information
Showing
22 changed files
with
695 additions
and
39 deletions.
There are no files selected for viewing
33 changes: 33 additions & 0 deletions
33
...dMinotaurs/app/src/main/java/com/example/cis/mazeminotaurs/CharacerSelectionFragment.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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; | ||
} | ||
} |
62 changes: 62 additions & 0 deletions
62
MazesAndMinotaurs/app/src/main/java/com/example/cis/mazeminotaurs/CharacterAdapter.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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; | ||
} | ||
} |
38 changes: 38 additions & 0 deletions
38
...dMinotaurs/app/src/main/java/com/example/cis/mazeminotaurs/CharacterDeletionFragment.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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; | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
114 changes: 114 additions & 0 deletions
114
...otaurs/app/src/main/java/com/example/cis/mazeminotaurs/character/CharacterSerializer.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,114 @@ | ||
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())); | ||
|
||
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)); | ||
|
||
return newCharacter; | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -24,6 +24,7 @@ | |
import java.io.OutputStreamWriter; | ||
|
||
/** | ||
* @deprecated | ||
* Created by jusmith on 4/26/17. | ||
*/ | ||
|
||
|
Oops, something went wrong.