local gen= {} function gen:new(game,x,y,color,grid) local Circle = game.objects.base:new(game,x,y,grid.cellsize,grid.cellsize) Circle.cellsize = grid.cellsize Circle.grid = grid Circle.color = color Circle.shadowsprite = game:newImage("circles/shadow.png") Circle.sprites = {game:newImage("circles/regular/"..color..".png"),game:newImage("circles/selected/"..color..".png")} Circle:register("Circle") Circle:register(color) Circle.selected = false function Circle:step(dt) if self.color=="neutron" and self:isMyTurn()then if not self.selected then self.moves = self:findAvailableMoves() self.selected = true end end end function Circle:isMyTurn() return self.color=="pink" and self.grid.turn==1 or self.color=="blue" and self.grid.turn==3 or self.color=="neutron" and self.grid.turn%2==0 end function Circle:draw() 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) and self:isMyTurn() then 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 self.grid:addturn() 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 = 0 offy = 0 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 end return gen