/*
* (c) 2000-2009 Carlos G�mez Rodr�guez, todos los derechos reservados / all rights reserved.
* Licencia en license/bsd.txt / License in license/bsd.txt
*/
package eu.irreality.age;
import java.util.*;
import eu.irreality.age.debug.Debug;
public class Traits implements Cloneable
{
/*ATRIBUTOS*/
/*all deprecated!
private int fuerza;
private int constitucion;
private int inteligencia;
private int sabiduria;
private int destreza;
private int carisma;
private int poder;
*/
/*HABILIDADES [USAGE]*/
private Hashtable habilidades;
public String toString()
{
return "<Traits: " + habilidades.toString()+">";
}
public Object clone()
{
Traits t = null;
try
{
t = (Traits) super.clone();
}
catch ( CloneNotSupportedException cnse )
{
cnse.printStackTrace();
}
t.habilidades = (Hashtable) habilidades.clone();
return t;
}
/* OBSOLETE!! HASHTABLE USED!!
//armas
private float ataque;
private float defensa;
private float unamano;
private float dosmanos;
private float roma;
private float espada;
private float daga;
private float hacha;
private float arco;
//magia
private float fuego;
private float tierra;
private float aire;
private float agua;
private float brujeria;
private float caos;
private float naturaleza;
private float vida;
private float muerte;
private float poder_arcano;
//otras
//instrumentos
//idiomas
//(...)
private float seduccion;
private float percepcion;
private float regateo;
private float robo;
*/
//getStat(String) y getSkill(String) para obtener los datos.
/*
public void setStat ( String s , int val )
{
if ( s.equalsIgnoreCase("FUE") || s.equalsIgnoreCase("STR") )
fuerza=val;
else if ( s.equalsIgnoreCase("CON") )
constitucion=val;
else if ( s.equalsIgnoreCase("INT") )
inteligencia=val;
else if ( s.equalsIgnoreCase("SAB") || s.equalsIgnoreCase("WIS") )
sabiduria=val;
else if ( s.equalsIgnoreCase("DES") || s.equalsIgnoreCase("DEX") )
destreza=val;
else if ( s.equalsIgnoreCase("CHA") || s.equalsIgnoreCase("CAR") )
carisma=val;
else if ( s.equalsIgnoreCase("POD") || s.equalsIgnoreCase("POW") )
poder=val;
}
public int getStat ( String s )
{
if ( s.equalsIgnoreCase("FUE") || s.equalsIgnoreCase("STR") )
return fuerza;
else if ( s.equalsIgnoreCase("CON") )
return constitucion;
else if ( s.equalsIgnoreCase("INT") )
return inteligencia;
else if ( s.equalsIgnoreCase("SAB") || s.equalsIgnoreCase("WIS") )
return sabiduria;
else if ( s.equalsIgnoreCase("DES") || s.equalsIgnoreCase("DEX") )
return destreza;
else if ( s.equalsIgnoreCase("CHA") || s.equalsIgnoreCase("CAR") )
return carisma;
else if ( s.equalsIgnoreCase("POD") || s.equalsIgnoreCase("POW") )
return poder;
return 0;
}
*/
public long getStat ( String s )
{
if ( s.equalsIgnoreCase("FUE") || s.equalsIgnoreCase("STR") )
return getStat("fuerza");
else if ( s.equalsIgnoreCase("CON") )
return getStat("constitucion");
else if ( s.equalsIgnoreCase("INT") )
return getStat("inteligencia");
else if ( s.equalsIgnoreCase("SAB") || s.equalsIgnoreCase("WIS") )
return getStat("sabiduria");
else if ( s.equalsIgnoreCase("DES") || s.equalsIgnoreCase("DEX") )
return getStat("destreza");
else if ( s.equalsIgnoreCase("CHA") || s.equalsIgnoreCase("CAR") )
return getStat("carisma");
else if ( s.equalsIgnoreCase("POD") || s.equalsIgnoreCase("POW") )
return getStat("poder");;
return getSkill(s);
}
public void setStat ( String s , long l )
{
if ( s.equalsIgnoreCase("FUE") || s.equalsIgnoreCase("STR") )
setStat("fuerza",l);
else if ( s.equalsIgnoreCase("CON") )
setStat("constitucion",l);
else if ( s.equalsIgnoreCase("INT") )
setStat("inteligencia",l);
else if ( s.equalsIgnoreCase("SAB") || s.equalsIgnoreCase("WIS") )
setStat("sabiduria",l);
else if ( s.equalsIgnoreCase("DES") || s.equalsIgnoreCase("DEX") )
setStat("destreza",l);
else if ( s.equalsIgnoreCase("CHA") || s.equalsIgnoreCase("CAR") )
setStat("carisma",l);
else if ( s.equalsIgnoreCase("POD") || s.equalsIgnoreCase("POW") )
setStat("poder",l);
setSkill ( s , l );
}
public long getSkill ( String s )
{
try
{
Long l = (Long) habilidades.get(s);
if ( l != null )
return l.longValue();
else
return 0;
}
catch ( ClassCastException cce )
{
//lo que hay no es un Long
return 0;
}
}
public void setSkill ( String name , long value )
{
habilidades.put ( name , new Long(value) );
}
public void incSkill ( String name )
{
setSkill ( name , getSkill(name) + 1 );
}
public Traits ( )
{
/*
fuerza=12;
inteligencia=12;
destreza=12;
constitucion=12;
sabiduria=12;
poder=12;
*/
habilidades = new Hashtable();
setStat ( "fuerza" , 12 );
setStat ( "inteligencia" , 12 );
setStat ( "sabiduria" , 12 );
setStat ( "destreza" , 12 );
setStat ( "velocidad" , 12 );
setStat ( "carisma" , 12 );
}
public Traits ( int skillHashtableInitSize )
{
/*
fuerza=12;
inteligencia=12;
destreza=12;
constitucion=12;
sabiduria=12;
poder=12;
*/
habilidades = new Hashtable ( skillHashtableInitSize );
setStat ( "fuerza" , 12 );
setStat ( "inteligencia" , 12 );
setStat ( "sabiduria" , 12 );
setStat ( "destreza" , 12 );
setStat ( "velocidad" , 12 );
setStat ( "carisma" , 12 );
}
public org.w3c.dom.Node getXMLRepresentation ( org.w3c.dom.Document doc )
{
org.w3c.dom.Element traitsElt = doc.createElement("Traits");
//only skill representation at the moment
if ( habilidades != null )
{
org.w3c.dom.Element skillsElt = doc.createElement ( "SkillList" );
Enumeration nombres = habilidades.keys();
while ( nombres.hasMoreElements() )
{
String nombre = (String)nombres.nextElement();
long valor = ((Long)habilidades.get(nombre)).longValue();
org.w3c.dom.Element skillElt = doc.createElement ( "Skill" );
skillElt.setAttribute("name" , nombre);
skillElt.setAttribute("value" , String.valueOf(valor));
skillsElt.appendChild(skillElt);
}
traitsElt.appendChild(skillsElt);
}
return traitsElt;
}
public Traits ( World mundo , org.w3c.dom.Node traitsNode ) throws XMLtoWorldException
{
if ( !(traitsNode instanceof org.w3c.dom.Element) )
throw ( new XMLtoWorldException ( "Traits node not Element" ) );
org.w3c.dom.Element e = (org.w3c.dom.Element) traitsNode;
//{e is an Element, the <Traits> node}
//read skills
org.w3c.dom.NodeList skillsElts = e.getElementsByTagName ( "SkillList" );
if ( skillsElts.getLength() > 0 )
{
Debug.println("Processing TRAITS NODE");
org.w3c.dom.NodeList skillElts = ((org.w3c.dom.Element)skillsElts.item(0)).getElementsByTagName("Skill");
habilidades = new Hashtable ( (int)(skillElts.getLength() / 0.75) + 1 , (float)0.75 );
for ( int i = 0 ; i < skillElts.getLength() ; i++ )
{
org.w3c.dom.Element skillElt = (org.w3c.dom.Element) skillElts.item(i);
if ( !skillElt.hasAttribute("name") )
throw ( new XMLtoWorldException ( "Skill element lacking name attribute") );
if ( !skillElt.hasAttribute("value") )
throw ( new XMLtoWorldException ( "Skill element lacking value attribute") );
long val;
try
{
val = Long.valueOf( skillElt.getAttribute("value") ).longValue();
}
catch ( NumberFormatException nfe )
{
throw ( new XMLtoWorldException ( "Bad number format for Skill element's value attribute" ) );
}
Debug.println("Hey! Skill " + skillElt.getAttribute("name") + " has value " + val + "!");
habilidades.put ( skillElt.getAttribute("name") , new Long ( val ) );
}
}
else //no skills
habilidades = new Hashtable();
}
}