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