MrBot.Net/MRBot/UI/MainWindow.cs
2023-12-08 15:20:12 -06:00

85 lines
2.4 KiB
C#

using System;
using LavishScriptAPI;
using LavishVMAPI;
using Microsoft.Extensions.Logging;
using MRBot.Api;
using MRBot.IsxEq2;
namespace MRBot.UI;
internal class MainWindow : IWindow
{
private const string BotControllerScript = "mr/bot/bot.iss";
private const string BotControllerObject = "MRBotController";
private readonly BotApi _botApi;
private readonly ILogger<MainWindow> _logger;
private bool UiAttached
{
get
{
var command = $"${{{BotControllerObject}.UIAttached}}";
var uiAttached = false;
return LavishScript.DataParse(command, ref uiAttached) && uiAttached;
}
}
public MainWindow(BotApi botApi, ILogger<MainWindow> logger)
{
_botApi = botApi;
_logger = logger;
}
public string Name => WindowNames.MainWindow;
public event EventHandler<LSEventArgs> OnWindowClose;
public void Show()
{
_logger.LogTrace("Showing MainWindow.");
LavishScript.ExecuteCommand($"run {BotControllerScript}");
while(!UiAttached)
{
_logger.LogTrace("Waiting for UI to attach.");
Frame.Wait(false);
}
LavishScript.Events.AttachEventTarget("OnBotToggle", OnBotToggle);
LavishScript.Events.AttachEventTarget("OnBotClose", CloseBot);
_logger.LogTrace("MainWindow shown and events are attached.");
}
public void Hide()
{
_logger.LogTrace("Hiding MainWindow.");
LavishScript.Events.DetachEventTarget("OnBotToggle", OnBotToggle);
LavishScript.Events.DetachEventTarget("OnBotClose", CloseBot);
_logger.LogTrace("MainWindow hidden and events are detached.");
}
private void CloseBot(object sender, LSEventArgs args)
{
OnWindowClose?.Invoke(this, args);
}
private void OnBotToggle(object sender, LSEventArgs args)
{
_logger.LogInformation("Bot Toggled.");
_botApi.FollowPlayer(Extension.Me.Target.Name);
}
public void Dispose()
{
LavishScript.Events.DetachEventTarget("OnBotToggle", OnBotToggle);
LavishScript.Events.DetachEventTarget("OnBotClose", CloseBot);
try
{
LavishScript.ExecuteCommand($"endscript {BotControllerScript}");
}
catch (Exception e)
{
Console.WriteLine(e);
}
}
}