From 91f54133b3397bfc959f05b5cc1729457b783ee1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ond=C5=99ej=20Hru=C5=A1ka?= Date: Sun, 13 Apr 2014 11:03:47 +0200 Subject: [PATCH] Added some informative annotations --- .../gamecore/audio/DeferredAudio.java | 4 +- src/mightypork/gamecore/audio/NullAudio.java | 4 +- src/mightypork/gamecore/control/BaseApp.java | 2 +- src/mightypork/gamecore/control/GameLoop.java | 2 +- .../gamecore/control/bus/EventBus.java | 4 +- .../gamecore/control/bus/events/Event.java | 4 +- .../control/bus/events/UpdateEvent.java | 3 +- .../gui/components/painters/QuadPainter.java | 7 +- .../gamecore/gui/screens/Screen.java | 2 +- .../gamecore/gui/screens/ScreenLayer.java | 2 +- .../gamecore/gui/screens/ScreenRegistry.java | 2 +- .../gamecore/loading/AsyncResourceLoader.java | 8 +- .../gamecore/loading/DeferredResource.java | 4 +- .../render/fonts/impl/DeferredFont.java | 4 +- .../render/fonts/impl/DeferredFontNative.java | 4 +- .../render/textures/DeferredTexture.java | 4 +- .../Alias.java} | 6 +- .../annotations}/DefaultImpl.java | 2 +- .../utils/annotations/FactoryMethod.java | 19 ++++ src/mightypork/utils/logging/Log.java | 6 +- src/mightypork/utils/math/Calc.java | 4 +- src/mightypork/utils/math/Range.java | 2 +- .../utils/math/animation/Easing.java | 5 + src/mightypork/utils/math/color/RGB.java | 5 + .../utils/math/rect/AbstractRect.java | 3 + .../utils/math/rect/RectMutable.java | 8 ++ src/mightypork/utils/math/rect/RectVal.java | 32 ++---- src/mightypork/utils/math/rect/RectView.java | 12 +- .../utils/math/vect/AbstractVect.java | 3 + src/mightypork/utils/math/vect/Vect.java | 4 +- .../utils/math/vect/VectAnimated.java | 4 + .../utils/math/vect/VectFilters.java | 106 ------------------ .../utils/math/vect/VectMutable.java | 7 ++ src/mightypork/utils/math/vect/VectVal.java | 7 +- src/mightypork/utils/math/vect/VectView.java | 9 +- src/mightypork/utils/objects/Convert.java | 12 +- 36 files changed, 143 insertions(+), 173 deletions(-) rename src/mightypork/utils/{logging/LoggedName.java => annotations/Alias.java} (66%) rename src/mightypork/{gamecore/control/interf => utils/annotations}/DefaultImpl.java (91%) create mode 100644 src/mightypork/utils/annotations/FactoryMethod.java delete mode 100644 src/mightypork/utils/math/vect/VectFilters.java diff --git a/src/mightypork/gamecore/audio/DeferredAudio.java b/src/mightypork/gamecore/audio/DeferredAudio.java index ecb00c7..125df9b 100644 --- a/src/mightypork/gamecore/audio/DeferredAudio.java +++ b/src/mightypork/gamecore/audio/DeferredAudio.java @@ -4,8 +4,8 @@ package mightypork.gamecore.audio; import java.io.IOException; import mightypork.gamecore.loading.DeferredResource; +import mightypork.utils.annotations.Alias; import mightypork.utils.files.FileUtils; -import mightypork.utils.logging.LoggedName; import mightypork.utils.math.vect.Vect; import org.newdawn.slick.openal.Audio; @@ -17,7 +17,7 @@ import org.newdawn.slick.openal.SoundStore; * * @author MightyPork */ -@LoggedName(name = "Audio") +@Alias(name = "Audio") public class DeferredAudio extends DeferredResource { private enum PlayMode diff --git a/src/mightypork/gamecore/audio/NullAudio.java b/src/mightypork/gamecore/audio/NullAudio.java index e8f955f..f32d99d 100644 --- a/src/mightypork/gamecore/audio/NullAudio.java +++ b/src/mightypork/gamecore/audio/NullAudio.java @@ -2,7 +2,7 @@ package mightypork.gamecore.audio; import mightypork.gamecore.loading.NullResource; -import mightypork.utils.logging.LoggedName; +import mightypork.utils.annotations.Alias; /** @@ -11,7 +11,7 @@ import mightypork.utils.logging.LoggedName; * * @author MightyPork */ -@LoggedName(name = "NullAudio") +@Alias(name = "NullAudio") public class NullAudio extends DeferredAudio implements NullResource { /** diff --git a/src/mightypork/gamecore/control/BaseApp.java b/src/mightypork/gamecore/control/BaseApp.java index fed7fae..1de2808 100644 --- a/src/mightypork/gamecore/control/BaseApp.java +++ b/src/mightypork/gamecore/control/BaseApp.java @@ -10,13 +10,13 @@ import javax.swing.JOptionPane; import mightypork.gamecore.audio.SoundSystem; import mightypork.gamecore.control.bus.EventBus; import mightypork.gamecore.control.bus.events.*; -import mightypork.gamecore.control.interf.DefaultImpl; import mightypork.gamecore.control.interf.Destroyable; import mightypork.gamecore.control.timing.Updateable; import mightypork.gamecore.gui.screens.ScreenRegistry; import mightypork.gamecore.input.InputSystem; import mightypork.gamecore.loading.AsyncResourceLoader; import mightypork.gamecore.render.DisplaySystem; +import mightypork.utils.annotations.DefaultImpl; import mightypork.utils.files.InstanceLock; import mightypork.utils.logging.Log; import mightypork.utils.logging.LogWriter; diff --git a/src/mightypork/gamecore/control/GameLoop.java b/src/mightypork/gamecore/control/GameLoop.java index a688547..e8132bd 100644 --- a/src/mightypork/gamecore/control/GameLoop.java +++ b/src/mightypork/gamecore/control/GameLoop.java @@ -6,10 +6,10 @@ import java.util.concurrent.ConcurrentLinkedQueue; import mightypork.gamecore.control.bus.events.MainLoopTaskRequest; import mightypork.gamecore.control.bus.events.UpdateEvent; -import mightypork.gamecore.control.interf.DefaultImpl; import mightypork.gamecore.control.timing.TimerDelta; import mightypork.gamecore.gui.components.Renderable; import mightypork.gamecore.gui.screens.ScreenRegistry; +import mightypork.utils.annotations.DefaultImpl; /** diff --git a/src/mightypork/gamecore/control/bus/EventBus.java b/src/mightypork/gamecore/control/bus/EventBus.java index a309ff6..6aa2c52 100644 --- a/src/mightypork/gamecore/control/bus/EventBus.java +++ b/src/mightypork/gamecore/control/bus/EventBus.java @@ -11,6 +11,7 @@ import mightypork.gamecore.control.bus.events.types.ImmediateEvent; import mightypork.gamecore.control.bus.events.types.SingleReceiverEvent; import mightypork.gamecore.control.bus.events.types.UnloggedEvent; import mightypork.gamecore.control.interf.Destroyable; +import mightypork.utils.annotations.FactoryMethod; import mightypork.utils.logging.Log; @@ -85,12 +86,13 @@ final public class EventBus implements Destroyable { /** - * Add a channel for given event and client type. + * Make & connect a channel for given event and client type. * * @param eventClass event type * @param clientClass client type * @return the created channel instance */ + @FactoryMethod public , F_CLIENT> EventChannel addChannel(Class eventClass, Class clientClass) { assertLive(); diff --git a/src/mightypork/gamecore/control/bus/events/Event.java b/src/mightypork/gamecore/control/bus/events/Event.java index 1cfef96..2a5ba9c 100644 --- a/src/mightypork/gamecore/control/bus/events/Event.java +++ b/src/mightypork/gamecore/control/bus/events/Event.java @@ -4,6 +4,7 @@ package mightypork.gamecore.control.bus.events; import mightypork.gamecore.control.bus.events.types.DelayedEvent; import mightypork.gamecore.control.bus.events.types.ImmediateEvent; import mightypork.gamecore.control.bus.events.types.SingleReceiverEvent; +import mightypork.gamecore.control.bus.events.types.UnloggedEvent; /** @@ -13,7 +14,8 @@ import mightypork.gamecore.control.bus.events.types.SingleReceiverEvent; *

* Can be annotated as {@link SingleReceiverEvent} to be delivered once only, * and {@link DelayedEvent} or {@link ImmediateEvent} to specify default sending - * mode. + * mode. When marked as {@link UnloggedEvent}, it will not appear in detailed + * bus logging (useful for very frequent events, such as UpdateEvent). *

*

* Default sending mode (if not changed by annotations) is queued with diff --git a/src/mightypork/gamecore/control/bus/events/UpdateEvent.java b/src/mightypork/gamecore/control/bus/events/UpdateEvent.java index f4fad33..1771801 100644 --- a/src/mightypork/gamecore/control/bus/events/UpdateEvent.java +++ b/src/mightypork/gamecore/control/bus/events/UpdateEvent.java @@ -7,11 +7,10 @@ import mightypork.gamecore.control.timing.Updateable; /** - * Delta timing update event + * Delta timing update event. Not logged. * * @author MightyPork */ -// sending via queue would hog the bus @UnloggedEvent @ImmediateEvent public class UpdateEvent implements Event { diff --git a/src/mightypork/gamecore/gui/components/painters/QuadPainter.java b/src/mightypork/gamecore/gui/components/painters/QuadPainter.java index 4c6db88..9000e76 100644 --- a/src/mightypork/gamecore/gui/components/painters/QuadPainter.java +++ b/src/mightypork/gamecore/gui/components/painters/QuadPainter.java @@ -3,6 +3,7 @@ package mightypork.gamecore.gui.components.painters; import mightypork.gamecore.gui.components.PluggableRenderer; import mightypork.gamecore.render.Render; +import mightypork.utils.annotations.FactoryMethod; import mightypork.utils.math.color.RGB; @@ -54,13 +55,15 @@ public class QuadPainter extends PluggableRenderer { Render.quadColor(getRect(), colorHMinVMin, colorHMaxVMin, colorHMaxVMax, colorHMinVMax); } - + + @FactoryMethod public static QuadPainter gradH(RGB colorLeft, RGB colorRight) { return new QuadPainter(colorLeft, colorRight, colorRight, colorLeft); } - + + @FactoryMethod public static QuadPainter gradV(RGB colorTop, RGB colorBottom) { return new QuadPainter(colorTop, colorTop, colorBottom, colorBottom); diff --git a/src/mightypork/gamecore/gui/screens/Screen.java b/src/mightypork/gamecore/gui/screens/Screen.java index f7a8b40..54dd9c8 100644 --- a/src/mightypork/gamecore/gui/screens/Screen.java +++ b/src/mightypork/gamecore/gui/screens/Screen.java @@ -4,12 +4,12 @@ package mightypork.gamecore.gui.screens; import mightypork.gamecore.control.AppAccess; import mightypork.gamecore.control.AppSubModule; import mightypork.gamecore.control.bus.events.ScreenChangeEvent; -import mightypork.gamecore.control.interf.DefaultImpl; import mightypork.gamecore.gui.components.Renderable; import mightypork.gamecore.input.KeyBinder; import mightypork.gamecore.input.KeyBindingPool; import mightypork.gamecore.input.KeyStroke; import mightypork.gamecore.render.Render; +import mightypork.utils.annotations.DefaultImpl; import mightypork.utils.math.constraints.RectBound; import mightypork.utils.math.rect.RectView; import mightypork.utils.math.vect.Vect; diff --git a/src/mightypork/gamecore/gui/screens/ScreenLayer.java b/src/mightypork/gamecore/gui/screens/ScreenLayer.java index 3d1d06a..6f2ec83 100644 --- a/src/mightypork/gamecore/gui/screens/ScreenLayer.java +++ b/src/mightypork/gamecore/gui/screens/ScreenLayer.java @@ -2,11 +2,11 @@ package mightypork.gamecore.gui.screens; import mightypork.gamecore.control.AppSubModule; -import mightypork.gamecore.control.interf.DefaultImpl; import mightypork.gamecore.gui.components.Renderable; import mightypork.gamecore.input.KeyBinder; import mightypork.gamecore.input.KeyBindingPool; import mightypork.gamecore.input.KeyStroke; +import mightypork.utils.annotations.DefaultImpl; import mightypork.utils.math.constraints.RectBound; import mightypork.utils.math.rect.RectView; import mightypork.utils.math.vect.Vect; diff --git a/src/mightypork/gamecore/gui/screens/ScreenRegistry.java b/src/mightypork/gamecore/gui/screens/ScreenRegistry.java index d377d01..cda4e21 100644 --- a/src/mightypork/gamecore/gui/screens/ScreenRegistry.java +++ b/src/mightypork/gamecore/gui/screens/ScreenRegistry.java @@ -6,8 +6,8 @@ import java.util.HashMap; import mightypork.gamecore.control.AppAccess; import mightypork.gamecore.control.AppModule; import mightypork.gamecore.control.bus.events.ScreenRequestEvent; -import mightypork.gamecore.control.interf.DefaultImpl; import mightypork.gamecore.gui.components.Renderable; +import mightypork.utils.annotations.DefaultImpl; import mightypork.utils.logging.Log; diff --git a/src/mightypork/gamecore/loading/AsyncResourceLoader.java b/src/mightypork/gamecore/loading/AsyncResourceLoader.java index 37dde05..7ee2ced 100644 --- a/src/mightypork/gamecore/loading/AsyncResourceLoader.java +++ b/src/mightypork/gamecore/loading/AsyncResourceLoader.java @@ -8,6 +8,7 @@ import java.util.concurrent.LinkedBlockingQueue; import mightypork.gamecore.control.bus.BusAccess; import mightypork.gamecore.control.bus.events.ResourceLoadRequest; import mightypork.gamecore.control.interf.Destroyable; +import mightypork.utils.annotations.FactoryMethod; import mightypork.utils.logging.Log; @@ -22,12 +23,15 @@ public class AsyncResourceLoader extends Thread implements ResourceLoadRequest.L * Start a new loader thread. * * @param app app access + * @return the launched thread */ - public static void launch(BusAccess app) + @FactoryMethod + public static AsyncResourceLoader launch(BusAccess app) { - final Thread loader = new AsyncResourceLoader(app); + final AsyncResourceLoader loader = new AsyncResourceLoader(app); loader.setDaemon(true); loader.start(); + return loader; } private final ExecutorService exs = Executors.newCachedThreadPool(); diff --git a/src/mightypork/gamecore/loading/DeferredResource.java b/src/mightypork/gamecore/loading/DeferredResource.java index 3ee162e..0b95b7b 100644 --- a/src/mightypork/gamecore/loading/DeferredResource.java +++ b/src/mightypork/gamecore/loading/DeferredResource.java @@ -2,8 +2,8 @@ package mightypork.gamecore.loading; import mightypork.gamecore.control.interf.Destroyable; +import mightypork.utils.annotations.Alias; import mightypork.utils.logging.Log; -import mightypork.utils.logging.LoggedName; /** @@ -13,7 +13,7 @@ import mightypork.utils.logging.LoggedName; * * @author MightyPork */ -@LoggedName(name = "Resource") +@Alias(name = "Resource") public abstract class DeferredResource implements Deferred, Destroyable { private final String resource; diff --git a/src/mightypork/gamecore/render/fonts/impl/DeferredFont.java b/src/mightypork/gamecore/render/fonts/impl/DeferredFont.java index 895aaa2..fbca6a3 100644 --- a/src/mightypork/gamecore/render/fonts/impl/DeferredFont.java +++ b/src/mightypork/gamecore/render/fonts/impl/DeferredFont.java @@ -10,8 +10,8 @@ import mightypork.gamecore.loading.DeferredResource; import mightypork.gamecore.loading.MustLoadInMainThread; import mightypork.gamecore.render.fonts.GLFont; import mightypork.gamecore.render.textures.FilterMode; +import mightypork.utils.annotations.Alias; import mightypork.utils.files.FileUtils; -import mightypork.utils.logging.LoggedName; import mightypork.utils.math.color.RGB; import mightypork.utils.math.vect.Vect; import mightypork.utils.math.vect.VectView; @@ -23,7 +23,7 @@ import mightypork.utils.math.vect.VectView; * @author MightyPork */ @MustLoadInMainThread -@LoggedName(name = "Font") +@Alias(name = "Font") public class DeferredFont extends DeferredResource implements GLFont { public static enum FontStyle diff --git a/src/mightypork/gamecore/render/fonts/impl/DeferredFontNative.java b/src/mightypork/gamecore/render/fonts/impl/DeferredFontNative.java index a8eb81a..cb7359a 100644 --- a/src/mightypork/gamecore/render/fonts/impl/DeferredFontNative.java +++ b/src/mightypork/gamecore/render/fonts/impl/DeferredFontNative.java @@ -6,7 +6,7 @@ import java.awt.FontFormatException; import java.io.IOException; import mightypork.gamecore.render.textures.FilterMode; -import mightypork.utils.logging.LoggedName; +import mightypork.utils.annotations.Alias; /** @@ -14,7 +14,7 @@ import mightypork.utils.logging.LoggedName; * * @author MightyPork */ -@LoggedName(name = "FontNative") +@Alias(name = "FontNative") public class DeferredFontNative extends DeferredFont { /** diff --git a/src/mightypork/gamecore/render/textures/DeferredTexture.java b/src/mightypork/gamecore/render/textures/DeferredTexture.java index 6d37466..ed09a4a 100644 --- a/src/mightypork/gamecore/render/textures/DeferredTexture.java +++ b/src/mightypork/gamecore/render/textures/DeferredTexture.java @@ -4,7 +4,7 @@ package mightypork.gamecore.render.textures; import mightypork.gamecore.loading.DeferredResource; import mightypork.gamecore.loading.MustLoadInMainThread; import mightypork.gamecore.render.Render; -import mightypork.utils.logging.LoggedName; +import mightypork.utils.annotations.Alias; import mightypork.utils.math.rect.Rect; import org.lwjgl.opengl.GL11; @@ -17,7 +17,7 @@ import org.newdawn.slick.opengl.Texture; * @author MightyPork */ @MustLoadInMainThread -@LoggedName(name = "Texture") +@Alias(name = "Texture") public class DeferredTexture extends DeferredResource implements FilteredTexture { private Texture backingTexture; diff --git a/src/mightypork/utils/logging/LoggedName.java b/src/mightypork/utils/annotations/Alias.java similarity index 66% rename from src/mightypork/utils/logging/LoggedName.java rename to src/mightypork/utils/annotations/Alias.java index be04294..02f44ad 100644 --- a/src/mightypork/utils/logging/LoggedName.java +++ b/src/mightypork/utils/annotations/Alias.java @@ -1,4 +1,4 @@ -package mightypork.utils.logging; +package mightypork.utils.annotations; import java.lang.annotation.Documented; @@ -8,14 +8,14 @@ import java.lang.annotation.RetentionPolicy; /** - * Specify pretty name to be used when logging (Log.str()) + * Specify pretty name to be used when logging (eg. Log.str()) * * @author MightyPork */ @Retention(RetentionPolicy.RUNTIME) @Inherited @Documented -public @interface LoggedName { +public @interface Alias { String name(); } diff --git a/src/mightypork/gamecore/control/interf/DefaultImpl.java b/src/mightypork/utils/annotations/DefaultImpl.java similarity index 91% rename from src/mightypork/gamecore/control/interf/DefaultImpl.java rename to src/mightypork/utils/annotations/DefaultImpl.java index c6d33de..6b94802 100644 --- a/src/mightypork/gamecore/control/interf/DefaultImpl.java +++ b/src/mightypork/utils/annotations/DefaultImpl.java @@ -1,4 +1,4 @@ -package mightypork.gamecore.control.interf; +package mightypork.utils.annotations; import java.lang.annotation.Documented; diff --git a/src/mightypork/utils/annotations/FactoryMethod.java b/src/mightypork/utils/annotations/FactoryMethod.java new file mode 100644 index 0000000..af81ec9 --- /dev/null +++ b/src/mightypork/utils/annotations/FactoryMethod.java @@ -0,0 +1,19 @@ +package mightypork.utils.annotations; + +import java.lang.annotation.Documented; +import java.lang.annotation.ElementType; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Target; + +/** + * Marks a static factory method + * + * @author MightyPork + */ +@Retention(RetentionPolicy.SOURCE) +@Target(ElementType.METHOD) +@Documented +public @interface FactoryMethod { + +} diff --git a/src/mightypork/utils/logging/Log.java b/src/mightypork/utils/logging/Log.java index a609d42..810f1b9 100644 --- a/src/mightypork/utils/logging/Log.java +++ b/src/mightypork/utils/logging/Log.java @@ -7,6 +7,8 @@ import java.io.StringWriter; import java.util.HashMap; import java.util.logging.Level; +import mightypork.utils.annotations.Alias; +import mightypork.utils.annotations.FactoryMethod; import mightypork.utils.string.StringUtils; @@ -34,6 +36,7 @@ public class Log { * @param oldLogsCount number of old logs to keep, -1 infinite, 0 none. * @return the created Log instance */ + @FactoryMethod public static synchronized LogWriter create(String logName, File logFile, int oldLogsCount) { if (logs.containsKey(logName)) return logs.get(logName); @@ -55,6 +58,7 @@ public class Log { * @param logFile log file; old logs will be kept here too. * @return the created Log instance */ + @FactoryMethod public static synchronized LogWriter create(String logName, File logFile) { if (logs.containsKey(logName)) return logs.get(logName); @@ -348,7 +352,7 @@ public class Log { public static String str(Class cls) { - final LoggedName ln = cls.getAnnotation(LoggedName.class); + final Alias ln = cls.getAnnotation(Alias.class); if (ln != null) { return ln.name(); } diff --git a/src/mightypork/utils/math/Calc.java b/src/mightypork/utils/math/Calc.java index 3051102..6372b52 100644 --- a/src/mightypork/utils/math/Calc.java +++ b/src/mightypork/utils/math/Calc.java @@ -682,7 +682,7 @@ public class Calc { * @param d double * @return string */ - public static String doubleToString(double d) + public static String toString(double d) { String s = Double.toString(d); s = s.replaceAll("([0-9]+\\.[0-9]+)00+[0-9]+", "$1"); @@ -698,7 +698,7 @@ public class Calc { * @param f float * @return string */ - public static String floatToString(float f) + public static String toString(float f) { String s = Float.toString(f); s = s.replaceAll("([0-9]+\\.[0-9]+)00+[0-9]+", "$1"); diff --git a/src/mightypork/utils/math/Range.java b/src/mightypork/utils/math/Range.java index dafe06a..d5d0d24 100644 --- a/src/mightypork/utils/math/Range.java +++ b/src/mightypork/utils/math/Range.java @@ -137,7 +137,7 @@ public class Range { @Override public String toString() { - return String.format("Range(%.1f|%.1f)", min, max); + return String.format("{%.1f|%.1f}", min, max); } diff --git a/src/mightypork/utils/math/animation/Easing.java b/src/mightypork/utils/math/animation/Easing.java index 69c4352..4f6ea54 100644 --- a/src/mightypork/utils/math/animation/Easing.java +++ b/src/mightypork/utils/math/animation/Easing.java @@ -1,5 +1,7 @@ package mightypork.utils.math.animation; +import mightypork.utils.annotations.FactoryMethod; + /** * EasingFunction function. @@ -23,6 +25,7 @@ public abstract class Easing { * @param original original easing * @return reversed easing */ + @FactoryMethod public static Easing reverse(Easing original) { return new Reverse(original); @@ -36,6 +39,7 @@ public abstract class Easing { * @param out terminal easing * @return product */ + @FactoryMethod public static Easing combine(Easing in, Easing out) { return new Composite(in, out); @@ -48,6 +52,7 @@ public abstract class Easing { * @param in initial easing * @return product */ + @FactoryMethod public static Easing inOut(Easing in) { return combine(in, reverse(in)); diff --git a/src/mightypork/utils/math/color/RGB.java b/src/mightypork/utils/math/color/RGB.java index 385261a..8075335 100644 --- a/src/mightypork/utils/math/color/RGB.java +++ b/src/mightypork/utils/math/color/RGB.java @@ -3,6 +3,7 @@ package mightypork.utils.math.color; import java.awt.Color; +import mightypork.utils.annotations.FactoryMethod; import mightypork.utils.math.Calc; @@ -337,6 +338,7 @@ public class RGB { * @param hex hex RRGGBB * @return the new color */ + @FactoryMethod public static RGB fromHex(int hex) { final int bi = hex & 0xff; @@ -352,6 +354,7 @@ public class RGB { * @param color HSV color * @return RGB */ + @FactoryMethod public static RGB fromHSV(HSV color) { return color.toRGB(); @@ -381,12 +384,14 @@ public class RGB { } + @FactoryMethod public static RGB dark(double d) { return new RGB(0, 0, 0, d); } + @FactoryMethod public static RGB light(double d) { return new RGB(1, 1, 1, d); diff --git a/src/mightypork/utils/math/rect/AbstractRect.java b/src/mightypork/utils/math/rect/AbstractRect.java index 39ee1f9..9e0de1e 100644 --- a/src/mightypork/utils/math/rect/AbstractRect.java +++ b/src/mightypork/utils/math/rect/AbstractRect.java @@ -144,6 +144,8 @@ public abstract class AbstractRect implements Rect { @Override public RectView view() { + // must NOT call VectView.make, it'd cause infinite recursion. + if (proxy == null) proxy = new RectProxy(this); return proxy; @@ -153,6 +155,7 @@ public abstract class AbstractRect implements Rect { @Override public RectVal copy() { + // must NOT call RectVal.make, it'd cause infinite recursion. return new RectVal(x(), y(), width(), height()); } diff --git a/src/mightypork/utils/math/rect/RectMutable.java b/src/mightypork/utils/math/rect/RectMutable.java index 4715c75..aacdad6 100644 --- a/src/mightypork/utils/math/rect/RectMutable.java +++ b/src/mightypork/utils/math/rect/RectMutable.java @@ -1,6 +1,7 @@ package mightypork.utils.math.rect; +import mightypork.utils.annotations.FactoryMethod; import mightypork.utils.math.vect.Vect; import mightypork.utils.math.vect.VectVal; @@ -17,6 +18,7 @@ public abstract class RectMutable extends RectMath { * * @return new mutable rect */ + @FactoryMethod public static RectMutable zero() { return make(0, 0, 0, 0); @@ -28,6 +30,7 @@ public abstract class RectMutable extends RectMath { * * @return new mutable rect */ + @FactoryMethod public static RectMutable one() { return make(0, 0, 1, 1); @@ -55,6 +58,7 @@ public abstract class RectMutable extends RectMath { * @param height * @return new mutable rect */ + @FactoryMethod public static RectMutable make(Vect origin, double width, double height) { return make(origin, VectVal.make(width, height)); @@ -67,6 +71,7 @@ public abstract class RectMutable extends RectMath { * @param size * @return new mutable rect */ + @FactoryMethod public static RectMutable make(Vect size) { return make(Vect.ZERO, size); @@ -82,6 +87,7 @@ public abstract class RectMutable extends RectMath { * @param height * @return new mutable rect */ + @FactoryMethod public static RectMutable make(double x, double y, double width, double height) { return make(x, y, width, height); @@ -94,6 +100,7 @@ public abstract class RectMutable extends RectMath { * @param other copied * @return new mutable rect */ + @FactoryMethod public static RectMutable make(Rect other) { return make(other.origin(), other.size()); @@ -107,6 +114,7 @@ public abstract class RectMutable extends RectMath { * @param size * @return new mutable rect */ + @FactoryMethod public static RectMutable make(Vect origin, Vect size) { return make(origin.x(), origin.y(), size.x(), size.y()); diff --git a/src/mightypork/utils/math/rect/RectVal.java b/src/mightypork/utils/math/rect/RectVal.java index 56b66cb..ac54644 100644 --- a/src/mightypork/utils/math/rect/RectVal.java +++ b/src/mightypork/utils/math/rect/RectVal.java @@ -1,6 +1,7 @@ package mightypork.utils.math.rect; +import mightypork.utils.annotations.FactoryMethod; import mightypork.utils.math.vect.Vect; import mightypork.utils.math.vect.VectVal; @@ -18,31 +19,10 @@ public class RectVal extends RectView { * @param observed observed rect * @return view */ + @FactoryMethod public static RectVal make(Rect observed) { - return observed.copy(); - } - - - /** - * Create at 0,0 with zero size - * - * @return new mutable rect - */ - public static RectVal zero() - { - return make(0, 0, 0, 0); - } - - - /** - * Create at 1,1 with zero size - * - * @return new mutable rect - */ - public static RectVal one() - { - return make(0, 0, 1, 1); + return observed.copy(); // let the rect handle it } @@ -53,6 +33,7 @@ public class RectVal extends RectView { * @param height * @return new mutable rect */ + @FactoryMethod public static RectVal make(double width, double height) { return make(0, 0, width, height); @@ -67,6 +48,7 @@ public class RectVal extends RectView { * @param height * @return new mutable rect */ + @FactoryMethod public static RectVal make(Vect origin, double width, double height) { return make(origin, VectVal.make(width, height)); @@ -79,6 +61,7 @@ public class RectVal extends RectView { * @param size * @return new mutable rect */ + @FactoryMethod public static RectVal make(Vect size) { return make(Vect.ZERO, size); @@ -94,6 +77,7 @@ public class RectVal extends RectView { * @param height * @return new mutable rect */ + @FactoryMethod public static RectVal make(double x, double y, double width, double height) { return new RectVal(x, y, width, height); @@ -107,6 +91,7 @@ public class RectVal extends RectView { * @param size * @return new mutable rect */ + @FactoryMethod public static RectVal make(Vect origin, Vect size) { return make(origin.x(), origin.y(), size.x(), size.y()); @@ -133,6 +118,7 @@ public class RectVal extends RectView { @Override public RectVal copy() { + // must NOT call RectVal.make, it'd cause infinite recursion. return this; // nothing can change. } diff --git a/src/mightypork/utils/math/rect/RectView.java b/src/mightypork/utils/math/rect/RectView.java index ff3f686..c4fbfa0 100644 --- a/src/mightypork/utils/math/rect/RectView.java +++ b/src/mightypork/utils/math/rect/RectView.java @@ -1,5 +1,7 @@ package mightypork.utils.math.rect; +import mightypork.utils.annotations.FactoryMethod; + /** * Immutable rect @@ -14,9 +16,10 @@ public abstract class RectView extends RectMath { * @param observed observed rect * @return view */ + @FactoryMethod public static RectView make(Rect observed) { - return observed.view(); + return observed.view(); // let the rect handle it } @@ -47,4 +50,11 @@ public abstract class RectView extends RectMath { return RectVal.make(origin().round(), size().round()); } + @Override + public RectView view() + { + // must NOT call RectView.make, it'd cause infinite recursion. + return this; // wont change + } + } diff --git a/src/mightypork/utils/math/vect/AbstractVect.java b/src/mightypork/utils/math/vect/AbstractVect.java index a628c22..8c16c5f 100644 --- a/src/mightypork/utils/math/vect/AbstractVect.java +++ b/src/mightypork/utils/math/vect/AbstractVect.java @@ -118,6 +118,7 @@ public abstract class AbstractVect implements Vect { @Override public VectVal copy() { + // must NOT call VectVal.make, it'd cause infinite recursion. return new VectVal(this); } @@ -125,6 +126,8 @@ public abstract class AbstractVect implements Vect { @Override public VectView view() { + // must NOT call VectView.make, it'd cause infinite recursion. + if (proxy == null) proxy = new VectProxy(this); return proxy; diff --git a/src/mightypork/utils/math/vect/Vect.java b/src/mightypork/utils/math/vect/Vect.java index 813053b..353c1aa 100644 --- a/src/mightypork/utils/math/vect/Vect.java +++ b/src/mightypork/utils/math/vect/Vect.java @@ -12,8 +12,8 @@ import mightypork.utils.math.constraints.VectBound; */ public interface Vect extends VectBound { - public static final VectVal ZERO = new VectVal(0, 0, 0); - public static final VectVal ONE = new VectVal(0, 0, 0); + VectVal ZERO = new VectVal(0, 0, 0); + VectVal ONE = new VectVal(0, 0, 0); /** diff --git a/src/mightypork/utils/math/vect/VectAnimated.java b/src/mightypork/utils/math/vect/VectAnimated.java index f02683c..480648c 100644 --- a/src/mightypork/utils/math/vect/VectAnimated.java +++ b/src/mightypork/utils/math/vect/VectAnimated.java @@ -3,6 +3,7 @@ package mightypork.utils.math.vect; import mightypork.gamecore.control.timing.Pauseable; import mightypork.gamecore.control.timing.Updateable; +import mightypork.utils.annotations.FactoryMethod; import mightypork.utils.math.animation.AnimDouble; import mightypork.utils.math.animation.Easing; @@ -23,6 +24,7 @@ public class VectAnimated extends VectMutable implements Pauseable, Updateable { * @param z z animator * @return animated mutable vector */ + @FactoryMethod public static VectAnimated make(AnimDouble x, AnimDouble y, AnimDouble z) { return new VectAnimated(x, y, z); @@ -36,6 +38,7 @@ public class VectAnimated extends VectMutable implements Pauseable, Updateable { * @param easing animation easing * @return animated mutable vector */ + @FactoryMethod public static VectAnimated make(Vect start, Easing easing) { return new VectAnimated(start, easing); @@ -48,6 +51,7 @@ public class VectAnimated extends VectMutable implements Pauseable, Updateable { * @param easing animation easing * @return animated mutable vector */ + @FactoryMethod public static VectAnimated make(Easing easing) { return new VectAnimated(Vect.ZERO, easing); diff --git a/src/mightypork/utils/math/vect/VectFilters.java b/src/mightypork/utils/math/vect/VectFilters.java deleted file mode 100644 index 05d0a37..0000000 --- a/src/mightypork/utils/math/vect/VectFilters.java +++ /dev/null @@ -1,106 +0,0 @@ -package mightypork.utils.math.vect; - - -public class VectFilters { - - private static abstract class Uniform extends VectProxy { - - public Uniform(Vect observed) { - super(observed); - } - - - @Override - protected double processX(double x) - { - return super.processX(x); - } - - - @Override - protected double processY(double y) - { - return super.processY(y); - } - - - @Override - protected double processZ(double z) - { - return super.processZ(z); - } - - - protected abstract double process(double a); - } - - public static class Round extends Uniform { - - public Round(Vect observed) { - super(observed); - } - - - @Override - protected double process(double a) - { - return Math.round(a); - } - } - - public static class Ceil extends Uniform { - - public Ceil(Vect observed) { - super(observed); - } - - - @Override - protected double process(double a) - { - return Math.ceil(a); - } - } - - public static class Floor extends Uniform { - - public Floor(Vect observed) { - super(observed); - } - - - @Override - protected double process(double a) - { - return Math.floor(a); - } - } - - public static class Neg extends Uniform { - - public Neg(Vect observed) { - super(observed); - } - - - @Override - protected double process(double a) - { - return -a; - } - } - - public static class Half extends Uniform { - - public Half(Vect observed) { - super(observed); - } - - - @Override - protected double process(double a) - { - return a / 2D; - } - } -} diff --git a/src/mightypork/utils/math/vect/VectMutable.java b/src/mightypork/utils/math/vect/VectMutable.java index 1ad3342..5421894 100644 --- a/src/mightypork/utils/math/vect/VectMutable.java +++ b/src/mightypork/utils/math/vect/VectMutable.java @@ -1,5 +1,7 @@ package mightypork.utils.math.vect; +import mightypork.utils.annotations.FactoryMethod; + @@ -15,6 +17,7 @@ public abstract class VectMutable extends VectMath { // returns its * * @return new mutable vector */ + @FactoryMethod public static VectMutable zero() { return make(ZERO); @@ -26,6 +29,7 @@ public abstract class VectMutable extends VectMath { // returns its * * @return one mutable vector */ + @FactoryMethod public static VectMutable one() { return make(ONE); @@ -39,6 +43,7 @@ public abstract class VectMutable extends VectMath { // returns its * @param y Y coordinate * @return mutable vector */ + @FactoryMethod public static VectMutable make(double x, double y) { return make(x, y, 0); @@ -51,6 +56,7 @@ public abstract class VectMutable extends VectMath { // returns its * @param copied copied vec * @return mutable vector */ + @FactoryMethod public static VectMutable make(Vect copied) { return make(copied.x(), copied.y(), copied.z()); @@ -65,6 +71,7 @@ public abstract class VectMutable extends VectMath { // returns its * @param z Z coordinate * @return mutable vector */ + @FactoryMethod public static VectMutable make(double x, double y, double z) { return new VectMutableVariable(x, y, z); diff --git a/src/mightypork/utils/math/vect/VectVal.java b/src/mightypork/utils/math/vect/VectVal.java index e7ddcdd..359d140 100644 --- a/src/mightypork/utils/math/vect/VectVal.java +++ b/src/mightypork/utils/math/vect/VectVal.java @@ -1,5 +1,7 @@ package mightypork.utils.math.vect; +import mightypork.utils.annotations.FactoryMethod; + /** * Coordinate with immutable numeric values.
@@ -15,9 +17,10 @@ public final class VectVal extends VectView { * @param value source vector * @return new constant vec */ + @FactoryMethod public static VectVal make(Vect value) { - return value.copy(); + return value.copy(); // let the vect handle it } @@ -28,6 +31,7 @@ public final class VectVal extends VectView { * @param y Y value * @return new constant vec */ + @FactoryMethod public static VectVal make(double x, double y) { return make(x, y, 0); @@ -42,6 +46,7 @@ public final class VectVal extends VectView { * @param z Z value * @return new constant vector */ + @FactoryMethod public static VectVal make(double x, double y, double z) { return new VectVal(x, y, z); diff --git a/src/mightypork/utils/math/vect/VectView.java b/src/mightypork/utils/math/vect/VectView.java index 74ea8f2..93ccd41 100644 --- a/src/mightypork/utils/math/vect/VectView.java +++ b/src/mightypork/utils/math/vect/VectView.java @@ -1,7 +1,8 @@ package mightypork.utils.math.vect; -import mightypork.gamecore.control.interf.DefaultImpl; +import mightypork.utils.annotations.DefaultImpl; +import mightypork.utils.annotations.FactoryMethod; import mightypork.utils.math.constraints.NumBound; @@ -19,9 +20,10 @@ public abstract class VectView extends VectMath { // returns constant v * @param observed vector to observe * @return view */ + @FactoryMethod public static VectView make(Vect observed) { - return observed.view(); + return observed.view(); // let the vect handle it } @@ -32,6 +34,7 @@ public abstract class VectView extends VectMath { // returns constant v * @param yc Y value * @return view at the values */ + @FactoryMethod public static VectView make(NumBound xc, NumBound yc) { return new NumConstrVect(xc, yc); @@ -46,6 +49,7 @@ public abstract class VectView extends VectMath { // returns constant v * @param zc Z value * @return view at the values */ + @FactoryMethod public static VectView make(NumBound xc, NumBound yc, NumBound zc) { return new NumConstrVect(xc, yc, zc); @@ -62,6 +66,7 @@ public abstract class VectView extends VectMath { // returns constant v @Override public VectView view() { + // must NOT call VectView.copy, it'd cause infinite recursion. return this; // already a view } diff --git a/src/mightypork/utils/objects/Convert.java b/src/mightypork/utils/objects/Convert.java index d55da0f..ceda391 100644 --- a/src/mightypork/utils/objects/Convert.java +++ b/src/mightypork/utils/objects/Convert.java @@ -2,6 +2,7 @@ package mightypork.utils.objects; import mightypork.utils.logging.Log; +import mightypork.utils.math.Calc; import mightypork.utils.math.Range; import mightypork.utils.math.vect.Vect; import mightypork.utils.math.vect.VectVal; @@ -98,6 +99,7 @@ public class Convert { if (s.equals("true")) return true; if (s.equals("yes")) return true; if (s.equals("y")) return true; + if (s.equals("a")) return true; if (s.equals("enabled")) return true; if (s.equals("false")) return false; @@ -122,18 +124,18 @@ public class Convert { if (o == null) return def; if (o instanceof String) return ((String) o); - if (o instanceof Boolean) { - return (Boolean) o ? "True" : "False"; - } + if (o instanceof Float) return Calc.toString((float) o); + + if (o instanceof Double) return Calc.toString((double) o); if (o instanceof Vect) { final Vect c = (Vect) o; - return String.format("[%f;%f;%f]", c.x(), c.y(), c.z()); + return String.format("(%f|%f|%f)", c.x(), c.y(), c.z()); } if (o instanceof Range) { final Range c = (Range) o; - return String.format("(%f:%f)", c.getMin(), c.getMax()); + return String.format("{%f|%f}", c.getMin(), c.getMax()); } if (o instanceof Class) {