I'm creating a system in VB.net that utilizes Lua via the LuaInterface.
To associate an event in Lua with a function, I can simply do this:
RegisterEvent("tick", function(nt)
if not lcc then return end
if nt>=tt then
f()
lcc=false
end
end)
As you can see, I currently am using the lcc
variable to 'cancel' the function. This is kind of hacked up, and the function will still be called causing unneeded overhead. This is what my 'RegisterEvent' sub looks like in my VB.net
Public Sub RegisterEvent(ByVal eventName As String, ByVal func As LuaFunction)
Select Case eventName.ToLower
Case "keydown"
AddHandler Me.event_keydown, AddressOf func.Call
Case "keyup"
AddHandler Me.event_keyup, AddressOf func.Call
Case "mousedown"
AddHandler Me.event_mousedown, AddressOf func.Call
Case "mouseup"
AddHandler Me.event_mouseup, AddressOf func.Call
Case "ready"
AddHandler Me.event_ready, AddressOf func.Call
Case "tick"
AddHandler Me.event_tick, AddressOf func.Call
Case "frame"
AddHandler Me.event_frame, AddressOf func.Call
End Select
End Sub
I would like to do something like this in my Lua:
local lcc=RegisterEvent("tick", function(nt)
print("The Ticks Are Now At: "..nt)
if nt>5000 then
DisconnectEvent(lcc)
end
end)
The problem is, I'm not sure how I should change my RegisterEvent Function/Sub and how I should make the DisconnectEvent.
Thanks for any help. I know this is kind of annoying to try and understand what I'm trying to say. Feel free to post a comment asking for clarification. I'll be more than willing to try and explain it to the best of my abilities. If the LuaInterface has some kind of native way of handling this, I'm open to that as well :)
Anything at all to help is great!
Correct me if I'm wrong. You might have to use Dictionary(of String,boolean) to determine an event has been attached or not.
Dim eventDict As New Dictionary(Of String, Boolean)
Public Sub RegisterEvent(ByVal eventName As String, ByVal func As LuaFunction)
Select Case eventName.ToLower
Case "keydown"
If Not eventDict.ContainsKey(eventName) Then
eventDict.Add(eventName,false)
End If
if eventDict(eventName) Then
RemoveHandler Me.event_keydown, AddressOf func.Call
eventDict(eventName)=false
Else
eventDict(eventName)=true
AddHandler Me.event_keydown, AddressOf func.Call
End If
...
End sub