175 lines
6.1 KiB
C#
175 lines
6.1 KiB
C#
// <copyright file="EliteAttack.cs" company="alterNERDtive">
|
||
// Copyright 2019–2022 alterNERDtive.
|
||
//
|
||
// This file is part of alterNERDtive VoiceAttack profiles for Elite Dangerous.
|
||
//
|
||
// alterNERDtive VoiceAttack profiles for Elite Dangerous is free software: you can redistribute it and/or modify
|
||
// it under the terms of the GNU General Public License as published by
|
||
// the Free Software Foundation, either version 3 of the License, or
|
||
// (at your option) any later version.
|
||
//
|
||
// alterNERDtive VoiceAttack profiles for Elite Dangerous is distributed in the hope that it will be useful,
|
||
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||
// GNU General Public License for more details.
|
||
//
|
||
// You should have received a copy of the GNU General Public License
|
||
// along with alterNERDtive VoiceAttack profiles for Elite Dangerous. If not, see <https://www.gnu.org/licenses/>.
|
||
// </copyright>
|
||
|
||
#nullable enable
|
||
|
||
using System;
|
||
|
||
using alterNERDtive.util;
|
||
|
||
namespace EliteAttack
|
||
{
|
||
/// <summary>
|
||
/// VoiceAttack plugin for the EliteAttack profile.
|
||
/// </summary>
|
||
public class EliteAttack
|
||
{
|
||
private static readonly Version VERSION = new ("8.4.1");
|
||
|
||
private static VoiceAttackLog? log;
|
||
private static VoiceAttackCommands? commands;
|
||
|
||
private static dynamic? VA { get; set; }
|
||
|
||
private static VoiceAttackLog Log => log ??= new (VA, "EliteAttack");
|
||
|
||
private static VoiceAttackCommands Commands => commands ??= new (VA, Log);
|
||
|
||
/*========================================\
|
||
| required VoiceAttack plugin shenanigans |
|
||
\========================================*/
|
||
|
||
/// <summary>
|
||
/// The plugin’s GUID, as required by the VoiceAttack plugin API.
|
||
/// </summary>
|
||
/// <returns>The GUID.</returns>
|
||
public static Guid VA_Id()
|
||
=> new ("{5B46321D-2935-4550-BEEA-36C2145547B8}");
|
||
|
||
/// <summary>
|
||
/// The plugin’s display name, as required by the VoiceAttack plugin API.
|
||
/// </summary>
|
||
/// <returns>The display name.</returns>
|
||
public static string VA_DisplayName()
|
||
=> $"EliteAttack {VERSION}";
|
||
|
||
/// <summary>
|
||
/// The plugin’s description, as required by the VoiceAttack plugin API.
|
||
/// </summary>
|
||
/// <returns>The description.</returns>
|
||
public static string VA_DisplayInfo()
|
||
=> "EliteAttack: a plugin for doing Elite-y things.";
|
||
|
||
/// <summary>
|
||
/// The Init method, as required by the VoiceAttack plugin API.
|
||
/// Runs when the plugin is initially loaded.
|
||
/// </summary>
|
||
/// <param name="vaProxy">The VoiceAttack proxy object.</param>
|
||
public static void VA_Init1(dynamic vaProxy)
|
||
{
|
||
VA = vaProxy;
|
||
Log.Notice("Initializing …");
|
||
VA.SetText("EliteAttack.version", VERSION.ToString());
|
||
Log.Notice("Init successful.");
|
||
}
|
||
|
||
/// <summary>
|
||
/// The Invoke method, as required by the VoiceAttack plugin API.
|
||
/// Runs whenever a plugin context is invoked.
|
||
/// </summary>
|
||
/// <param name="vaProxy">The VoiceAttack proxy object.</param>
|
||
public static void VA_Invoke1(dynamic vaProxy)
|
||
{
|
||
string context = vaProxy.Context.ToLower();
|
||
Log.Debug($"Running context '{context}' …");
|
||
try
|
||
{
|
||
switch (context)
|
||
{
|
||
case "startup":
|
||
Context_Startup(vaProxy);
|
||
break;
|
||
case "log.log":
|
||
// log
|
||
Context_Log(vaProxy);
|
||
break;
|
||
default:
|
||
// invalid
|
||
Log.Error($"Invalid plugin context '{vaProxy.Context}'.");
|
||
break;
|
||
}
|
||
}
|
||
catch (ArgumentNullException e)
|
||
{
|
||
Log.Error($"Missing parameter '{e.ParamName}' for context '{context}'");
|
||
}
|
||
catch (Exception e)
|
||
{
|
||
Log.Error($"Unhandled exception while executing plugin context '{context}'. ({e.Message})");
|
||
}
|
||
}
|
||
|
||
/// <summary>
|
||
/// The Exit method, as required by the VoiceAttack plugin API.
|
||
/// Runs when VoiceAttack is shut down.
|
||
/// </summary>
|
||
/// <param name="vaProxy">The VoiceAttack proxy object.</param>
|
||
[System.Diagnostics.CodeAnalysis.SuppressMessage("Style", "IDE0060:Remove unused parameter", Justification = "required by VoiceAttack plugin API")]
|
||
public static void VA_Exit1(dynamic vaProxy)
|
||
{
|
||
}
|
||
|
||
/// <summary>
|
||
/// The StopCommand method, as required by the VoiceAttack plugin API.
|
||
/// Runs whenever all commands are stopped using the “Stop All Commands”
|
||
/// button or action.
|
||
/// </summary>
|
||
public static void VA_StopCommand()
|
||
{
|
||
}
|
||
|
||
/*================\
|
||
| plugin contexts |
|
||
\================*/
|
||
|
||
#pragma warning disable IDE0060 // Remove unused parameter
|
||
private static void Context_Log(dynamic vaProxy)
|
||
{
|
||
string message = vaProxy.GetText("~message");
|
||
string level = vaProxy.GetText("~level");
|
||
|
||
if (level == null)
|
||
{
|
||
Log.Log(message);
|
||
}
|
||
else
|
||
{
|
||
try
|
||
{
|
||
Log.Log(message, (LogLevel)Enum.Parse(typeof(LogLevel), level.ToUpper()));
|
||
}
|
||
catch (ArgumentNullException)
|
||
{
|
||
throw;
|
||
}
|
||
catch (ArgumentException)
|
||
{
|
||
Log.Error($"Invalid log level '{level}'.");
|
||
}
|
||
}
|
||
}
|
||
|
||
private static void Context_Startup(dynamic vaProxy)
|
||
{
|
||
Log.Notice("Starting up …");
|
||
Log.Notice("Finished startup.");
|
||
}
|
||
#pragma warning restore IDE0060 // Remove unused parameter
|
||
}
|
||
}
|