70 lines
No EOL
1.5 KiB
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 |