diff --git a/src/main.lua b/src/main.lua index f10cd04..6862452 100644 --- a/src/main.lua +++ b/src/main.lua @@ -72,22 +72,29 @@ end function love.mousepressed(x, y, button) if button == "l" then - for i=1,#ships do - if ships[i].selection.r then - if pointInRadius(x, y, ships[i].x, ships[i].y, ships[i].selection.r) then - -- selected - -- NOW CHECK IF HAS NODES AND IF WE ARE SELECTING A SHIP ON A NODE! - selected = {} - selected.x = ships[i].x - selected.y = ships[i].y - end - else - if pointInAABB(x, y, ships[i].x, ships[i].y, ships[i].selection, ships[i].rotation) then - -- we are selecting it! - -- NOW CHECK IF HAS NODES AND IF WE ARE SELECTING A SHIP ON A NODE! - selected = {} - selected.x = ships[i].x - selected.y = ships[i].y + if selected then + -- find out where this actually is, now the ship selected is ordered to move to this point + selected.ship:moveTo(x * scale + hx, y * scale + hy) + else + for i=1,#ships do + if ships[i].selection.r then + if pointInRadius(x, y, ships[i].x, ships[i].y, ships[i].selection.r) then + -- selected + -- NOW CHECK IF HAS NODES AND IF WE ARE SELECTING A SHIP ON A NODE! + selected = {} + selected.ship = ships[i] + selected.x = ships[i].x + selected.y = ships[i].y + end + else + if pointInAABB(x, y, ships[i].x, ships[i].y, ships[i].selection, ships[i].rotation) then + -- we are selecting it! + -- NOW CHECK IF HAS NODES AND IF WE ARE SELECTING A SHIP ON A NODE! + selected = {} + selected.ship = ships[i] + selected.x = ships[i].x + selected.y = ships[i].y + end end end end diff --git a/src/ships/bsg.lua b/src/ships/bsg.lua index 20dad79..6be55be 100644 --- a/src/ships/bsg.lua +++ b/src/ships/bsg.lua @@ -35,13 +35,16 @@ return function(x, y, rotation) } self.dock = function(self, ship, node) - if self.node[node].docked then return false end + if self.node[node].docked or ship.isDocked then return false end ship.x = self.node[node].x ship.y = self.node[node].y ship.rotation = self.node[node].rotation self.node[node].docked = ship + ship.isDocked = true + ship.dockedTo = self + ship.dockedNode = node return true end @@ -49,6 +52,9 @@ return function(x, y, rotation) if not self.node[node].docked then return false end local ship = self.node[node].docked + ship.isDocked = false + ship.dockedTo = false + ship.dockedNode = false self.node[node].docked = false return ship diff --git a/src/ships/viper.lua b/src/ships/viper.lua index 3482d1f..ce4b6a0 100644 --- a/src/ships/viper.lua +++ b/src/ships/viper.lua @@ -9,6 +9,12 @@ return function(x, y, rotation) self.y = y or 0 self.rotation = rotation or 0 + self.destination = { + x = x or 0, + y = y or 0 + } + self.isMoving = false + --[[ self.selection = { w = 9, @@ -20,6 +26,23 @@ return function(x, y, rotation) } --self.node = false + self.isDocked = false + self.dockedTo = false + self.dockedNode = false + + self.moveTo = function(self, x, y) + if self.isDocked then + self.dockedTo:undock(self.dockedNode) + end + self.destination.x = x + self.destination.y = y + self.isMoving = true + end + + self.update = function(self, dt) + -- check if moving, check our speed, see how far along the "line" we can go, go there + -- if reached destination ... WELL SHIT DEST NEEDS TO BE ABLE TO KNOW IF IS SHIP OR WHATEVER + end return self end