153 lines
4.9 KiB
VB.net
153 lines
4.9 KiB
VB.net
Imports System
|
|
Imports System.Diagnostics
|
|
Imports System.IO
|
|
Imports KeraLua
|
|
Imports Effector.Plugin.Interface
|
|
|
|
|
|
Public Module LuaManager
|
|
|
|
Private m_state As Lua
|
|
Friend ReadOnly Property state As Lua
|
|
Get
|
|
Return m_state
|
|
End Get
|
|
End Property
|
|
|
|
Friend Function SetGlobVar(sName As String, bValue As Boolean) As Boolean
|
|
Return Lua_Aux.LuaSetGlobVar(m_state, sName, bValue)
|
|
End Function
|
|
|
|
Friend Function SetGlobVar(sName As String, nValue As Integer) As Boolean
|
|
Return Lua_Aux.LuaSetGlobVar(m_state, sName, nValue)
|
|
End Function
|
|
|
|
Friend Function SetGlobVar(sName As String, dValue As Double) As Boolean
|
|
Return Lua_Aux.LuaSetGlobVar(m_state, sName, dValue)
|
|
End Function
|
|
|
|
Friend Function SetGlobVar(sName As String, sValue As String) As Boolean
|
|
Return Lua_Aux.LuaSetGlobVar(m_state, sName, sValue)
|
|
End Function
|
|
|
|
Friend Function GetGlobVar(sName As String, ByRef bValue As Boolean) As Boolean
|
|
Return Lua_Aux.LuaGetGlobVar(m_state, sName, bValue)
|
|
End Function
|
|
|
|
Friend Function GetGlobVar(sName As String, ByRef nValue As Integer) As Boolean
|
|
Return Lua_Aux.LuaGetGlobVar(m_state, sName, nValue)
|
|
End Function
|
|
|
|
Friend Function GetGlobVar(sName As String, ByRef dValue As Double) As Boolean
|
|
Return Lua_Aux.LuaGetGlobVar(m_state, sName, dValue)
|
|
End Function
|
|
|
|
Friend Function GetGlobVar(sName As String, ByRef sValue As String) As Boolean
|
|
Return Lua_Aux.LuaGetGlobVar(m_state, sName, sValue)
|
|
End Function
|
|
|
|
Friend Function CreateGlobTable(sName As String) As Boolean
|
|
Return Lua_Aux.LuaCreateGlobTable(m_state, sName)
|
|
End Function
|
|
|
|
Public Function ExecFile(ByVal sPath As String) As Boolean
|
|
' verifico ambiente lua
|
|
If IsNothing(m_state) Then Return False
|
|
' eseguo la linea
|
|
Dim result As LuaStatus = m_state.LoadFile(sPath)
|
|
Dim sError As String = String.Empty
|
|
If result <> LuaStatus.OK Then
|
|
sError = m_state.ToString(1)
|
|
EgtOutLog("Fail loading file: " & sPath & "ERROR:" & sError)
|
|
End If
|
|
result = m_state.PCall(0, -1, 0)
|
|
If result <> LuaStatus.OK Then
|
|
sError = m_state.ToString(1)
|
|
m_state.Pop(1)
|
|
EgtOutLog("Fail calling file: " & sPath & " ERROR: " & If(String.IsNullOrWhiteSpace(sError), "Unknown", sError))
|
|
End If
|
|
Return result = LuaStatus.OK
|
|
End Function
|
|
|
|
|
|
Public Function ExecLuaFunction(ByVal sName As String, nReturns As Integer, Params() As Object) As Boolean
|
|
' recupero la funzione
|
|
If Not sName.Contains("."c) Then
|
|
' e' direttamente la funzione
|
|
m_state.GetGlobal(sName)
|
|
Else
|
|
' e' in una table
|
|
Dim sTableName As String = "", sFunctionName As String = ""
|
|
Dim sParams() As String = sName.Split("."c)
|
|
sTableName = sParams(0)
|
|
sFunctionName = sParams(1)
|
|
m_state.GetGlobal(sTableName)
|
|
If Not m_state.IsTable(-1) Then Return False
|
|
m_state.GetField(-1, sFunctionName)
|
|
' porto la funzione uno slot sotto e diminuisco lo stack di uno (per essere come caso sopra)
|
|
m_state.Copy(-1, -2)
|
|
m_state.Pop(1)
|
|
End If
|
|
Dim nParamCount = 0
|
|
If Not IsNothing(Params) Then
|
|
' numero di parametri
|
|
nParamCount = Params.Count()
|
|
' inserisco i parametri sullo stack
|
|
For Each Param In Params
|
|
Select Case Param.GetType()
|
|
Case GetType(Boolean)
|
|
m_state.PushBoolean(CBool(Param))
|
|
Case GetType(Integer)
|
|
m_state.PushInteger(CInt(Param))
|
|
Case GetType(Double)
|
|
m_state.PushNumber(CDbl(Param))
|
|
Case GetType(String)
|
|
m_state.PushString(CStr(Param))
|
|
End Select
|
|
Next
|
|
End If
|
|
' eseguo la chiamata
|
|
Dim result As LuaStatus = m_state.PCall(nParamCount, -1, 0)
|
|
' senza errori
|
|
If result = LuaStatus.OK Then
|
|
Return True
|
|
Else
|
|
' recupero il messaggio di errore
|
|
Dim sError As String = m_state.ToString(-1)
|
|
m_state.Pop(1)
|
|
EgtOutLog("Fail calling function: " & sName & " ERROR: " & sError)
|
|
Return False
|
|
End If
|
|
End Function
|
|
|
|
Public Function Init() As Boolean
|
|
' se già aperto, lo fermo per riavviarlo
|
|
If Not IsNothing(m_state) Then
|
|
m_state.Close()
|
|
m_state = Nothing
|
|
End If
|
|
' inizializzo Lua
|
|
m_state = New Lua()
|
|
If IsNothing(m_state) Then
|
|
EgtOutLog("Error in Lua interpreter starting (LuaManager.Init)")
|
|
Return False
|
|
End If
|
|
' carico le librerie standard
|
|
m_state.OpenLibs()
|
|
If Not LuaInstallGeneral(m_state) Then
|
|
Return False
|
|
End If
|
|
Return True
|
|
End Function
|
|
|
|
Public Function Close() As Boolean
|
|
' verifico ambiente lua
|
|
If IsNothing(m_state) Then Return False
|
|
' termino Lua
|
|
m_state.Close()
|
|
m_state = Nothing
|
|
Return True
|
|
End Function
|
|
|
|
End Module
|