From a27078c775fa1bec90d0b47230bc32d5e5eddb25 Mon Sep 17 00:00:00 2001
From: DarkGod <darkgod@net-core.org>
Date: Wed, 6 Nov 2013 15:12:52 +0100
Subject: [PATCH] fix

---
 game/engines/default/engine/Target.lua | 59 +++++++++++++++++---------
 game/modules/tome/class/Game.lua       |  4 +-
 2 files changed, 41 insertions(+), 22 deletions(-)

diff --git a/game/engines/default/engine/Target.lua b/game/engines/default/engine/Target.lua
index b3053a6989..144af87fd8 100644
--- a/game/engines/default/engine/Target.lua
+++ b/game/engines/default/engine/Target.lua
@@ -35,41 +35,60 @@ function _M:init(map, source_actor)
 	self.arrow = engine.Tiles:loadImage("target_arrow.png"):glTexture()
 	self.targetshader = engine.Tiles:loadImage("ui/targetshader.png"):glTexture()
 
+	self:createTextures()
+
+	self.source_actor = source_actor
+
+	-- Setup the tracking target table
+	-- Notice its values are set to weak references, this has no effects on the number for x and y
+	-- but it means if the entity field is set to an entity, when it disappears this link wont prevent
+	-- the garbage collection
+	self.target = {x=self.source_actor.x, y=self.source_actor.y, entity=nil}
+--	setmetatable(self.target, {__mode='v'})
+end
+
+function _M:createTextures()
 	--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)))
-	local pot_height = math.pow(2, math.ceil(math.log(map.tile_h-0.1) / math.log(2.0)))
+	local pot_width = math.pow(2, math.ceil(math.log(self.tile_w-0.1) / math.log(2.0)))
+	local pot_height = math.pow(2, math.ceil(math.log(self.tile_h-0.1) / math.log(2.0)))
 	self.sr = core.display.newSurface(pot_width, pot_height)
-	self.sr:erase(255, 0, 0, 150)
+	self.sr:erase(255, 0, 0, self.fbo and 150 or 90)
 	self.sr = self.sr:glTexture()
 	self.sb = core.display.newSurface(pot_width, pot_height)
-	self.sb:erase(0, 0, 255, 150)
+	self.sb:erase(0, 0, 255, self.fbo and 150 or 90)
 	self.sb = self.sb:glTexture()
 	self.sg = core.display.newSurface(pot_width, pot_height)
-	self.sg:erase(0, 255, 0, 150)
+	self.sg:erase(0, 255, 0, self.fbo and 150 or 90)
 	self.sg = self.sg:glTexture()
 	self.sy = core.display.newSurface(pot_width, pot_height)
-	self.sy:erase(255, 255, 0, 150)
+	self.sy:erase(255, 255, 0, self.fbo and 150 or 90)
 	self.sy = self.sy:glTexture()
 	self.syg = core.display.newSurface(pot_width, pot_height)
-	self.syg:erase(153, 204, 50, 150)
+	self.syg:erase(153, 204, 50, self.fbo and 150 or 90)
 	self.syg = self.syg:glTexture()
-
-	self.source_actor = source_actor
-
-	-- Setup the tracking target table
-	-- Notice its values are set to weak references, this has no effects on the number for x and y
-	-- but it means if the entity field is set to an entity, when it disappears this link wont prevent
-	-- the garbage collection
-	self.target = {x=self.source_actor.x, y=self.source_actor.y, entity=nil}
---	setmetatable(self.target, {__mode='v'})
 end
 
-function _M:enableFBORenderer(shader)
+function _M:enableFBORenderer(texture, shader)
+	if not shader then 
+		self.fbo = nil
+		return
+		self:createTextures()
+	end
 	self.fbo = core.display.newFBO(Map.viewport.width, Map.viewport.height)
-	if not self.fbo then return end
-	if shader then
-		self.fbo_shader = Shader.new(shader)
+	if not self.fbo then
+		self:createTextures()
+		return
 	end
+
+	self.fbo_shader = Shader.new(shader)
+	if not self.fbo_shader.shad then
+		self.fbo = nil
+		self:createTextures()
+		return
+	end
+
+	self.targetshader = engine.Tiles:loadImage(texture):glTexture()
+	self:createTextures()
 end
 
 function _M:displayArrow(sx, sy, tx, ty, full)
diff --git a/game/modules/tome/class/Game.lua b/game/modules/tome/class/Game.lua
index 2a2b7a2a5e..9239b315f1 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("target_fbo") end
+	if self.target then self.target:enableFBORenderer("ui/targetshader.png", "target_fbo") end
 
 	self.uiset.hotkeys_display.actor = self.player
 	self.uiset.npcs_display.actor = self.player
@@ -516,7 +516,7 @@ 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
+	if self.target then self.target:enableFBORenderer("ui/targetshader.png", "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
-- 
GitLab