package com.github.czyzby.autumn.context.impl.method;
import com.badlogic.gdx.utils.reflect.Method;
import com.github.czyzby.kiwi.util.common.Comparables;
/** Additionally to storing a delayed method invocation, this object contains a priority that allows to sort
* invocations. Implements {@link Comparable} interface for additional utility.
*
* @author MJ */
public class PrioritizedMethodInvocation extends MethodInvocation implements Comparable<PrioritizedMethodInvocation> {
private final int priority;
/** @param method will be eventually invoked.
* @param methodOwner an instance of the object that contains the method.
* @param parameters will be used to invoke the method.
* @param priority of the method invocation. */
public PrioritizedMethodInvocation(final Method method, final Object methodOwner, final Object[] parameters,
final int priority) {
super(method, methodOwner, parameters);
this.priority = priority;
}
/** @return priority of this method invocation. */
public int getPriority() {
return priority;
}
@Override
public int compareTo(final PrioritizedMethodInvocation invocation) {
// Methods with higher priority are executed first.
return Comparables.normalizeResult(invocation.priority - priority);
}
}