use of com.bladecoder.engine.actions.ActionProperty in project bladecoder-adventure-engine by bladecoder.
the class ActionUtils method getFieldNames.
public static String[] getFieldNames(Action a) {
List<String> result = new ArrayList<>();
Class<?> clazz = a.getClass();
while (clazz != null && clazz != Object.class) {
for (Field field : clazz.getDeclaredFields()) {
final ActionProperty property = field.getAnnotation(ActionProperty.class);
if (property == null) {
continue;
}
final String name = field.getName();
result.add(name);
}
clazz = clazz.getSuperclass();
}
return result.toArray(new String[result.size()]);
}
use of com.bladecoder.engine.actions.ActionProperty in project bladecoder-adventure-engine by bladecoder.
the class ActionUtils method writeJson.
public static void writeJson(Action a, Json json) {
Class<?> clazz = a.getClass();
json.writeObjectStart(clazz, null);
while (clazz != null && clazz != Object.class) {
for (Field field : clazz.getDeclaredFields()) {
final ActionProperty property = field.getAnnotation(ActionProperty.class);
if (property == null) {
continue;
}
// json.writeField(a, field.getName());
final boolean accessible = field.isAccessible();
field.setAccessible(true);
try {
Object o = field.get(a);
// doesn't write null fields
if (o == null)
continue;
if (o instanceof SceneActorRef) {
SceneActorRef sceneActor = (SceneActorRef) o;
json.writeValue(field.getName(), sceneActor.toString());
} else if (o instanceof ActorAnimationRef) {
ActorAnimationRef aa = (ActorAnimationRef) o;
json.writeValue(field.getName(), aa.toString());
} else if (o instanceof Color) {
json.writeValue(field.getName(), ((Color) o).toString());
} else if (o instanceof Vector2) {
json.writeValue(field.getName(), Param.toStringParam((Vector2) o));
} else {
json.writeValue(field.getName(), o);
}
} catch (IllegalArgumentException | IllegalAccessException e) {
}
field.setAccessible(accessible);
}
clazz = clazz.getSuperclass();
}
json.writeObjectEnd();
}
use of com.bladecoder.engine.actions.ActionProperty in project bladecoder-adventure-engine by bladecoder.
the class ActionUtils method getParams.
public static Param[] getParams(Action action) {
List<Param> params = new ArrayList<>();
Class<?> clazz = action.getClass();
while (clazz != null && clazz != Object.class) {
for (Field field : clazz.getDeclaredFields()) {
final ActionProperty property = field.getAnnotation(ActionProperty.class);
if (property == null) {
continue;
}
final ActionPropertyDescription propertyDescription = field.getAnnotation(ActionPropertyDescription.class);
// saved in the model.
if (propertyDescription == null)
continue;
final String name = field.getName();
Param.Type type = property.type();
Enum<?>[] options = null;
if (field.getType().isEnum()) {
final boolean accessible = field.isAccessible();
field.setAccessible(true);
options = (Enum[]) field.getType().getEnumConstants();
field.setAccessible(accessible);
type = Param.Type.OPTION;
} else if (property.type() == Param.Type.NOT_SET) {
type = getType(field);
}
params.add(new Param(name, propertyDescription != null ? propertyDescription.value() : "", type, property.required(), property.defaultValue(), options));
}
clazz = clazz.getSuperclass();
}
return params.toArray(new Param[params.size()]);
}
Aggregations