Skip to content
Snippets Groups Projects
Commit d1a194b5 authored by dg's avatar dg
Browse files

Tactical display is now handled by entities (actors) display callback (no...

Tactical display is now handled by entities (actors) display callback (no change for modules, except they can customize it as needed)
Added lifebars to tactical display mode


git-svn-id: http://svn.net-core.org/repos/t-engine4@3220 51575b47-30f0-44d4-a5cc-537603b46e54
parent 28e6a5f1
No related branches found
No related tags found
No related merge requests found
......@@ -95,6 +95,12 @@ function _M:defineDisplayCallback()
ps[#ps+1] = e
end
local f_self = nil
local f_danger = nil
local f_friend = nil
local f_enemy = nil
local f_neutral = nil
self._mo:displayCallback(function(x, y, w, h)
local e
for i = 1, #ps do
......@@ -103,6 +109,37 @@ function _M:defineDisplayCallback()
else self:removeParticles(e)
end
end
-- Tactical info
if game.level and game.level.map.view_faction then
local map = game.level.map
if not f_self then
f_self = game.level.map.tilesTactic:get(nil, 0,0,0, 0,0,0, map.faction_self)
f_danger = game.level.map.tilesTactic:get(nil, 0,0,0, 0,0,0, map.faction_danger)
f_friend = game.level.map.tilesTactic:get(nil, 0,0,0, 0,0,0, map.faction_friend)
f_enemy = game.level.map.tilesTactic:get(nil, 0,0,0, 0,0,0, map.faction_enemy)
f_neutral = game.level.map.tilesTactic:get(nil, 0,0,0, 0,0,0, map.faction_neutral)
end
if self.faction then
local friend
if not map.actor_player then friend = Faction:factionReaction(map.view_faction, self.faction)
else friend = map.actor_player:reactionToward(self) end
if self == map.actor_player then
f_self:toScreen(x, y, w, h)
elseif map:faction_danger_check(self) then
f_danger:toScreen(x, y, w, h)
elseif friend > 0 then
f_friend:toScreen(x, y, w, h)
elseif friend < 0 then
f_enemy:toScreen(x, y, w, h)
else
f_neutral:toScreen(x, y, w, h)
end
end
end
return true
end)
end
......
......@@ -459,42 +459,6 @@ function _M:display(x, y, nb_keyframe, always_show)
self.display_x, self.display_y = x or self.display_x, y or self.display_y
self._map:toScreen(self.display_x, self.display_y, nb_keyframe, always_show)
-- Tactical display
if self.view_faction then
local e
local z
local adx, ady
local friend
for i = self.mx, self.mx + self.viewport.mwidth do
for j = self.my, self.my + self.viewport.mheight do
local z = i + j * self.w
if self.seens[z] then
e = self(i, j, ACTOR)
if e and (not self.actor_player or self.actor_player:canSee(e)) then
-- Tactical overlay ?
if e.faction then
if not self.actor_player then friend = Faction:factionReaction(self.view_faction, e.faction)
else friend = self.actor_player:reactionToward(e) end
if e._mo then adx, ady = e._mo:getMoveAnim(self._map, i, j) else adx, ady = 0, 0 end -- Make sure we display on the real screen coords: handle current move anim position
if e == self.actor_player then
self.tilesTactic:get(nil, 0,0,0, 0,0,0, self.faction_self):toScreen(self.display_x + (adx + i - self.mx) * self.tile_w * self.zoom, self.display_y + (ady + j - self.my) * self.tile_h * self.zoom, self.tile_w * self.zoom, self.tile_h * self.zoom)
elseif self:faction_danger_check(e) then
self.tilesTactic:get(nil, 0,0,0, 0,0,0, self.faction_danger):toScreen(self.display_x + (adx + i - self.mx) * self.tile_w * self.zoom, self.display_y + (ady + j - self.my) * self.tile_h * self.zoom, self.tile_w * self.zoom, self.tile_h * self.zoom)
elseif friend > 0 then
self.tilesTactic:get(nil, 0,0,0, 0,0,0, self.faction_friend):toScreen(self.display_x + (adx + i - self.mx) * self.tile_w * self.zoom, self.display_y + (ady + j - self.my) * self.tile_h * self.zoom, self.tile_w * self.zoom, self.tile_h * self.zoom)
elseif friend < 0 then
self.tilesTactic:get(nil, 0,0,0, 0,0,0, self.faction_enemy):toScreen(self.display_x + (adx + i - self.mx) * self.tile_w * self.zoom, self.display_y + (ady + j - self.my) * self.tile_h * self.zoom, self.tile_w * self.zoom, self.tile_h * self.zoom)
else
self.tilesTactic:get(nil, 0,0,0, 0,0,0, self.faction_neutral):toScreen(self.display_x + (adx + i - self.mx) * self.tile_w * self.zoom, self.display_y + (ady + j - self.my) * self.tile_h * self.zoom, self.tile_w * self.zoom, self.tile_h * self.zoom)
end
end
end
end
end end
end
self:displayParticles(nb_keyframe)
self:displayEffects()
self:displayEmotes(nb_keyframe)
......
......@@ -392,6 +392,71 @@ function _M:act()
return true
end
--- Attach or remove a display callback
-- Defines particles to display
function _M:defineDisplayCallback()
if not self._mo then return end
local ps = {}
for e, _ in pairs(self.__particles) do
ps[#ps+1] = e
end
local f_self = nil
local f_danger = nil
local f_friend = nil
local f_enemy = nil
local f_neutral = nil
self._mo:displayCallback(function(x, y, w, h)
local e
for i = 1, #ps do
e = ps[i]
if e.ps:isAlive() then e.ps:toScreen(x + w / 2, y + h / 2, true)
else self:removeParticles(e)
end
end
-- Tactical info
if game.level and game.level.map.view_faction then
local map = game.level.map
-- Tactical life info
local dh = h * 0.1
core.display.drawQuad(x, y + h - dh, w, dh, 139, 210, 77, 128)
core.display.drawQuad(x, y + h - dh, w * self.life / self.max_life, dh, 50, 220, 77, 255)
if not f_self then
f_self = game.level.map.tilesTactic:get(nil, 0,0,0, 0,0,0, map.faction_self)
f_danger = game.level.map.tilesTactic:get(nil, 0,0,0, 0,0,0, map.faction_danger)
f_friend = game.level.map.tilesTactic:get(nil, 0,0,0, 0,0,0, map.faction_friend)
f_enemy = game.level.map.tilesTactic:get(nil, 0,0,0, 0,0,0, map.faction_enemy)
f_neutral = game.level.map.tilesTactic:get(nil, 0,0,0, 0,0,0, map.faction_neutral)
end
if self.faction then
local friend
if not map.actor_player then friend = Faction:factionReaction(map.view_faction, self.faction)
else friend = map.actor_player:reactionToward(self) end
if self == map.actor_player then
f_self:toScreen(x, y, w, h)
elseif map:faction_danger_check(self) then
f_danger:toScreen(x, y, w, h)
elseif friend > 0 then
f_friend:toScreen(x, y, w, h)
elseif friend < 0 then
f_enemy:toScreen(x, y, w, h)
else
f_neutral:toScreen(x, y, w, h)
end
end
end
return true
end)
end
function _M:move(x, y, force)
local moved = false
local ox, oy = self.x, self.y
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment