From c5bdb05fa4d48cc127cde33e09c7935b07a9d25d Mon Sep 17 00:00:00 2001
From: DarkGod <darkgod@net-core.org>
Date: Wed, 6 Nov 2013 15:04:16 +0100
Subject: [PATCH] Target tactical info now looks better!

---
 game/engines/default/engine/Target.lua        |   4 +
 game/modules/tome/class/Game.lua              |   4 +-
 .../modules/tome/data/gfx/shaders/mm_fbo.frag | 172 ------------------
 .../tome/data/gfx/shaders/target_fbo.frag     | 139 ++++++++++++++
 .../shaders/{mm_fbo.lua => target_fbo.lua}    |   5 +-
 .../modules/tome/data/gfx/ui/targetshader.png | Bin 0 -> 25600 bytes
 6 files changed, 150 insertions(+), 174 deletions(-)
 delete mode 100644 game/modules/tome/data/gfx/shaders/mm_fbo.frag
 create mode 100644 game/modules/tome/data/gfx/shaders/target_fbo.frag
 rename game/modules/tome/data/gfx/shaders/{mm_fbo.lua => target_fbo.lua} (89%)
 create mode 100644 game/modules/tome/data/gfx/ui/targetshader.png

diff --git a/game/engines/default/engine/Target.lua b/game/engines/default/engine/Target.lua
index 2ba0c60450..b3053a6989 100644
--- a/game/engines/default/engine/Target.lua
+++ b/game/engines/default/engine/Target.lua
@@ -33,6 +33,7 @@ function _M:init(map, source_actor)
 
 	self.cursor = engine.Tiles:loadImage("target_cursor.png"):glTexture()
 	self.arrow = engine.Tiles:loadImage("target_arrow.png"):glTexture()
+	self.targetshader = engine.Tiles:loadImage("ui/targetshader.png"):glTexture()
 
 	--Use power of two (pot) width and height, rounded up
 	local pot_width = math.pow(2, math.ceil(math.log(map.tile_w-0.1) / math.log(2.0)))
@@ -100,6 +101,9 @@ function _M:display(dispx, dispy, prevfbo)
 			self.fbo:use(true, 0, 0, 0, 0)
 			self:realDisplay(0, 0)
 			self.fbo:use(false, prevfbo)
+			self.targetshader:bind(1, false)
+			self.fbo_shader.shad:paramNumber2("tileSize", self.tile_w, self.tile_h)
+			self.fbo_shader.shad:paramNumber2("scrollOffset", 0, 0)
 			self.fbo:toScreen(self.display_x, self.display_y, Map.viewport.width, Map.viewport.height, self.fbo_shader.shad, 1, 1, 1, 1, true)
 		end
 	end
diff --git a/game/modules/tome/class/Game.lua b/game/modules/tome/class/Game.lua
index 56654231ca..2a2b7a2a5e 100644
--- a/game/modules/tome/class/Game.lua
+++ b/game/modules/tome/class/Game.lua
@@ -134,7 +134,7 @@ function _M:runReal()
 	if not self.player then self:newGame() end
 
 	engine.interface.GameTargeting.init(self)
-	if self.target then self.target:enableFBORenderer("mm_fbo") end
+	if self.target then self.target:enableFBORenderer("target_fbo") end
 
 	self.uiset.hotkeys_display.actor = self.player
 	self.uiset.npcs_display.actor = self.player
@@ -516,6 +516,8 @@ function _M:createFBOs()
 	if self.fbo and self.fbo2 then core.particles.defineFramebuffer(self.fbo)
 	else core.particles.defineFramebuffer(nil) end
 
+	if self.target then self.target:enableFBORenderer("target_fbo") end
+
 --	self.mm_fbo = core.display.newFBO(200, 200)
 --	if self.mm_fbo then self.mm_fbo_shader = Shader.new("mm_fbo") if not self.mm_fbo_shader.shad then self.mm_fbo = nil self.mm_fbo_shader = nil end end
 end
