package net.sourceforge.pain.data.prototype; import net.sourceforge.pain.data.type.*; import net.sourceforge.pain.db.*; import net.sourceforge.pain.util.*; public final class CreaturePrototype extends Prototype { public static final int HIT_POINTS_DICE = LAST_BASE_FIELD_INDEX + 1; public static final int RACE = LAST_BASE_FIELD_INDEX + 2; public static final int SEX = LAST_BASE_FIELD_INDEX + 3; public static final int INVENTORY_PROTO = LAST_BASE_FIELD_INDEX + 4; public static final int NFIELDS = LAST_BASE_FIELD_INDEX + 5; public final static Class[] superroles = new Class[]{PhysicalPrototype.class}; public static final int SEX_UNDEFINED = 0; public static final int SEX_MALE = 1; public static final int SEX_FEMALE = 2; public static final int SEX_EITHER = 3; public static final String[] SEX_NAMES = new String[]{"UNDEFINED", "MALE", "FEMALE", "EITHER"}; public CreaturePrototype(PainDB db) { super(db); } public CreaturePrototype() { } public Class[] getSuperroles() { return superroles; } public DbClassSchema provideSchema() { byte types[] = new byte[NFIELDS]; String names[] = new String[NFIELDS]; fillSuperSchema(types, names); types[HIT_POINTS_DICE] = DbType.ARRAY_OF_INT; names[HIT_POINTS_DICE] = "hp_dice"; types[RACE] = DbType.REFERENCE; names[RACE] = "race"; types[SEX] = DbType.INT; names[SEX] = "sex"; types[INVENTORY_PROTO] = DbType.REFERENCE; names[INVENTORY_PROTO] = "inventory"; return new DbClassSchema(types, names); } public Dice getHPDice() { return new Dice(getIntArray(HIT_POINTS_DICE)); } public void setHPDice(Dice dice) { setIntArray(HIT_POINTS_DICE, dice.data()); } public Class getPrototypedRoleClass() { return Creature.class; } public Race getRace() { return (Race) getReference(RACE); } public void setRace(Race race) { setReference(RACE, race); } public int getSex() { return getInt(SEX); } public void setSex(int sex) { if (sex < SEX_UNDEFINED || sex > SEX_EITHER) { throw new IllegalArgumentException("Invalid field valud:" + sex); } setInt(SEX, sex); } public String toString() { int[] dice = getIntArray(HIT_POINTS_DICE); Race race = getRace(); int sex = getSex(); SpacePrototype sp = getInventoryPrototype(); return "hp_dice=" + (dice == null ? "null" : Dice.format(dice)) + " race=" + (race == null ? "null" : race.getName()) + " sex=" + SEX_NAMES[sex] + "inv name=" + (sp == null ? null : sp.getSpaceName()) + " desc=" + (sp == null ? null : sp.getSpaceDesc()); } public SpacePrototype getInventoryPrototype() { return (SpacePrototype) getReference(INVENTORY_PROTO); } public void setInventoryPrototype(SpacePrototype p) { setReference(INVENTORY_PROTO, p); } public void delete() { getInventoryPrototype().delete(); super.delete(); } }