mirror of
https://github.com/Ale32bit/Capy64.git
synced 2025-01-18 10:36:44 +00:00
Remove dependency injection and hosting dependencies
This commit is contained in:
parent
d8d6e76729
commit
b85adb960b
24 changed files with 64 additions and 196 deletions
|
@ -14,13 +14,10 @@
|
||||||
// limitations under the License.
|
// limitations under the License.
|
||||||
|
|
||||||
using KeraLua;
|
using KeraLua;
|
||||||
using Microsoft.Extensions.DependencyInjection;
|
|
||||||
|
|
||||||
namespace Capy64.API;
|
namespace Capy64.API;
|
||||||
|
|
||||||
public interface IComponent
|
public interface IComponent
|
||||||
{
|
{
|
||||||
void ConfigureServices(IServiceCollection services) { }
|
|
||||||
void LuaInit(Lua L) { }
|
void LuaInit(Lua L) { }
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -21,7 +21,6 @@ using Capy64.Integrations;
|
||||||
using Capy64.PluginManager;
|
using Capy64.PluginManager;
|
||||||
using Capy64.Runtime;
|
using Capy64.Runtime;
|
||||||
using Microsoft.Extensions.Configuration;
|
using Microsoft.Extensions.Configuration;
|
||||||
using Microsoft.Extensions.DependencyInjection;
|
|
||||||
using Microsoft.Xna.Framework;
|
using Microsoft.Xna.Framework;
|
||||||
using Microsoft.Xna.Framework.Graphics;
|
using Microsoft.Xna.Framework.Graphics;
|
||||||
using Microsoft.Xna.Framework.Input;
|
using Microsoft.Xna.Framework.Input;
|
||||||
|
@ -41,7 +40,7 @@ public enum EngineMode
|
||||||
Free
|
Free
|
||||||
}
|
}
|
||||||
|
|
||||||
public class Capy64 : Game, IGame
|
public class Capy64 : Game
|
||||||
{
|
{
|
||||||
public const string Version = "1.1.0-beta";
|
public const string Version = "1.1.0-beta";
|
||||||
|
|
||||||
|
@ -91,6 +90,7 @@ public class Capy64 : Game, IGame
|
||||||
public Eventing.EventEmitter EventEmitter { get; private set; }
|
public Eventing.EventEmitter EventEmitter { get; private set; }
|
||||||
public DiscordIntegration Discord { get; set; }
|
public DiscordIntegration Discord { get; set; }
|
||||||
public int TickRate => tickrate;
|
public int TickRate => tickrate;
|
||||||
|
public IConfiguration Configuration { get; private set; }
|
||||||
|
|
||||||
public Color BorderColor { get; set; } = Color.Black;
|
public Color BorderColor { get; set; } = Color.Black;
|
||||||
|
|
||||||
|
@ -224,11 +224,26 @@ public class Capy64 : Game, IGame
|
||||||
|
|
||||||
protected override void Initialize()
|
protected override void Initialize()
|
||||||
{
|
{
|
||||||
var configuration = _serviceProvider.GetService<IConfiguration>();
|
var configBuilder = new ConfigurationBuilder();
|
||||||
|
|
||||||
|
var settingsPath = Path.Combine(AppDataPath, "settings.json");
|
||||||
|
if (!Directory.Exists(AppDataPath))
|
||||||
|
{
|
||||||
|
Directory.CreateDirectory(AppDataPath);
|
||||||
|
}
|
||||||
|
if (!File.Exists(settingsPath))
|
||||||
|
{
|
||||||
|
File.Copy("Assets/default.json", settingsPath);
|
||||||
|
}
|
||||||
|
|
||||||
|
configBuilder.AddJsonFile("Assets/default.json", false);
|
||||||
|
configBuilder.AddJsonFile(settingsPath, false);
|
||||||
|
|
||||||
|
Configuration = configBuilder.Build();
|
||||||
|
|
||||||
Window.Title = "Capy64 " + Version;
|
Window.Title = "Capy64 " + Version;
|
||||||
|
|
||||||
Scale = configuration.GetValue("Window:Scale", DefaultParameters.Scale);
|
Scale = Configuration.GetValue("Window:Scale", DefaultParameters.Scale);
|
||||||
|
|
||||||
ResetBorder();
|
ResetBorder();
|
||||||
UpdateSize();
|
UpdateSize();
|
||||||
|
@ -238,7 +253,7 @@ public class Capy64 : Game, IGame
|
||||||
|
|
||||||
InactiveSleepTime = new TimeSpan(0);
|
InactiveSleepTime = new TimeSpan(0);
|
||||||
|
|
||||||
SetEngineMode(configuration.GetValue<EngineMode>("EngineMode", DefaultParameters.EngineMode));
|
SetEngineMode(Configuration.GetValue<EngineMode>("EngineMode", DefaultParameters.EngineMode));
|
||||||
|
|
||||||
Audio = new Audio();
|
Audio = new Audio();
|
||||||
|
|
||||||
|
@ -261,7 +276,8 @@ public class Capy64 : Game, IGame
|
||||||
|
|
||||||
foreach (var type in types)
|
foreach (var type in types)
|
||||||
{
|
{
|
||||||
var instance = (IComponent)ActivatorUtilities.CreateInstance(_serviceProvider, type)!;
|
var instance = (IComponent)Activator.CreateInstance(type, this);
|
||||||
|
//var instance = (IComponent)ActivatorUtilities.CreateInstance(_serviceProvider, type)!;
|
||||||
plugins.Add(instance);
|
plugins.Add(instance);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -40,11 +40,13 @@
|
||||||
<PackageReference Include="DiscordRichPresence" Version="1.1.3.18" />
|
<PackageReference Include="DiscordRichPresence" Version="1.1.3.18" />
|
||||||
<PackageReference Include="FontStashSharp.MonoGame" Version="1.2.8" />
|
<PackageReference Include="FontStashSharp.MonoGame" Version="1.2.8" />
|
||||||
<PackageReference Include="KeraLua" Version="1.3.3" />
|
<PackageReference Include="KeraLua" Version="1.3.3" />
|
||||||
<PackageReference Include="Microsoft.Extensions.Hosting" Version="7.0.1" />
|
<PackageReference Include="Microsoft.Extensions.Configuration" Version="7.0.0" />
|
||||||
|
<PackageReference Include="Microsoft.Extensions.Configuration.Abstractions" Version="7.0.0" />
|
||||||
|
<PackageReference Include="Microsoft.Extensions.Configuration.Binder" Version="7.0.4" />
|
||||||
|
<PackageReference Include="Microsoft.Extensions.Configuration.Json" Version="7.0.0" />
|
||||||
<PackageReference Include="MonoGame.Extended.Graphics" Version="3.8.0" />
|
<PackageReference Include="MonoGame.Extended.Graphics" Version="3.8.0" />
|
||||||
<PackageReference Include="MonoGame.Framework.DesktopGL" Version="3.8.1.303" />
|
<PackageReference Include="MonoGame.Framework.DesktopGL" Version="3.8.1.303" />
|
||||||
<PackageReference Include="MonoGame.Content.Builder.Task" Version="3.8.1.303" />
|
<PackageReference Include="MonoGame.Content.Builder.Task" Version="3.8.1.303" />
|
||||||
<PackageReference Include="System.ComponentModel.Composition" Version="7.0.0" />
|
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<EditorConfigFiles Remove="C:\Users\Alex\source\repos\Capy64\Capy64\Capy64\.editorconfig" />
|
<EditorConfigFiles Remove="C:\Users\Alex\source\repos\Capy64\Capy64\Capy64\.editorconfig" />
|
||||||
|
|
|
@ -1,50 +0,0 @@
|
||||||
// This file is part of Capy64 - https://github.com/Ale32bit/Capy64
|
|
||||||
// Copyright 2023 Alessandro "AlexDevs" Proto
|
|
||||||
//
|
|
||||||
// Licensed under the Apache License, Version 2.0 (the "License").
|
|
||||||
// you may not use this file except in compliance with the License.
|
|
||||||
// You may obtain a copy of the License at
|
|
||||||
//
|
|
||||||
// http://www.apache.org/licenses/LICENSE-2.0
|
|
||||||
//
|
|
||||||
// Unless required by applicable law or agreed to in writing, software
|
|
||||||
// distributed under the License is distributed on an "AS IS" BASIS,
|
|
||||||
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
||||||
// See the License for the specific language governing permissions and
|
|
||||||
// limitations under the License.
|
|
||||||
|
|
||||||
using Capy64.API;
|
|
||||||
using Capy64.Core;
|
|
||||||
using Capy64.Integrations;
|
|
||||||
using Capy64.Runtime;
|
|
||||||
using Microsoft.Xna.Framework;
|
|
||||||
using System;
|
|
||||||
using System.Collections.Generic;
|
|
||||||
|
|
||||||
namespace Capy64;
|
|
||||||
|
|
||||||
public interface IGame
|
|
||||||
{
|
|
||||||
Capy64 Game { get; }
|
|
||||||
EngineMode EngineMode { get; }
|
|
||||||
IList<IComponent> NativePlugins { get; }
|
|
||||||
IList<IComponent> Plugins { get; }
|
|
||||||
GameWindow Window { get; }
|
|
||||||
Drawing Drawing { get; }
|
|
||||||
Audio Audio { get; }
|
|
||||||
LuaState LuaRuntime { get; set; }
|
|
||||||
Eventing.EventEmitter EventEmitter { get; }
|
|
||||||
void ConfigureServices(IServiceProvider serviceProvider);
|
|
||||||
|
|
||||||
int Width { get; set; }
|
|
||||||
int Height { get; set; }
|
|
||||||
float Scale { get; set; }
|
|
||||||
void UpdateSize(bool resize = true);
|
|
||||||
|
|
||||||
event EventHandler<EventArgs> Exiting;
|
|
||||||
void Run();
|
|
||||||
void Exit();
|
|
||||||
|
|
||||||
// Integrations
|
|
||||||
DiscordIntegration Discord { get; }
|
|
||||||
}
|
|
|
@ -28,9 +28,9 @@ public class DiscordIntegration : IComponent
|
||||||
public readonly bool Enabled;
|
public readonly bool Enabled;
|
||||||
private readonly IConfiguration _configuration;
|
private readonly IConfiguration _configuration;
|
||||||
|
|
||||||
public DiscordIntegration(IConfiguration configuration)
|
public DiscordIntegration(Capy64 game)
|
||||||
{
|
{
|
||||||
_configuration = configuration;
|
_configuration = game.Configuration;
|
||||||
|
|
||||||
var discordConfig = _configuration.GetSection("Integrations:Discord");
|
var discordConfig = _configuration.GetSection("Integrations:Discord");
|
||||||
Enabled = discordConfig.GetValue("Enable", false);
|
Enabled = discordConfig.GetValue("Enable", false);
|
||||||
|
|
|
@ -14,7 +14,6 @@
|
||||||
// limitations under the License.
|
// limitations under the License.
|
||||||
|
|
||||||
using Capy64.API;
|
using Capy64.API;
|
||||||
using Microsoft.Extensions.DependencyInjection;
|
|
||||||
using System;
|
using System;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.IO;
|
using System.IO;
|
||||||
|
@ -47,7 +46,7 @@ internal class PluginLoader
|
||||||
{
|
{
|
||||||
if (typeof(IComponent).IsAssignableFrom(type))
|
if (typeof(IComponent).IsAssignableFrom(type))
|
||||||
{
|
{
|
||||||
IComponent result = ActivatorUtilities.CreateInstance(provider, type) as IComponent;
|
IComponent result = Activator.CreateInstance(type, Capy64.Instance) as IComponent;
|
||||||
plugins.Add(result);
|
plugins.Add(result);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -13,34 +13,6 @@
|
||||||
// See the License for the specific language governing permissions and
|
// See the License for the specific language governing permissions and
|
||||||
// limitations under the License.
|
// limitations under the License.
|
||||||
|
|
||||||
using Capy64;
|
|
||||||
using Microsoft.Extensions.Configuration;
|
|
||||||
using Microsoft.Extensions.DependencyInjection;
|
|
||||||
using Microsoft.Extensions.Hosting;
|
|
||||||
using System.IO;
|
|
||||||
|
|
||||||
using var game = new Capy64.Capy64();
|
using var game = new Capy64.Capy64();
|
||||||
using IHost host = Host.CreateDefaultBuilder(args)
|
|
||||||
.ConfigureAppConfiguration((context, c) =>
|
|
||||||
{
|
|
||||||
var settingsPath = Path.Combine(Capy64.Capy64.AppDataPath, "settings.json");
|
|
||||||
if (!Directory.Exists(Capy64.Capy64.AppDataPath))
|
|
||||||
{
|
|
||||||
Directory.CreateDirectory(Capy64.Capy64.AppDataPath);
|
|
||||||
}
|
|
||||||
if (!File.Exists(settingsPath))
|
|
||||||
{
|
|
||||||
File.Copy("Assets/default.json", settingsPath);
|
|
||||||
}
|
|
||||||
|
|
||||||
c.AddJsonFile("Assets/default.json", false);
|
game.Run();
|
||||||
c.AddJsonFile(settingsPath, false);
|
|
||||||
})
|
|
||||||
.ConfigureServices((hostContext, services) =>
|
|
||||||
{
|
|
||||||
services.AddSingleton<IGame>(game);
|
|
||||||
services.AddHostedService<Worker>();
|
|
||||||
})
|
|
||||||
.Build();
|
|
||||||
|
|
||||||
await host.RunAsync();
|
|
||||||
|
|
|
@ -25,8 +25,8 @@ public class AudioLib : IComponent
|
||||||
{
|
{
|
||||||
private const int queueLimit = 8;
|
private const int queueLimit = 8;
|
||||||
|
|
||||||
private static IGame _game;
|
private static Capy64 _game;
|
||||||
public AudioLib(IGame game)
|
public AudioLib(Capy64 game)
|
||||||
{
|
{
|
||||||
_game = game;
|
_game = game;
|
||||||
_game.EventEmitter.OnClose += OnClose;
|
_game.EventEmitter.OnClose += OnClose;
|
||||||
|
|
|
@ -29,8 +29,8 @@ public class EventLib : IComponent
|
||||||
|
|
||||||
private static bool FrozenTaskAwaiter = false;
|
private static bool FrozenTaskAwaiter = false;
|
||||||
|
|
||||||
private static IGame _game;
|
private static Capy64 _game;
|
||||||
public EventLib(IGame game)
|
public EventLib(Capy64 game)
|
||||||
{
|
{
|
||||||
_game = game;
|
_game = game;
|
||||||
}
|
}
|
||||||
|
|
|
@ -111,6 +111,8 @@ public class FileSystemLib : IComponent
|
||||||
new(), // NULL
|
new(), // NULL
|
||||||
};
|
};
|
||||||
|
|
||||||
|
public FileSystemLib(Capy64 _) { }
|
||||||
|
|
||||||
public void LuaInit(Lua state)
|
public void LuaInit(Lua state)
|
||||||
{
|
{
|
||||||
// Add "fs" library to lua, not global (uses require())
|
// Add "fs" library to lua, not global (uses require())
|
||||||
|
|
|
@ -28,8 +28,8 @@ namespace Capy64.Runtime.Libraries;
|
||||||
public class GPULib : IComponent
|
public class GPULib : IComponent
|
||||||
{
|
{
|
||||||
|
|
||||||
private static IGame _game;
|
private static Capy64 _game;
|
||||||
public GPULib(IGame game)
|
public GPULib(Capy64 game)
|
||||||
{
|
{
|
||||||
_game = game;
|
_game = game;
|
||||||
}
|
}
|
||||||
|
|
|
@ -30,7 +30,7 @@ namespace Capy64.Runtime.Libraries;
|
||||||
#nullable enable
|
#nullable enable
|
||||||
public class HTTPLib : IComponent
|
public class HTTPLib : IComponent
|
||||||
{
|
{
|
||||||
private static IGame _game = null!;
|
private static Capy64 _game = null!;
|
||||||
private static HttpClient _httpClient = null!;
|
private static HttpClient _httpClient = null!;
|
||||||
private static long _requestId;
|
private static long _requestId;
|
||||||
public static readonly HashSet<WebSocketClient.Client> WebSocketConnections = new();
|
public static readonly HashSet<WebSocketClient.Client> WebSocketConnections = new();
|
||||||
|
@ -57,13 +57,13 @@ public class HTTPLib : IComponent
|
||||||
},
|
},
|
||||||
new(),
|
new(),
|
||||||
};
|
};
|
||||||
public HTTPLib(IGame game, IConfiguration configuration)
|
public HTTPLib(Capy64 game)
|
||||||
{
|
{
|
||||||
_game = game;
|
_game = game;
|
||||||
_requestId = 0;
|
_requestId = 0;
|
||||||
_httpClient = new();
|
_httpClient = new();
|
||||||
_httpClient.DefaultRequestHeaders.Add("User-Agent", UserAgent);
|
_httpClient.DefaultRequestHeaders.Add("User-Agent", UserAgent);
|
||||||
_configuration = configuration;
|
_configuration = game.Configuration;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void LuaInit(Lua L)
|
public void LuaInit(Lua L)
|
||||||
|
|
|
@ -24,8 +24,8 @@ namespace Capy64.Runtime.Libraries;
|
||||||
|
|
||||||
public class MachineLib : IComponent
|
public class MachineLib : IComponent
|
||||||
{
|
{
|
||||||
private static IGame _game;
|
private static Capy64 _game;
|
||||||
public MachineLib(IGame game)
|
public MachineLib(Capy64 game)
|
||||||
{
|
{
|
||||||
_game = game;
|
_game = game;
|
||||||
}
|
}
|
||||||
|
|
|
@ -49,11 +49,11 @@ internal class TermLib : IComponent
|
||||||
public static Color BackgroundColor { get; set; }
|
public static Color BackgroundColor { get; set; }
|
||||||
private static Char?[] CharGrid;
|
private static Char?[] CharGrid;
|
||||||
|
|
||||||
private static IGame _game;
|
private static Capy64 _game;
|
||||||
private static bool cursorState = false;
|
private static bool cursorState = false;
|
||||||
private static bool enableCursor = true;
|
private static bool enableCursor = true;
|
||||||
private static Texture2D cursorTexture;
|
private static Texture2D cursorTexture;
|
||||||
public TermLib(IGame game)
|
public TermLib(Capy64 game)
|
||||||
{
|
{
|
||||||
_game = game;
|
_game = game;
|
||||||
|
|
||||||
|
|
|
@ -50,11 +50,11 @@ class TimerLib : IComponent
|
||||||
new(),
|
new(),
|
||||||
};
|
};
|
||||||
|
|
||||||
private static IGame _game;
|
private static Capy64 _game;
|
||||||
private static uint _timerId = 0;
|
private static uint _timerId = 0;
|
||||||
|
|
||||||
private static readonly ConcurrentDictionary<uint, Timer> timers = new();
|
private static readonly ConcurrentDictionary<uint, Timer> timers = new();
|
||||||
public TimerLib(IGame game)
|
public TimerLib(Capy64 game)
|
||||||
{
|
{
|
||||||
_game = game;
|
_game = game;
|
||||||
|
|
||||||
|
|
|
@ -25,8 +25,8 @@ public class ObjectManager : IComponent
|
||||||
{
|
{
|
||||||
private static readonly ConcurrentDictionary<nint, object> _objects = new();
|
private static readonly ConcurrentDictionary<nint, object> _objects = new();
|
||||||
|
|
||||||
private static IGame _game;
|
private static Capy64 _game;
|
||||||
public ObjectManager(IGame game)
|
public ObjectManager(Capy64 game)
|
||||||
{
|
{
|
||||||
_game = game;
|
_game = game;
|
||||||
_game.EventEmitter.OnClose += OnClose;
|
_game.EventEmitter.OnClose += OnClose;
|
||||||
|
|
|
@ -88,6 +88,8 @@ public class FileHandle : IComponent
|
||||||
new(),
|
new(),
|
||||||
};
|
};
|
||||||
|
|
||||||
|
public FileHandle(Capy64 _) { }
|
||||||
|
|
||||||
public void LuaInit(Lua L)
|
public void LuaInit(Lua L)
|
||||||
{
|
{
|
||||||
CreateMeta(L);
|
CreateMeta(L);
|
||||||
|
|
|
@ -66,8 +66,8 @@ public class GPUBufferMeta : IComponent
|
||||||
new(),
|
new(),
|
||||||
};
|
};
|
||||||
|
|
||||||
private static IGame _game;
|
private static Capy64 _game;
|
||||||
public GPUBufferMeta(IGame game)
|
public GPUBufferMeta(Capy64 game)
|
||||||
{
|
{
|
||||||
_game = game;
|
_game = game;
|
||||||
}
|
}
|
||||||
|
|
|
@ -29,8 +29,8 @@ public class Socket : IDisposable
|
||||||
|
|
||||||
public class SocketLib : IComponent
|
public class SocketLib : IComponent
|
||||||
{
|
{
|
||||||
private static IGame _game = null!;
|
private static Capy64 _game = null!;
|
||||||
public SocketLib(IGame game)
|
public SocketLib(Capy64 game)
|
||||||
{
|
{
|
||||||
_game = game;
|
_game = game;
|
||||||
}
|
}
|
||||||
|
|
|
@ -21,8 +21,8 @@ namespace Capy64.Runtime.Objects;
|
||||||
|
|
||||||
public class TaskMeta : IComponent
|
public class TaskMeta : IComponent
|
||||||
{
|
{
|
||||||
private static IGame _game;
|
private static Capy64 _game;
|
||||||
public TaskMeta(IGame game)
|
public TaskMeta(Capy64 game)
|
||||||
{
|
{
|
||||||
_game = game;
|
_game = game;
|
||||||
}
|
}
|
||||||
|
|
|
@ -73,6 +73,8 @@ public class WebSocketClient : IComponent
|
||||||
new(),
|
new(),
|
||||||
};
|
};
|
||||||
|
|
||||||
|
public WebSocketClient(Capy64 _) { }
|
||||||
|
|
||||||
public void LuaInit(Lua L)
|
public void LuaInit(Lua L)
|
||||||
{
|
{
|
||||||
CreateMeta(L);
|
CreateMeta(L);
|
||||||
|
|
|
@ -32,8 +32,8 @@ internal class RuntimeManager : IComponent
|
||||||
private static bool close = false;
|
private static bool close = false;
|
||||||
private static bool inPanic = false;
|
private static bool inPanic = false;
|
||||||
|
|
||||||
private static IGame _game;
|
private static Capy64 _game;
|
||||||
public RuntimeManager(IGame game)
|
public RuntimeManager(Capy64 game)
|
||||||
{
|
{
|
||||||
_game = game;
|
_game = game;
|
||||||
|
|
||||||
|
|
|
@ -1,73 +0,0 @@
|
||||||
// This file is part of Capy64 - https://github.com/Ale32bit/Capy64
|
|
||||||
// Copyright 2023 Alessandro "AlexDevs" Proto
|
|
||||||
//
|
|
||||||
// Licensed under the Apache License, Version 2.0 (the "License").
|
|
||||||
// you may not use this file except in compliance with the License.
|
|
||||||
// You may obtain a copy of the License at
|
|
||||||
//
|
|
||||||
// http://www.apache.org/licenses/LICENSE-2.0
|
|
||||||
//
|
|
||||||
// Unless required by applicable law or agreed to in writing, software
|
|
||||||
// distributed under the License is distributed on an "AS IS" BASIS,
|
|
||||||
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
||||||
// See the License for the specific language governing permissions and
|
|
||||||
// limitations under the License.
|
|
||||||
|
|
||||||
using Microsoft.Extensions.Hosting;
|
|
||||||
using System;
|
|
||||||
using System.Threading;
|
|
||||||
using System.Threading.Tasks;
|
|
||||||
|
|
||||||
namespace Capy64;
|
|
||||||
|
|
||||||
public class Worker : IHostedService
|
|
||||||
{
|
|
||||||
private readonly IGame _game;
|
|
||||||
private readonly IHostApplicationLifetime _appLifetime;
|
|
||||||
private readonly IServiceProvider _serviceProvider;
|
|
||||||
|
|
||||||
public Worker(IGame game, IHostApplicationLifetime appLifetime, IServiceProvider serviceProvider)
|
|
||||||
{
|
|
||||||
_game = game;
|
|
||||||
_appLifetime = appLifetime;
|
|
||||||
_serviceProvider = serviceProvider;
|
|
||||||
}
|
|
||||||
|
|
||||||
public Task StartAsync(CancellationToken cancellationToken)
|
|
||||||
{
|
|
||||||
_appLifetime.ApplicationStarted.Register(OnStarted);
|
|
||||||
_appLifetime.ApplicationStopping.Register(OnStopping);
|
|
||||||
_appLifetime.ApplicationStopped.Register(OnStopped);
|
|
||||||
|
|
||||||
_game.Exiting += OnGameExiting;
|
|
||||||
|
|
||||||
_game.ConfigureServices(_serviceProvider);
|
|
||||||
|
|
||||||
return Task.CompletedTask;
|
|
||||||
}
|
|
||||||
|
|
||||||
private void OnGameExiting(object sender, EventArgs e)
|
|
||||||
{
|
|
||||||
StopAsync(new CancellationToken());
|
|
||||||
}
|
|
||||||
|
|
||||||
public Task StopAsync(CancellationToken cancellationToken)
|
|
||||||
{
|
|
||||||
_appLifetime.StopApplication();
|
|
||||||
|
|
||||||
return Task.CompletedTask;
|
|
||||||
}
|
|
||||||
|
|
||||||
private void OnStarted()
|
|
||||||
{
|
|
||||||
_game.Run();
|
|
||||||
}
|
|
||||||
|
|
||||||
private void OnStopping()
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
private void OnStopped()
|
|
||||||
{
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,13 +1,12 @@
|
||||||
using Capy64;
|
using Capy64.API;
|
||||||
using Capy64.API;
|
|
||||||
using KeraLua;
|
using KeraLua;
|
||||||
|
|
||||||
namespace ExamplePlugin;
|
namespace ExamplePlugin;
|
||||||
|
|
||||||
public class MyPlugin : IComponent
|
public class MyPlugin : IComponent
|
||||||
{
|
{
|
||||||
private static IGame _game;
|
private static Capy64.Capy64 _game;
|
||||||
public MyPlugin(IGame game)
|
public MyPlugin(Capy64.Capy64 game)
|
||||||
{
|
{
|
||||||
_game = game;
|
_game = game;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue