local Map = Object:extend() local maputils = require "scenes.battlesystem.utils" function Map:new(world, type, terrain) self.world = world self.assets = self.world.assets self.scene = self.world.scene self.datas = {} self.datas.type = type or "city" self.datas.terrains = terrain or maputils.newEmptyMap() local zones = require "datas.gamedata.maps.shoot.zones" local datas = zones[self.datas.type] self.datas.background = datas.background self.datas.tiles = datas.tiles self.datas.borders = datas.borders local backpath = "assets/backgrounds/parallax/" .. self.datas.background self.assets:addImage("back1", backpath .. "-back.png") self.assets:addImage("back2", backpath .. "-fore.png") self.assets:addImage("cliff", backpath .. "-cliff.png") end -- GET FUNCTIONS -- Get information from the map function Map:getTerrain(x, y) if self.datas.terrains[y] ~= nil then return self.datas.terrains[y][x] else return nil end end function Map:isInGrid(x, y) return ( self:getTerrain(x, y) ~= nil ) end -- DRAW FUNCTIONS -- Draw the battle map function Map:draw(activeGrid, effectGrid) self:drawBackgrounds() self:drawBorders() self:drawTerrains(activeGrid) if (effectGrid ~= nil) then self:drawEffectGrid(effectGrid) end end function Map:drawBackgrounds() local w, _ = core.screen:getDimensions() local w2, h2 = self.assets.images["back1"]:getDimensions() local imax = math.ceil(w / w2) + 1 for i=1, imax do self.assets.images["back1"]:draw((i-1)*w2, 0, 0, 1, 1) end local w2, h2 = self.assets.images["back2"]:getDimensions() local imax = math.ceil(w / w2) + 1 for i=1, imax do self.assets.images["back2"]:draw((i-1)*w2, maputils.CONST.STARTY-h2, 0, 1, 1) end end function Map:drawBorders() local border = self.datas.borders + 1 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, maputils.CONST.STARTY+20*7, 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 function Map:drawEffectGrid(effectGrid) for i=1,7 do for j=1,17 do if (effectGrid[i][j] == 1) then local x, y = maputils.gridToPixel(j, i) love.graphics.setColor(1, 1, 1, .2) self.assets.images["emptytile"]:draw(x, y) love.graphics.setColor(1, 1, 1, 1) end end end end return Map