/
codebase/src/net/sourceforge/pain/admin/console/command/
codebase/src/net/sourceforge/pain/data/role/
codebase/src/net/sourceforge/pain/network/console/telnet/
codebase/src/net/sourceforge/pain/network/guitool/
codebase/src/net/sourceforge/pain/plugin/
codebase/src/net/sourceforge/pain/util/
db/src/net/sourceforge/pain/util/
gui/
gui/lib/
gui/src/net/sourceforge/pain/tools/guitool/dbbrowse/
gui/src/net/sourceforge/pain/tools/guitool/dialog/
gui/src/net/sourceforge/pain/tools/guitool/menu/
gui/src/net/sourceforge/pain/tools/guitool/resources/
gui/src/net/sourceforge/pain/tools/guitool/resources/images/
gui/src/net/sourceforge/pain/tools/guitool/resources/images/explorer/
mudlibs/tinylib/
mudlibs/tinylib/area/
mudlibs/tinylib/etc/
mudlibs/tinylib/src/net/sourceforge/pain/tinylib/
mudlibs/tinylib/src/net/sourceforge/pain/tinylib/data/affect/
mudlibs/tinylib/src/net/sourceforge/pain/tinylib/data/prototype/
mudlibs/tinylib/src/net/sourceforge/pain/tinylib/data/trigger/
mudlibs/tinylib/src/net/sourceforge/pain/tinylib/logic/affect/
mudlibs/tinylib/src/net/sourceforge/pain/tinylib/logic/event/
mudlibs/tinylib/src/net/sourceforge/pain/tinylib/logic/event/deploy/
mudlibs/tinylib/src/net/sourceforge/pain/tinylib/logic/event/guitool/
mudlibs/tinylib/src/net/sourceforge/pain/tinylib/logic/event/guitool/event/
mudlibs/tinylib/src/net/sourceforge/pain/tinylib/logic/fn/util/
mudlibs/tinylib/src/net/sourceforge/pain/tinylib/logic/trigger/
mudlibs/tinylib/src/net/sourceforge/pain/tinylib/logic/trigger/impl/
mudlibs/tinylib/src/net/sourceforge/pain/tinylib/plugin/command/
mudlibs/tinylib/src/net/sourceforge/pain/tinylib/plugin/reset/
mudlibs/tinylib/src/net/sourceforge/pain/tinylib/plugin/shutdown/
mudlibs/tinylib/src/net/sourceforge/pain/tinylib/plugin/social/
mudlibs/tinylib/src/net/sourceforge/pain/tinylib/util/
tests/
tests/src/
tests/src/net/sourceforge/pain/db/data/
package net.sourceforge.pain.tinylib.data.type;

import net.sourceforge.pain.data.*;
import net.sourceforge.pain.db.*;


public final class Creature extends Role {

    private static final int MAX_HP = 1 + LAST_BASE_FIELD_INDEX;
    private static final int HP = 2 + LAST_BASE_FIELD_INDEX;
    private static final int RACE = 3 + LAST_BASE_FIELD_INDEX;
    private static final int SEX = 4 + LAST_BASE_FIELD_INDEX;
    private static final int INVENTORY = 5 + LAST_BASE_FIELD_INDEX;;
    private static final int MAX_MOVES = 6 + LAST_BASE_FIELD_INDEX;
    private static final int MOVES = 7 + LAST_BASE_FIELD_INDEX;
    private static final int NFIELDS = 8 + LAST_BASE_FIELD_INDEX;


    /**
     * only 3 values allowed for sex. If you wnat to have more mystical ones you should name it by different name
     * in different role.
     */
    public static final int SEX_UNDEFINED = 0;
    public static final int SEX_MALE = 1;
    public static final int SEX_FEMALE = 2;


    public final static Class superroles[] = new Class[]{Physical.class, Receptive.class};

    public Creature(PainDB db) {
        super(db);
    }

    public Creature() {
    }

    public Class[] getSuperroles() {
        return superroles;
    }


    public DbClassSchema provideSchema() {
        byte types[] = new byte[NFIELDS];
        String names[] = new String[NFIELDS];

        fillSuperSchema(types, names);

        types[MAX_HP] = DbType.INT;
        names[MAX_HP] = "max_hp";

        types[HP] = DbType.INT;
        names[HP] = "hp";

        types[RACE] = DbType.REFERENCE;
        names[RACE] = "race";

        types[SEX] = DbType.INT;
        names[SEX] = "sex";

        types[INVENTORY] = DbType.REFERENCE;
        names[INVENTORY] = "inventory";

        types[MAX_MOVES] = DbType.INT;
        names[MAX_MOVES] = "max_moves";

        types[MOVES] = DbType.INT;
        names[MOVES] = "moves";

        return new DbClassSchema(types, names);
    }

    public void setHitPoints(int value) {
        setInt(HP, value);
    }

    public void setMaxHitPoints(int value) {
        setInt(MAX_HP, value);
    }

    public int getHitPoints() {
        return getInt(HP);
    }

    public int getMaxLifePoints() {
        return getInt(MAX_HP);
    }

    public Interactive asInteractive() {
        return (Interactive) getRole(Interactive.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) {
        setInt(SEX, sex);
    }

    public boolean isMale() {
        return getSex() == SEX_MALE;
    }

    public boolean isFemale() {
        return getSex() == SEX_FEMALE;
    }


    public Space getInventory() {
        return (Space) getReference(INVENTORY);
    }

    public void setInventory(Space inventory) {
        setReference(INVENTORY, inventory);
    }

    public void setMoves(int value) {
        setInt(MOVES, value);
    }

    public void setMaxMoves(int value) {
        setInt(MAX_MOVES, value);
    }

    public int getMoves() {
        return getInt(MOVES);
    }

    public int getMaxMoves() {
        return getInt(MAX_MOVES);
    }


    public final void delete() {
        getInventory().delete();
        super.delete();
    }

    public Located asLocated() {
        return (Located) getRole(Located.class);
    }

    public Receptive asReceptive() {
        return (Receptive) getRole(Receptive.class);
    }
}