1seesaw = class:new() 2 3--settings for the types 4seesawtype = {} 5seesawtype[1] = {7,4,6,3} 6seesawtype[2] = {4,2,6,3} 7seesawtype[3] = {7,3,6,3} 8seesawtype[4] = {8,3,7,3} 9seesawtype[5] = {5,3,7,3} 10seesawtype[6] = {6,3,7,3} 11seesawtype[7] = {4,3,7,1.5} 12seesawtype[8] = {3,3,7,1.5} 13seesawtype[9] = {3,4,7,1.5} 14 15 16function seesaw:init(x, y, t) 17 self.x = x 18 self.y = y 19 20 if t == nil then 21 t = 1 22 end 23 24 self.range = seesawtype[t][1] 25 self.dist1 = seesawtype[t][2] 26 self.dist2 = seesawtype[t][3] 27 28 self.lcount = 0 29 self.rcount = 0 30 self.falloff = false 31 32 self.leftplatform = seesawplatform:new(self.x, self.y+self.dist1, seesawtype[t][4], self, "left") 33 self.rightplatform = seesawplatform:new(self.x+self.range, self.y+self.dist2, seesawtype[t][4], self, "right") 34 35 table.insert(objects["seesawplatform"], self.leftplatform) 36 table.insert(objects["seesawplatform"], self.rightplatform) 37end 38 39function seesaw:update(dt) 40 if self.falloff then 41 self.leftplatform.speedy = self.leftplatform.speedy + seesawgravity*dt 42 self.rightplatform.speedy = self.rightplatform.speedy + seesawgravity*dt 43 else 44 local speed = self.lcount - self.rcount 45 46 self.leftplatform.speedy = self.leftplatform.speedy + speed*seesawspeed*dt 47 self.rightplatform.speedy = self.rightplatform.speedy - speed*seesawspeed*dt 48 49 if self.leftplatform.speedy > 0 and speed <= 0 then 50 self.leftplatform.speedy = self.leftplatform.speedy - seesawfriction*dt 51 if speed == 0 and self.leftplatform.speedy < 0 then 52 self.leftplatform.speedy = 0 53 end 54 elseif self.leftplatform.speedy < 0 and speed >= 0 then 55 self.leftplatform.speedy = self.leftplatform.speedy + seesawfriction*dt 56 end 57 58 if self.rightplatform.speedy > 0 and speed >= 0 then 59 self.rightplatform.speedy = self.rightplatform.speedy - seesawfriction*dt 60 if speed == 0 and self.rightplatform.speedy < 0 then 61 self.leftplatform.speedy = 0 62 end 63 elseif self.rightplatform.speedy < 0 and speed <= 0 then 64 self.rightplatform.speedy = self.rightplatform.speedy + seesawfriction*dt 65 end 66 67 --check if falloff 68 if self.leftplatform.y-self.y <= 0 then 69 if self.rcount ~= 0 then 70 self:fallingoff("right") 71 else 72 self.leftplatform.y = self.y 73 self.rightplatform.y = self.y+self.dist1+self.dist2-2-2/16 74 end 75 end 76 77 if self.rightplatform.y-self.y <= 0 then 78 if self.lcount ~= 0 then 79 self:fallingoff("left") 80 else 81 self.rightplatform.y = self.y 82 self.leftplatform.y = self.y+self.dist1+self.dist2-2-2/16 83 end 84 end 85 end 86end 87 88function seesaw:fallingoff(side) 89 self.falloffside = side 90 self.falloff = true 91 self.leftplatform.speedy = 0 92 self.rightplatform.speedy = 0 93end 94 95function seesaw:draw() 96 --left 97 love.graphics.drawq(seesawimg, seesawquad[1], math.floor((self.x-1-xscroll)*16*scale), (self.y-1.5)*16*scale, 0, scale, scale) 98 99 if self.falloff == false and self.leftplatform.y-self.y >= 0 then 100 love.graphics.setScissor((self.x-1-xscroll)*16*scale, (self.y-0.5)*16*scale, 16*scale, math.floor((self.leftplatform.y-self.y)*16*scale)) 101 for i = 1, math.ceil(self.leftplatform.y-self.y) do 102 love.graphics.drawq(seesawimg, seesawquad[3], math.floor((self.x-1-xscroll)*16*scale), (self.y+i-1.5)*16*scale, 0, scale, scale) 103 end 104 love.graphics.setScissor() 105 else 106 if self.falloffside == "left" then 107 for i = 1, self.dist1+self.dist2-2 do 108 love.graphics.drawq(seesawimg, seesawquad[3], math.floor((self.x-1-xscroll)*16*scale), (self.y+i-1.5)*16*scale, 0, scale, scale) 109 end 110 end 111 end 112 113 114 --middle 115 for i = 1, self.range-1 do 116 love.graphics.drawq(seesawimg, seesawquad[4], math.floor((self.x-1+i-xscroll)*16*scale), (self.y-1.5)*16*scale, 0, scale, scale) 117 end 118 119 --right 120 love.graphics.drawq(seesawimg, seesawquad[2], math.floor((self.x-1+self.range-xscroll)*16*scale), (self.y-1.5)*16*scale, 0, scale, scale) 121 122 if self.falloff == false and self.rightplatform.y-self.y >= 0 then 123 love.graphics.setScissor((self.x-1+self.range-xscroll)*16*scale, (self.y-0.5)*16*scale, 16*scale, math.floor((self.rightplatform.y-self.y)*16*scale)) 124 for i = 1, math.ceil(self.rightplatform.y-self.y) do 125 love.graphics.drawq(seesawimg, seesawquad[3], math.floor((self.x+self.range-1-xscroll)*16*scale), (self.y+i-1.5)*16*scale, 0, scale, scale) 126 end 127 love.graphics.setScissor() 128 else 129 if self.falloffside == "right" then 130 for i = 1, self.dist1+self.dist2-2 do 131 love.graphics.drawq(seesawimg, seesawquad[3], math.floor((self.x+self.range-1-xscroll)*16*scale), (self.y+i-1.5)*16*scale, 0, scale, scale) 132 end 133 end 134 end 135end 136 137function seesaw:callbackleft(i) 138 self.lcount = i 139end 140 141function seesaw:callbackright(i) 142 self.rcount = i 143end