diff --git a/src/mightypork/gamecore/audio/SoundSystem.java b/src/mightypork/gamecore/audio/SoundSystem.java index a30fb05..b27cae5 100644 --- a/src/mightypork/gamecore/audio/SoundSystem.java +++ b/src/mightypork/gamecore/audio/SoundSystem.java @@ -13,7 +13,7 @@ import mightypork.gamecore.control.bus.events.ResourceLoadRequest; import mightypork.gamecore.control.timing.Updateable; import mightypork.utils.math.Calc.Buffers; import mightypork.utils.math.constraints.vect.Vect; -import mightypork.utils.math.constraints.vect.VectVar; +import mightypork.utils.math.constraints.vect.mutable.VectVar; import org.lwjgl.openal.AL; import org.lwjgl.openal.AL10; diff --git a/src/mightypork/gamecore/audio/players/LoopPlayer.java b/src/mightypork/gamecore/audio/players/LoopPlayer.java index 4a53564..2e8c6f9 100644 --- a/src/mightypork/gamecore/audio/players/LoopPlayer.java +++ b/src/mightypork/gamecore/audio/players/LoopPlayer.java @@ -5,7 +5,7 @@ import mightypork.gamecore.audio.DeferredAudio; import mightypork.gamecore.audio.Volume; import mightypork.gamecore.control.timing.Pauseable; import mightypork.gamecore.control.timing.Updateable; -import mightypork.utils.math.constraints.num.NumAnimated; +import mightypork.utils.math.constraints.num.mutable.NumAnimated; import org.lwjgl.openal.AL10; diff --git a/src/mightypork/gamecore/control/BaseApp.java b/src/mightypork/gamecore/control/BaseApp.java index 848cf2f..06282c0 100644 --- a/src/mightypork/gamecore/control/BaseApp.java +++ b/src/mightypork/gamecore/control/BaseApp.java @@ -11,7 +11,6 @@ import mightypork.gamecore.audio.SoundSystem; import mightypork.gamecore.control.bus.EventBus; import mightypork.gamecore.control.bus.events.*; import mightypork.gamecore.control.interf.Destroyable; -import mightypork.gamecore.control.timing.Pollable; import mightypork.gamecore.control.timing.Updateable; import mightypork.gamecore.gui.screens.ScreenRegistry; import mightypork.gamecore.input.InputSystem; @@ -21,6 +20,7 @@ import mightypork.utils.annotations.DefaultImpl; import mightypork.utils.files.InstanceLock; import mightypork.utils.logging.Log; import mightypork.utils.logging.LogWriter; +import mightypork.utils.math.constraints.Pollable; /** diff --git a/src/mightypork/gamecore/control/bus/events/LayoutChangeEvent.java b/src/mightypork/gamecore/control/bus/events/LayoutChangeEvent.java index 1c10781..1e47398 100644 --- a/src/mightypork/gamecore/control/bus/events/LayoutChangeEvent.java +++ b/src/mightypork/gamecore/control/bus/events/LayoutChangeEvent.java @@ -2,7 +2,7 @@ package mightypork.gamecore.control.bus.events; import mightypork.gamecore.control.bus.events.types.ImmediateEvent; -import mightypork.gamecore.control.timing.Pollable; +import mightypork.utils.math.constraints.Pollable; /** diff --git a/src/mightypork/gamecore/control/bus/events/MouseButtonEvent.java b/src/mightypork/gamecore/control/bus/events/MouseButtonEvent.java index e3f2a2b..3018cbe 100644 --- a/src/mightypork/gamecore/control/bus/events/MouseButtonEvent.java +++ b/src/mightypork/gamecore/control/bus/events/MouseButtonEvent.java @@ -1,7 +1,7 @@ package mightypork.gamecore.control.bus.events; -import mightypork.utils.math.constraints.rect.RectBound; +import mightypork.utils.math.constraints.rect.proxy.RectBound; import mightypork.utils.math.constraints.vect.Vect; diff --git a/src/mightypork/gamecore/gui/components/BusEnabledPainter.java b/src/mightypork/gamecore/gui/components/BusEnabledPainter.java index 1747a4c..2caf546 100644 --- a/src/mightypork/gamecore/gui/components/BusEnabledPainter.java +++ b/src/mightypork/gamecore/gui/components/BusEnabledPainter.java @@ -10,13 +10,10 @@ import mightypork.gamecore.control.bus.EventBus; import mightypork.gamecore.control.bus.clients.ClientHub; import mightypork.gamecore.input.InputSystem; import mightypork.gamecore.render.DisplaySystem; -import mightypork.utils.math.constraints.rect.Rect; -import mightypork.utils.math.constraints.rect.RectBound; public abstract class BusEnabledPainter extends SimplePainter implements ClientHub, Component, AppAccess { - private RectBound context; private boolean enabled; private boolean visible = true; @@ -27,21 +24,6 @@ public abstract class BusEnabledPainter extends SimplePainter implements ClientH this.subModule = new AppSubModule(app); } - - @Override - public void setRect(RectBound context) - { - this.context = context; - } - - - @Override - public Rect getRect() - { - return context.getRect(); - } - - @Override public EventBus getEventBus() { diff --git a/src/mightypork/gamecore/gui/components/Component.java b/src/mightypork/gamecore/gui/components/Component.java index 1870881..ea6fd6c 100644 --- a/src/mightypork/gamecore/gui/components/Component.java +++ b/src/mightypork/gamecore/gui/components/Component.java @@ -5,7 +5,7 @@ import mightypork.gamecore.control.bus.clients.ToggleableClient; import mightypork.gamecore.control.interf.Enableable; import mightypork.gamecore.gui.Hideable; import mightypork.utils.math.constraints.rect.Rect; -import mightypork.utils.math.constraints.rect.RectBound; +import mightypork.utils.math.constraints.rect.proxy.RectBound; /** diff --git a/src/mightypork/gamecore/gui/components/PluggableRenderable.java b/src/mightypork/gamecore/gui/components/PluggableRenderable.java index bfcabc3..231159f 100644 --- a/src/mightypork/gamecore/gui/components/PluggableRenderable.java +++ b/src/mightypork/gamecore/gui/components/PluggableRenderable.java @@ -1,9 +1,9 @@ package mightypork.gamecore.gui.components; -import mightypork.utils.math.constraints.rect.PluggableRectBound; import mightypork.utils.math.constraints.rect.Rect; -import mightypork.utils.math.constraints.rect.RectBound; +import mightypork.utils.math.constraints.rect.proxy.PluggableRectBound; +import mightypork.utils.math.constraints.rect.proxy.RectBound; /** diff --git a/src/mightypork/gamecore/gui/components/SimplePainter.java b/src/mightypork/gamecore/gui/components/SimplePainter.java index b6451f7..a2cbf10 100644 --- a/src/mightypork/gamecore/gui/components/SimplePainter.java +++ b/src/mightypork/gamecore/gui/components/SimplePainter.java @@ -2,11 +2,11 @@ package mightypork.gamecore.gui.components; import mightypork.utils.annotations.DefaultImpl; -import mightypork.utils.math.constraints.rect.Rect; -import mightypork.utils.math.constraints.rect.RectAdapter; -import mightypork.utils.math.constraints.rect.RectBound; -import mightypork.utils.math.constraints.rect.RectBoundAdapter; -import mightypork.utils.math.constraints.rect.RectCache; +import mightypork.utils.math.constraints.rect.*; +import mightypork.utils.math.constraints.rect.caching.AbstractRectCache; +import mightypork.utils.math.constraints.rect.caching.RectCache; +import mightypork.utils.math.constraints.rect.proxy.RectBound; +import mightypork.utils.math.constraints.rect.proxy.RectBoundAdapter; /** @@ -14,7 +14,7 @@ import mightypork.utils.math.constraints.rect.RectCache; * * @author MightyPork */ -public abstract class SimplePainter extends RectAdapter implements PluggableRenderable { +public abstract class SimplePainter extends AbstractRectCache implements PluggableRenderable { private RectCache source; @@ -29,41 +29,27 @@ public abstract class SimplePainter extends RectAdapter implements PluggableRend @Override public void setRect(RectBound rect) { - System.out.println("SP set rect"); this.source = new RectBoundAdapter(rect).cached(); } @Override - protected Rect getSource() + public Rect getCacheSource() { return source; } - /** - * Poll bounds - */ - @Override - public final void poll() - { - System.out.println("SP poll, source: "+source); - source.poll(); - super.poll(); - - onPoll(); - } - - @Override public abstract void render(); /** - * Called after painter was polled; contained constraints can now poll too. + * Called after constraint was changed; contained constraints can now poll too. */ + @Override @DefaultImpl - public void onPoll() + public void onChange() { } } diff --git a/src/mightypork/gamecore/gui/components/layout/AbstractLayout.java b/src/mightypork/gamecore/gui/components/layout/AbstractLayout.java index 40dced3..ea577e9 100644 --- a/src/mightypork/gamecore/gui/components/layout/AbstractLayout.java +++ b/src/mightypork/gamecore/gui/components/layout/AbstractLayout.java @@ -9,7 +9,7 @@ import mightypork.gamecore.gui.components.BusEnabledPainter; import mightypork.gamecore.gui.components.PluggableRenderable; import mightypork.gamecore.gui.components.Renderable; import mightypork.gamecore.gui.components.SimplePainter; -import mightypork.utils.math.constraints.rect.RectBound; +import mightypork.utils.math.constraints.rect.proxy.RectBound; /** diff --git a/src/mightypork/gamecore/gui/components/layout/ColumnHolder.java b/src/mightypork/gamecore/gui/components/layout/ColumnHolder.java index e3f55c5..bd70907 100644 --- a/src/mightypork/gamecore/gui/components/layout/ColumnHolder.java +++ b/src/mightypork/gamecore/gui/components/layout/ColumnHolder.java @@ -3,8 +3,8 @@ package mightypork.gamecore.gui.components.layout; import mightypork.gamecore.control.AppAccess; import mightypork.gamecore.gui.components.PluggableRenderable; -import mightypork.utils.math.constraints.rect.RectBound; -import mightypork.utils.math.constraints.rect.TiledRect; +import mightypork.utils.math.constraints.rect.builders.TiledRect; +import mightypork.utils.math.constraints.rect.proxy.RectBound; /** diff --git a/src/mightypork/gamecore/gui/components/layout/RowHolder.java b/src/mightypork/gamecore/gui/components/layout/RowHolder.java index 91fa7cb..f2b7f9b 100644 --- a/src/mightypork/gamecore/gui/components/layout/RowHolder.java +++ b/src/mightypork/gamecore/gui/components/layout/RowHolder.java @@ -3,8 +3,8 @@ package mightypork.gamecore.gui.components.layout; import mightypork.gamecore.control.AppAccess; import mightypork.gamecore.gui.components.PluggableRenderable; -import mightypork.utils.math.constraints.rect.RectBound; -import mightypork.utils.math.constraints.rect.TiledRect; +import mightypork.utils.math.constraints.rect.builders.TiledRect; +import mightypork.utils.math.constraints.rect.proxy.RectBound; /** diff --git a/src/mightypork/gamecore/gui/screens/Screen.java b/src/mightypork/gamecore/gui/screens/Screen.java index 9f87948..0cb2ad9 100644 --- a/src/mightypork/gamecore/gui/screens/Screen.java +++ b/src/mightypork/gamecore/gui/screens/Screen.java @@ -12,7 +12,7 @@ import mightypork.gamecore.input.KeyStroke; import mightypork.gamecore.render.Render; import mightypork.utils.annotations.DefaultImpl; import mightypork.utils.math.constraints.rect.Rect; -import mightypork.utils.math.constraints.rect.RectBound; +import mightypork.utils.math.constraints.rect.proxy.RectBound; import mightypork.utils.math.constraints.vect.Vect; diff --git a/src/mightypork/gamecore/gui/screens/ScreenLayer.java b/src/mightypork/gamecore/gui/screens/ScreenLayer.java index 73d11b7..98f58ee 100644 --- a/src/mightypork/gamecore/gui/screens/ScreenLayer.java +++ b/src/mightypork/gamecore/gui/screens/ScreenLayer.java @@ -9,7 +9,7 @@ import mightypork.gamecore.input.KeyBindingPool; import mightypork.gamecore.input.KeyStroke; import mightypork.utils.annotations.DefaultImpl; import mightypork.utils.math.constraints.rect.Rect; -import mightypork.utils.math.constraints.rect.RectBound; +import mightypork.utils.math.constraints.rect.proxy.RectBound; import mightypork.utils.math.constraints.vect.Vect; diff --git a/src/mightypork/gamecore/input/InputSystem.java b/src/mightypork/gamecore/input/InputSystem.java index ab9b020..7cc3a36 100644 --- a/src/mightypork/gamecore/input/InputSystem.java +++ b/src/mightypork/gamecore/input/InputSystem.java @@ -10,7 +10,7 @@ import mightypork.gamecore.control.timing.Updateable; import mightypork.rogue.events.ActionRequest; import mightypork.rogue.events.ActionRequest.RequestType; import mightypork.utils.math.constraints.vect.Vect; -import mightypork.utils.math.constraints.vect.VectVar; +import mightypork.utils.math.constraints.vect.mutable.VectVar; import org.lwjgl.LWJGLException; import org.lwjgl.input.Keyboard; diff --git a/src/mightypork/gamecore/render/DisplaySystem.java b/src/mightypork/gamecore/render/DisplaySystem.java index 449cd28..dfc6339 100644 --- a/src/mightypork/gamecore/render/DisplaySystem.java +++ b/src/mightypork/gamecore/render/DisplaySystem.java @@ -11,7 +11,7 @@ import mightypork.gamecore.control.bus.events.ScreenChangeEvent; import mightypork.gamecore.control.timing.FpsMeter; import mightypork.utils.logging.Log; import mightypork.utils.math.constraints.rect.Rect; -import mightypork.utils.math.constraints.rect.RectBound; +import mightypork.utils.math.constraints.rect.proxy.RectBound; import mightypork.utils.math.constraints.vect.Vect; import org.lwjgl.BufferUtils; diff --git a/src/mightypork/gamecore/render/Render.java b/src/mightypork/gamecore/render/Render.java index 1a7e066..249ebf8 100644 --- a/src/mightypork/gamecore/render/Render.java +++ b/src/mightypork/gamecore/render/Render.java @@ -10,7 +10,7 @@ import mightypork.utils.files.FileUtils; import mightypork.utils.logging.Log; import mightypork.utils.math.color.RGB; import mightypork.utils.math.constraints.rect.Rect; -import mightypork.utils.math.constraints.rect.RectDigest; +import mightypork.utils.math.constraints.rect.caching.RectDigest; import mightypork.utils.math.constraints.vect.Vect; import mightypork.utils.math.constraints.vect.VectConst; diff --git a/src/mightypork/rogue/screens/LayerFps.java b/src/mightypork/rogue/screens/LayerFps.java index 0a0fb26..e0f1c8c 100644 --- a/src/mightypork/rogue/screens/LayerFps.java +++ b/src/mightypork/rogue/screens/LayerFps.java @@ -11,7 +11,7 @@ import mightypork.gamecore.render.fonts.FontRenderer.Align; import mightypork.gamecore.render.fonts.GLFont; import mightypork.rogue.Res; import mightypork.utils.math.color.RGB; -import mightypork.utils.math.constraints.rect.RectBound; +import mightypork.utils.math.constraints.rect.proxy.RectBound; import mightypork.utils.math.constraints.vect.Vect; import mightypork.utils.string.StringProvider; diff --git a/src/mightypork/rogue/screens/test_bouncyboxes/BouncyBox.java b/src/mightypork/rogue/screens/test_bouncyboxes/BouncyBox.java index c76cd1b..4732ac7 100644 --- a/src/mightypork/rogue/screens/test_bouncyboxes/BouncyBox.java +++ b/src/mightypork/rogue/screens/test_bouncyboxes/BouncyBox.java @@ -9,9 +9,9 @@ import mightypork.gamecore.render.Render; import mightypork.utils.math.Easing; import mightypork.utils.math.color.RGB; import mightypork.utils.math.constraints.num.Num; -import mightypork.utils.math.constraints.num.NumAnimated; +import mightypork.utils.math.constraints.num.mutable.NumAnimated; import mightypork.utils.math.constraints.rect.Rect; -import mightypork.utils.math.constraints.rect.RectCache; +import mightypork.utils.math.constraints.rect.caching.RectCache; public class BouncyBox extends SimplePainter implements Updateable { @@ -64,7 +64,7 @@ public class BouncyBox extends SimplePainter implements Updateable { @Override - public void onPoll() + public void onChange() { box.poll(); } diff --git a/src/mightypork/rogue/screens/test_cat_sound/LayerFlyingCat.java b/src/mightypork/rogue/screens/test_cat_sound/LayerFlyingCat.java index 239e787..981ce9c 100644 --- a/src/mightypork/rogue/screens/test_cat_sound/LayerFlyingCat.java +++ b/src/mightypork/rogue/screens/test_cat_sound/LayerFlyingCat.java @@ -17,10 +17,10 @@ import mightypork.rogue.Res; import mightypork.utils.math.Easing; import mightypork.utils.math.color.RGB; import mightypork.utils.math.constraints.num.Num; -import mightypork.utils.math.constraints.num.NumAnimated; +import mightypork.utils.math.constraints.num.mutable.NumAnimated; import mightypork.utils.math.constraints.rect.Rect; import mightypork.utils.math.constraints.vect.Vect; -import mightypork.utils.math.constraints.vect.VectAnimated; +import mightypork.utils.math.constraints.vect.mutable.VectAnimated; public class LayerFlyingCat extends ScreenLayer implements Updateable, MouseButtonEvent.Listener { diff --git a/src/mightypork/rogue/screens/test_render/LayerTestGradient.java b/src/mightypork/rogue/screens/test_render/LayerTestGradient.java index b7a774d..9900edd 100644 --- a/src/mightypork/rogue/screens/test_render/LayerTestGradient.java +++ b/src/mightypork/rogue/screens/test_render/LayerTestGradient.java @@ -5,7 +5,7 @@ import mightypork.gamecore.gui.screens.Screen; import mightypork.gamecore.gui.screens.ScreenLayer; import mightypork.gamecore.render.Render; import mightypork.utils.math.color.RGB; -import mightypork.utils.math.constraints.rect.RectBound; +import mightypork.utils.math.constraints.rect.proxy.RectBound; public class LayerTestGradient extends ScreenLayer { diff --git a/src/mightypork/test/TestConstCaching.java b/src/mightypork/test/TestConstCaching.java index f6c524e..0980b19 100644 --- a/src/mightypork/test/TestConstCaching.java +++ b/src/mightypork/test/TestConstCaching.java @@ -2,8 +2,8 @@ package mightypork.test; import mightypork.utils.math.constraints.vect.Vect; -import mightypork.utils.math.constraints.vect.VectCache; -import mightypork.utils.math.constraints.vect.VectVar; +import mightypork.utils.math.constraints.vect.caching.VectCache; +import mightypork.utils.math.constraints.vect.mutable.VectVar; public class TestConstCaching { @@ -23,7 +23,7 @@ public class TestConstCaching { System.out.println("cache = " + cache); System.out.println("cache digest = " + cache.digest()); System.out.println("\n-- cache.poll() --\n"); - cache.poll(); + cache.markDigestDirty(); System.out.println("in = " + in); System.out.println("cache = " + cache); System.out.println("cache digest = " + cache.digest()); @@ -33,7 +33,7 @@ public class TestConstCaching { System.out.println("cache = " + cache); System.out.println("cache digest = " + cache.digest()); System.out.println("\n-- cache.poll() --\n"); - cache.poll(); + cache.markDigestDirty(); System.out.println("cache = " + cache); System.out.println("cache digest = " + cache.digest()); diff --git a/src/mightypork/test/TestConstr.java b/src/mightypork/test/TestConstr.java index 0fedbd4..9c2ea9a 100644 --- a/src/mightypork/test/TestConstr.java +++ b/src/mightypork/test/TestConstr.java @@ -4,12 +4,12 @@ package mightypork.test; import java.util.Locale; import mightypork.utils.math.constraints.num.Num; -import mightypork.utils.math.constraints.num.NumVar; +import mightypork.utils.math.constraints.num.mutable.NumVar; import mightypork.utils.math.constraints.rect.Rect; import mightypork.utils.math.constraints.rect.RectConst; import mightypork.utils.math.constraints.vect.Vect; import mightypork.utils.math.constraints.vect.VectConst; -import mightypork.utils.math.constraints.vect.VectVar; +import mightypork.utils.math.constraints.vect.mutable.VectVar; public class TestConstr { diff --git a/src/mightypork/test/TestCoords.java b/src/mightypork/test/TestCoords.java index 6e163c1..9fbd137 100644 --- a/src/mightypork/test/TestCoords.java +++ b/src/mightypork/test/TestCoords.java @@ -2,9 +2,9 @@ package mightypork.test; import mightypork.utils.math.constraints.num.Num; -import mightypork.utils.math.constraints.num.NumVar; +import mightypork.utils.math.constraints.num.mutable.NumVar; import mightypork.utils.math.constraints.vect.Vect; -import mightypork.utils.math.constraints.vect.VectVar; +import mightypork.utils.math.constraints.vect.mutable.VectVar; public class TestCoords { diff --git a/src/mightypork/test/TestTiled.java b/src/mightypork/test/TestTiled.java index af32db4..c3e219c 100644 --- a/src/mightypork/test/TestTiled.java +++ b/src/mightypork/test/TestTiled.java @@ -2,7 +2,7 @@ package mightypork.test; import mightypork.utils.math.constraints.num.Num; -import mightypork.utils.math.constraints.num.NumVar; +import mightypork.utils.math.constraints.num.mutable.NumVar; import mightypork.utils.math.constraints.rect.Rect; diff --git a/src/mightypork/test/TestVec.java b/src/mightypork/test/TestVec.java index 436092b..830bdc2 100644 --- a/src/mightypork/test/TestVec.java +++ b/src/mightypork/test/TestVec.java @@ -3,7 +3,7 @@ package mightypork.test; import mightypork.utils.math.constraints.vect.Vect; import mightypork.utils.math.constraints.vect.VectConst; -import mightypork.utils.math.constraints.vect.VectVar; +import mightypork.utils.math.constraints.vect.mutable.VectVar; public class TestVec { diff --git a/src/mightypork/utils/math/constraints/ConstraintCache.java b/src/mightypork/utils/math/constraints/ConstraintCache.java new file mode 100644 index 0000000..6021fad --- /dev/null +++ b/src/mightypork/utils/math/constraints/ConstraintCache.java @@ -0,0 +1,46 @@ +package mightypork.utils.math.constraints; + + + + +/** + * Constraint cache + * + * @author MightyPork + * @param constraint type + */ +public interface ConstraintCache extends Pollable { + + /** + * Called after the cache has changed value (and digest). + */ + void onChange(); + + + /** + * @return the cached value + */ + C getCacheSource(); + + + /** + * Enable caching & digest caching + * + * @param yes enable caching + */ + void enableCaching(boolean yes); + + + /** + * @return true if caching is on + */ + boolean isCachingEnabled(); + + + /** + * Update cached value and cached digest (if digest caching is enabled).
+ * source constraint is polled beforehand. + */ + @Override + void poll(); +} diff --git a/src/mightypork/utils/math/constraints/DigestCache.java b/src/mightypork/utils/math/constraints/DigestCache.java new file mode 100644 index 0000000..4b1fe5b --- /dev/null +++ b/src/mightypork/utils/math/constraints/DigestCache.java @@ -0,0 +1,60 @@ +package mightypork.utils.math.constraints; + + +/** + * Parametrized implementation of a {@link Digestable} + * + * @author MightyPork + * @param digest class + */ +public abstract class DigestCache implements Digestable { + + private D digest; + private boolean enabled; + private boolean dirty; + + + @Override + public final D digest() + { + if (enabled) { + if (dirty || digest == null) { + digest = createDigest(); + dirty = false; + } + + return digest; + } + + return createDigest(); + } + + + /** + * @return fresh new digest + */ + protected abstract D createDigest(); + + + @Override + public final void enableDigestCaching(boolean yes) + { + enabled = yes; + markDigestDirty(); // mark dirty + } + + + @Override + public final boolean isDigestCachingEnabled() + { + return enabled; + } + + + @Override + public final void markDigestDirty() + { + dirty = true; + } + +} diff --git a/src/mightypork/utils/math/constraints/Digestable.java b/src/mightypork/utils/math/constraints/Digestable.java index 302af1a..9be9e95 100644 --- a/src/mightypork/utils/math/constraints/Digestable.java +++ b/src/mightypork/utils/math/constraints/Digestable.java @@ -1,14 +1,11 @@ package mightypork.utils.math.constraints; -import mightypork.gamecore.control.timing.Pollable; - - /** *

* Interface for constraints that support digests. Digest is a small data object - * with final fields, typically primitive, used for procesing (such as rendering - * or other very frequent operations). + * with final fields, typically primitive, used for processing (such as + * rendering or other very frequent operations). *

*

* Taking a digest is expensive, so if it needs to be done often and the value @@ -16,15 +13,19 @@ import mightypork.gamecore.control.timing.Pollable; * resize), it's useful to cache the last digest and reuse it until such an * event occurs again. *

+ *

+ * Implementing class typically needs a field to store the last digest, a flag + * that digest caching is enabled, and a flag that a digest is dirty. + *

* * @author MightyPork * @param digest class */ -public interface Digestable extends Pollable { +public interface Digestable { /** - * Take a digest. If digest caching is enabled and a digest is already - * cached, it should be reused instead of making a new one. + * Take a digest. If digest caching is enabled and the cached digest is + * marked as dirty, a new one should be made. * * @return digest */ @@ -51,11 +52,10 @@ public interface Digestable extends Pollable { /** - * If digest caching is enabled, query for a new digest and store it in a - * cache variable. This method shall only be called when the constraint is - * expected to have changed. + * If digest caching is enabled, mark current cached value as "dirty". Dirty + * digest should be re-created next time a value is requested.
+ * */ - @Override - void poll(); + void markDigestDirty(); } diff --git a/src/mightypork/gamecore/control/timing/Pollable.java b/src/mightypork/utils/math/constraints/Pollable.java similarity index 77% rename from src/mightypork/gamecore/control/timing/Pollable.java rename to src/mightypork/utils/math/constraints/Pollable.java index 286b410..5fe1fec 100644 --- a/src/mightypork/gamecore/control/timing/Pollable.java +++ b/src/mightypork/utils/math/constraints/Pollable.java @@ -1,4 +1,4 @@ -package mightypork.gamecore.control.timing; +package mightypork.utils.math.constraints; /** diff --git a/src/mightypork/gamecore/control/timing/Poller.java b/src/mightypork/utils/math/constraints/Poller.java similarity index 92% rename from src/mightypork/gamecore/control/timing/Poller.java rename to src/mightypork/utils/math/constraints/Poller.java index 3e849ec..e158935 100644 --- a/src/mightypork/gamecore/control/timing/Poller.java +++ b/src/mightypork/utils/math/constraints/Poller.java @@ -1,4 +1,4 @@ -package mightypork.gamecore.control.timing; +package mightypork.utils.math.constraints; import java.util.LinkedHashSet; diff --git a/src/mightypork/utils/math/constraints/num/Num.java b/src/mightypork/utils/math/constraints/num/Num.java index b068227..2f3a677 100644 --- a/src/mightypork/utils/math/constraints/num/Num.java +++ b/src/mightypork/utils/math/constraints/num/Num.java @@ -3,7 +3,13 @@ package mightypork.utils.math.constraints.num; import mightypork.utils.annotations.FactoryMethod; import mightypork.utils.math.Calc; +import mightypork.utils.math.constraints.DigestCache; import mightypork.utils.math.constraints.Digestable; +import mightypork.utils.math.constraints.num.caching.NumCache; +import mightypork.utils.math.constraints.num.caching.NumDigest; +import mightypork.utils.math.constraints.num.mutable.NumVar; +import mightypork.utils.math.constraints.num.proxy.NumBound; +import mightypork.utils.math.constraints.num.proxy.NumBoundAdapter; public abstract class Num implements NumBound, Digestable { @@ -62,9 +68,15 @@ public abstract class Num implements NumBound, Digestable { private Num p_square; private Num p_neg; private Num p_abs; - private NumDigest lastDigest = null; - private boolean digestCachingEnabled = false; - private boolean digestDirty = true; + + private DigestCache dc = new DigestCache() { + + @Override + protected NumDigest createDigest() + { + return new NumDigest(Num.this); + } + }; public NumConst freeze() @@ -94,38 +106,28 @@ public abstract class Num implements NumBound, Digestable { @Override public NumDigest digest() { - if (digestCachingEnabled) { - if (digestDirty) { - lastDigest = new NumDigest(this); - digestDirty = false; - } - - return lastDigest; - } - - return new NumDigest(this); + return dc.digest(); } @Override public void enableDigestCaching(boolean yes) { - digestCachingEnabled = yes; - digestDirty = true; // schedule update nest time digest() is called + dc.enableDigestCaching(yes); } @Override public boolean isDigestCachingEnabled() { - return digestCachingEnabled; + return dc.isDigestCachingEnabled(); } @Override - public void poll() + public void markDigestDirty() { - if (digestCachingEnabled) digestDirty = true; + dc.markDigestDirty(); } diff --git a/src/mightypork/utils/math/constraints/num/NumCache.java b/src/mightypork/utils/math/constraints/num/NumCache.java deleted file mode 100644 index 578612b..0000000 --- a/src/mightypork/utils/math/constraints/num/NumCache.java +++ /dev/null @@ -1,49 +0,0 @@ -package mightypork.utils.math.constraints.num; - - -/** - *

- * A num cache. - *

- *

- * Values are held in a caching VectVar, and digest caching is enabled by - * default. - *

- * - * @author MightyPork - */ -public class NumCache extends NumAdapter { - - private final NumVar cache = Num.makeVar(); - private final Num source; - private boolean inited = false; - - - public NumCache(Num source) { - this.source = source; - enableDigestCaching(true); - } - - - @Override - protected Num getSource() - { - if (!inited) poll(); - - return cache; - } - - - /** - * Update cached value and cached digest (if digest caching is enabled) - */ - @Override - public void poll() - { - inited = true; - cache.setTo(source); - - super.poll(); - } - -} diff --git a/src/mightypork/utils/math/constraints/num/NumConst.java b/src/mightypork/utils/math/constraints/num/NumConst.java index 4a2d940..83a717d 100644 --- a/src/mightypork/utils/math/constraints/num/NumConst.java +++ b/src/mightypork/utils/math/constraints/num/NumConst.java @@ -1,5 +1,7 @@ package mightypork.utils.math.constraints.num; +import mightypork.utils.math.constraints.num.caching.NumDigest; + /** * Constant number.
diff --git a/src/mightypork/utils/math/constraints/num/caching/AbstractNumCache.java b/src/mightypork/utils/math/constraints/num/caching/AbstractNumCache.java new file mode 100644 index 0000000..c26c661 --- /dev/null +++ b/src/mightypork/utils/math/constraints/num/caching/AbstractNumCache.java @@ -0,0 +1,82 @@ +package mightypork.utils.math.constraints.num.caching; + +import mightypork.utils.math.constraints.ConstraintCache; +import mightypork.utils.math.constraints.num.Num; +import mightypork.utils.math.constraints.num.mutable.NumVar; +import mightypork.utils.math.constraints.num.proxy.NumAdapter; + + +/** + *

+ * A Num cache. + *

+ *

+ * Values are held in a caching VectVar, and digest caching is enabled by + * default. + *

+ * + * @author MightyPork + */ +public abstract class AbstractNumCache extends NumAdapter implements ConstraintCache { + + private final NumVar cache = Num.makeVar(); + private boolean inited = false; + private boolean cachingEnabled = true; + + + public AbstractNumCache() { + enableDigestCaching(true); // it changes only on poll + } + + + @Override + protected final Num getSource() + { + if (!inited) markDigestDirty(); + + return (cachingEnabled ? cache : getCacheSource()); + } + + + @Override + public final void poll() + { + inited = true; + + // poll source + final Num source = getCacheSource(); + source.markDigestDirty(); // poll cached + + // store source value + cache.setTo(source); + + // mark my digest dirty + markDigestDirty(); + + onChange(); + } + + + @Override + public abstract void onChange(); + + + @Override + public abstract Num getCacheSource(); + + + @Override + public final void enableCaching(boolean yes) + { + cachingEnabled = yes; + enableDigestCaching(yes); + } + + + @Override + public final boolean isCachingEnabled() + { + return cachingEnabled; + } + +} diff --git a/src/mightypork/utils/math/constraints/num/caching/NumCache.java b/src/mightypork/utils/math/constraints/num/caching/NumCache.java new file mode 100644 index 0000000..024d2d2 --- /dev/null +++ b/src/mightypork/utils/math/constraints/num/caching/NumCache.java @@ -0,0 +1,35 @@ +package mightypork.utils.math.constraints.num.caching; + +import mightypork.utils.annotations.DefaultImpl; +import mightypork.utils.math.constraints.num.Num; + + +/** + * Num cache implementation + * + * @author MightyPork + */ +public class NumCache extends AbstractNumCache { + + private final Num source; + + + public NumCache(Num source) { + this.source = source; + } + + + @Override + public final Num getCacheSource() + { + return source; + } + + + @Override + @DefaultImpl + public void onChange() + { + } + +} diff --git a/src/mightypork/utils/math/constraints/num/NumDigest.java b/src/mightypork/utils/math/constraints/num/caching/NumDigest.java similarity index 66% rename from src/mightypork/utils/math/constraints/num/NumDigest.java rename to src/mightypork/utils/math/constraints/num/caching/NumDigest.java index 15d84e6..277d9b7 100644 --- a/src/mightypork/utils/math/constraints/num/NumDigest.java +++ b/src/mightypork/utils/math/constraints/num/caching/NumDigest.java @@ -1,4 +1,6 @@ -package mightypork.utils.math.constraints.num; +package mightypork.utils.math.constraints.num.caching; + +import mightypork.utils.math.constraints.num.Num; public class NumDigest { diff --git a/src/mightypork/utils/math/constraints/num/NumAnimated.java b/src/mightypork/utils/math/constraints/num/mutable/NumAnimated.java similarity index 99% rename from src/mightypork/utils/math/constraints/num/NumAnimated.java rename to src/mightypork/utils/math/constraints/num/mutable/NumAnimated.java index d3626c3..0f44479 100644 --- a/src/mightypork/utils/math/constraints/num/NumAnimated.java +++ b/src/mightypork/utils/math/constraints/num/mutable/NumAnimated.java @@ -1,4 +1,4 @@ -package mightypork.utils.math.constraints.num; +package mightypork.utils.math.constraints.num.mutable; import mightypork.gamecore.control.timing.Pauseable; diff --git a/src/mightypork/utils/math/constraints/num/NumAnimatedDeg.java b/src/mightypork/utils/math/constraints/num/mutable/NumAnimatedDeg.java similarity index 94% rename from src/mightypork/utils/math/constraints/num/NumAnimatedDeg.java rename to src/mightypork/utils/math/constraints/num/mutable/NumAnimatedDeg.java index f3278f0..7090e53 100644 --- a/src/mightypork/utils/math/constraints/num/NumAnimatedDeg.java +++ b/src/mightypork/utils/math/constraints/num/mutable/NumAnimatedDeg.java @@ -1,4 +1,4 @@ -package mightypork.utils.math.constraints.num; +package mightypork.utils.math.constraints.num.mutable; import mightypork.utils.math.Calc; diff --git a/src/mightypork/utils/math/constraints/num/NumAnimatedRad.java b/src/mightypork/utils/math/constraints/num/mutable/NumAnimatedRad.java similarity index 94% rename from src/mightypork/utils/math/constraints/num/NumAnimatedRad.java rename to src/mightypork/utils/math/constraints/num/mutable/NumAnimatedRad.java index 414ad46..91d5283 100644 --- a/src/mightypork/utils/math/constraints/num/NumAnimatedRad.java +++ b/src/mightypork/utils/math/constraints/num/mutable/NumAnimatedRad.java @@ -1,4 +1,4 @@ -package mightypork.utils.math.constraints.num; +package mightypork.utils.math.constraints.num.mutable; import mightypork.utils.math.Calc; diff --git a/src/mightypork/utils/math/constraints/num/NumMutable.java b/src/mightypork/utils/math/constraints/num/mutable/NumMutable.java similarity index 75% rename from src/mightypork/utils/math/constraints/num/NumMutable.java rename to src/mightypork/utils/math/constraints/num/mutable/NumMutable.java index 857945a..02bc7d8 100644 --- a/src/mightypork/utils/math/constraints/num/NumMutable.java +++ b/src/mightypork/utils/math/constraints/num/mutable/NumMutable.java @@ -1,4 +1,6 @@ -package mightypork.utils.math.constraints.num; +package mightypork.utils.math.constraints.num.mutable; + +import mightypork.utils.math.constraints.num.Num; /** @@ -23,7 +25,7 @@ public abstract class NumMutable extends Num { */ public void setTo(Num value) { - setTo(value); + setTo(value.value()); } diff --git a/src/mightypork/utils/math/constraints/num/NumVar.java b/src/mightypork/utils/math/constraints/num/mutable/NumVar.java similarity index 78% rename from src/mightypork/utils/math/constraints/num/NumVar.java rename to src/mightypork/utils/math/constraints/num/mutable/NumVar.java index 12a0b94..74a7b53 100644 --- a/src/mightypork/utils/math/constraints/num/NumVar.java +++ b/src/mightypork/utils/math/constraints/num/mutable/NumVar.java @@ -1,4 +1,6 @@ -package mightypork.utils.math.constraints.num; +package mightypork.utils.math.constraints.num.mutable; + +import mightypork.utils.math.constraints.num.Num; /** diff --git a/src/mightypork/utils/math/constraints/num/NumAdapter.java b/src/mightypork/utils/math/constraints/num/proxy/NumAdapter.java similarity index 61% rename from src/mightypork/utils/math/constraints/num/NumAdapter.java rename to src/mightypork/utils/math/constraints/num/proxy/NumAdapter.java index c941647..5e59b85 100644 --- a/src/mightypork/utils/math/constraints/num/NumAdapter.java +++ b/src/mightypork/utils/math/constraints/num/proxy/NumAdapter.java @@ -1,4 +1,6 @@ -package mightypork.utils.math.constraints.num; +package mightypork.utils.math.constraints.num.proxy; + +import mightypork.utils.math.constraints.num.Num; public abstract class NumAdapter extends Num { diff --git a/src/mightypork/utils/math/constraints/num/NumBound.java b/src/mightypork/utils/math/constraints/num/proxy/NumBound.java similarity index 57% rename from src/mightypork/utils/math/constraints/num/NumBound.java rename to src/mightypork/utils/math/constraints/num/proxy/NumBound.java index 911fd0b..2bb3ee8 100644 --- a/src/mightypork/utils/math/constraints/num/NumBound.java +++ b/src/mightypork/utils/math/constraints/num/proxy/NumBound.java @@ -1,4 +1,6 @@ -package mightypork.utils.math.constraints.num; +package mightypork.utils.math.constraints.num.proxy; + +import mightypork.utils.math.constraints.num.Num; /** diff --git a/src/mightypork/utils/math/constraints/num/NumBoundAdapter.java b/src/mightypork/utils/math/constraints/num/proxy/NumBoundAdapter.java similarity index 78% rename from src/mightypork/utils/math/constraints/num/NumBoundAdapter.java rename to src/mightypork/utils/math/constraints/num/proxy/NumBoundAdapter.java index e702c1b..4de56d8 100644 --- a/src/mightypork/utils/math/constraints/num/NumBoundAdapter.java +++ b/src/mightypork/utils/math/constraints/num/proxy/NumBoundAdapter.java @@ -1,4 +1,6 @@ -package mightypork.utils.math.constraints.num; +package mightypork.utils.math.constraints.num.proxy; + +import mightypork.utils.math.constraints.num.Num; public class NumBoundAdapter extends NumAdapter implements PluggableNumBound { diff --git a/src/mightypork/utils/math/constraints/num/NumProxy.java b/src/mightypork/utils/math/constraints/num/proxy/NumProxy.java similarity index 66% rename from src/mightypork/utils/math/constraints/num/NumProxy.java rename to src/mightypork/utils/math/constraints/num/proxy/NumProxy.java index 27d0d12..b1942bd 100644 --- a/src/mightypork/utils/math/constraints/num/NumProxy.java +++ b/src/mightypork/utils/math/constraints/num/proxy/NumProxy.java @@ -1,4 +1,6 @@ -package mightypork.utils.math.constraints.num; +package mightypork.utils.math.constraints.num.proxy; + +import mightypork.utils.math.constraints.num.Num; public class NumProxy extends NumAdapter { diff --git a/src/mightypork/utils/math/constraints/num/PluggableNumBound.java b/src/mightypork/utils/math/constraints/num/proxy/PluggableNumBound.java similarity index 79% rename from src/mightypork/utils/math/constraints/num/PluggableNumBound.java rename to src/mightypork/utils/math/constraints/num/proxy/PluggableNumBound.java index 597b861..46c7170 100644 --- a/src/mightypork/utils/math/constraints/num/PluggableNumBound.java +++ b/src/mightypork/utils/math/constraints/num/proxy/PluggableNumBound.java @@ -1,4 +1,4 @@ -package mightypork.utils.math.constraints.num; +package mightypork.utils.math.constraints.num.proxy; /** diff --git a/src/mightypork/utils/math/constraints/rect/Rect.java b/src/mightypork/utils/math/constraints/rect/Rect.java index e0610e8..f4ca2ed 100644 --- a/src/mightypork/utils/math/constraints/rect/Rect.java +++ b/src/mightypork/utils/math/constraints/rect/Rect.java @@ -2,9 +2,17 @@ package mightypork.utils.math.constraints.rect; import mightypork.utils.annotations.FactoryMethod; +import mightypork.utils.math.constraints.DigestCache; import mightypork.utils.math.constraints.Digestable; import mightypork.utils.math.constraints.num.Num; import mightypork.utils.math.constraints.num.NumConst; +import mightypork.utils.math.constraints.rect.builders.TiledRect; +import mightypork.utils.math.constraints.rect.caching.RectCache; +import mightypork.utils.math.constraints.rect.caching.RectDigest; +import mightypork.utils.math.constraints.rect.mutable.RectVar; +import mightypork.utils.math.constraints.rect.proxy.RectBound; +import mightypork.utils.math.constraints.rect.proxy.RectBoundAdapter; +import mightypork.utils.math.constraints.rect.proxy.RectVectAdapter; import mightypork.utils.math.constraints.vect.Vect; import mightypork.utils.math.constraints.vect.VectConst; @@ -159,9 +167,14 @@ public abstract class Rect implements RectBound, Digestable { private Rect p_edge_t; private Rect p_edge_b; - private RectDigest lastDigest = null; - private boolean digestCachingEnabled = false; - private boolean digestDirty = true; // digest is null + private DigestCache dc = new DigestCache() { + + @Override + protected RectDigest createDigest() + { + return new RectDigest(Rect.this); + } + }; /** @@ -191,38 +204,28 @@ public abstract class Rect implements RectBound, Digestable { @Override public RectDigest digest() { - if (digestCachingEnabled) { - if (digestDirty) { - lastDigest = new RectDigest(this); - digestDirty = false; - } - - return lastDigest; - } - - return new RectDigest(this); + return dc.digest(); } @Override public void enableDigestCaching(boolean yes) { - digestCachingEnabled = yes; - digestDirty = true; // schedule update nest time digest() is called + dc.enableDigestCaching(yes); } @Override public boolean isDigestCachingEnabled() { - return digestCachingEnabled; + return dc.isDigestCachingEnabled(); } @Override - public void poll() + public void markDigestDirty() { - if (digestCachingEnabled) digestDirty = true; + dc.markDigestDirty(); } diff --git a/src/mightypork/utils/math/constraints/rect/RectCache.java b/src/mightypork/utils/math/constraints/rect/RectCache.java deleted file mode 100644 index b25082b..0000000 --- a/src/mightypork/utils/math/constraints/rect/RectCache.java +++ /dev/null @@ -1,49 +0,0 @@ -package mightypork.utils.math.constraints.rect; - - -/** - *

- * A rect cache. - *

- *

- * Values are held in a caching VectVar, and digest caching is enabled by - * default. - *

- * - * @author MightyPork - */ -public class RectCache extends RectAdapter { - - private final RectVar cache = Rect.makeVar(); - private final Rect source; - private boolean inited = false; - - - public RectCache(Rect source) { - this.source = source; - enableDigestCaching(true); - } - - - @Override - protected Rect getSource() - { - if (!inited) poll(); - - return cache; - } - - - /** - * Update cached value and cached digest (if digest caching is enabled) - */ - @Override - public void poll() - { - inited = true; - cache.setTo(source); - - super.poll(); - } - -} diff --git a/src/mightypork/utils/math/constraints/rect/RectConst.java b/src/mightypork/utils/math/constraints/rect/RectConst.java index 0d55ec8..d154968 100644 --- a/src/mightypork/utils/math/constraints/rect/RectConst.java +++ b/src/mightypork/utils/math/constraints/rect/RectConst.java @@ -2,6 +2,7 @@ package mightypork.utils.math.constraints.rect; import mightypork.utils.math.constraints.num.NumConst; +import mightypork.utils.math.constraints.rect.caching.RectDigest; import mightypork.utils.math.constraints.vect.Vect; import mightypork.utils.math.constraints.vect.VectConst; diff --git a/src/mightypork/utils/math/constraints/rect/TiledRect.java b/src/mightypork/utils/math/constraints/rect/builders/TiledRect.java similarity index 92% rename from src/mightypork/utils/math/constraints/rect/TiledRect.java rename to src/mightypork/utils/math/constraints/rect/builders/TiledRect.java index 041d778..d43ded2 100644 --- a/src/mightypork/utils/math/constraints/rect/TiledRect.java +++ b/src/mightypork/utils/math/constraints/rect/builders/TiledRect.java @@ -1,7 +1,9 @@ -package mightypork.utils.math.constraints.rect; +package mightypork.utils.math.constraints.rect.builders; import mightypork.utils.math.constraints.num.Num; +import mightypork.utils.math.constraints.rect.Rect; +import mightypork.utils.math.constraints.rect.proxy.RectProxy; /** @@ -21,7 +23,7 @@ public class TiledRect extends RectProxy { private int based = 1; - TiledRect(Rect source, int horizontal, int vertical) { + public TiledRect(Rect source, int horizontal, int vertical) { super(source); this.tilesX = horizontal; this.tilesY = vertical; diff --git a/src/mightypork/utils/math/constraints/rect/caching/AbstractRectCache.java b/src/mightypork/utils/math/constraints/rect/caching/AbstractRectCache.java new file mode 100644 index 0000000..5664d64 --- /dev/null +++ b/src/mightypork/utils/math/constraints/rect/caching/AbstractRectCache.java @@ -0,0 +1,73 @@ +package mightypork.utils.math.constraints.rect.caching; + +import mightypork.utils.math.constraints.ConstraintCache; +import mightypork.utils.math.constraints.rect.Rect; +import mightypork.utils.math.constraints.rect.mutable.RectVar; +import mightypork.utils.math.constraints.rect.proxy.RectAdapter; + + +/** + *

+ * A rect cache. + *

+ *

+ * Values are held in a caching VectVar, and digest caching is enabled by + * default. + *

+ * + * @author 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) markDigestDirty(); + + 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(); + + onChange(); + } + + + @Override + public final void enableCaching(boolean yes) + { + cachingEnabled = yes; + enableDigestCaching(yes); + } + + + @Override + public final boolean isCachingEnabled() + { + return cachingEnabled; + } + +} diff --git a/src/mightypork/utils/math/constraints/rect/caching/RectCache.java b/src/mightypork/utils/math/constraints/rect/caching/RectCache.java new file mode 100644 index 0000000..ade9f08 --- /dev/null +++ b/src/mightypork/utils/math/constraints/rect/caching/RectCache.java @@ -0,0 +1,36 @@ +package mightypork.utils.math.constraints.rect.caching; + + +import mightypork.utils.annotations.DefaultImpl; +import mightypork.utils.math.constraints.rect.Rect; + + +/** + * Rect cache implementation + * + * @author MightyPork + */ +public class RectCache extends AbstractRectCache { + + private final Rect source; + + + public RectCache(Rect source) { + this.source = source; + } + + + @Override + public final Rect getCacheSource() + { + return source; + } + + + @Override + @DefaultImpl + public void onChange() + { + } + +} diff --git a/src/mightypork/utils/math/constraints/rect/RectDigest.java b/src/mightypork/utils/math/constraints/rect/caching/RectDigest.java similarity index 83% rename from src/mightypork/utils/math/constraints/rect/RectDigest.java rename to src/mightypork/utils/math/constraints/rect/caching/RectDigest.java index f3d4259..f5dce39 100644 --- a/src/mightypork/utils/math/constraints/rect/RectDigest.java +++ b/src/mightypork/utils/math/constraints/rect/caching/RectDigest.java @@ -1,4 +1,7 @@ -package mightypork.utils.math.constraints.rect; +package mightypork.utils.math.constraints.rect.caching; + +import mightypork.utils.math.constraints.rect.Rect; +import mightypork.utils.math.constraints.rect.RectConst; public class RectDigest { diff --git a/src/mightypork/utils/math/constraints/rect/RectMutable.java b/src/mightypork/utils/math/constraints/rect/mutable/RectMutable.java similarity index 92% rename from src/mightypork/utils/math/constraints/rect/RectMutable.java rename to src/mightypork/utils/math/constraints/rect/mutable/RectMutable.java index efacde6..3093dd3 100644 --- a/src/mightypork/utils/math/constraints/rect/RectMutable.java +++ b/src/mightypork/utils/math/constraints/rect/mutable/RectMutable.java @@ -1,6 +1,7 @@ -package mightypork.utils.math.constraints.rect; +package mightypork.utils.math.constraints.rect.mutable; +import mightypork.utils.math.constraints.rect.Rect; import mightypork.utils.math.constraints.vect.Vect; diff --git a/src/mightypork/utils/math/constraints/rect/RectVar.java b/src/mightypork/utils/math/constraints/rect/mutable/RectVar.java similarity index 85% rename from src/mightypork/utils/math/constraints/rect/RectVar.java rename to src/mightypork/utils/math/constraints/rect/mutable/RectVar.java index 78b5c8e..cefa488 100644 --- a/src/mightypork/utils/math/constraints/rect/RectVar.java +++ b/src/mightypork/utils/math/constraints/rect/mutable/RectVar.java @@ -1,8 +1,8 @@ -package mightypork.utils.math.constraints.rect; +package mightypork.utils.math.constraints.rect.mutable; import mightypork.utils.math.constraints.vect.Vect; -import mightypork.utils.math.constraints.vect.VectVar; +import mightypork.utils.math.constraints.vect.mutable.VectVar; public class RectVar extends RectMutable { diff --git a/src/mightypork/utils/math/constraints/rect/PluggableRectBound.java b/src/mightypork/utils/math/constraints/rect/proxy/PluggableRectBound.java similarity index 78% rename from src/mightypork/utils/math/constraints/rect/PluggableRectBound.java rename to src/mightypork/utils/math/constraints/rect/proxy/PluggableRectBound.java index d5cb0cd..c78fb35 100644 --- a/src/mightypork/utils/math/constraints/rect/PluggableRectBound.java +++ b/src/mightypork/utils/math/constraints/rect/proxy/PluggableRectBound.java @@ -1,4 +1,4 @@ -package mightypork.utils.math.constraints.rect; +package mightypork.utils.math.constraints.rect.proxy; /** diff --git a/src/mightypork/utils/math/constraints/rect/RectAdapter.java b/src/mightypork/utils/math/constraints/rect/proxy/RectAdapter.java similarity index 84% rename from src/mightypork/utils/math/constraints/rect/RectAdapter.java rename to src/mightypork/utils/math/constraints/rect/proxy/RectAdapter.java index 6f3e883..51fd4fe 100644 --- a/src/mightypork/utils/math/constraints/rect/RectAdapter.java +++ b/src/mightypork/utils/math/constraints/rect/proxy/RectAdapter.java @@ -1,8 +1,9 @@ -package mightypork.utils.math.constraints.rect; +package mightypork.utils.math.constraints.rect.proxy; +import mightypork.utils.math.constraints.rect.Rect; import mightypork.utils.math.constraints.vect.Vect; -import mightypork.utils.math.constraints.vect.VectAdapter; +import mightypork.utils.math.constraints.vect.proxy.VectAdapter; /** diff --git a/src/mightypork/utils/math/constraints/rect/RectBound.java b/src/mightypork/utils/math/constraints/rect/proxy/RectBound.java similarity index 58% rename from src/mightypork/utils/math/constraints/rect/RectBound.java rename to src/mightypork/utils/math/constraints/rect/proxy/RectBound.java index 99cd04b..6728555 100644 --- a/src/mightypork/utils/math/constraints/rect/RectBound.java +++ b/src/mightypork/utils/math/constraints/rect/proxy/RectBound.java @@ -1,4 +1,6 @@ -package mightypork.utils.math.constraints.rect; +package mightypork.utils.math.constraints.rect.proxy; + +import mightypork.utils.math.constraints.rect.Rect; /** diff --git a/src/mightypork/utils/math/constraints/rect/RectBoundAdapter.java b/src/mightypork/utils/math/constraints/rect/proxy/RectBoundAdapter.java similarity index 80% rename from src/mightypork/utils/math/constraints/rect/RectBoundAdapter.java rename to src/mightypork/utils/math/constraints/rect/proxy/RectBoundAdapter.java index 96f3247..cd6d92d 100644 --- a/src/mightypork/utils/math/constraints/rect/RectBoundAdapter.java +++ b/src/mightypork/utils/math/constraints/rect/proxy/RectBoundAdapter.java @@ -1,4 +1,6 @@ -package mightypork.utils.math.constraints.rect; +package mightypork.utils.math.constraints.rect.proxy; + +import mightypork.utils.math.constraints.rect.Rect; /** diff --git a/src/mightypork/utils/math/constraints/rect/RectProxy.java b/src/mightypork/utils/math/constraints/rect/proxy/RectProxy.java similarity index 66% rename from src/mightypork/utils/math/constraints/rect/RectProxy.java rename to src/mightypork/utils/math/constraints/rect/proxy/RectProxy.java index 591e549..6b9b75f 100644 --- a/src/mightypork/utils/math/constraints/rect/RectProxy.java +++ b/src/mightypork/utils/math/constraints/rect/proxy/RectProxy.java @@ -1,4 +1,6 @@ -package mightypork.utils.math.constraints.rect; +package mightypork.utils.math.constraints.rect.proxy; + +import mightypork.utils.math.constraints.rect.Rect; public class RectProxy extends RectAdapter { diff --git a/src/mightypork/utils/math/constraints/rect/RectVectAdapter.java b/src/mightypork/utils/math/constraints/rect/proxy/RectVectAdapter.java similarity index 72% rename from src/mightypork/utils/math/constraints/rect/RectVectAdapter.java rename to src/mightypork/utils/math/constraints/rect/proxy/RectVectAdapter.java index bb375f6..fd2c0f0 100644 --- a/src/mightypork/utils/math/constraints/rect/RectVectAdapter.java +++ b/src/mightypork/utils/math/constraints/rect/proxy/RectVectAdapter.java @@ -1,6 +1,7 @@ -package mightypork.utils.math.constraints.rect; +package mightypork.utils.math.constraints.rect.proxy; +import mightypork.utils.math.constraints.rect.Rect; import mightypork.utils.math.constraints.vect.Vect; @@ -9,7 +10,7 @@ import mightypork.utils.math.constraints.vect.Vect; * * @author MightyPork */ -class RectVectAdapter extends Rect { +public class RectVectAdapter extends Rect { private final Vect origin; private final Vect size; diff --git a/src/mightypork/utils/math/constraints/vect/Vect.java b/src/mightypork/utils/math/constraints/vect/Vect.java index 5e5dda8..9ec79ba 100644 --- a/src/mightypork/utils/math/constraints/vect/Vect.java +++ b/src/mightypork/utils/math/constraints/vect/Vect.java @@ -3,10 +3,17 @@ package mightypork.utils.math.constraints.vect; import mightypork.utils.annotations.DefaultImpl; import mightypork.utils.annotations.FactoryMethod; +import mightypork.utils.math.constraints.DigestCache; import mightypork.utils.math.constraints.Digestable; import mightypork.utils.math.constraints.num.Num; import mightypork.utils.math.constraints.num.NumConst; import mightypork.utils.math.constraints.rect.Rect; +import mightypork.utils.math.constraints.vect.caching.VectCache; +import mightypork.utils.math.constraints.vect.caching.VectDigest; +import mightypork.utils.math.constraints.vect.mutable.VectVar; +import mightypork.utils.math.constraints.vect.proxy.VectBound; +import mightypork.utils.math.constraints.vect.proxy.VectBoundAdapter; +import mightypork.utils.math.constraints.vect.proxy.VectNumAdapter; /** @@ -104,9 +111,15 @@ public abstract class Vect implements VectBound, Digestable { private Num p_xc; private Num p_yc; private Num p_zc; - private VectDigest lastDigest = null; - private boolean digestCachingEnabled = false; - private boolean digestDirty = true; // it's null + + private DigestCache dc = new DigestCache() { + + @Override + protected VectDigest createDigest() + { + return new VectDigest(Vect.this); + } + }; /** @@ -254,38 +267,28 @@ public abstract class Vect implements VectBound, Digestable { @Override public VectDigest digest() { - if (digestCachingEnabled) { - if (digestDirty) { - lastDigest = new VectDigest(this); - digestDirty = false; - } - - return lastDigest; - } - - return new VectDigest(this); + return dc.digest(); } @Override public void enableDigestCaching(boolean yes) { - digestCachingEnabled = yes; - digestDirty = true; // schedule update nest time digest() is called + dc.enableDigestCaching(yes); } @Override public boolean isDigestCachingEnabled() { - return digestCachingEnabled; + return dc.isDigestCachingEnabled(); } @Override - public void poll() + public void markDigestDirty() { - if (digestCachingEnabled) digestDirty = true; + dc.markDigestDirty(); } diff --git a/src/mightypork/utils/math/constraints/vect/VectCache.java b/src/mightypork/utils/math/constraints/vect/VectCache.java deleted file mode 100644 index a2795f8..0000000 --- a/src/mightypork/utils/math/constraints/vect/VectCache.java +++ /dev/null @@ -1,49 +0,0 @@ -package mightypork.utils.math.constraints.vect; - - -/** - *

- * A vect cache. - *

- *

- * Values are held in a caching VectVar, and digest caching is enabled by - * default. - *

- * - * @author MightyPork - */ -public class VectCache extends VectAdapter { - - private final VectVar cache = Vect.makeVar(); - private final Vect source; - private boolean inited = false; - - - public VectCache(Vect source) { - this.source = source; - enableDigestCaching(true); - } - - - @Override - protected Vect getSource() - { - if (!inited) poll(); - - return cache; - } - - - /** - * Update cached value and cached digest (if digest caching is enabled) - */ - @Override - public void poll() - { - inited = true; - cache.setTo(source); - - super.poll(); - } - -} diff --git a/src/mightypork/utils/math/constraints/vect/VectConst.java b/src/mightypork/utils/math/constraints/vect/VectConst.java index 6d616a6..2e21492 100644 --- a/src/mightypork/utils/math/constraints/vect/VectConst.java +++ b/src/mightypork/utils/math/constraints/vect/VectConst.java @@ -4,6 +4,7 @@ package mightypork.utils.math.constraints.vect; import mightypork.utils.math.constraints.num.Num; import mightypork.utils.math.constraints.num.NumConst; import mightypork.utils.math.constraints.rect.RectConst; +import mightypork.utils.math.constraints.vect.caching.VectDigest; /** diff --git a/src/mightypork/utils/math/constraints/vect/VectProxy.java b/src/mightypork/utils/math/constraints/vect/VectProxy.java index bc12bd9..f2cb6d7 100644 --- a/src/mightypork/utils/math/constraints/vect/VectProxy.java +++ b/src/mightypork/utils/math/constraints/vect/VectProxy.java @@ -1,5 +1,7 @@ package mightypork.utils.math.constraints.vect; +import mightypork.utils.math.constraints.vect.proxy.VectAdapter; + public class VectProxy extends VectAdapter { diff --git a/src/mightypork/utils/math/constraints/vect/caching/AbstractVectCache.java b/src/mightypork/utils/math/constraints/vect/caching/AbstractVectCache.java new file mode 100644 index 0000000..adf3848 --- /dev/null +++ b/src/mightypork/utils/math/constraints/vect/caching/AbstractVectCache.java @@ -0,0 +1,73 @@ +package mightypork.utils.math.constraints.vect.caching; + +import mightypork.utils.math.constraints.ConstraintCache; +import mightypork.utils.math.constraints.vect.Vect; +import mightypork.utils.math.constraints.vect.mutable.VectVar; +import mightypork.utils.math.constraints.vect.proxy.VectAdapter; + + +/** + *

+ * A vect cache. + *

+ *

+ * Values are held in a caching VectVar, and digest caching is enabled by + * default. + *

+ * + * @author MightyPork + */ +public abstract class AbstractVectCache extends VectAdapter implements ConstraintCache { + + private final VectVar cache = Vect.makeVar(); + private boolean inited = false; + private boolean cachingEnabled = true; + + + public AbstractVectCache() { + enableDigestCaching(true); // it changes only on poll + } + + + @Override + protected final Vect getSource() + { + if (!inited) markDigestDirty(); + + return (cachingEnabled ? cache : getCacheSource()); + } + + + @Override + public final void poll() + { + inited = true; + + // poll source + final Vect source = getCacheSource(); + source.markDigestDirty(); // poll cached + + // store source value + cache.setTo(source); + + markDigestDirty(); + + onChange(); + } + + + @Override + public final void enableCaching(boolean yes) + { + cachingEnabled = yes; + enableDigestCaching(yes); + } + + + @Override + public final boolean isCachingEnabled() + { + return cachingEnabled; + } + +} diff --git a/src/mightypork/utils/math/constraints/vect/caching/VectCache.java b/src/mightypork/utils/math/constraints/vect/caching/VectCache.java new file mode 100644 index 0000000..fe4a693 --- /dev/null +++ b/src/mightypork/utils/math/constraints/vect/caching/VectCache.java @@ -0,0 +1,36 @@ +package mightypork.utils.math.constraints.vect.caching; + + +import mightypork.utils.annotations.DefaultImpl; +import mightypork.utils.math.constraints.vect.Vect; + + +/** + * Vect cache implementation + * + * @author MightyPork + */ +public class VectCache extends AbstractVectCache { + + private final Vect source; + + + public VectCache(Vect source) { + this.source = source; + enableDigestCaching(true); + } + + + @Override + public Vect getCacheSource() + { + return source; + } + + + @Override + @DefaultImpl + public void onChange() + { + } +} diff --git a/src/mightypork/utils/math/constraints/vect/VectDigest.java b/src/mightypork/utils/math/constraints/vect/caching/VectDigest.java similarity index 74% rename from src/mightypork/utils/math/constraints/vect/VectDigest.java rename to src/mightypork/utils/math/constraints/vect/caching/VectDigest.java index 1e1b7a2..e0dfcf2 100644 --- a/src/mightypork/utils/math/constraints/vect/VectDigest.java +++ b/src/mightypork/utils/math/constraints/vect/caching/VectDigest.java @@ -1,4 +1,6 @@ -package mightypork.utils.math.constraints.vect; +package mightypork.utils.math.constraints.vect.caching; + +import mightypork.utils.math.constraints.vect.Vect; public class VectDigest { diff --git a/src/mightypork/utils/math/constraints/vect/VectAnimated.java b/src/mightypork/utils/math/constraints/vect/mutable/VectAnimated.java similarity index 96% rename from src/mightypork/utils/math/constraints/vect/VectAnimated.java rename to src/mightypork/utils/math/constraints/vect/mutable/VectAnimated.java index 1cc88eb..bbecd36 100644 --- a/src/mightypork/utils/math/constraints/vect/VectAnimated.java +++ b/src/mightypork/utils/math/constraints/vect/mutable/VectAnimated.java @@ -1,11 +1,12 @@ -package mightypork.utils.math.constraints.vect; +package mightypork.utils.math.constraints.vect.mutable; import mightypork.gamecore.control.timing.Pauseable; import mightypork.gamecore.control.timing.Updateable; import mightypork.utils.annotations.FactoryMethod; import mightypork.utils.math.Easing; -import mightypork.utils.math.constraints.num.NumAnimated; +import mightypork.utils.math.constraints.num.mutable.NumAnimated; +import mightypork.utils.math.constraints.vect.Vect; /** diff --git a/src/mightypork/utils/math/constraints/vect/VectMutable.java b/src/mightypork/utils/math/constraints/vect/mutable/VectMutable.java similarity index 90% rename from src/mightypork/utils/math/constraints/vect/VectMutable.java rename to src/mightypork/utils/math/constraints/vect/mutable/VectMutable.java index 6d89eac..ea200e7 100644 --- a/src/mightypork/utils/math/constraints/vect/VectMutable.java +++ b/src/mightypork/utils/math/constraints/vect/mutable/VectMutable.java @@ -1,4 +1,6 @@ -package mightypork.utils.math.constraints.vect; +package mightypork.utils.math.constraints.vect.mutable; + +import mightypork.utils.math.constraints.vect.Vect; /** diff --git a/src/mightypork/utils/math/constraints/vect/VectVar.java b/src/mightypork/utils/math/constraints/vect/mutable/VectVar.java similarity index 88% rename from src/mightypork/utils/math/constraints/vect/VectVar.java rename to src/mightypork/utils/math/constraints/vect/mutable/VectVar.java index b3f5d74..cd6a7a6 100644 --- a/src/mightypork/utils/math/constraints/vect/VectVar.java +++ b/src/mightypork/utils/math/constraints/vect/mutable/VectVar.java @@ -1,4 +1,4 @@ -package mightypork.utils.math.constraints.vect; +package mightypork.utils.math.constraints.vect.mutable; /** @@ -17,7 +17,7 @@ public class VectVar extends VectMutable { * @param y Y coordinate * @param z Z coordinate */ - VectVar(double x, double y, double z) { + public VectVar(double x, double y, double z) { super(); this.x = x; this.y = y; diff --git a/src/mightypork/utils/math/constraints/vect/PluggableVectBound.java b/src/mightypork/utils/math/constraints/vect/proxy/PluggableVectBound.java similarity index 79% rename from src/mightypork/utils/math/constraints/vect/PluggableVectBound.java rename to src/mightypork/utils/math/constraints/vect/proxy/PluggableVectBound.java index 90719f4..54f761c 100644 --- a/src/mightypork/utils/math/constraints/vect/PluggableVectBound.java +++ b/src/mightypork/utils/math/constraints/vect/proxy/PluggableVectBound.java @@ -1,4 +1,4 @@ -package mightypork.utils.math.constraints.vect; +package mightypork.utils.math.constraints.vect.proxy; /** diff --git a/src/mightypork/utils/math/constraints/vect/VectAdapter.java b/src/mightypork/utils/math/constraints/vect/proxy/VectAdapter.java similarity index 81% rename from src/mightypork/utils/math/constraints/vect/VectAdapter.java rename to src/mightypork/utils/math/constraints/vect/proxy/VectAdapter.java index 3d91450..e933ca3 100644 --- a/src/mightypork/utils/math/constraints/vect/VectAdapter.java +++ b/src/mightypork/utils/math/constraints/vect/proxy/VectAdapter.java @@ -1,4 +1,6 @@ -package mightypork.utils.math.constraints.vect; +package mightypork.utils.math.constraints.vect.proxy; + +import mightypork.utils.math.constraints.vect.Vect; /** diff --git a/src/mightypork/utils/math/constraints/vect/VectBound.java b/src/mightypork/utils/math/constraints/vect/proxy/VectBound.java similarity index 64% rename from src/mightypork/utils/math/constraints/vect/VectBound.java rename to src/mightypork/utils/math/constraints/vect/proxy/VectBound.java index 678c57f..976f340 100644 --- a/src/mightypork/utils/math/constraints/vect/VectBound.java +++ b/src/mightypork/utils/math/constraints/vect/proxy/VectBound.java @@ -1,4 +1,6 @@ -package mightypork.utils.math.constraints.vect; +package mightypork.utils.math.constraints.vect.proxy; + +import mightypork.utils.math.constraints.vect.Vect; /** diff --git a/src/mightypork/utils/math/constraints/vect/VectBoundAdapter.java b/src/mightypork/utils/math/constraints/vect/proxy/VectBoundAdapter.java similarity index 78% rename from src/mightypork/utils/math/constraints/vect/VectBoundAdapter.java rename to src/mightypork/utils/math/constraints/vect/proxy/VectBoundAdapter.java index abbc96e..d4ca7ad 100644 --- a/src/mightypork/utils/math/constraints/vect/VectBoundAdapter.java +++ b/src/mightypork/utils/math/constraints/vect/proxy/VectBoundAdapter.java @@ -1,4 +1,6 @@ -package mightypork.utils.math.constraints.vect; +package mightypork.utils.math.constraints.vect.proxy; + +import mightypork.utils.math.constraints.vect.Vect; public class VectBoundAdapter extends VectAdapter implements PluggableVectBound { diff --git a/src/mightypork/utils/math/constraints/vect/VectNumAdapter.java b/src/mightypork/utils/math/constraints/vect/proxy/VectNumAdapter.java similarity index 76% rename from src/mightypork/utils/math/constraints/vect/VectNumAdapter.java rename to src/mightypork/utils/math/constraints/vect/proxy/VectNumAdapter.java index 695a7b2..10b90ae 100644 --- a/src/mightypork/utils/math/constraints/vect/VectNumAdapter.java +++ b/src/mightypork/utils/math/constraints/vect/proxy/VectNumAdapter.java @@ -1,8 +1,9 @@ -package mightypork.utils.math.constraints.vect; +package mightypork.utils.math.constraints.vect.proxy; import mightypork.utils.math.constraints.num.Num; -import mightypork.utils.math.constraints.num.NumBound; +import mightypork.utils.math.constraints.num.proxy.NumBound; +import mightypork.utils.math.constraints.vect.Vect; /** @@ -10,7 +11,7 @@ import mightypork.utils.math.constraints.num.NumBound; * * @author MightyPork */ -class VectNumAdapter extends Vect { +public class VectNumAdapter extends Vect { private final Num constrX; private final Num constrY;