package com.lateensoft.pathfinder.toolkit.deprecated.v1.model.party;
import java.util.ArrayList;
public class PTParty {
private ArrayList<PTPartyMember> mPartyMembers;
private String mPartyName;
public int mID; //Used in SQL
public PTParty(String name){
mPartyMembers = new ArrayList<PTPartyMember>();
if(name != null)
mPartyName = name;
else mPartyName = "";
mID = 0;
}
/**
* Adds party member into the party. The party member is inserted into the list alphabetically.
* @param newPartyMember
* @return the index of the character in the list. -1 if the addition failed
*/
public int addPartyMember(PTPartyMember newPartyMember){
if( newPartyMember != null ){
for(int i = 0; i < mPartyMembers.size(); i++){
//Places in alphabetical position
if(newPartyMember.getName().compareToIgnoreCase(getPartyMember(i).getName()) < 0 ){
mPartyMembers.add(i, newPartyMember);
return i;
}
}
//If party member is to go at the end of the list
mPartyMembers.add(newPartyMember);
return mPartyMembers.size() - 1;
}
else return -1;
}
/**
*
* @param index
* @return returns the party member at index, in an alphabetical list of all party members
*/
public PTPartyMember getPartyMember(int index){
if(index >= 0 && index < mPartyMembers.size())
return mPartyMembers.get(index);
else return null;
}
/**
* Replaces the party member at i with the entered one.
* The list remains alphabetical, even if the entered party member's name is of different priority than the one previously at i.
* @param i
* @param partyMember
* @return the new index of the character in the list. -1 if the set failed
*/
public int setPartyMember(int index, PTPartyMember partyMember){
if(index >= 0 && index < mPartyMembers.size() && partyMember != null){
mPartyMembers.remove(index);
return addPartyMember(partyMember);
}
else return -1;
}
/**
* deletes the party member at index
* @param index
*/
public void deletePartyMember(int index){
if(index >= 0 && index < mPartyMembers.size())
mPartyMembers.remove(index);
}
/**
*
* @return an array of all the party members' names
*/
public String[] getPartyMemberNames(){
String names[] = new String[mPartyMembers.size()];
for(int i = 0; i < mPartyMembers.size(); i++){
names[i] = mPartyMembers.get(i).getName();
}
return names;
}
public void setName(String name){
if(name != null)
mPartyName = name;
}
public String getName(){
return mPartyName;
}
/**
*
* @return an array of the names of party members, ordered from highest roll, to lowest.
* If there is a tie, sorts by default order
*/
public String[] getNamesByRollValue(){
PTPartyMember[] orderedMembers = getPartyMembersByRollValue();
String[] names = new String[mPartyMembers.size()];
//Set each value in the array
for(int i = 0; i < mPartyMembers.size(); i++){
names[i] = orderedMembers[i].getName();
}
return names;
}
/**
*
* @return an array of the roll values of party members, ordered from highest roll, to lowest.
* If there is a tie, sorts by default order
*/
public int[] getRollValuesByRollValue(){
PTPartyMember[] orderedMembers = getPartyMembersByRollValue();
int[] rollValues = new int[mPartyMembers.size()];
//Set each value in the array
for(int i = 0; i < mPartyMembers.size(); i++){
rollValues[i] = orderedMembers[i].getRolledValue();
}
return rollValues;
}
/**
*
* @param index
* @return the "actual" index of the party, based on its index in the list sorted by roll
*/
public int getPartyMemberIndexByRollValueIndex(int index){
if(index < mPartyMembers.size()){
int[] indexes = getIndexesByRollValue();
return indexes[index];
}
else return -1;
}
/**
* @return an array of party members, ordered from highest roll, to lowest.
* If there is a tie, sorts by default order
*/
private PTPartyMember[] getPartyMembersByRollValue(){
ArrayList<PTPartyMember> tempMembers = cloneMemberList();
PTPartyMember[] sortedMembers = new PTPartyMember[mPartyMembers.size()];
int currentLargestRoll;
int indexWithLargestRoll;
//Set each value in the array
for(int currentNamesIndex = 0; currentNamesIndex < mPartyMembers.size(); currentNamesIndex++){
currentLargestRoll = Integer.MIN_VALUE;
indexWithLargestRoll = 0;
//Find the largest value still in arraylist
for(int i = 0; i < tempMembers.size(); i++){
if(tempMembers.get(i).getRolledValue() > currentLargestRoll){
indexWithLargestRoll = i;
currentLargestRoll = tempMembers.get(i).getRolledValue();
}
}
sortedMembers[currentNamesIndex] = new PTPartyMember(tempMembers.get(indexWithLargestRoll));
tempMembers.remove(indexWithLargestRoll);
}
return sortedMembers;
}
/**
* @return an array of the unsorted indexes of the party members, ordered as the characters are when sorted by roll
*/
public int[] getIndexesByRollValue(){
ArrayList<PTPartyMember> tempMembers = cloneMemberList();
ArrayList<Integer> tempIndexes = new ArrayList<Integer>();
int[] sortedIndexes = new int[mPartyMembers.size()];
for(int j = 0; j < mPartyMembers.size(); j++){
tempIndexes.add(Integer.valueOf(j));
}
int currentLargestRoll;
int indexWithLargestRoll;
//Set each value in the array
for(int currentNamesIndex = 0; currentNamesIndex < mPartyMembers.size(); currentNamesIndex++){
currentLargestRoll = Integer.MIN_VALUE;
indexWithLargestRoll = 0;
//Find the largest value still in arraylist
for(int i = 0; i < tempMembers.size(); i++){
if(tempMembers.get(i).getRolledValue() > currentLargestRoll){
indexWithLargestRoll = i;
currentLargestRoll = tempMembers.get(i).getRolledValue();
}
}
sortedIndexes[currentNamesIndex] = tempIndexes.get(indexWithLargestRoll).intValue();
tempMembers.remove(indexWithLargestRoll);
tempIndexes.remove(indexWithLargestRoll);
}
return sortedIndexes;
}
/**
*
* @return a deep copy of the member array list
*/
private ArrayList<PTPartyMember> cloneMemberList(){
int numberOfMembers = mPartyMembers.size();
ArrayList<PTPartyMember> membersListClone = new ArrayList<PTPartyMember>();
for(int i = 0; i < numberOfMembers; i++){
PTPartyMember tempMember = new PTPartyMember(mPartyMembers.get(i));
membersListClone.add(tempMember);
}
return membersListClone;
}
/**
*
* @return the number of party members in the party
*/
public int size(){
return mPartyMembers.size();
}
}