package mightypork.gamecore.util.math.constraints.rect.caching;
import mightypork.gamecore.util.math.constraints.ConstraintCache;
import mightypork.gamecore.util.math.constraints.rect.Rect;
import mightypork.gamecore.util.math.constraints.rect.mutable.RectVar;
import mightypork.gamecore.util.math.constraints.rect.proxy.RectAdapter;
/**
*
* A rect cache.
*
*
* Values are held in a caching VectVar, and digest caching is enabled by
* default.
*
*
* @author Ondřej Hruška (MightyPork)
*/
public abstract class AbstractRectCache extends RectAdapter implements ConstraintCache {
private final RectVar cache = Rect.makeVar();
private boolean inited = false;
private boolean cachingEnabled = true;
public AbstractRectCache()
{
enableDigestCaching(true); // it changes only on poll
}
@Override
protected final Rect getSource()
{
if (!inited) poll();
return (cachingEnabled ? cache : getCacheSource());
}
@Override
public final void poll()
{
inited = true;
// poll source
final Rect source = getCacheSource();
source.markDigestDirty(); // poll cached
// store source value
cache.setTo(source);
markDigestDirty();
onConstraintChanged();
}
@Override
public final void enableCaching(boolean yes)
{
cachingEnabled = yes;
enableDigestCaching(yes);
}
@Override
public final boolean isCachingEnabled()
{
return cachingEnabled;
}
}