package net.sourceforge.pain.data.type;
import net.sourceforge.pain.data.*;
import net.sourceforge.pain.db.*;
public final class Receptive extends Role {
	public static final int HEAR = 1 + LAST_BASE_FIELD_INDEX;
	public static final int SEE = 2 + LAST_BASE_FIELD_INDEX;
	public static final int FEEL = 3 + LAST_BASE_FIELD_INDEX; //touches...
	public static final int NFIELDS = 4 + LAST_BASE_FIELD_INDEX;
	public final static Class superroles[] = new Class[]{Located.class};
	public Receptive(PainDB db) {
		super(db);
		setCanHear(true);
		setCanSee(true);
		setCanFeel(true);
	}
	public Receptive() {
	}
	public DbClassSchema provideSchema() {
		byte types[] = new byte[NFIELDS];
		String names[] = new String[NFIELDS];
		fillSuperSchema(types, names);
		types[HEAR] = DbType.BOOLEAN;
		names[HEAR] = "can_hear";
		types[SEE] = DbType.BOOLEAN;
		names[SEE] = "can_see";
		types[FEEL] = DbType.BOOLEAN;
		names[FEEL] = "can_feel";
		return new DbClassSchema(types, names);
	}
	public Class[] getSuperroles() {
		return superroles;
	}
	public Located asLocated() {
		return (Located) getRole(Located.class);
	}
	public boolean canHear() {
		return getBoolean(HEAR);
	}
	public void setCanHear(boolean canHear) {
		setBoolean(HEAR, canHear);
	}
	public boolean canSee() {
		return getBoolean(SEE);
	}
	public void setCanSee(boolean canSee) {
		setBoolean(SEE, canSee);
	}
	public boolean canFeel() {
		return getBoolean(FEEL);
	}
	public void setCanFeel(boolean canFeel) {
		setBoolean(FEEL, canFeel);
	}
	public boolean has(int receptionType) {
		switch (receptionType) {
			case FEEL:
				return canFeel();
			case SEE:
				return canSee();
			case HEAR:
				return canHear();
			default:
				throw new RuntimeException("Unknown reception receptionType!:" + receptionType);
		}
	}
}