vision/planet/planet.lua

70 lines
No EOL
1.5 KiB
Lua

Planet = Object.extend(Object)
function Planet:new()
Planet.super.new(self)
end
function Planet:init()
self.canvas = love.graphics.newCanvas(windowWidth, windowHeight)
self.map = {
{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}
}
self.spritemap = {
s1= tileGroundFull
}
self.hasGeneratedMap = false
self.mapThread = love.thread.newThread("planet/mapthread.lua")
self.mapThread:start()
self.channel = {}
self.channel.tomap = love.thread.getChannel("tomap")
self.channel.blocks = love.thread.getChannel("blocks")
self:generateMapBlock()
end
function Planet:update(dt)
local error = self.mapThread:getError()
assert( not error, error )
local blocks = self.channel.blocks:pop()
if blocks then
for y = 1, table.getn(blocks) do
table.insert(self.map, blocks[y])
end
self:draw()
self.hasGeneratedMap = true
end
end
function Planet:draw()
local maplen = table.getn(self.map)
if maplen > 0 then
love.graphics.setCanvas(self.canvas)
love.graphics.setColor(1,1,1,1)
local sprite = nil
local pos = 0
for y=1, math.min(maplen,20) do
for x=1, 25 do
sprite = nil
pos = self.map[y][x]
if pos > 0 then
sprite = self.spritemap["s"..pos]
love.graphics.draw(sprite, (x-1)*32, (600-98) - (y-1)*32)
end
end
end
love.graphics.setCanvas()
end
end
function Planet:generateMapBlock()
self.channel.tomap:push( { message= "generateblock", width= 25, height= 60 } )
end