diff --git a/objects/circle.lua b/objects/circle.lua index 5eb3ddb..5e01c92 100644 --- a/objects/circle.lua +++ b/objects/circle.lua @@ -18,17 +18,79 @@ function gen:new(game,x,y,color,grid) local spriteindex = 1 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) + 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 function Circle:MouseCallback(x,y,presses) if self.rect:collidepoint(x,y) then - local c = self.game:findName(self.color) + local c = self.game:findName("Circle") local i for i=1,#c do if c[i]~=self then c[i].selected = false end end self.selected = not self.selected + self.depth = 1 + if self.selected then + self.moves = self:findAvailableMoves() + self.depth = 2 + 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