85 lines
2.4 KiB
C#
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);
|
|
}
|
|
|
|
}
|
|
} |