-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathMainForm.cs
More file actions
117 lines (95 loc) · 3.78 KB
/
MainForm.cs
File metadata and controls
117 lines (95 loc) · 3.78 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
using NLua;
namespace CSharpLuaIntegration
{
public partial class MainForm : Form, IDisposable
{
private readonly string pluginsFolderPath = "./plugins";
private Lua lua;
private readonly LuaLoader luaLoader;
private readonly LuaAPI luaAPI;
public MainForm()
{
InitializeComponent();
luaLoader = new LuaLoader();
luaAPI = new LuaAPI(luaLoader);
Load += MainForm_Load;
}
private void MainForm_Load(object sender, EventArgs e)
{
CreatePluginsFolder();
InitializePluginsFolder();
LoadPlugins();
pluginListBox.SelectedIndexChanged += PluginListBox_SelectedIndexChanged;
executeBtn.Click += ExecuteBtn_Click;
}
private void LoadPlugins()
{
pluginListBox.Items.Clear();
string[] luaScriptFiles = Directory.GetFiles(pluginsFolderPath, "*.lua");
pluginListBox.Items.AddRange(luaScriptFiles.Select(Path.GetFileNameWithoutExtension).ToArray());
}
private void CreatePluginsFolder()
{
if (!Directory.Exists(pluginsFolderPath))
{
Directory.CreateDirectory(pluginsFolderPath);
}
}
private void InitializePluginsFolder()
{
string helloWorldLuaScriptPath = Path.Combine(pluginsFolderPath, "HelloWorld.lua");
if (!File.Exists(helloWorldLuaScriptPath))
{
string luaScriptContent = @"-- Lua script: HelloWorld.lua
-- Plugin information
PluginName = 'HelloWorld Plugin'
PluginAuthor = 'saveroo'
PluginDescription = 'This is a basic Lua plugin that displays a hello lua message.'
-- Entry point function which will be called within C#, for now only supports boolean return value for showcase.
function Main()
ShowMessageBox('Hello from Lua!', 'Lua Message')
return true
end";
File.WriteAllText(helloWorldLuaScriptPath, luaScriptContent);
}
}
private void PluginListBox_SelectedIndexChanged(object sender, EventArgs e)
{
string selectedLuaScript = pluginListBox.SelectedItem as string;
if (selectedLuaScript == null)
{
MessageBox.Show("Please select a Lua script.", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
return;
}
string luaScriptPath = Path.Combine(pluginsFolderPath, selectedLuaScript + ".lua");
if (!File.Exists(luaScriptPath))
{
MessageBox.Show("File Error", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
return;
}
// Retrieve plugin information from Lua
luaLoader.LoadLuaScript(luaScriptPath);
string? pluginName = luaLoader.GetPluginName();
string? pluginDescription = luaLoader.GetPluginDescription();
labelPluginName.Text = $@"Plugin: {pluginName}";
tboxPluginDescription.Text = pluginDescription;
}
private void ExecuteBtn_Click(object sender, EventArgs e)
{
string selectedLuaScript = pluginListBox.SelectedItem as string;
if (selectedLuaScript == null)
{
MessageBox.Show("Please select a Lua script.", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
return;
}
string luaScriptPath = Path.Combine(pluginsFolderPath, selectedLuaScript + ".lua");
MessageBox.Show("Executing Lua script: " + luaScriptPath);
luaLoader.ExecuteLuaScript(luaScriptPath);
}
public void Dispose()
{
lua?.Dispose();
luaLoader?.Dispose();
}
}
}