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.
This commit is contained in:
Zukero
2016-08-08 12:22:12 +02:00
parent 96fb165929
commit 49e5c9d930
5 changed files with 33 additions and 52 deletions

View File

@@ -1,44 +1,4 @@
<?xml version="1.0" ?><map height="10" orientation="orthogonal" tileheight="32" tilewidth="32" version="1.0" width="10">
<tileset firstgid="1" name="map_bed_1" tileheight="32" tilewidth="32">
<image height="256" source="../drawable/map_bed_1.png" width="512"/>
</tileset><tileset firstgid="129" name="map_border_1" tileheight="32" tilewidth="32">
@@ -185,8 +145,8 @@
<object height="32" name="andor:1" type="key" width="320" x="0" y="288">
<properties>
<property name="phrase" value="keyarea_andor1"/>
<property name="requireType" value="questProgress"/>
<property name="requireId" value="andor"/>
<property name="requireType" value="questProgress"/>
<property name="requireValue" value="1"/>
</properties>
</object>
@@ -194,4 +154,4 @@
<objectgroup name="spawn" visible="0">
<object height="32" name="mikhail" type="spawn" width="32" x="224" y="128"/>
</objectgroup>
</map>
</map>

View File

@@ -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;
}
}
}

View File

@@ -21,7 +21,7 @@ public final class VisualEffectFrameListeners extends ListOfListeners<VisualEffe
private final Function1<VisualEffectFrameListener, SpriteMoveAnimation> onSpriteMoveCompleted = new Function1<VisualEffectFrameListener, SpriteMoveAnimation>() {
@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);

View File

@@ -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;

View File

@@ -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