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