/** * Returns all the mental states for a creature. * * @param env Java environment * @param self class calling this function * @param mob id of creature to access * * @return the mental states for the creature */ jobjectArray JNICALL ScriptMethodsMentalStatesNamespace::getMentalStates(JNIEnv *env, jobject self, jlong mob) { UNREF(self); CreatureObject * creature = 0; if (!JavaLibrary::getObject(mob, creature)) return 0; // create the array of mental states LocalObjectArrayRefPtr attribs = createNewObjectArray( MentalStates::NumberOfMentalStates, JavaLibrary::getClsMentalState()); if (env->ExceptionCheck()) { env->ExceptionDescribe(); return 0; } // set the array elements for (int i = 0; i < MentalStates::NumberOfMentalStates; ++i) { LocalRefPtr mentalState = createNewObject(JavaLibrary::getClsMentalState(), JavaLibrary::getMidMentalState(), i, creature->getMentalState(static_cast<MentalStates::Enumerator>(i))); if (env->ExceptionCheck()) { env->ExceptionDescribe(); return 0; } setObjectArrayElement(*attribs, i, *mentalState); } return attribs->getReturnValue(); } // JavaLibrary::getMentalStates
/** * Returns a creature's mental state. * * @param env Java environment * @param self class calling this function * @param mob id of creature to access * @param mental state mental state we are interested in * * @return the mental state value, or MENTAL_STATE_ERROR on error */ jfloat JNICALL ScriptMethodsMentalStatesNamespace::getMentalState(JNIEnv *env, jobject self, jlong mob, jint mentalState) { UNREF(self); if (mentalState < 0 || mentalState >= MentalStates::NumberOfMentalStates) return MENTAL_STATE_ERROR; CreatureObject * creature = 0; if (!JavaLibrary::getObject(mob, creature)) return MENTAL_STATE_ERROR; return creature->getMentalState(static_cast<MentalStates::Enumerator>(mentalState)); } // JavaLibrary::getMentalState
/** * Adds a value to a creature's mental state. * * @param env Java environment * @param self class calling this function * @param mob id of creature to access * @param mentalState mental state we are interested in * @param value value to add to the mental state * * @return true on success, false on fail */ jboolean JNICALL ScriptMethodsMentalStatesNamespace::addToMentalState(JNIEnv *env, jobject self, jlong mob, jint mentalState, jfloat value) { UNREF(self); if (mentalState < 0 || mentalState >= MentalStates::NumberOfMentalStates) return JNI_FALSE; CreatureObject * creature = 0; if (!JavaLibrary::getObject(mob, creature)) return JNI_FALSE; creature->setMentalState(static_cast<MentalStates::Enumerator>(mentalState), static_cast<MentalStates::Value>((creature->getMentalState( static_cast<MentalStates::Enumerator>(mentalState)) + value))); return JNI_TRUE; } // JavaLibrary::addToMentalState
/** * Adds values to the mental states for a creature. * * @param env Java environment * @param self class calling this function * @param mob id of creature to access * @param values mental state/value pairs to add * * @return true on success, false on fail */ jboolean JNICALL ScriptMethodsMentalStatesNamespace::addToMentalStates(JNIEnv *env, jobject self, jlong mob, jobjectArray values) { UNREF(self); CreatureObject * creature = 0; if (!JavaLibrary::getObject(mob, creature)) return JNI_FALSE; int count = env->GetArrayLength(values); for (int i = 0; i < count; ++i) { LocalRefPtr mentalState = getObjectArrayElement(LocalObjectArrayRefParam(values), i); if (mentalState == LocalRef::cms_nullPtr) return JNI_FALSE; int type = getIntField(*mentalState, JavaLibrary::getFidMentalStateType()); if (type < 0 || type >= MentalStates::NumberOfMentalStates) return JNI_FALSE; MentalStates::Value value = creature->getMentalState(static_cast<MentalStates::Enumerator>(type)); value += getFloatField(*mentalState, JavaLibrary::getFidMentalStateValue()); creature->setMentalState(static_cast<MentalStates::Enumerator>(type), static_cast<MentalStates::Value>(value)); } return JNI_TRUE; } // JavaLibrary::addToMentalStates