Can now move the circles

This commit is contained in:
theo@manjaro 2022-03-04 11:10:37 +01:00
parent 8f7b5fff0a
commit 4208f706fd

View File

@ -18,18 +18,80 @@ function gen:new(game,x,y,color,grid)
local spriteindex = 1 local spriteindex = 1
if self.selected then spriteindex = 2 end if self.selected then spriteindex = 2 end
lg.draw(self.sprites[spriteindex],self.rect[1]-self.game.camerax-self.spriteoffx,self.rect[2]-self.game.cameray-self.spriteoffy) lg.draw(self.sprites[spriteindex],self.rect[1]-self.game.camerax-self.spriteoffx,self.rect[2]-self.game.cameray-self.spriteoffy)
if self.selected then
local i
for i=1,#self.moves do
lg.draw(self.shadowsprite,self.moves[i][1]-self.game.camerax-self.spriteoffx,self.moves[i][2]-self.game.cameray-self.spriteoffy)
end
end
end end
function Circle:MouseCallback(x,y,presses) function Circle:MouseCallback(x,y,presses)
if self.rect:collidepoint(x,y) then if self.rect:collidepoint(x,y) then
local c = self.game:findName(self.color) local c = self.game:findName("Circle")
local i local i
for i=1,#c do for i=1,#c do
if c[i]~=self then c[i].selected = false end if c[i]~=self then c[i].selected = false end
end end
self.selected = not self.selected self.selected = not self.selected
self.depth = 1
if self.selected then
self.moves = self:findAvailableMoves()
self.depth = 2
end end
end end
if self.selected then
local i
for i=1,#self.moves do
rect = self.game.rect:new(self.moves[i][1],self.moves[i][2],self.cellsize,self.cellsize)
if rect:collidepoint(x,y) then
self.rect:move_ip(self.moves[i][1],self.moves[i][2])
self.selected = false
break
end
end
end
end
function Circle:findAvailableMoves()
local moves = {}
local movx
local movy
local offx
local offy
obj = self.game:findName("Circle")
function ValidMove(x,y)
local i
x = self.rect.x+x+self.cellsize/2
y = self.rect.y+y+self.cellsize/2
local result = self.grid.rect:collidepoint(x,y)
for i=1,#obj do
if obj[i].rect:collidepoint(x,y) then
result = false
end
end
return result
end
for movx=-1,1 do
for movy=-1,1 do
if not (movx==0 and movy==0) then
offx = movx*self.cellsize
offy = movy*self.cellsize
while ValidMove(offx+movx*self.cellsize,offy+movy*self.cellsize) do
offx = offx + movx*self.cellsize
offy = offy + movy*self.cellsize
end
if ValidMove(offx,offy) then
table.insert(moves,{offx+self.rect.x,offy+self.rect.y})
end
end
end
end
return moves
end
return Circle return Circle
end end