Ajout des derniers développement #1
1 changed files with 68 additions and 56 deletions
|
@ -7,13 +7,16 @@ local DURATION = 0.66
|
||||||
local OPACITY_MIN = 0
|
local OPACITY_MIN = 0
|
||||||
local OPACITY_MAX = 0.75
|
local OPACITY_MAX = 0.75
|
||||||
|
|
||||||
|
local HEIGHT = 5
|
||||||
|
local BOTTOM_BORDER = 1
|
||||||
|
|
||||||
function Map:new(world, type, terrain)
|
function Map:new(world, type, terrain)
|
||||||
self.world = world
|
self.world = world
|
||||||
self.assets = self.world.assets
|
self.assets = self.world.assets
|
||||||
self.scene = self.world.scene
|
self.scene = self.world.scene
|
||||||
|
|
||||||
self.datas = {}
|
self.datas = {}
|
||||||
self.datas.type = type or "city"
|
self.datas.type = type or "forest"
|
||||||
self.datas.terrains = terrain or maputils.newEmptyMap()
|
self.datas.terrains = terrain or maputils.newEmptyMap()
|
||||||
|
|
||||||
self.tweens = TweenManager(self)
|
self.tweens = TweenManager(self)
|
||||||
|
@ -30,14 +33,21 @@ function Map:new(world, type, terrain)
|
||||||
self.assets:addImage("back1", backpath .. "-back.png")
|
self.assets:addImage("back1", backpath .. "-back.png")
|
||||||
self.assets:addImage("back2", backpath .. "-fore.png")
|
self.assets:addImage("back2", backpath .. "-fore.png")
|
||||||
self.assets:addImage("cliff", backpath .. "-cliff.png")
|
self.assets:addImage("cliff", backpath .. "-cliff.png")
|
||||||
|
|
||||||
|
self.texture = {}
|
||||||
|
self.texture.floor = self:generateFloor(tile)
|
||||||
end
|
end
|
||||||
|
|
||||||
-- GET FUNCTIONS
|
-- GET FUNCTIONS
|
||||||
-- Get information from the map
|
-- Get information from the map
|
||||||
|
|
||||||
|
function Map:getTotalHeight()
|
||||||
|
return HEIGHT + BOTTOM_BORDER;
|
||||||
|
end
|
||||||
|
|
||||||
function Map:getTerrain(x, y)
|
function Map:getTerrain(x, y)
|
||||||
if self.datas.terrains[y] ~= nil then
|
if (y <= HEIGHT) then
|
||||||
return self.datas.terrains[y][x]
|
return 0
|
||||||
else
|
else
|
||||||
return nil
|
return nil
|
||||||
end
|
end
|
||||||
|
@ -47,6 +57,26 @@ function Map:isInGrid(x, y)
|
||||||
return ( self:getTerrain(x, y) ~= nil )
|
return ( self:getTerrain(x, y) ~= nil )
|
||||||
end
|
end
|
||||||
|
|
||||||
|
function Map:getStartY()
|
||||||
|
return 240 - (self:getTotalHeight() * 20) - 10
|
||||||
|
end
|
||||||
|
|
||||||
|
function Map:gridToPixel(x, y, center)
|
||||||
|
local pixelx, pixely
|
||||||
|
local center = center or false
|
||||||
|
local x, y = x, y
|
||||||
|
|
||||||
|
if (center) then
|
||||||
|
x = x + .5
|
||||||
|
y = y + .5
|
||||||
|
end
|
||||||
|
|
||||||
|
pixelx = maputils.CONST.STARTX + ((x-1) * 31) + ((y-1) * 10)
|
||||||
|
pixely = self:getStartY() + ((y-1) * 20)
|
||||||
|
|
||||||
|
return math.floor(pixelx), math.floor(pixely)
|
||||||
|
end
|
||||||
|
|
||||||
function Map:update(dt)
|
function Map:update(dt)
|
||||||
self.tweens:update(dt)
|
self.tweens:update(dt)
|
||||||
end
|
end
|
||||||
|
@ -75,17 +105,43 @@ end
|
||||||
-- DRAW FUNCTIONS
|
-- DRAW FUNCTIONS
|
||||||
-- Draw the battle map
|
-- Draw the battle map
|
||||||
|
|
||||||
function Map:draw(activeGrid, effectGrid)
|
function Map:generateFloor(tile)
|
||||||
|
local canvas = love.graphics.newCanvas(31*16, self:getTotalHeight() * 20)
|
||||||
|
local tile = tile or 1
|
||||||
|
|
||||||
|
love.graphics.setCanvas( canvas )
|
||||||
|
|
||||||
|
for i=1, self:getTotalHeight() do
|
||||||
|
for j=0, 18 do
|
||||||
|
local tiley = (i-1)*20
|
||||||
|
local tilex = (j-2)*31 + (i-1)*10
|
||||||
|
local variant = 1 + ((i + j) % 2)
|
||||||
|
local tiles = self.datas.tiles*2 + variant
|
||||||
|
if (not self:isInGrid(j, i)) then
|
||||||
|
love.graphics.setColor(.66, .66, .66, 1)
|
||||||
|
end
|
||||||
|
self.assets.tileset["normaltiles"]:drawTile(tiles, tilex, tiley)
|
||||||
|
utils.graphics.resetColor()
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
love.graphics.setCanvas( )
|
||||||
|
|
||||||
|
local imagedata = canvas:newImageData()
|
||||||
|
local texture = love.graphics.newImage( imagedata )
|
||||||
|
imagedata:release()
|
||||||
|
canvas:release()
|
||||||
|
return texture
|
||||||
|
end
|
||||||
|
|
||||||
|
|
||||||
|
function Map:draw()
|
||||||
self:drawBackgrounds()
|
self:drawBackgrounds()
|
||||||
self:drawBorders()
|
self:drawBorders()
|
||||||
self:drawTerrains(activeGrid)
|
love.graphics.draw(self.texture.floor, maputils.CONST.STARTX, self:getStartY())
|
||||||
if (effectGrid ~= nil) then
|
|
||||||
self:drawEffectGrid(effectGrid)
|
|
||||||
end
|
|
||||||
end
|
end
|
||||||
|
|
||||||
function Map:drawBackgrounds()
|
function Map:drawBackgrounds()
|
||||||
|
|
||||||
local w, _ = core.screen:getDimensions()
|
local w, _ = core.screen:getDimensions()
|
||||||
|
|
||||||
local w2, h2 = self.assets.images["back1"]:getDimensions()
|
local w2, h2 = self.assets.images["back1"]:getDimensions()
|
||||||
|
@ -97,7 +153,7 @@ function Map:drawBackgrounds()
|
||||||
local w2, h2 = self.assets.images["back2"]:getDimensions()
|
local w2, h2 = self.assets.images["back2"]:getDimensions()
|
||||||
local imax = math.ceil(w / w2) + 1
|
local imax = math.ceil(w / w2) + 1
|
||||||
for i=1, imax do
|
for i=1, imax do
|
||||||
self.assets.images["back2"]:draw((i-1)*w2, maputils.CONST.STARTY-h2, 0, 1, 1)
|
self.assets.images["back2"]:draw((i-1)*w2, self:getStartY()-h2, 0, 1, 1)
|
||||||
end
|
end
|
||||||
|
|
||||||
end
|
end
|
||||||
|
@ -105,51 +161,8 @@ end
|
||||||
function Map:drawBorders()
|
function Map:drawBorders()
|
||||||
local border = self.datas.borders + 1
|
local border = self.datas.borders + 1
|
||||||
for i=1, 7 do
|
for i=1, 7 do
|
||||||
self.assets.tileset["borders"]:drawTile(border, (i-1)*80, maputils.CONST.STARTY-10 , 0, 1, 1)
|
self.assets.tileset["borders"]:drawTile(border, (i-1)*80, self:getStartY()-10 , 0, 1, 1)
|
||||||
self.assets.tileset["borders"]:drawTile(border, (i-1)*80, maputils.CONST.STARTY+20*7, 0, 1, 1)
|
self.assets.tileset["borders"]:drawTile(border, (i-1)*80, 240-10, 0, 1, 1)
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
function Map:drawTerrains(activeGrid)
|
|
||||||
local vl, vhd, vd = 1, .7, .5
|
|
||||||
local isActive = (activeGrid ~= nil)
|
|
||||||
|
|
||||||
|
|
||||||
for i=1, 7 do
|
|
||||||
for j= -2, 17 do
|
|
||||||
local k = 1 + ((i + j) % 2)
|
|
||||||
|
|
||||||
local terrain = self:getTerrain(j, i)
|
|
||||||
local x, y = maputils.gridToPixel(j, i, false)
|
|
||||||
|
|
||||||
if (terrain ~= nil) then
|
|
||||||
if (isActive) then
|
|
||||||
if (activeGrid[i][j] == 1) then
|
|
||||||
love.graphics.setColor(vl, vl, vl, 1)
|
|
||||||
else
|
|
||||||
love.graphics.setColor(vhd, vhd, vhd, 1)
|
|
||||||
end
|
|
||||||
else
|
|
||||||
love.graphics.setColor(vl, vl, vl, 1)
|
|
||||||
end
|
|
||||||
|
|
||||||
self:drawTile(x, y, terrain, k)
|
|
||||||
else
|
|
||||||
love.graphics.setColor(vd, vd, vd, 1)
|
|
||||||
self:drawTile(x, y, 0, k)
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
love.graphics.setColor(1, 1, 1, 1)
|
|
||||||
end
|
|
||||||
|
|
||||||
function Map:drawTile(x, y, type, variant)
|
|
||||||
if type == 0 then
|
|
||||||
local tiles = self.datas.tiles*2 + variant
|
|
||||||
self.assets.tileset["normaltiles"]:drawTile(tiles, x, y)
|
|
||||||
else
|
|
||||||
self.assets.tileset["sptiles"]:drawTile(type, x, y)
|
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -166,5 +179,4 @@ function Map:drawEffectGrid(effectGrid)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
||||||
return Map
|
return Map
|
||||||
|
|
Loading…
Reference in a new issue