Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- logicgate = class:new()
- function logicgate:init(x, y, r)
- self.x = x
- self.y = y
- self.cox = x
- self.coy = y
- self.r = r
- --self.ef = ef --evaluation function
- self.outtable = {}
- self.intable = {}
- self.state = "off"
- self.initial = true
- end
- function logicgate:link()
- if #self.r > 3 then
- for j, w in pairs(outputs) do
- for i, v in pairs(objects[w]) do
- local haslink = false
- for indx = 1, #self.r do
- if self.r[indx] == "link" and tonumber(self.r[indx+1]) == v.cox and tonumber(self.r[indx+2]) == v.coy then
- haslink = true
- end
- end
- if haslink then
- v:addoutput(self) --adds this entity as an output to v.
- end
- end
- end
- end
- end
- function logicgate:addoutput(a)
- table.insert(self.outtable, a)
- end
- function logicgate:update(dt)
- if self.initial then
- self.initial = false
- --[[if self.state1 == "on" and self.state2 == "on" then
- self:input("on")
- else
- self:input("off")
- end]]
- end
- end
- function logicgate:draw(entname)
- love.graphics.setColor(255, 255, 255)
- --print(entname.." is index "..GetModIndex(entname))
- local quad = entityquads[GetModIndex(entname)]
- love.graphics.drawq(quad.image, quad.quad, math.floor((self.x-1-xscroll)*16*scale), ((self.y-1)*16-8)*scale, 0, scale, scale)
- end
- function logicgate:out(t)
- for i = 1, #self.outtable do
- if self.outtable[i].input then
- self.outtable[i]:input(t, tostring(self))
- end
- end
- end
- function logicgate:input(t, e)
- -- search through the input table and make sure it's not a dupe
- local oldinput = false
- local allon = true
- local liston = ""
- local listoff = ""
- local listbroke = ""
- for _,v in pairs(self.intable) do
- if v[2] == e then
- oldinput = true
- if t=="on" or t=="off" then
- v[1] = t
- else
- if v[1] == "on" then
- v[1] = "off"
- elseif v[1] == "off" then
- v[1] = "on"
- end
- end
- print(tostring(_).." changed to "..tostring(t))
- end
- if v[1] == "off" then
- allon = false
- listoff = listoff..tostring(_).." "
- elseif v[1] == "on" then
- liston = liston..tostring(_).." "
- else
- listbroke = listbroke..tostring(_).." "
- end
- end
- if oldinput==false then
- print("adding: "..tostring(#self.intable).." as "..tostring(t))
- table.insert(self.intable, {t, e})
- end
- -- Prevent searching through again
- if (t=="off" or allon==false) and self.state=="on" then
- print("state change: off")
- self.state = "off"
- self:out("off")
- elseif (allon and t=="on") and self.state=="off" then
- print("state change: on")
- self.state = "on"
- self:out("on")
- end
- if liston ~= "" then
- print("on: "..tostring(liston))
- end
- if listoff ~= "" then
- print("off: "..tostring(listoff))
- end
- if listbroke ~= "" then
- print("broke: "..tostring(listbroke))
- end
- end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement