/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
package transientlibs.objects.creatures;
import transientlibs.bindedobjects.gamecontent.Looks;
import transientlibs.bindedobjects.gamecontent.PersonalName;
import transientlibs.objects.general.Dice;
import transientlibs.objects.general.Node;
import transientlibs.objects.general.PointSet;
import transientlibs.objects.primitives.SmallPoints;
import transientlibs.preui.objects.gui.elements.InfoGroup;
import transientlibs.bindedobjects.gamecontent.Job;
import java.util.ArrayList;
import java.util.Iterator;
import transientlibs.slick2d.util.Log;
import transientlibs.bindedobjects.core.Binding;
import transientlibs.bindedobjects.gamecontent.Domain;
import transientlibs.bindedobjects.core.LinkedValue;
import transientlibs.bindedobjects.gamecontent.PersonalityTraits;
/**
*
* @author kibertoad
*/
public class Person extends Node {
public static final int maleGender = 0;
public static final int femaleGender = 1;
public String LName = "Name";
public PointSet<SmallPoints> looks = new PointSet<SmallPoints>();
//PointSet<SmallPoints> stats = new PointSet<SmallPoints>();
public ArrayList<LinkedValue<PersonalityTraits>> personality = new ArrayList<LinkedValue<PersonalityTraits>>();
public ArrayList<LinkedValue<Domain>> interests = new ArrayList<LinkedValue<Domain>>();
public int gender;
public int nation;
public Job job;
public static Person PCPerson = new Person();
public int returnLookValue(int getType) {
return looks.get(getType).now.value;
}
public Person() {
if (!PersonalityTraits.personalityTraits.isEmpty()) {
for (PersonalityTraits pt : PersonalityTraits.personalityTraits) {
personality.add(new LinkedValue<PersonalityTraits> (pt.ID));
}
}
if (!Domain.domains.isEmpty()) {
for (Domain d : Domain.domains) {
interests.add(new LinkedValue<Domain> (d.ID));
}
}
}
public LinkedValue<PersonalityTraits> getPersonalityTraitByCode (String byCode) {
return personality.get(Binding.readBinding(Binding.personalityTraitBinding, byCode.toLowerCase()));
}
public LinkedValue<PersonalityTraits> getPersonalityTraitByID (int byID) {
return personality.get(byID);
}
public void fillLooks (InfoGroup infoTable) {
Iterator<LookType> i = Looks.lookTypes.iterator();
LookType nowLookType;
//draw hair
nowLookType = i.next();
//infoTable.addOption(nowLookType.LName + ": " +
infoTable.addOption(Looks.returnLookName(nowLookType.ID, returnLookValue(nowLookType.ID)) + " "
+ Looks.returnLookName(nowLookType.ID + 1, returnLookValue(nowLookType.ID + 1)) + " hair");
i.next();
//end draw hair
while ((i.hasNext())) {
nowLookType = i.next();
//infoTable.addOption(nowLookType.LName + ": " + Looks.returnLookName(nowLookType.ID, looks.get(nowLookType.ID).now));
infoTable.addOption(Looks.returnLookName(nowLookType.ID, looks.get(nowLookType.ID).now.value)+" "+nowLookType.LName.value.toLowerCase());
//Log.info("Loaded "+nowLookType.LName + ": " + Looks.returnLookName(nowLookType.ID, looks.get(nowLookType.ID).now));
//Log.info("Displaying looks by ID "+nowLookType.ID);
}
}
public void drawLooks() {
Iterator<LookType> i = Looks.lookTypes.iterator();
LookType nowLookType;
nowLookType = i.next();
//Log.info(nowLookType.LName + ": "
// + Looks.returnLookName(nowLookType.ID, returnLookValue(nowLookType.ID)) + " "
// + Looks.returnLookName(nowLookType.ID + 1, returnLookValue(nowLookType.ID + 1)) + " hair");
i.next();
while ((i.hasNext())) {
nowLookType = i.next();
//Log.info(nowLookType.LName + ": " + Looks.returnLookName(nowLookType.ID, looks.get(nowLookType.ID).now));
}
// nowInterval = i.next();
//Iterator<LookType> i = fromList.iterator()
}
public void setRandomName() {
//Log.info("Random name for Gender "+gender+", nation "+nation);
LName = PersonalName.returnNameList(gender, nation).get(Dice.rng.nextInt(PersonalName.returnNameList(gender, nation).size())).LName;
//Log.info(LName);
}
public void rollLooks (){
Dice dice = new Dice();
//Iterator<Interval> i = fromList.iterator();
//while ((i.hasNext()) && (result == null)) {
// nowInterval = i.next();
// dice.addOption(Gender, ID);
ArrayList<Looks> nowGroup;
LookType nowLookType;
Looks nowLook;
int nowType;
int nowID;
//fill all look types
//Log.info("Look types count: " + Looks.lookTypes.size());
for (nowType = 0; nowType < Looks.lookTypes.size(); nowType++) {
//nowLookType = Looks.lookTypes.get(nowType);
nowGroup = Looks.looks.get(nowType);
//Log.info(nowLookType+": "+LName);
//fill all looks of this type
for (nowID = 0; nowID < nowGroup.size(); nowID++) {
dice.addOption(nowGroup.get(nowID).frequency, nowID);
//Log.info("Filling chances for look " + nowGroup.get(nowID).LName);
}
dice.rollDice();
looks.add(new SmallPoints(dice.resultID, 100));
//Log.info("Rolled "+nowGroup.get(dice.resultID).LName);
dice.reset();
}
}
public void rollJob (){
Dice dice = new Dice();
int nowID;
for (nowID = 0; nowID < Job.jobs.size(); nowID++) {
dice.addOption(Job.jobs.get(nowID).frequency, nowID);
}
dice.rollDice();
job = Job.jobs.get(dice.resultID);
}
public void rollRandom() {
rollLooks();
rollJob();
}
}