diff --git a/game/modules/tome/data/gfx/shaders/mm_fbo.frag b/game/modules/tome/data/gfx/shaders/mm_fbo.frag
deleted file mode 100644
index 79c44c55d5..0000000000
--- a/game/modules/tome/data/gfx/shaders/mm_fbo.frag
+++ /dev/null
@@ -1,172 +0,0 @@
-//#version 150
-uniform sampler2D Texture0;
-//varying vec2 texCoord;
-
-#define HueLevCount 6
-#define SatLevCount 7
-#define ValLevCount 4
-float[HueLevCount] HueLevels = float[] (0.0,80.0,160.0,240.0,320.0,360.0);
-float[SatLevCount] SatLevels = float[] (0.0,0.15,0.3,0.45,0.6,0.8,1.0);
-float[ValLevCount] ValLevels = float[] (0.0,0.3,0.6,1.0);
-
-vec3 RGBtoHSV( float r, float g, float b) {
-	float minv, maxv, delta;
-	vec3 res;
-
-	minv = min(min(r, g), b);
-	maxv = max(max(r, g), b);
-	res.z = maxv;            // v
-
-	delta = maxv - minv;
-
-	if( maxv != 0.0 )
-		res.y = delta / maxv;      // s
-	else {
-		// r = g = b = 0      // s = 0, v is undefined
-		res.y = 0.0;
-		res.x = -1.0;
-		return res;
-	}
-
-	if( r == maxv )
-		res.x = ( g - b ) / delta;      // between yellow & magenta
-	else if( g == maxv )
-		res.x = 2.0 + ( b - r ) / delta;   // between cyan & yellow
-	else
-		res.x = 4.0 + ( r - g ) / delta;   // between magenta & cyan
-
-	res.x = res.x * 60.0;            // degrees
-	if( res.x < 0.0 )
-		res.x = res.x + 360.0;
-
-	return res;
-}
-
-vec3 HSVtoRGB(float h, float s, float v ) {
-	int i;
-	float f, p, q, t;
-	vec3 res;
-
-	if( s == 0.0 ) {
-		// achromatic (grey)
-		res.x = v;
-		res.y = v;
-		res.z = v;
-		return res;
-	}
-
-	h /= 60.0;         // sector 0 to 5
-	i = int(floor( h ));
-	f = h - float(i);         // factorial part of h
-	p = v * ( 1.0 - s );
-	q = v * ( 1.0 - s * f );
-	t = v * ( 1.0 - s * ( 1.0 - f ) );
-
-	switch( i ) {
-	case 0:
-		res.x = v;
-		res.y = t;
-		res.z = p;
-		break;
-	case 1:
-		res.x = q;
-		res.y = v;
-		res.z = p;
-		break;
-	case 2:
-		res.x = p;
-		res.y = v;
-		res.z = t;
-		break;
-	case 3:
-		res.x = p;
-		res.y = q;
-		res.z = v;
-		break;
-	case 4:
-		res.x = t;
-		res.y = p;
-		res.z = v;
-		break;
-	default:      // case 5:
-		res.x = v;
-		res.y = p;
-		res.z = q;
-		break;
-	}
-
-	return res;
-}
-
-float nearestLevel(float col, int mode) {
-	int levCount;
-	if (mode==0) levCount = HueLevCount;
-	if (mode==1) levCount = SatLevCount;
-	if (mode==2) levCount = ValLevCount;
-
-	for (int i =0; i<levCount-1; i++ ) {
-		if (mode==0) {
-			if (col >= HueLevels[i] && col <= HueLevels[i+1]) {
-				return HueLevels[i+1];
-			}
-		}
-		if (mode==1) {
-			if (col >= SatLevels[i] && col <= SatLevels[i+1]) {
-				return SatLevels[i+1];
-			}
-		}
-		if (mode==2) {
-			if (col >= ValLevels[i] && col <= ValLevels[i+1]) {
-				return ValLevels[i+1];
-			}
-		}
-	}
-}
-
-// averaged pixel intensity from 3 color channels
-float avg_intensity(vec4 pix) {
-	return (pix.r + pix.g + pix.b)/3.;
-}
-
-vec4 get_pixel(vec2 coords, float dx, float dy) {
-	return texture2D(Texture0,coords + vec2(dx, dy));
-}
-
-// returns pixel color
-float IsEdge(in vec2 coords){
-	float dxtex = 1.0 /float(textureSize(Texture0,0)) ;
-	float dytex = 1.0 /float(textureSize(Texture0,0));
-	float pix[9];
-	int k = -1;
-	float delta;
-
-	// read neighboring pixel intensities
-	for (int i=-1; i<2; i++) {
-		for(int j=-1; j<2; j++) {
-			k++;
-			pix[k] = avg_intensity(get_pixel(coords,float(i)*dxtex,
-				float(j)*dytex));
-		}
-	}
-
-	// average color differences around neighboring pixels
-	delta = (abs(pix[1]-pix[7])+
-		abs(pix[5]-pix[3]) +
-		abs(pix[0]-pix[8])+
-		abs(pix[2]-pix[6])
-		)/4.;
-
-	return clamp(5.5*delta,0.0,1.0);
-}
-
-void main(void)
-{
-	vec4 colorOrg = texture2D( Texture0, gl_TexCoord[0].st );
-	vec3 vHSV =  RGBtoHSV(colorOrg.r,colorOrg.g,colorOrg.b);
-	vHSV.x = nearestLevel(vHSV.x, 0);
-	vHSV.y = nearestLevel(vHSV.y, 1);
-	vHSV.z = nearestLevel(vHSV.z, 2);
-	float edg = IsEdge(gl_TexCoord[0].st);
-	vec3 vRGB = (edg >= 0.3)? vec3(0.0,0.0,0.0):HSVtoRGB(vHSV.x,vHSV.y,vHSV.z);
-	gl_FragColor = vec4(vRGB.x,vRGB.y,vRGB.z,1.0);
-}
diff --git a/game/modules/tome/data/gfx/shaders/target_fbo.frag b/game/modules/tome/data/gfx/shaders/target_fbo.frag
new file mode 100644
index 0000000000..77a229d828
--- /dev/null
+++ b/game/modules/tome/data/gfx/shaders/target_fbo.frag
@@ -0,0 +1,139 @@
+//#version 150
+uniform sampler2D fboTex;
+uniform sampler2D targetSkin;
+uniform vec2 mapCoord;
+uniform vec2 tileSize;
+uniform vec2 scrollOffset;
+
+void main(void)
+{
+	vec2 offset = vec2(1.0, 1.0) / mapCoord * tileSize * 0.5;
+	
+	vec4 colorm0 = texture2D( fboTex, gl_TexCoord[0].xy + vec2(-offset.x, 0.0));
+	vec4 colorp0 = texture2D( fboTex, gl_TexCoord[0].xy + vec2( offset.x, 0.0));
+
+	vec4 color0m = texture2D( fboTex, gl_TexCoord[0].xy + vec2(0.0, -offset.y));
+	vec4 color0p = texture2D( fboTex, gl_TexCoord[0].xy + vec2(0.0,  offset.y));
+	
+	vec4 colormm = texture2D( fboTex, gl_TexCoord[0].xy + vec2(-offset.x,-offset.y));
+	vec4 colormp = texture2D( fboTex, gl_TexCoord[0].xy + vec2(-offset.x, offset.y));
+	vec4 colorpm = texture2D( fboTex, gl_TexCoord[0].xy + vec2( offset.x,-offset.y));	
+	vec4 colorpp = texture2D( fboTex, gl_TexCoord[0].xy + vec2( offset.x, offset.y));	
+
+	vec4 color00 = texture2D( fboTex, gl_TexCoord[0].xy);
+	
+	vec4 resultColor = color00;
+		
+	bool loc1 = false;
+	bool loc2 = false;
+	bool loc3 = false;
+	bool loc4 = false;
+	bool loc5 = false;
+	bool loc6 = false;
+	bool loc7 = false;
+	bool loc8 = false;
+	bool loc9 = false;
+	
+	if(colormm.a > 0.1)
+		loc1 = true;
+	if(colormp.a > 0.1)
+		loc7 = true;
+	if(colorpm.a > 0.1)
+		loc3 = true;
+	if(colorpp.a > 0.1)
+		loc9 = true;
+		
+	int location = 5;
+	bool isInternal = false;
+	
+	if(loc1 && !loc9 && loc7 && !loc3)
+		location = 6;
+	if(loc1 && !loc9  && loc3 && !loc7)
+		location = 8;
+	if(loc3 && !loc7 && loc9 && !loc1)
+		location = 4;
+	if(loc7 && !loc3 && loc9 && !loc1)
+		location = 2;
+		
+	if(loc1 && !loc7 && !loc3 && !loc9)
+		location = 9;
+	if(loc7 && !loc1 && !loc9 && !loc3)
+		location = 3;
+	if(loc9 && !loc7 && !loc3 && !loc1)
+		location = 1;
+	if(loc3 && !loc1 && !loc9 && !loc7)
+		location = 7;
+
+	if(loc1 && loc7 && loc3 && !loc9)
+	{
+		location = 1;
+		isInternal = true;
+	}
+	if(loc7 && loc1 && loc9 && !loc3)
+	{
+		location = 7;
+		isInternal = true;
+	}
+	if(loc9 && loc7 && loc3 && !loc1)
+	{
+		location = 9;
+		isInternal = true;
+	}
+	if(loc3 && loc1 && loc9 && !loc7)
+	{
+		location = 3;
+		isInternal = true;
+	}
+	
+	vec2 fboCoord = gl_TexCoord[0].xy;
+	fboCoord.y = 1.0 - fboCoord.y;
+	vec2 texCoord = (fboCoord * mapCoord + scrollOffset) / tileSize + vec2(0.5, 0.5);
+	texCoord.x = mod(texCoord.x, 1.0);
+	texCoord.y = mod(texCoord.y, 1.0);
+
+	vec4 borderColor = vec4(0.0, 0.0, 0.0, 0.0);
+	if(location == 1)
+	{
+		if(isInternal)
+			borderColor += texture2D( targetSkin, texCoord / 4.0 + vec2(1.0 / 4.0 * 0.0, 1.0 / 4.0 * 3.0));
+		else
+			borderColor += texture2D( targetSkin, texCoord / 4.0 + vec2(1.0 / 4.0 * 0.0, 1.0 / 4.0 * 1.0));
+	}
+			
+	if(location == 2)
+		borderColor += texture2D( targetSkin, texCoord / vec2(2.0, 4.0) + vec2(1.0 / 4.0 * 2.0, 1.0 / 4.0 * 1.0));
+
+	if(location == 3)
+	{
+		if(isInternal)
+			borderColor += texture2D( targetSkin, texCoord / 4.0 + vec2(1.0 / 4.0 * 1.0, 1.0 / 4.0 * 3.0));
+		else
+			borderColor += texture2D( targetSkin, texCoord / 4.0 + vec2(1.0 / 4.0 * 1.0, 1.0 / 4.0 * 1.0));
+	}
+	if(location == 6)
+		borderColor += texture2D( targetSkin, texCoord / vec2(4.0, 2.0) + vec2(1.0 / 4.0 * 3.0, 1.0 / 4.0 * 2.0));
+			
+	if(location == 9)
+	{
+		if(isInternal)
+			borderColor += texture2D( targetSkin, texCoord / 4.0 + vec2(1.0 / 4.0 * 1.0, 1.0 / 4.0 * 2.0));
+		else
+			borderColor += texture2D( targetSkin, texCoord / 4.0 + vec2(1.0 / 4.0 * 1.0, 1.0 / 4.0 * 0.0));
+	}
+	if(location == 8)
+		borderColor += texture2D( targetSkin, texCoord / vec2(2.0, 4.0) + vec2(1.0 / 4.0 * 2.0, 1.0 / 4.0 * 0.0));
+
+	if(location == 7)
+	{
+		if(isInternal)
+			borderColor += texture2D( targetSkin, texCoord / 4.0 + vec2(1.0 / 4.0 * 0.0, 1.0 / 4.0 * 2.0));
+		else
+			borderColor += texture2D( targetSkin, texCoord / 4.0 + vec2(1.0 / 4.0 * 0.0, 1.0 / 4.0 * 0.0));
+	}
+	if(location == 4)
+		borderColor += texture2D( targetSkin, texCoord / vec2(4.0, 2.0) + vec2(1.0 / 4.0 * 2.0, 1.0 / 4.0 * 2.0));
+
+	borderColor.rgb *= borderColor.a;
+	resultColor += borderColor;
+	gl_FragColor = resultColor;
+}
diff --git a/game/modules/tome/data/gfx/shaders/mm_fbo.lua b/game/modules/tome/data/gfx/shaders/target_fbo.lua
similarity index 89%
rename from game/modules/tome/data/gfx/shaders/mm_fbo.lua
rename to game/modules/tome/data/gfx/shaders/target_fbo.lua
index 5f85eeb4d6..8e0ba1def4 100644
--- a/game/modules/tome/data/gfx/shaders/mm_fbo.lua
+++ b/game/modules/tome/data/gfx/shaders/target_fbo.lua
@@ -18,9 +18,12 @@
 -- darkgod@te4.org
 
 return {
-	frag = "mm_fbo",
+	frag = "target_fbo",
 	vert = nil,
 	args = {
+		fboTex = { texture = 0 },
+		targetSkin = { texture = 1 },
+		scrollOffset = {0, 0},
 	},
 	clone = false,
 	permanent = true,
diff --git a/game/modules/tome/data/gfx/ui/targetshader.png b/game/modules/tome/data/gfx/ui/targetshader.png
new file mode 100644
index 0000000000000000000000000000000000000000..a0a84f5c3398bba3badf6203baae862ff75a74df
GIT binary patch
literal 25600
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
Yl2UZp>nT46RxAU^dj?t+nszV$2f39$?*IS*

literal 0
HcmV?d00001

-- 
GitLab