From 49e5c9d9309abecb1feee7d99cb8909eabbe6a25 Mon Sep 17 00:00:00 2001 From: Zukero Date: Mon, 8 Aug 2016 12:22:12 +0200 Subject: [PATCH] New map-level property : "colorfilter". Possible values are "black20", "black40", "black60", "black80", and "invert". The blackXX ones add a black shade on the map (making them look darker, like unlit caves), that has a 20% to 80% opacity. The invert one make the screen use inverted colors. Others could be added, but only static ones, like a B&W mode for example. Animated ones ( like continuous gamma rotation ) aren't viable performance-wise. --- AndorsTrail/res/xml/home.tmx | 44 +------------------ .../controller/VisualEffectController.java | 6 ++- .../listeners/VisualEffectFrameListeners.java | 2 +- .../AndorsTrail/model/map/LayeredTileMap.java | 19 ++++++-- .../gpl/rpg/AndorsTrail/view/MainView.java | 14 ++++-- 5 files changed, 33 insertions(+), 52 deletions(-) diff --git a/AndorsTrail/res/xml/home.tmx b/AndorsTrail/res/xml/home.tmx index b7c92293c..b4df67f82 100644 --- a/AndorsTrail/res/xml/home.tmx +++ b/AndorsTrail/res/xml/home.tmx @@ -1,44 +1,4 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - @@ -185,8 +145,8 @@ - + @@ -194,4 +154,4 @@ - \ No newline at end of file + diff --git a/AndorsTrail/src/com/gpl/rpg/AndorsTrail/controller/VisualEffectController.java b/AndorsTrail/src/com/gpl/rpg/AndorsTrail/controller/VisualEffectController.java index 82c0bd7b5..e7e67dd2f 100644 --- a/AndorsTrail/src/com/gpl/rpg/AndorsTrail/controller/VisualEffectController.java +++ b/AndorsTrail/src/com/gpl/rpg/AndorsTrail/controller/VisualEffectController.java @@ -29,7 +29,7 @@ public final class VisualEffectController { private final VisualEffectCollection effectTypes; public final VisualEffectFrameListeners visualEffectFrameListeners = new VisualEffectFrameListeners(); - + public VisualEffectController(ControllerContext controllers, WorldContext world) { this.controllers = controllers; this.world = world; @@ -119,6 +119,8 @@ public final class VisualEffectController { else postDelayed(this, 0); } + + } public static final Paint textPaint = new Paint(); @@ -261,4 +263,6 @@ public final class VisualEffectController { return -1; } } + + } diff --git a/AndorsTrail/src/com/gpl/rpg/AndorsTrail/controller/listeners/VisualEffectFrameListeners.java b/AndorsTrail/src/com/gpl/rpg/AndorsTrail/controller/listeners/VisualEffectFrameListeners.java index cec0fcdba..48a756c0e 100644 --- a/AndorsTrail/src/com/gpl/rpg/AndorsTrail/controller/listeners/VisualEffectFrameListeners.java +++ b/AndorsTrail/src/com/gpl/rpg/AndorsTrail/controller/listeners/VisualEffectFrameListeners.java @@ -21,7 +21,7 @@ public final class VisualEffectFrameListeners extends ListOfListeners onSpriteMoveCompleted = new Function1() { @Override public void call(VisualEffectFrameListener listener, SpriteMoveAnimation animation) { listener.onSpriteMoveCompleted(animation); } }; - + @Override public void onNewAnimationFrame(VisualEffectAnimation animation, int tileID, int textYOffset) { callAllListeners(this.onNewAnimationFrame, animation, tileID, textYOffset); diff --git a/AndorsTrail/src/com/gpl/rpg/AndorsTrail/model/map/LayeredTileMap.java b/AndorsTrail/src/com/gpl/rpg/AndorsTrail/model/map/LayeredTileMap.java index 595adb966..2eed42685 100644 --- a/AndorsTrail/src/com/gpl/rpg/AndorsTrail/model/map/LayeredTileMap.java +++ b/AndorsTrail/src/com/gpl/rpg/AndorsTrail/model/map/LayeredTileMap.java @@ -10,10 +10,11 @@ import com.gpl.rpg.AndorsTrail.util.Size; import java.util.Collection; public final class LayeredTileMap { - private static final ColorFilter colorFilterBlack20 = createGrayScaleColorFilter(0.2f); - private static final ColorFilter colorFilterBlack40 = createGrayScaleColorFilter(0.4f); - private static final ColorFilter colorFilterBlack60 = createGrayScaleColorFilter(0.6f); - private static final ColorFilter colorFilterBlack80 = createGrayScaleColorFilter(0.8f); + private static final ColorFilter colorFilterBlack20 = createGrayScaleColorFilter(0.8f); + private static final ColorFilter colorFilterBlack40 = createGrayScaleColorFilter(0.6f); + private static final ColorFilter colorFilterBlack60 = createGrayScaleColorFilter(0.4f); + private static final ColorFilter colorFilterBlack80 = createGrayScaleColorFilter(0.2f); + private static final ColorFilter colorFilterInvert = createInvertColorFilter(); private final Size size; public final MapSection currentLayout; @@ -78,6 +79,7 @@ public final class LayeredTileMap { else if (colorFilter.equals("black40")) return colorFilterBlack40; else if (colorFilter.equals("black60")) return colorFilterBlack60; else if (colorFilter.equals("black80")) return colorFilterBlack80; + else if (colorFilter.equals("invert")) return colorFilterInvert; return null; } @@ -90,6 +92,15 @@ public final class LayeredTileMap { 0.00f, 0.00f, 0.00f, 1.0f, 0.0f }); } + + private static ColorMatrixColorFilter createInvertColorFilter() { + return new ColorMatrixColorFilter(new float[] { + -1.00f, 0.00f, 0.00f, 0.0f, 255.0f, + 0.00f, -1.00f, 0.00f, 0.0f, 255.0f, + 0.00f, 0.00f, -1.00f, 0.0f, 255.0f, + 0.00f, 0.00f, 0.00f, 1.0f, 0.0f + }); + } public String getCurrentLayoutHash() { return currentLayoutHash; diff --git a/AndorsTrail/src/com/gpl/rpg/AndorsTrail/view/MainView.java b/AndorsTrail/src/com/gpl/rpg/AndorsTrail/view/MainView.java index 5c8a5ea2c..28b9a2a03 100644 --- a/AndorsTrail/src/com/gpl/rpg/AndorsTrail/view/MainView.java +++ b/AndorsTrail/src/com/gpl/rpg/AndorsTrail/view/MainView.java @@ -2,11 +2,9 @@ package com.gpl.rpg.AndorsTrail.view; import android.content.Context; import android.graphics.Bitmap; -import android.graphics.Bitmap.Config; import android.graphics.Canvas; import android.graphics.Color; import android.graphics.Paint; -import android.graphics.Paint.Style; import android.graphics.Rect; import android.os.Handler; import android.util.AttributeSet; @@ -24,7 +22,13 @@ import com.gpl.rpg.AndorsTrail.controller.InputController; import com.gpl.rpg.AndorsTrail.controller.VisualEffectController.BloodSplatter; import com.gpl.rpg.AndorsTrail.controller.VisualEffectController.SpriteMoveAnimation; import com.gpl.rpg.AndorsTrail.controller.VisualEffectController.VisualEffectAnimation; -import com.gpl.rpg.AndorsTrail.controller.listeners.*; +import com.gpl.rpg.AndorsTrail.controller.listeners.CombatSelectionListener; +import com.gpl.rpg.AndorsTrail.controller.listeners.GameRoundListener; +import com.gpl.rpg.AndorsTrail.controller.listeners.MapLayoutListener; +import com.gpl.rpg.AndorsTrail.controller.listeners.MonsterMovementListener; +import com.gpl.rpg.AndorsTrail.controller.listeners.MonsterSpawnListener; +import com.gpl.rpg.AndorsTrail.controller.listeners.PlayerMovementListener; +import com.gpl.rpg.AndorsTrail.controller.listeners.VisualEffectFrameListener; import com.gpl.rpg.AndorsTrail.model.ModelContainer; import com.gpl.rpg.AndorsTrail.model.actor.Monster; import com.gpl.rpg.AndorsTrail.model.item.Loot; @@ -118,6 +122,8 @@ public final class MainView extends SurfaceView requestFocus(); setOnClickListener(this.inputController); setOnLongClickListener(this.inputController); + + } @Override @@ -201,7 +207,7 @@ public final class MainView extends SurfaceView } private static enum RedrawAllDebugReason { - SurfaceChanged, MapChanged, PlayerMoved, MapScrolling + SurfaceChanged, MapChanged, PlayerMoved, MapScrolling, FilterAnimation } private static enum RedrawAreaDebugReason { MonsterMoved, MonsterKilled, EffectCompleted