Updated KD and ModulLoader

This commit is contained in:
Mueller Wayan
2025-05-18 18:05:23 +02:00
parent 47ddfed9bc
commit 1862530728
38 changed files with 602 additions and 360 deletions
Binary file not shown.
Binary file not shown.
Binary file not shown.
+189 -227
View File
@@ -2,14 +2,6 @@
"Version": 1,
"WorkspaceRootPath": "G:\\Coding\\Firebird2D\\",
"Documents": [
{
"AbsoluteMoniker": "D:0:0:{38CCA723-C113-4E44-B074-F9B709B0EEB4}|Firebird2D.KeyMapper\\Firebird2D.KeyMapping.csproj|g:\\coding\\firebird2d\\firebird2d.keymapper\\keymapper.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
"RelativeMoniker": "D:0:0:{38CCA723-C113-4E44-B074-F9B709B0EEB4}|Firebird2D.KeyMapper\\Firebird2D.KeyMapping.csproj|solutionrelative:firebird2d.keymapper\\keymapper.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
},
{
"AbsoluteMoniker": "D:0:0:{7F6F9690-3BD3-4D44-BE62-3A7282DA671D}|FireBird2D.Interfaces\\Firebird2D.DataypesAndInterfaces.csproj|g:\\coding\\firebird2d\\firebird2d.interfaces\\interfaces\\ieventbus.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
"RelativeMoniker": "D:0:0:{7F6F9690-3BD3-4D44-BE62-3A7282DA671D}|FireBird2D.Interfaces\\Firebird2D.DataypesAndInterfaces.csproj|solutionrelative:firebird2d.interfaces\\interfaces\\ieventbus.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
},
{
"AbsoluteMoniker": "D:0:0:{917F395C-6C2E-4F23-9ED1-B123E5F272E9}|Firebird2D.ModulLoader\\Firebird2D.ModulLoading.csproj|g:\\coding\\firebird2d\\firebird2d.modulloader\\modulloader.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
"RelativeMoniker": "D:0:0:{917F395C-6C2E-4F23-9ED1-B123E5F272E9}|Firebird2D.ModulLoader\\Firebird2D.ModulLoading.csproj|solutionrelative:firebird2d.modulloader\\modulloader.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
@@ -19,24 +11,60 @@
"RelativeMoniker": "D:0:0:{7F6F9690-3BD3-4D44-BE62-3A7282DA671D}|FireBird2D.Interfaces\\Firebird2D.DataypesAndInterfaces.csproj|solutionrelative:firebird2d.interfaces\\interfaces\\igame.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
},
{
"AbsoluteMoniker": "D:0:0:{AF025062-8AED-4E0B-91A4-CD4245F9DB46}|Firebird2D.Requirement\\Firebird2D.Requirement.csproj|g:\\coding\\firebird2d\\firebird2d.requirement\\require.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
"RelativeMoniker": "D:0:0:{AF025062-8AED-4E0B-91A4-CD4245F9DB46}|Firebird2D.Requirement\\Firebird2D.Requirement.csproj|solutionrelative:firebird2d.requirement\\require.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
"AbsoluteMoniker": "D:0:0:{7F6F9690-3BD3-4D44-BE62-3A7282DA671D}|FireBird2D.Interfaces\\Firebird2D.DataypesAndInterfaces.csproj|g:\\coding\\firebird2d\\firebird2d.interfaces\\interfaces\\iextensionbase.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
"RelativeMoniker": "D:0:0:{7F6F9690-3BD3-4D44-BE62-3A7282DA671D}|FireBird2D.Interfaces\\Firebird2D.DataypesAndInterfaces.csproj|solutionrelative:firebird2d.interfaces\\interfaces\\iextensionbase.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
},
{
"AbsoluteMoniker": "D:0:0:{487A2EF7-6F5F-4F03-B355-82EF8BA45530}|Firebird2D\\Firebird2D.csproj|g:\\coding\\firebird2d\\firebird2d\\scenesystem\\scenemanager.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
"RelativeMoniker": "D:0:0:{487A2EF7-6F5F-4F03-B355-82EF8BA45530}|Firebird2D\\Firebird2D.csproj|solutionrelative:firebird2d\\scenesystem\\scenemanager.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
"AbsoluteMoniker": "D:0:0:{917F395C-6C2E-4F23-9ED1-B123E5F272E9}|Firebird2D.ModulLoader\\Firebird2D.ModulLoading.csproj|g:\\coding\\firebird2d\\firebird2d.modulloader\\moduletype.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
"RelativeMoniker": "D:0:0:{917F395C-6C2E-4F23-9ED1-B123E5F272E9}|Firebird2D.ModulLoader\\Firebird2D.ModulLoading.csproj|solutionrelative:firebird2d.modulloader\\moduletype.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
},
{
"AbsoluteMoniker": "D:0:0:{917F395C-6C2E-4F23-9ED1-B123E5F272E9}|Firebird2D.ModulLoader\\Firebird2D.ModulLoading.csproj|g:\\coding\\firebird2d\\firebird2d.modulloader\\modules\\moduls.xml||{FA3CD31E-987B-443A-9B81-186104E8DAC1}",
"RelativeMoniker": "D:0:0:{917F395C-6C2E-4F23-9ED1-B123E5F272E9}|Firebird2D.ModulLoader\\Firebird2D.ModulLoading.csproj|solutionrelative:firebird2d.modulloader\\modules\\moduls.xml||{FA3CD31E-987B-443A-9B81-186104E8DAC1}"
"AbsoluteMoniker": "D:0:0:{567FA588-5EE8-4B36-9C81-47C76C46D782}|Firebird2D.SFMLExtensions\\Firebird2D.SFMLExtensions.csproj|g:\\coding\\firebird2d\\firebird2d.sfmlextensions\\floatrectangeextension.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
"RelativeMoniker": "D:0:0:{567FA588-5EE8-4B36-9C81-47C76C46D782}|Firebird2D.SFMLExtensions\\Firebird2D.SFMLExtensions.csproj|solutionrelative:firebird2d.sfmlextensions\\floatrectangeextension.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
},
{
"AbsoluteMoniker": "D:0:0:{106D6D21-E153-476B-AE52-4B2C899F6928}|Firebird2D.Logger\\Firebird2D.Logger.csproj|g:\\coding\\firebird2d\\firebird2d.logger\\gamelogger.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
"RelativeMoniker": "D:0:0:{106D6D21-E153-476B-AE52-4B2C899F6928}|Firebird2D.Logger\\Firebird2D.Logger.csproj|solutionrelative:firebird2d.logger\\gamelogger.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
},
{
"AbsoluteMoniker": "D:0:0:{7F6F9690-3BD3-4D44-BE62-3A7282DA671D}|FireBird2D.Interfaces\\Firebird2D.DataypesAndInterfaces.csproj|g:\\coding\\firebird2d\\firebird2d.interfaces\\datatypes\\moduletype.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
"RelativeMoniker": "D:0:0:{7F6F9690-3BD3-4D44-BE62-3A7282DA671D}|FireBird2D.Interfaces\\Firebird2D.DataypesAndInterfaces.csproj|solutionrelative:firebird2d.interfaces\\datatypes\\moduletype.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
"AbsoluteMoniker": "D:0:0:{917F395C-6C2E-4F23-9ED1-B123E5F272E9}|Firebird2D.ModulLoader\\Firebird2D.ModulLoading.csproj|g:\\coding\\firebird2d\\firebird2d.modulloader\\modules\\moduls.xml||{FA3CD31E-987B-443A-9B81-186104E8DAC1}",
"RelativeMoniker": "D:0:0:{917F395C-6C2E-4F23-9ED1-B123E5F272E9}|Firebird2D.ModulLoader\\Firebird2D.ModulLoading.csproj|solutionrelative:firebird2d.modulloader\\modules\\moduls.xml||{FA3CD31E-987B-443A-9B81-186104E8DAC1}"
},
{
"AbsoluteMoniker": "D:0:0:{7F6F9690-3BD3-4D44-BE62-3A7282DA671D}|FireBird2D.Interfaces\\Firebird2D.DataypesAndInterfaces.csproj|g:\\coding\\firebird2d\\firebird2d.interfaces\\datatypes\\firebirdevent.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
"RelativeMoniker": "D:0:0:{7F6F9690-3BD3-4D44-BE62-3A7282DA671D}|FireBird2D.Interfaces\\Firebird2D.DataypesAndInterfaces.csproj|solutionrelative:firebird2d.interfaces\\datatypes\\firebirdevent.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
},
{
"AbsoluteMoniker": "D:0:0:{7F6F9690-3BD3-4D44-BE62-3A7282DA671D}|FireBird2D.Interfaces\\Firebird2D.DataypesAndInterfaces.csproj|g:\\coding\\firebird2d\\firebird2d.interfaces\\interfaces\\ikeymapper.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
"RelativeMoniker": "D:0:0:{7F6F9690-3BD3-4D44-BE62-3A7282DA671D}|FireBird2D.Interfaces\\Firebird2D.DataypesAndInterfaces.csproj|solutionrelative:firebird2d.interfaces\\interfaces\\ikeymapper.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
},
{
"AbsoluteMoniker": "D:0:0:{38CCA723-C113-4E44-B074-F9B709B0EEB4}|Firebird2D.KeyMapper\\Firebird2D.KeyMapping.csproj|g:\\coding\\firebird2d\\firebird2d.keymapper\\keymapper.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
"RelativeMoniker": "D:0:0:{38CCA723-C113-4E44-B074-F9B709B0EEB4}|Firebird2D.KeyMapper\\Firebird2D.KeyMapping.csproj|solutionrelative:firebird2d.keymapper\\keymapper.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
},
{
"AbsoluteMoniker": "D:0:0:{FB2B6835-02BF-4AE7-B85F-290472787ED3}|Firebird2D.EventPipelines\\Firebird2D.EventPipelines.csproj|g:\\coding\\firebird2d\\firebird2d.eventpipelines\\eventbus.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
"RelativeMoniker": "D:0:0:{FB2B6835-02BF-4AE7-B85F-290472787ED3}|Firebird2D.EventPipelines\\Firebird2D.EventPipelines.csproj|solutionrelative:firebird2d.eventpipelines\\eventbus.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
},
{
"AbsoluteMoniker": "D:0:0:{7F6F9690-3BD3-4D44-BE62-3A7282DA671D}|FireBird2D.Interfaces\\Firebird2D.DataypesAndInterfaces.csproj|g:\\coding\\firebird2d\\firebird2d.interfaces\\interfaces\\ipipeline.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
"RelativeMoniker": "D:0:0:{7F6F9690-3BD3-4D44-BE62-3A7282DA671D}|FireBird2D.Interfaces\\Firebird2D.DataypesAndInterfaces.csproj|solutionrelative:firebird2d.interfaces\\interfaces\\ipipeline.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
},
{
"AbsoluteMoniker": "D:0:0:{7F6F9690-3BD3-4D44-BE62-3A7282DA671D}|FireBird2D.Interfaces\\Firebird2D.DataypesAndInterfaces.csproj|g:\\coding\\firebird2d\\firebird2d.interfaces\\interfaces\\ieventbus.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
"RelativeMoniker": "D:0:0:{7F6F9690-3BD3-4D44-BE62-3A7282DA671D}|FireBird2D.Interfaces\\Firebird2D.DataypesAndInterfaces.csproj|solutionrelative:firebird2d.interfaces\\interfaces\\ieventbus.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
},
{
"AbsoluteMoniker": "D:0:0:{FB2B6835-02BF-4AE7-B85F-290472787ED3}|Firebird2D.EventPipelines\\Firebird2D.EventPipelines.csproj|g:\\coding\\firebird2d\\firebird2d.eventpipelines\\pipeline.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
"RelativeMoniker": "D:0:0:{FB2B6835-02BF-4AE7-B85F-290472787ED3}|Firebird2D.EventPipelines\\Firebird2D.EventPipelines.csproj|solutionrelative:firebird2d.eventpipelines\\pipeline.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
},
{
"AbsoluteMoniker": "D:0:0:{7F6F9690-3BD3-4D44-BE62-3A7282DA671D}|FireBird2D.Interfaces\\Firebird2D.DataypesAndInterfaces.csproj|g:\\coding\\firebird2d\\firebird2d.interfaces\\firebird2d.dataypesandinterfaces.csproj||{FA3CD31E-987B-443A-9B81-186104E8DAC1}|",
"RelativeMoniker": "D:0:0:{7F6F9690-3BD3-4D44-BE62-3A7282DA671D}|FireBird2D.Interfaces\\Firebird2D.DataypesAndInterfaces.csproj|solutionrelative:firebird2d.interfaces\\firebird2d.dataypesandinterfaces.csproj||{FA3CD31E-987B-443A-9B81-186104E8DAC1}|"
},
{
"AbsoluteMoniker": "D:0:0:{AF025062-8AED-4E0B-91A4-CD4245F9DB46}|Firebird2D.Requirement\\Firebird2D.Requirement.csproj|g:\\coding\\firebird2d\\firebird2d.requirement\\require.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
"RelativeMoniker": "D:0:0:{AF025062-8AED-4E0B-91A4-CD4245F9DB46}|Firebird2D.Requirement\\Firebird2D.Requirement.csproj|solutionrelative:firebird2d.requirement\\require.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
},
{
"AbsoluteMoniker": "D:0:0:{487A2EF7-6F5F-4F03-B355-82EF8BA45530}|Firebird2D\\Firebird2D.csproj|g:\\coding\\firebird2d\\firebird2d\\core\\inputmapper.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
@@ -50,46 +78,14 @@
"AbsoluteMoniker": "D:0:0:{106D6D21-E153-476B-AE52-4B2C899F6928}|Firebird2D.Logger\\Firebird2D.Logger.csproj|g:\\coding\\firebird2d\\firebird2d.logger\\ilogger.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
"RelativeMoniker": "D:0:0:{106D6D21-E153-476B-AE52-4B2C899F6928}|Firebird2D.Logger\\Firebird2D.Logger.csproj|solutionrelative:firebird2d.logger\\ilogger.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
},
{
"AbsoluteMoniker": "D:0:0:{FB2B6835-02BF-4AE7-B85F-290472787ED3}|Firebird2D.EventPipelines\\Firebird2D.EventPipelines.csproj|g:\\coding\\firebird2d\\firebird2d.eventpipelines\\pipeline.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
"RelativeMoniker": "D:0:0:{FB2B6835-02BF-4AE7-B85F-290472787ED3}|Firebird2D.EventPipelines\\Firebird2D.EventPipelines.csproj|solutionrelative:firebird2d.eventpipelines\\pipeline.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
},
{
"AbsoluteMoniker": "D:0:0:{7F6F9690-3BD3-4D44-BE62-3A7282DA671D}|FireBird2D.Interfaces\\Firebird2D.DataypesAndInterfaces.csproj|g:\\coding\\firebird2d\\firebird2d.interfaces\\datatypes\\firebirdevent.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
"RelativeMoniker": "D:0:0:{7F6F9690-3BD3-4D44-BE62-3A7282DA671D}|FireBird2D.Interfaces\\Firebird2D.DataypesAndInterfaces.csproj|solutionrelative:firebird2d.interfaces\\datatypes\\firebirdevent.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
},
{
"AbsoluteMoniker": "D:0:0:{7F6F9690-3BD3-4D44-BE62-3A7282DA671D}|FireBird2D.Interfaces\\Firebird2D.DataypesAndInterfaces.csproj|g:\\coding\\firebird2d\\firebird2d.interfaces\\interfaces\\ipipeline.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
"RelativeMoniker": "D:0:0:{7F6F9690-3BD3-4D44-BE62-3A7282DA671D}|FireBird2D.Interfaces\\Firebird2D.DataypesAndInterfaces.csproj|solutionrelative:firebird2d.interfaces\\interfaces\\ipipeline.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
},
{
"AbsoluteMoniker": "D:0:0:{567FA588-5EE8-4B36-9C81-47C76C46D782}|Firebird2D.SFMLExtensions\\Firebird2D.SFMLExtensions.csproj|g:\\coding\\firebird2d\\firebird2d.sfmlextensions\\floatrectangeextension.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
"RelativeMoniker": "D:0:0:{567FA588-5EE8-4B36-9C81-47C76C46D782}|Firebird2D.SFMLExtensions\\Firebird2D.SFMLExtensions.csproj|solutionrelative:firebird2d.sfmlextensions\\floatrectangeextension.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
},
{
"AbsoluteMoniker": "D:0:0:{38CCA723-C113-4E44-B074-F9B709B0EEB4}|Firebird2D.KeyMapper\\Firebird2D.KeyMapping.csproj|g:\\coding\\firebird2d\\firebird2d.keymapper\\firebird2d.keymapping.csproj||{FA3CD31E-987B-443A-9B81-186104E8DAC1}|",
"RelativeMoniker": "D:0:0:{38CCA723-C113-4E44-B074-F9B709B0EEB4}|Firebird2D.KeyMapper\\Firebird2D.KeyMapping.csproj|solutionrelative:firebird2d.keymapper\\firebird2d.keymapping.csproj||{FA3CD31E-987B-443A-9B81-186104E8DAC1}|"
},
{
"AbsoluteMoniker": "D:0:0:{FB2B6835-02BF-4AE7-B85F-290472787ED3}|Firebird2D.EventPipelines\\Firebird2D.EventPipelines.csproj|g:\\coding\\firebird2d\\firebird2d.eventpipelines\\eventarguments\\firebirdjoystickbuttoneventargs.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
"RelativeMoniker": "D:0:0:{FB2B6835-02BF-4AE7-B85F-290472787ED3}|Firebird2D.EventPipelines\\Firebird2D.EventPipelines.csproj|solutionrelative:firebird2d.eventpipelines\\eventarguments\\firebirdjoystickbuttoneventargs.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
},
{
"AbsoluteMoniker": "D:0:0:{FB2B6835-02BF-4AE7-B85F-290472787ED3}|Firebird2D.EventPipelines\\Firebird2D.EventPipelines.csproj|g:\\coding\\firebird2d\\firebird2d.eventpipelines\\eventarguments\\firebirdkeyeventargs.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
"RelativeMoniker": "D:0:0:{FB2B6835-02BF-4AE7-B85F-290472787ED3}|Firebird2D.EventPipelines\\Firebird2D.EventPipelines.csproj|solutionrelative:firebird2d.eventpipelines\\eventarguments\\firebirdkeyeventargs.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
},
{
"AbsoluteMoniker": "D:0:0:{FB2B6835-02BF-4AE7-B85F-290472787ED3}|Firebird2D.EventPipelines\\Firebird2D.EventPipelines.csproj|g:\\coding\\firebird2d\\firebird2d.eventpipelines\\eventarguments\\firebirdmousebuttoneventargs.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
"RelativeMoniker": "D:0:0:{FB2B6835-02BF-4AE7-B85F-290472787ED3}|Firebird2D.EventPipelines\\Firebird2D.EventPipelines.csproj|solutionrelative:firebird2d.eventpipelines\\eventarguments\\firebirdmousebuttoneventargs.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
},
{
"AbsoluteMoniker": "D:0:0:{487A2EF7-6F5F-4F03-B355-82EF8BA45530}|Firebird2D\\Firebird2D.csproj|g:\\coding\\firebird2d\\firebird2d\\core\\mainwindow.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
"RelativeMoniker": "D:0:0:{487A2EF7-6F5F-4F03-B355-82EF8BA45530}|Firebird2D\\Firebird2D.csproj|solutionrelative:firebird2d\\core\\mainwindow.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
},
{
"AbsoluteMoniker": "D:0:0:{FB2B6835-02BF-4AE7-B85F-290472787ED3}|Firebird2D.EventPipelines\\Firebird2D.EventPipelines.csproj|g:\\coding\\firebird2d\\firebird2d.eventpipelines\\eventarguments\\inputeventtype.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
"RelativeMoniker": "D:0:0:{FB2B6835-02BF-4AE7-B85F-290472787ED3}|Firebird2D.EventPipelines\\Firebird2D.EventPipelines.csproj|solutionrelative:firebird2d.eventpipelines\\eventarguments\\inputeventtype.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
},
{
"AbsoluteMoniker": "D:0:0:{487A2EF7-6F5F-4F03-B355-82EF8BA45530}|Firebird2D\\Firebird2D.csproj|g:\\coding\\firebird2d\\firebird2d\\game.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
"RelativeMoniker": "D:0:0:{487A2EF7-6F5F-4F03-B355-82EF8BA45530}|Firebird2D\\Firebird2D.csproj|solutionrelative:firebird2d\\game.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
@@ -106,63 +102,63 @@
"DocumentGroups": [
{
"DockedWidth": 200,
"SelectedChildIndex": 13,
"SelectedChildIndex": 14,
"Children": [
{
"$type": "Document",
"DocumentIndex": 8,
"DocumentIndex": 3,
"Title": "ModuleType.cs",
"DocumentMoniker": "G:\\Coding\\Firebird2D\\FireBird2D.Interfaces\\Datatypes\\ModuleType.cs",
"RelativeDocumentMoniker": "FireBird2D.Interfaces\\Datatypes\\ModuleType.cs",
"ToolTip": "G:\\Coding\\Firebird2D\\FireBird2D.Interfaces\\Datatypes\\ModuleType.cs",
"RelativeToolTip": "FireBird2D.Interfaces\\Datatypes\\ModuleType.cs",
"ViewState": "AQIAAAAAAAAAAAAAAAAAAAwAAAAVAAAA",
"DocumentMoniker": "G:\\Coding\\Firebird2D\\Firebird2D.ModulLoader\\ModuleType.cs",
"RelativeDocumentMoniker": "Firebird2D.ModulLoader\\ModuleType.cs",
"ToolTip": "G:\\Coding\\Firebird2D\\Firebird2D.ModulLoader\\ModuleType.cs",
"RelativeToolTip": "Firebird2D.ModulLoader\\ModuleType.cs",
"ViewState": "AQIAAAAAAAAAAAAAAAAAACQAAABAAAAA",
"Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
"WhenOpened": "2025-04-22T16:50:37.241Z",
"EditorCaption": ""
},
{
"$type": "Document",
"DocumentIndex": 6,
"Title": "Moduls.xml",
"DocumentMoniker": "G:\\Coding\\Firebird2D\\Firebird2D.ModulLoader\\Modules\\Moduls.xml",
"RelativeDocumentMoniker": "Firebird2D.ModulLoader\\Modules\\Moduls.xml",
"ToolTip": "G:\\Coding\\Firebird2D\\Firebird2D.ModulLoader\\Modules\\Moduls.xml",
"RelativeToolTip": "Firebird2D.ModulLoader\\Modules\\Moduls.xml",
"ViewState": "AQIAAAAAAAAAAAAAAAAAAAcAAAAIAAAA",
"Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.003576|",
"WhenOpened": "2025-04-22T16:46:40.211Z",
"WhenOpened": "2025-05-18T14:23:50.586Z",
"EditorCaption": ""
},
{
"$type": "Document",
"DocumentIndex": 2,
"Title": "ModulLoader.cs",
"DocumentMoniker": "G:\\Coding\\Firebird2D\\Firebird2D.ModulLoader\\ModulLoader.cs",
"RelativeDocumentMoniker": "Firebird2D.ModulLoader\\ModulLoader.cs",
"ToolTip": "G:\\Coding\\Firebird2D\\Firebird2D.ModulLoader\\ModulLoader.cs",
"RelativeToolTip": "Firebird2D.ModulLoader\\ModulLoader.cs",
"ViewState": "AQIAABsAAAAAAAAAAAAowEMAAAAAAAAA",
"Title": "IExtensionBase.cs",
"DocumentMoniker": "G:\\Coding\\Firebird2D\\FireBird2D.Interfaces\\Interfaces\\IExtensionBase.cs",
"RelativeDocumentMoniker": "FireBird2D.Interfaces\\Interfaces\\IExtensionBase.cs",
"ToolTip": "G:\\Coding\\Firebird2D\\FireBird2D.Interfaces\\Interfaces\\IExtensionBase.cs",
"RelativeToolTip": "FireBird2D.Interfaces\\Interfaces\\IExtensionBase.cs",
"ViewState": "AQIAAAAAAAAAAAAAAAAAAA0AAAAAAAAA",
"Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
"WhenOpened": "2025-04-22T16:25:54.624Z",
"WhenOpened": "2025-05-18T14:16:38.035Z",
"EditorCaption": ""
},
{
"$type": "Document",
"DocumentIndex": 8,
"Title": "IKeyMapper.cs",
"DocumentMoniker": "G:\\Coding\\Firebird2D\\FireBird2D.Interfaces\\Interfaces\\IKeyMapper.cs",
"RelativeDocumentMoniker": "FireBird2D.Interfaces\\Interfaces\\IKeyMapper.cs",
"ToolTip": "G:\\Coding\\Firebird2D\\FireBird2D.Interfaces\\Interfaces\\IKeyMapper.cs",
"RelativeToolTip": "FireBird2D.Interfaces\\Interfaces\\IKeyMapper.cs",
"ViewState": "AQIAAAAAAAAAAAAAAAAAABMAAAAmAAAA",
"Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
"WhenOpened": "2025-05-18T11:27:47.81Z",
"EditorCaption": ""
},
{
"$type": "Document",
"DocumentIndex": 10,
"Title": "ISpatial.cs",
"DocumentMoniker": "G:\\Coding\\Firebird2D\\Firebird2D\\Datatypes\\ISpatial.cs",
"RelativeDocumentMoniker": "Firebird2D\\Datatypes\\ISpatial.cs",
"ToolTip": "G:\\Coding\\Firebird2D\\Firebird2D\\Datatypes\\ISpatial.cs",
"RelativeToolTip": "Firebird2D\\Datatypes\\ISpatial.cs",
"ViewState": "AQIAAAAAAAAAAAAAAAAAAAAAAAAAAAAA",
"Title": "EventBus.cs",
"DocumentMoniker": "G:\\Coding\\Firebird2D\\Firebird2D.EventPipelines\\EventBus.cs",
"RelativeDocumentMoniker": "Firebird2D.EventPipelines\\EventBus.cs",
"ToolTip": "G:\\Coding\\Firebird2D\\Firebird2D.EventPipelines\\EventBus.cs",
"RelativeToolTip": "Firebird2D.EventPipelines\\EventBus.cs",
"ViewState": "AQIAAAAAAAAAAAAAAAAAAEAAAAAAAAAA",
"Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
"WhenOpened": "2025-04-22T16:22:51.196Z",
"WhenOpened": "2025-05-18T08:52:39.396Z",
"EditorCaption": ""
},
{
"$type": "Document",
"DocumentIndex": 13,
"DocumentIndex": 7,
"Title": "FirebirdEvent.cs",
"DocumentMoniker": "G:\\Coding\\Firebird2D\\FireBird2D.Interfaces\\Datatypes\\FirebirdEvent.cs",
"RelativeDocumentMoniker": "FireBird2D.Interfaces\\Datatypes\\FirebirdEvent.cs",
@@ -175,33 +171,72 @@
},
{
"$type": "Document",
"DocumentIndex": 1,
"DocumentIndex": 12,
"Title": "IEventBus.cs",
"DocumentMoniker": "G:\\Coding\\Firebird2D\\FireBird2D.Interfaces\\Interfaces\\IEventBus.cs",
"RelativeDocumentMoniker": "FireBird2D.Interfaces\\Interfaces\\IEventBus.cs",
"ToolTip": "G:\\Coding\\Firebird2D\\FireBird2D.Interfaces\\Interfaces\\IEventBus.cs",
"RelativeToolTip": "FireBird2D.Interfaces\\Interfaces\\IEventBus.cs",
"ViewState": "AQIAAAAAAAAAAAAAAAAAABIAAABHAAAA",
"ViewState": "AQIAAAAAAAAAAAAAAAAAABAAAAA9AAAA",
"Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
"WhenOpened": "2025-04-22T16:13:30.421Z",
"EditorCaption": ""
},
{
"$type": "Document",
"DocumentIndex": 14,
"DocumentIndex": 11,
"Title": "IPipeline.cs",
"DocumentMoniker": "G:\\Coding\\Firebird2D\\FireBird2D.Interfaces\\Interfaces\\IPipeline.cs",
"RelativeDocumentMoniker": "FireBird2D.Interfaces\\Interfaces\\IPipeline.cs",
"ToolTip": "G:\\Coding\\Firebird2D\\FireBird2D.Interfaces\\Interfaces\\IPipeline.cs",
"RelativeToolTip": "FireBird2D.Interfaces\\Interfaces\\IPipeline.cs",
"ViewState": "AQIAAAAAAAAAAAAAAAAAABIAAAAzAAAA",
"ViewState": "AQIAAAAAAAAAAAAAAAAAACUAAAAAAAAA",
"Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
"WhenOpened": "2025-04-22T16:09:44.914Z",
"EditorCaption": ""
},
{
"$type": "Document",
"DocumentIndex": 15,
"DocumentIndex": 1,
"Title": "IGame.cs",
"DocumentMoniker": "G:\\Coding\\Firebird2D\\FireBird2D.Interfaces\\Interfaces\\IGame.cs",
"RelativeDocumentMoniker": "FireBird2D.Interfaces\\Interfaces\\IGame.cs",
"ToolTip": "G:\\Coding\\Firebird2D\\FireBird2D.Interfaces\\Interfaces\\IGame.cs",
"RelativeToolTip": "FireBird2D.Interfaces\\Interfaces\\IGame.cs",
"ViewState": "AQIAAAAAAAAAAAAAAAAAAAoAAAAaAAAA",
"Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
"WhenOpened": "2025-04-21T16:58:17.745Z",
"EditorCaption": ""
},
{
"$type": "Document",
"DocumentIndex": 5,
"Title": "GameLogger.cs",
"DocumentMoniker": "G:\\Coding\\Firebird2D\\Firebird2D.Logger\\GameLogger.cs",
"RelativeDocumentMoniker": "Firebird2D.Logger\\GameLogger.cs",
"ToolTip": "G:\\Coding\\Firebird2D\\Firebird2D.Logger\\GameLogger.cs",
"RelativeToolTip": "Firebird2D.Logger\\GameLogger.cs",
"ViewState": "AQIAAAAAAAAAAAAAAAAAAEUAAAAJAAAA",
"Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
"WhenOpened": "2025-04-17T17:56:23.324Z",
"EditorCaption": ""
},
{
"$type": "Document",
"DocumentIndex": 9,
"Title": "KeyMapper.cs",
"DocumentMoniker": "G:\\Coding\\Firebird2D\\Firebird2D.KeyMapper\\KeyMapper.cs",
"RelativeDocumentMoniker": "Firebird2D.KeyMapper\\KeyMapper.cs",
"ToolTip": "G:\\Coding\\Firebird2D\\Firebird2D.KeyMapper\\KeyMapper.cs",
"RelativeToolTip": "Firebird2D.KeyMapper\\KeyMapper.cs",
"ViewState": "AQIAAAAAAAAAAAAAAAAAABcAAAA5AAAA",
"Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
"WhenOpened": "2025-04-18T07:43:14.35Z",
"EditorCaption": ""
},
{
"$type": "Document",
"DocumentIndex": 4,
"Title": "FloatRectangeExtension.cs",
"DocumentMoniker": "G:\\Coding\\Firebird2D\\Firebird2D.SFMLExtensions\\FloatRectangeExtension.cs",
"RelativeDocumentMoniker": "Firebird2D.SFMLExtensions\\FloatRectangeExtension.cs",
@@ -214,33 +249,59 @@
},
{
"$type": "Document",
"DocumentIndex": 11,
"Title": "ILogger.cs",
"DocumentMoniker": "G:\\Coding\\Firebird2D\\Firebird2D.Logger\\ILogger.cs",
"RelativeDocumentMoniker": "Firebird2D.Logger\\ILogger.cs",
"ToolTip": "G:\\Coding\\Firebird2D\\Firebird2D.Logger\\ILogger.cs",
"RelativeToolTip": "Firebird2D.Logger\\ILogger.cs",
"ViewState": "AQIAAAAAAAAAAAAAAAAAAAwAAAANAAAA",
"DocumentIndex": 13,
"Title": "Pipeline.cs",
"DocumentMoniker": "G:\\Coding\\Firebird2D\\Firebird2D.EventPipelines\\Pipeline.cs",
"RelativeDocumentMoniker": "Firebird2D.EventPipelines\\Pipeline.cs",
"ToolTip": "G:\\Coding\\Firebird2D\\Firebird2D.EventPipelines\\Pipeline.cs",
"RelativeToolTip": "Firebird2D.EventPipelines\\Pipeline.cs",
"ViewState": "AQIAABwAAAAAAAAAAAAQwAkAAAAjAAAA",
"Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
"WhenOpened": "2025-04-21T17:12:31.494Z",
"WhenOpened": "2025-04-17T19:45:23.048Z",
"EditorCaption": ""
},
{
"$type": "Document",
"DocumentIndex": 3,
"Title": "IGame.cs",
"DocumentMoniker": "G:\\Coding\\Firebird2D\\FireBird2D.Interfaces\\Interfaces\\IGame.cs",
"RelativeDocumentMoniker": "FireBird2D.Interfaces\\Interfaces\\IGame.cs",
"ToolTip": "G:\\Coding\\Firebird2D\\FireBird2D.Interfaces\\Interfaces\\IGame.cs",
"RelativeToolTip": "FireBird2D.Interfaces\\Interfaces\\IGame.cs",
"ViewState": "AQIAAAAAAAAAAAAAAAAAAAsAAAAtAAAA",
"Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
"WhenOpened": "2025-04-21T16:58:17.745Z",
"DocumentIndex": 6,
"Title": "Moduls.xml",
"DocumentMoniker": "G:\\Coding\\Firebird2D\\Firebird2D.ModulLoader\\Modules\\Moduls.xml",
"RelativeDocumentMoniker": "Firebird2D.ModulLoader\\Modules\\Moduls.xml",
"ToolTip": "G:\\Coding\\Firebird2D\\Firebird2D.ModulLoader\\Modules\\Moduls.xml",
"RelativeToolTip": "Firebird2D.ModulLoader\\Modules\\Moduls.xml",
"ViewState": "AQIAAAAAAAAAAAAAAAAAAAsAAAAJAAAA",
"Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.003576|",
"WhenOpened": "2025-04-22T16:46:40.211Z",
"EditorCaption": ""
},
{
"$type": "Document",
"DocumentIndex": 9,
"DocumentIndex": 0,
"Title": "ModulLoader.cs",
"DocumentMoniker": "G:\\Coding\\Firebird2D\\Firebird2D.ModulLoader\\ModulLoader.cs",
"RelativeDocumentMoniker": "Firebird2D.ModulLoader\\ModulLoader.cs",
"ToolTip": "G:\\Coding\\Firebird2D\\Firebird2D.ModulLoader\\ModulLoader.cs",
"RelativeToolTip": "Firebird2D.ModulLoader\\ModulLoader.cs",
"ViewState": "AQIAAGkAAAAAAAAAAAAIwCkAAAAJAAAA",
"Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
"WhenOpened": "2025-04-22T16:25:54.624Z",
"EditorCaption": ""
},
{
"$type": "Document",
"DocumentIndex": 14,
"Title": "Firebird2D.DataypesAndInterfaces",
"DocumentMoniker": "G:\\Coding\\Firebird2D\\FireBird2D.Interfaces\\Firebird2D.DataypesAndInterfaces.csproj",
"RelativeDocumentMoniker": "FireBird2D.Interfaces\\Firebird2D.DataypesAndInterfaces.csproj",
"ToolTip": "G:\\Coding\\Firebird2D\\FireBird2D.Interfaces\\Firebird2D.DataypesAndInterfaces.csproj",
"RelativeToolTip": "FireBird2D.Interfaces\\Firebird2D.DataypesAndInterfaces.csproj",
"ViewState": "AQIAAAAAAAAAAAAAAAAAAAAAAAAAAAAA",
"Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000758|",
"WhenOpened": "2025-05-18T08:20:59.511Z",
"EditorCaption": ""
},
{
"$type": "Document",
"DocumentIndex": 16,
"Title": "InputMapper.cs",
"DocumentMoniker": "G:\\Coding\\Firebird2D\\Firebird2D\\Core\\InputMapper.cs",
"RelativeDocumentMoniker": "Firebird2D\\Core\\InputMapper.cs",
@@ -266,33 +327,33 @@
},
{
"$type": "Document",
"DocumentIndex": 0,
"Title": "KeyMapper.cs",
"DocumentMoniker": "G:\\Coding\\Firebird2D\\Firebird2D.KeyMapper\\KeyMapper.cs",
"RelativeDocumentMoniker": "Firebird2D.KeyMapper\\KeyMapper.cs",
"ToolTip": "G:\\Coding\\Firebird2D\\Firebird2D.KeyMapper\\KeyMapper.cs",
"RelativeToolTip": "Firebird2D.KeyMapper\\KeyMapper.cs",
"ViewState": "AQIAAAMAAAAAAAAAAAAAAB4AAAAJAAAA",
"DocumentIndex": 18,
"Title": "ILogger.cs",
"DocumentMoniker": "G:\\Coding\\Firebird2D\\Firebird2D.Logger\\ILogger.cs",
"RelativeDocumentMoniker": "Firebird2D.Logger\\ILogger.cs",
"ToolTip": "G:\\Coding\\Firebird2D\\Firebird2D.Logger\\ILogger.cs",
"RelativeToolTip": "Firebird2D.Logger\\ILogger.cs",
"ViewState": "AQIAAAAAAAAAAAAAAAAAAAwAAAANAAAA",
"Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
"WhenOpened": "2025-04-18T07:43:14.35Z",
"WhenOpened": "2025-04-21T17:12:31.494Z",
"EditorCaption": ""
},
{
"$type": "Document",
"DocumentIndex": 7,
"Title": "GameLogger.cs",
"DocumentMoniker": "G:\\Coding\\Firebird2D\\Firebird2D.Logger\\GameLogger.cs",
"RelativeDocumentMoniker": "Firebird2D.Logger\\GameLogger.cs",
"ToolTip": "G:\\Coding\\Firebird2D\\Firebird2D.Logger\\GameLogger.cs",
"RelativeToolTip": "Firebird2D.Logger\\GameLogger.cs",
"ViewState": "AQIAABgAAAAAAAAAAAA1wEUAAAAJAAAA",
"DocumentIndex": 17,
"Title": "ISpatial.cs",
"DocumentMoniker": "G:\\Coding\\Firebird2D\\Firebird2D\\Datatypes\\ISpatial.cs",
"RelativeDocumentMoniker": "Firebird2D\\Datatypes\\ISpatial.cs",
"ToolTip": "G:\\Coding\\Firebird2D\\Firebird2D\\Datatypes\\ISpatial.cs",
"RelativeToolTip": "Firebird2D\\Datatypes\\ISpatial.cs",
"ViewState": "AQIAAAAAAAAAAAAAAAAAAAAAAAAAAAAA",
"Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
"WhenOpened": "2025-04-17T17:56:23.324Z",
"WhenOpened": "2025-04-22T16:22:51.196Z",
"EditorCaption": ""
},
{
"$type": "Document",
"DocumentIndex": 4,
"DocumentIndex": 15,
"Title": "Require.cs",
"DocumentMoniker": "G:\\Coding\\Firebird2D\\Firebird2D.Requirement\\Require.cs",
"RelativeDocumentMoniker": "Firebird2D.Requirement\\Require.cs",
@@ -305,7 +366,7 @@
},
{
"$type": "Document",
"DocumentIndex": 16,
"DocumentIndex": 19,
"Title": "Firebird2D.KeyMapping.csproj",
"DocumentMoniker": "G:\\Coding\\Firebird2D\\Firebird2D.KeyMapper\\Firebird2D.KeyMapping.csproj",
"RelativeDocumentMoniker": "Firebird2D.KeyMapper\\Firebird2D.KeyMapping.csproj",
@@ -318,20 +379,7 @@
},
{
"$type": "Document",
"DocumentIndex": 12,
"Title": "Pipeline.cs",
"DocumentMoniker": "G:\\Coding\\Firebird2D\\Firebird2D.EventPipelines\\Pipeline.cs",
"RelativeDocumentMoniker": "Firebird2D.EventPipelines\\Pipeline.cs",
"ToolTip": "G:\\Coding\\Firebird2D\\Firebird2D.EventPipelines\\Pipeline.cs",
"RelativeToolTip": "Firebird2D.EventPipelines\\Pipeline.cs",
"ViewState": "AQIAAAAAAAAAAAAAAAAAABEAAAAVAAAA",
"Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
"WhenOpened": "2025-04-17T19:45:23.048Z",
"EditorCaption": ""
},
{
"$type": "Document",
"DocumentIndex": 22,
"DocumentIndex": 21,
"Title": "Game.cs",
"DocumentMoniker": "G:\\Coding\\Firebird2D\\Firebird2D\\Game.cs",
"RelativeDocumentMoniker": "Firebird2D\\Game.cs",
@@ -344,65 +392,13 @@
},
{
"$type": "Document",
"DocumentIndex": 18,
"Title": "FirebirdKeyEventArgs.cs",
"DocumentMoniker": "G:\\Coding\\Firebird2D\\Firebird2D.EventPipelines\\EventArguments\\FirebirdKeyEventArgs.cs",
"RelativeDocumentMoniker": "Firebird2D.EventPipelines\\EventArguments\\FirebirdKeyEventArgs.cs",
"ToolTip": "G:\\Coding\\Firebird2D\\Firebird2D.EventPipelines\\EventArguments\\FirebirdKeyEventArgs.cs",
"RelativeToolTip": "Firebird2D.EventPipelines\\EventArguments\\FirebirdKeyEventArgs.cs",
"ViewState": "AQIAAAAAAAAAAAAAAAAAAAsAAABCAAAA",
"Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
"WhenOpened": "2025-04-20T12:39:14.001Z",
"EditorCaption": ""
},
{
"$type": "Document",
"DocumentIndex": 21,
"Title": "InputEventType.cs",
"DocumentMoniker": "G:\\Coding\\Firebird2D\\Firebird2D.EventPipelines\\EventArguments\\InputEventType.cs",
"RelativeDocumentMoniker": "Firebird2D.EventPipelines\\EventArguments\\InputEventType.cs",
"ToolTip": "G:\\Coding\\Firebird2D\\Firebird2D.EventPipelines\\EventArguments\\InputEventType.cs",
"RelativeToolTip": "Firebird2D.EventPipelines\\EventArguments\\InputEventType.cs",
"ViewState": "AQIAAAAAAAAAAAAAAAAAAAwAAAAFAAAA",
"Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
"WhenOpened": "2025-04-20T12:41:00.332Z",
"EditorCaption": ""
},
{
"$type": "Document",
"DocumentIndex": 19,
"Title": "FirebirdMouseButtonEventArgs.cs",
"DocumentMoniker": "G:\\Coding\\Firebird2D\\Firebird2D.EventPipelines\\EventArguments\\FirebirdMouseButtonEventArgs.cs",
"RelativeDocumentMoniker": "Firebird2D.EventPipelines\\EventArguments\\FirebirdMouseButtonEventArgs.cs",
"ToolTip": "G:\\Coding\\Firebird2D\\Firebird2D.EventPipelines\\EventArguments\\FirebirdMouseButtonEventArgs.cs",
"RelativeToolTip": "Firebird2D.EventPipelines\\EventArguments\\FirebirdMouseButtonEventArgs.cs",
"ViewState": "AQIAAAAAAAAAAAAAAAAAABMAAAAAAAAA",
"Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
"WhenOpened": "2025-04-20T12:45:04.054Z",
"EditorCaption": ""
},
{
"$type": "Document",
"DocumentIndex": 17,
"Title": "FirebirdJoystickButtonEventArgs.cs",
"DocumentMoniker": "G:\\Coding\\Firebird2D\\Firebird2D.EventPipelines\\EventArguments\\FirebirdJoystickButtonEventArgs.cs",
"RelativeDocumentMoniker": "Firebird2D.EventPipelines\\EventArguments\\FirebirdJoystickButtonEventArgs.cs",
"ToolTip": "G:\\Coding\\Firebird2D\\Firebird2D.EventPipelines\\EventArguments\\FirebirdJoystickButtonEventArgs.cs",
"RelativeToolTip": "Firebird2D.EventPipelines\\EventArguments\\FirebirdJoystickButtonEventArgs.cs",
"ViewState": "AQIAAAAAAAAAAAAAAAAAABEAAAAFAAAA",
"Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
"WhenOpened": "2025-04-20T12:48:47.531Z",
"EditorCaption": ""
},
{
"$type": "Document",
"DocumentIndex": 23,
"DocumentIndex": 22,
"Title": "ClassDiagram.md",
"DocumentMoniker": "G:\\Coding\\Firebird2D\\ClassDiagram.md",
"RelativeDocumentMoniker": "ClassDiagram.md",
"ToolTip": "G:\\Coding\\Firebird2D\\ClassDiagram.md",
"RelativeToolTip": "ClassDiagram.md",
"ViewState": "AQIAAAAAAAAAAAAAAAAAACcAAAAFAAAA",
"ViewState": "AQIAAAAAAAAAAAAAAAAAABQAAAAAAAAA",
"Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.001818|",
"WhenOpened": "2025-04-17T17:57:06.258Z",
"EditorCaption": ""
@@ -410,40 +406,6 @@
]
}
]
},
{
"Orientation": 0,
"VerticalTabListWidth": 256,
"FloatingWindowState": {
"Id": "b14934ab-f70e-4c3b-af63-28d3e15ed402",
"Display": 0,
"X": 941,
"Y": 162,
"Width": 1981,
"Height": 1231,
"WindowState": 0
},
"DocumentGroups": [
{
"DockedWidth": 200,
"SelectedChildIndex": 0,
"Children": [
{
"$type": "Document",
"DocumentIndex": 5,
"Title": "SceneManager.cs",
"DocumentMoniker": "G:\\Coding\\Firebird2D\\Firebird2D\\SceneSystem\\SceneManager.cs",
"RelativeDocumentMoniker": "Firebird2D\\SceneSystem\\SceneManager.cs",
"ToolTip": "G:\\Coding\\Firebird2D\\Firebird2D\\SceneSystem\\SceneManager.cs",
"RelativeToolTip": "Firebird2D\\SceneSystem\\SceneManager.cs",
"ViewState": "AQIAAAAAAAAAAAAAAAAAAAAAAAAAAAAA",
"Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
"WhenOpened": "2025-04-22T16:40:39.645Z",
"EditorCaption": ""
}
]
}
]
}
]
}
Binary file not shown.
Binary file not shown.
Binary file not shown.
+135 -33
View File
@@ -1,44 +1,52 @@
```mermaid
classDiagram
classDiagram
namespace EventPipelines{
%% === Basisklassen ===
class FirebirdEventArgs {
<<abstract>>
}
class Pipeline~T~ {
- PipelineMaster : object
+ OnEvent : EventHandler~T~
+ PiplineMaster : object&lbrace;readonly&rbrace;
+ IsEventEmpty : bool&lbrace;readonly&rbrace;
+ Subscribe(handler : Delegate)
+ Unsubscribe(handler : Delegate)
+ SendEvent(sender : object, args : T)
}
class EventBus {
- pipelines : Dictionary~FirebirdEvent, Pipeline~T~>
- pendingHooks : Dictionary ~FirebirdEvent, List~Action~object~~
+ OnPipelineExist~T~(callback : Action<Pipeline~T~>, type : FirebirdEvent)
+ BuildPipeline~T~(type : FirebirdEvent, master : object) : Pipeline~T~
+ GetPipeline~T~(type : FirebirdEvent) : Pipeline~T~
- pendingHooks : Dictionary~FirebirdEvent, List~Action~object~~
+ OnPipelineIsBuild(callback : Action~IPipelineBase~, firebirdEvent : FirebirdEvent )
+ GetOrBuildPipeline(type : FirebirdEvent, master : object) : IPipeline~T~
+ GetPipeline(type : FirebirdEvent) : IPipelineBase?
+ DestroyPipeline(type : FirebirdEvent, master : object)
}
}
%% === Spezialisierte Pipelines ===
class KeyboardPipeline {
<<inherits Pipeline~FirebirdKeyboardEventArgs~>>
}
namespace keymapping{
class KeyMapper{
- eventBus : IEventBus;
- inputEvents : Dictionary~string, Delegate~ ;
- eventTypes : Dictionary~string, Type~;
- inputMapping : Dictionary~string, FirebirdEvent~ ;
- cachedPipelines : Dictionary~FirebirdEvent, IPipeline~ ;
class MousePipeline {
<<inherits Pipeline~FirebirdMouseEventArgs~>>
}
+ KeyMapper(eventBus : IEventBus)
%% === EventArgs Spezialisierungen ===
class FirebirdKeyboardEventArgs {
<<inherits FirebirdEventArgs>>
}
class FirebirdMouseEventArgs {
<<inherits FirebirdEventArgs>>
+ RegisterEvent~T~(EventName : string , handler : EventHandler~T~ , eventNumber : FirebirdEvent )
+ Map(EventName : string , eventNumbe : FirebirdEvent)
- RemoveMapping(EventName : string)
- AjustPipeline(EventName : string, eventNumber : FirebirdEvent )
+ SaveMapping(Path : string)
+ LoadMapping(Path : string)
+ InvalidatePipelineCache(fbEvent : FirebirdEvent)
+ GetOrCachePipeline~T~(fbEvent : FirebirdEvent ) : Pipeline~T~?
+ HandleKeyboardInput(key : KeyEvent , type : KeyEvent)
+ HandleMouseInput(button : MouseButtonEvent, type : InputEventType)
+ HandleJoystickButtonInput(joystickButton : JoystickButtonEvent , type : InputEventType)
+ HandleMouseMovement(mouseMove : MouseMoveEvent)
+ HandleJoytickMove(joystickMove : JoystickMoveEvent)
}
}
namespace DatatypesAndInterfaces{
%% === Enum ===
class FirebirdEvent {
<<enum>>
@@ -48,15 +56,109 @@ namespace EventPipelines{
KeyboardInputs
MouseInputs
}
class ModuleType{
<<enum>>
Extension
EventSystem
KeyMapper
}
class IEventBus{
<<Interface>>
+ OnPipelineIsBuild(callback : Action~IPipelineBase~, firebirdEvent : FirebirdEvent )
+ GetOrBuildPipeline(type : FirebirdEvent, master : object) : IPipeline~T~
+ GetPipeline(type : FirebirdEvent) : IPipelineBase?
+ DestroyPipeline(type : FirebirdEvent, master : object)
}
class IPipelineBase {
<<Interface>>
+ PiplineMaster : object&lbrace;readonly&rbrace;
+ IsEventEmpty : bool&lbrace;readonly&rbrace;
+ Subscribe(handler : Delegate)
+ Unsubscribe(handler : Delegate)
}
class IPipeline~T~{
<<Interface>>
+ SendEvent(sender : object, args : T)
}
class IKeyMapper{
<<Interface>>
+ Map(EventName : string , eventNumbe : FirebirdEvent)
+ SaveMapping(Path : string)
+ LoadMapping(Path : string)
+ InvalidatePipelineCache(fbEvent : FirebirdEvent)
+ GetOrCachePipeline~T~(fbEvent : FirebirdEvent ) : Pipeline~T~?
+ HandleKeyboardInput(key : KeyEvent , type : KeyEvent)
+ HandleMouseInput(button : MouseButtonEvent, type : InputEventType)
+ HandleJoystickButtonInput(joystickButton : JoystickButtonEvent , type : InputEventType)
+ HandleMouseMovement(mouseMove : MouseMoveEvent)
+ HandleJoytickMove(joystickMove : JoystickMoveEvent)
}
class IExtensionBase{
<<Interface>>
+ Startup()
}
class IGame{
<<Interface>>
+ EventBus : IEventBus
+ KeyMapper : IKeyMapper
}
}
%% === Beziehungen ===
Pipeline~T~ <|-- KeyboardPipeline
Pipeline~T~ <|-- MousePipeline
FirebirdEventArgs <|-- FirebirdKeyboardEventArgs
FirebirdEventArgs <|-- FirebirdMouseEventArgs
EventBus -->Pipeline~T~
EventBus -->Pipeline~T~
namespace ModulLoading{
class Modul {
+ModuleType ModuleType
+string Name
+string RelativePath
}
class ModulList {
+List~Modul~ mods
}
class ModulLoader {
-ModulList? modulList
-static Dictionary~ExtensionDependencyInjection, (Type, Func<IGame, object>)~ providers
+ModulLoader(IGame)
+T? LoadSystemComponent<T>(ModuleType, IGame)
+void LoadExtensions(IGame)
-T? LoadModule<T>(ModuleType, IGame, string)
+void DeserialiseModulList()
}
}
%% === Beziehungen ===
EventBus --> Pipeline~T~
EventBus --> IPipeline~T~
EventBus --> IPipelineBase
EventBus ..|> IEventBus
Pipeline~T~ ..|> IPipeline~T~
Pipeline~T~ ..|> IPipelineBase
KeyMapper --> IEventBus
KeyMapper --> FirebirdEvent
KeyMapper --> IPipeline~T~
KeyMapper ..|> IKeyMapper
IKeyMapper --> FirebirdEvent
IKeyMapper --> IPipeline~T~
ModulList --> Modul
ModulLoader --> ModulList
ModulLoader --> Modul
ModulLoader --> ModuleType
ModulLoader --> IGame
ModulLoader --> IExtensionBase
ModulLoader --> IEventBus
ModulLoader --> IKeyMapper
```
@@ -6,4 +6,8 @@
<Nullable>enable</Nullable>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="SFML.Net" Version="2.6.1" />
</ItemGroup>
</Project>
@@ -10,11 +10,11 @@ namespace Firebird2D.Interfaces
{
public interface IEventBus
{
public void OnPipelineIsBuild(Action<IPipeline> callback, FirebirdEvent firebirdEvent);
public void OnPipelineIsBuild(Action<IPipelineBase> callback, FirebirdEvent firebirdEvent);
public IPipeline GetOrBuildPipeline(FirebirdEvent type, Type argsType, object master);
public IPipeline<T> GetOrBuildPipeline<T>(FirebirdEvent type, object master) where T : EventArgs;
public IPipeline? GetPipeline(FirebirdEvent type, Type argsType);
public IPipelineBase GetPipeline(FirebirdEvent type);
public void DestroyPipeline(FirebirdEvent type, object master);
}
@@ -4,12 +4,10 @@ using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Firebird2D.Datatypes
namespace Firebird2D.DataypesAndInterfaces.Interfaces
{
public enum ModuleType
public interface IExtensionBase
{
Extension = 0,
EventSystem = 1,
KeyMapper = 2
public void Startup();
}
}
+4 -1
View File
@@ -1,4 +1,5 @@
using Firebird2D.Interfaces;
using Firebird2D.DataypesAndInterfaces.Interfaces;
using Firebird2D.Interfaces;
using System;
using System.Collections.Generic;
using System.Linq;
@@ -10,5 +11,7 @@ namespace Firebird2D.Interfaces
public interface IGame
{
public IEventBus EventBus { get; set; }
public IKeyMapper KeyMapper { get; set; }
}
}
@@ -0,0 +1,28 @@
using Firebird2D.Datatypes;
using Firebird2D.EventPipelines.EventArguments;
using Firebird2D.Interfaces;
using SFML.Window;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Runtime.CompilerServices;
using System.Text;
using System.Text.Json;
using System.Threading.Tasks;
namespace Firebird2D.DataypesAndInterfaces.Interfaces
{
public interface IKeyMapper
{
void RegisterEvent<T>(string EventName, EventHandler<T> handler, FirebirdEvent eventNumber) where T : EventArgs;
void Map(string EventName, FirebirdEvent eventNumber);
void SaveMapping(string Path);
void LoadMapping(string Path);
void InvalidatePipelineCache(FirebirdEvent fbEvent);
void HandleKeyboardInput(KeyEvent key, InputEventType type);
void HandleMouseInput(MouseButtonEvent button, InputEventType type);
void HandleJoystickButtonInput(JoystickButtonEvent joystickButton, InputEventType type);
void HandleMouseMovement(MouseMoveEvent mouseMove);
public void HandleJoytickMove(JoystickMoveEvent joystickMove);
}
}
+10 -4
View File
@@ -6,10 +6,7 @@ using System.Threading.Tasks;
namespace Firebird2D.Interfaces
{
/// <summary>
/// Interface for the Firebird event Pipeline
/// </summary>
public interface IPipeline
public interface IPipelineBase
{
/// <summary>
/// Class witch owns the Pipeline and has the right to send events or delete the pipeline
@@ -30,6 +27,15 @@ namespace Firebird2D.Interfaces
/// </summary>
/// <param name="handler">Handler witch should be removed from the Pipeline</param>
void Unsubscribe(Delegate handler);
}
/// <summary>
/// Interface for the Firebird event Pipeline
/// </summary>
public interface IPipeline<T> : IPipelineBase where T : EventArgs
{
void SendEvent(object sender, T args);
}
}
+16 -10
View File
@@ -15,11 +15,11 @@ namespace Firebird2D.EventPipelines
{
// Dictionary that stores various pipelines for specific FirebirdEvents.
// The key is the event, and the value is the corresponding pipeline.
private Dictionary<FirebirdEvent, IPipeline> pipelines = new();
private Dictionary<FirebirdEvent, IPipelineBase> pipelines = new();
// Dictionary that stores a list of callbacks for each FirebirdEvent.
// These callbacks will be invoked when the event's pipeline is build.
private Dictionary<FirebirdEvent, List<Action<IPipeline>>> pendingHooks = new();
private Dictionary<FirebirdEvent, List<Action<IPipelineBase>>> pendingHooks = new();
/// <summary>
/// Registers a callback (hook) for a specific event. The callback will be invoked when the pipeline for this event is built.
@@ -27,7 +27,7 @@ namespace Firebird2D.EventPipelines
/// <param name="callback">The function to be called when the pipeline for the event is built.</param>
/// <param name="type">The event for which the callback should be registered.</param>
/// <exception cref="ArgumentNullException">Thrown when the callback is null.</exception>
public void OnPipelineIsBuild(Action<IPipeline> callback, FirebirdEvent type)
public void OnPipelineIsBuild(Action<IPipelineBase> callback, FirebirdEvent type)
{
if (callback == null) throw new ArgumentNullException(nameof(callback));
@@ -46,16 +46,23 @@ namespace Firebird2D.EventPipelines
/// Otherwise, a new pipeline is created and stored.
/// </summary>
/// <param name="type">The event for which the pipeline should be created or retrieved.</param>
/// <param name="argsType">The type of the arguments to be passed to the pipeline.</param>
/// <param name="master">The master object used when creating the pipeline.</param>
/// <returns>The pipeline for the given event.</returns>
public IPipeline GetOrBuildPipeline(FirebirdEvent type, Type argsType, object master)
public IPipeline<T> GetOrBuildPipeline<T>(FirebirdEvent type, object master) where T : EventArgs
{
if (pipelines.TryGetValue(type, out var pipeline)) return pipeline;
if (pipelines.TryGetValue(type, out var pipeline)) return (IPipeline<T>)pipeline;
var genericPipelineType = typeof(Pipeline<>).MakeGenericType(argsType);
var pipelineInstance = (IPipeline)Activator.CreateInstance(genericPipelineType, master)!;
var pipelineInstance = new Pipeline<T>(master);
pipelines[type] = pipelineInstance;
if (pendingHooks.TryGetValue(type, out var hookList)) return pipelineInstance;
if (hookList == null) return pipelineInstance;
foreach (Action<IPipelineBase> hook in hookList)
{
hook.Invoke(pipelineInstance);
}
return pipelineInstance;
}
@@ -63,9 +70,8 @@ namespace Firebird2D.EventPipelines
/// Retrieves the pipeline for an event if it exists; otherwise, returns null.
/// </summary>
/// <param name="type">The event for which the pipeline should be retrieved.</param>
/// <param name="argsType">The type of the arguments for the pipeline.</param>
/// <returns>The pipeline for the event, or null if it does not exist.</returns>
public IPipeline? GetPipeline(FirebirdEvent type, Type argsType)
public IPipelineBase? GetPipeline(FirebirdEvent type)
{
if (!pipelines.TryGetValue(type, out var pipeline)) return null;
return pipeline;
+1 -1
View File
@@ -13,7 +13,7 @@ namespace Firebird2D.EventPipelines
/// Eventpypeline which transports an event to every Subscyber
/// </summary>
/// <typeparam name="T">Event Arguments for the Pipeline event</typeparam>
public class Pipeline <T> : IPipeline where T : EventArgs
public class Pipeline <T> : IPipeline<T> where T : EventArgs
{
/// <summary>
/// Class witch owns the Pipeline and has the right to send events or delete the pipeline
@@ -8,6 +8,7 @@
<ItemGroup>
<ProjectReference Include="..\Firebird2D.EventPipelines\Firebird2D.EventPipelines.csproj" />
<ProjectReference Include="..\Firebird2D.Requirement\Firebird2D.Requirement.csproj" />
</ItemGroup>
</Project>
+8 -6
View File
@@ -5,13 +5,15 @@ using System.Runtime.CompilerServices;
using System.Text.Json;
using Firebird2D.Interfaces;
using Firebird2D.Datatypes;
using Firebird2D.DataypesAndInterfaces.Interfaces;
using Firebird2D.Requirement;
namespace Firebird2D.KeyMapping
{
/// <summary>
/// Maps input events (keyboard, mouse, joystick) to custom Firebird events and manages their pipelines.
/// </summary>
public class KeyMapper
public class KeyMapper : IKeyMapper
{
private readonly IEventBus eventBus;
@@ -25,7 +27,7 @@ namespace Firebird2D.KeyMapping
private Dictionary<string, FirebirdEvent> inputMapping = [];
// Caches active pipelines for performance.
private Dictionary<FirebirdEvent, IPipeline> cachedPipelines = [];
private Dictionary<FirebirdEvent, IPipelineBase> cachedPipelines = [];
public KeyMapper(IEventBus eventBus)
{
@@ -72,7 +74,7 @@ namespace Firebird2D.KeyMapping
if (!inputMapping.TryGetValue(EventName, out var firebirdEvent)) return;
if (!eventTypes.TryGetValue(EventName, out var type)) return;
IPipeline? pipeline = eventBus.GetPipeline(firebirdEvent, type);
IPipelineBase pipeline = eventBus.GetPipeline(firebirdEvent);
if (pipeline != null)
{
@@ -94,7 +96,7 @@ namespace Firebird2D.KeyMapping
{
if (!eventTypes.TryGetValue(EventName, out var type)) return;
IPipeline pipeline = eventBus.GetOrBuildPipeline(eventNumber, type, this);
IPipeline<EventArgs> pipeline = eventBus.GetOrBuildPipeline<EventArgs>(eventNumber, this);
pipeline.Subscribe(inputEvents[EventName]);
}
@@ -146,12 +148,12 @@ namespace Firebird2D.KeyMapping
/// Retrieves a cached pipeline or fetches and caches it.
/// </summary>
[MethodImpl(MethodImplOptions.AggressiveInlining)]
private Pipeline<T>? GetOrCachePipeline<T>(FirebirdEvent fbEvent) where T : EventArgs
private IPipeline<T>? GetOrCachePipeline<T>(FirebirdEvent fbEvent) where T : EventArgs
{
if (cachedPipelines.TryGetValue(fbEvent, out var pipelineObj) && pipelineObj is Pipeline<T> cached)
return cached;
var pipeline = eventBus?.GetPipeline(fbEvent, typeof(T)) as Pipeline<T>;
var pipeline = eventBus?.GetPipeline(fbEvent) as Pipeline<T>;
if (pipeline != null)
cachedPipelines[fbEvent] = pipeline;
@@ -1,10 +1,9 @@
//------------------------------------------------------------------------------
// <auto-generated>
// Dieser Code wurde von einem Tool generiert.
// Laufzeitversion:4.0.30319.42000
// This code was generated by a tool.
//
// Änderungen an dieser Datei können falsches Verhalten verursachen und gehen verloren, wenn
// der Code erneut generiert wird.
// Changes to this file may cause incorrect behavior and will be lost if
// the code is regenerated.
// </auto-generated>
//------------------------------------------------------------------------------
@@ -14,10 +13,10 @@ using System.Reflection;
[assembly: System.Reflection.AssemblyCompanyAttribute("Firebird2D.Logger")]
[assembly: System.Reflection.AssemblyConfigurationAttribute("Debug")]
[assembly: System.Reflection.AssemblyFileVersionAttribute("1.0.0.0")]
[assembly: System.Reflection.AssemblyInformationalVersionAttribute("1.0.0+766b2e414b907163c1fd34f3b22b1aa8ae51a9e2")]
[assembly: System.Reflection.AssemblyInformationalVersionAttribute("1.0.0+47ddfed9bc856f69b96a5dee3963e56a0c0d269c")]
[assembly: System.Reflection.AssemblyProductAttribute("Firebird2D.Logger")]
[assembly: System.Reflection.AssemblyTitleAttribute("Firebird2D.Logger")]
[assembly: System.Reflection.AssemblyVersionAttribute("1.0.0.0")]
// Von der MSBuild WriteCodeFragment-Klasse generiert.
// Generated by the MSBuild WriteCodeFragment class.
@@ -1 +1 @@
efa2647d90b080a7b266fbfa5ece1bdf184aafb101e1daf94499748c54e5b462
a9f3fdec0f3c349ed983a18d512fe6dc153bda16f51c4a0754a5ffc694000f43
+95 -38
View File
@@ -1,4 +1,5 @@
using Firebird2D.Datatypes;
using Firebird2D.DataypesAndInterfaces.Interfaces;
using Firebird2D.Interfaces;
using Firebird2D.Logger;
using Firebird2D.Requirement;
@@ -25,66 +26,122 @@ namespace Firebird2D.ModulLoading
public class ModulLoader
{
private readonly IGame gameInstance;
private static readonly Dictionary<ExtensionDependencyInjection, (Type type, Func<IGame, object> resolver)> providers = new()
{
[ExtensionDependencyInjection.game] = (typeof(IGame), game => game),
[ExtensionDependencyInjection.eventsystem] = (typeof(IEventBus), game => game.EventBus),
[ExtensionDependencyInjection.keymapper] = (typeof(IKeyMapper), game => game.KeyMapper),
};
private ModulList? modulList = null;
public ModulLoader(IGame gameInstance)
{
this.gameInstance = gameInstance;
DeserialiseModulList();
}
public void LoadModules()
public T? LoadSystemComponent<T>(ModuleType moduleType, IGame gameInstance) where T : class
{
DeserialiseModulList();
if (modulList == null) return;
List<Modul> eventModul = modulList.mods.Where(m => m.ModuleType == ModuleType.EventSystem).ToList();
if(modulList?.mods == null || modulList.mods.Count == 0) return null;
if (eventModul.Count > 1) GameLogger.GetInstance(0).Log("ModuleLoader", LogType.Warning, $"More then one EventModul defined first modul ist loaded");
List<Modul> systemModules = modulList.mods.Where(m => m.ModuleType == moduleType).ToList();
if (systemModules.Count > 1) GameLogger.GetInstance(0).Log("ModuleLoader", LogType.Warning, $"More then one {moduleType.ToString()} defined, first loadable modul ist loaded");
if (systemModules.Count < 1) { GameLogger.GetInstance(0).Log("ModuleLoader", LogType.Info, $"No {moduleType.ToString()} is Defined Basic Modul is Loaded"); return null; };
if (eventModul.Count != 0)
for(int i = 0; i < systemModules.Count; i++)
{
try
{
Assembly eventAssembly = Assembly.Load(eventModul[0].RelativePath);
if (string.IsNullOrWhiteSpace(systemModules[i].RelativePath)) continue;
T? modul = LoadModule<T>(moduleType, gameInstance, systemModules[i].RelativePath);
if (modul == null) continue;
GameLogger.GetInstance(0).Log("ModuleLoader", LogType.Info, $"{systemModules[i].RelativePath} is loeaded for {moduleType}.");
return modul;
}
GameLogger.GetInstance(0).Log("ModuleLoader", LogType.Info, $"F{eventModul[0].Name} loaded.");
GameLogger.GetInstance(0).Log("ModuleLoader", LogType.Error, $"None of the defined {moduleType} modules could be loaded.");
LinkEventAssembly(eventAssembly);
}
catch(Exception ex)
return null;
}
public void LoadExtensions(IGame gameInstance)
{
if (modulList?.mods == null || modulList.mods.Count == 0) return;
List<Modul> eventModul = modulList.mods.Where(m => m.ModuleType == ModuleType.Extension).ToList();
foreach (Modul modul in eventModul) {
if (string.IsNullOrWhiteSpace(modul.RelativePath)) continue;
IExtensionBase? extensionBase = LoadModule<IExtensionBase>(ModuleType.Extension, gameInstance, modul.RelativePath);
if (extensionBase != null)
{
GameLogger.GetInstance(0).Log("ModuleLoader", LogType.Warning, $"Failed to load {eventModul[0].Name}, with exception {ex.Message}");
extensionBase.Startup();
}
}
else
GameLogger.GetInstance(0).Log("ModuleLoader", LogType.Warning, $"More then one EventModul defined first modul ist loaded");
if (modulList.mods.Count == 0) return;
}
private void LinkEventAssembly(Assembly assembly)
{
Type? type = assembly.GetTypes().FirstOrDefault(t => typeof(IEventBus).IsAssignableFrom(t) && !t.IsInterface);
Require.NotNull(type,"type",0);
IEventBus? eventBus = Activator.CreateInstance(type) as IEventBus;
Require.NotNull(eventBus,"eventBus",0);
gameInstance.EventBus = eventBus;
}
private void DeserialiseModulList()
private T? LoadModule<T>(ModuleType moduleType, IGame gameInstance, string modulePath) where T : class
{
try
{
using (FileStream file = new FileStream("Modules/Moduls.xml", FileMode.Open))
string basePath = AppContext.BaseDirectory;
string dllPath = Path.Combine(basePath, modulePath);
Assembly assembly = Assembly.LoadFrom(dllPath);
Type moduleClassType = assembly.GetTypes().First(t => typeof(T).IsAssignableFrom(t));
List<Type> dependencyInjectionTypes = [];
List<Object> dependencyInjections = [];
foreach (var neededParam in moduleType.getNeededDependencyInjection())
{
if (providers.TryGetValue(neededParam, out var entry))
{
dependencyInjectionTypes.Add(entry.type);
dependencyInjections.Add(entry.resolver(gameInstance));
}
else
{
GameLogger.GetInstance(0).Log("ModuleLoader", LogType.Warning, $"No provider found for dependency: {neededParam}");
}
}
ConstructorInfo? ctor = moduleClassType.GetConstructor(dependencyInjectionTypes.ToArray());
if (ctor == null)
{
string signature = string.Join(", ", dependencyInjectionTypes.Select(t => t.Name));
GameLogger.GetInstance(0).Log("ModuleLoader", LogType.Error, $"No constructor found matching: ({signature})");
return null;
};
T instance = (T)ctor.Invoke(dependencyInjections.ToArray());
Type expectedType = moduleType.getBasicModuleInterfaceType();
if (!expectedType.IsInstanceOfType(instance))
{
GameLogger.GetInstance(0).Log("ModuleLoader", LogType.Error, $"Instance does not implement {expectedType.Name}");
return null;
}
return instance;
}
catch (Exception ex)
{
GameLogger.GetInstance(0).Log("ModuleLoader", LogType.Error, $"Error while loading event module {ex.ToString()}");
return null;
}
}
public void DeserialiseModulList()
{
try
{
string path = Path.Combine(AppContext.BaseDirectory, "Modules", "Moduls.xml");
using (FileStream file = new FileStream(path, FileMode.Open))
{
XmlSerializer xmlSerializer = new XmlSerializer(typeof(ModulList));
modulList = (ModulList?)xmlSerializer.Deserialize(file);
@@ -92,7 +149,7 @@ namespace Firebird2D.ModulLoading
}
catch(Exception ex) {
modulList = null;
GameLogger.GetInstance(0).Log("ModulLoader",LogType.Warning, $"Modul file not existing or invalid: {ex.Message}");
GameLogger.GetInstance(0).Log("ModulLoader",LogType.Warning, $"Modul file not existing or invalid: {ex.ToString()}");
}
}
}
+47
View File
@@ -0,0 +1,47 @@
using Firebird2D.DataypesAndInterfaces.Interfaces;
using Firebird2D.Interfaces;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Firebird2D.ModulLoading
{
public enum ModuleType
{
Extension = 0,
EventSystem = 1,
KeyMapper = 2
}
public enum ExtensionDependencyInjection
{
game,
eventsystem,
keymapper
}
public static class ModuleTypeExtensions
{
public static Type getBasicModuleInterfaceType(this ModuleType moduleType)
{
return moduleType switch
{
ModuleType.Extension => typeof(IExtensionBase),
ModuleType.EventSystem => typeof(IEventBus),
ModuleType.KeyMapper => typeof(IKeyMapper)
};
}
public static ExtensionDependencyInjection[] getNeededDependencyInjection(this ModuleType moduleType)
{
return moduleType switch
{
ModuleType.Extension => [ExtensionDependencyInjection.game],
ModuleType.EventSystem => [ ],
ModuleType.KeyMapper => [ExtensionDependencyInjection.eventsystem]
};
}
}
}
+3 -1
View File
@@ -2,7 +2,9 @@
<Moduls>
<!--
<Modul>
<ModuleType>Plugin</ModuleType>
<ModuleType>Extension |
EventSystem |
KeyMapper</ModuleType>
<Name>Logger</Name>
<RelativePath>Modules/Logger</RelativePath>
</Modul>
@@ -1,10 +1,9 @@
//------------------------------------------------------------------------------
// <auto-generated>
// Dieser Code wurde von einem Tool generiert.
// Laufzeitversion:4.0.30319.42000
// This code was generated by a tool.
//
// Änderungen an dieser Datei können falsches Verhalten verursachen und gehen verloren, wenn
// der Code erneut generiert wird.
// Changes to this file may cause incorrect behavior and will be lost if
// the code is regenerated.
// </auto-generated>
//------------------------------------------------------------------------------
@@ -14,10 +13,10 @@ using System.Reflection;
[assembly: System.Reflection.AssemblyCompanyAttribute("Firebird2D.Requirement")]
[assembly: System.Reflection.AssemblyConfigurationAttribute("Debug")]
[assembly: System.Reflection.AssemblyFileVersionAttribute("1.0.0.0")]
[assembly: System.Reflection.AssemblyInformationalVersionAttribute("1.0.0+766b2e414b907163c1fd34f3b22b1aa8ae51a9e2")]
[assembly: System.Reflection.AssemblyInformationalVersionAttribute("1.0.0+47ddfed9bc856f69b96a5dee3963e56a0c0d269c")]
[assembly: System.Reflection.AssemblyProductAttribute("Firebird2D.Requirement")]
[assembly: System.Reflection.AssemblyTitleAttribute("Firebird2D.Requirement")]
[assembly: System.Reflection.AssemblyVersionAttribute("1.0.0.0")]
// Von der MSBuild WriteCodeFragment-Klasse generiert.
// Generated by the MSBuild WriteCodeFragment class.
@@ -1 +1 @@
d930c16e48000b60c3592ab43be941a4270796fd5c53910ce4333c8a429ab31e
f581c37a3c854f5a860046d943afdf55d92d954e13f5fe1b8d2ca272db9ec0ac
@@ -1,10 +1,9 @@
//------------------------------------------------------------------------------
// <auto-generated>
// Dieser Code wurde von einem Tool generiert.
// Laufzeitversion:4.0.30319.42000
// This code was generated by a tool.
//
// Änderungen an dieser Datei können falsches Verhalten verursachen und gehen verloren, wenn
// der Code erneut generiert wird.
// Changes to this file may cause incorrect behavior and will be lost if
// the code is regenerated.
// </auto-generated>
//------------------------------------------------------------------------------
@@ -14,10 +13,10 @@ using System.Reflection;
[assembly: System.Reflection.AssemblyCompanyAttribute("Firebird2D.SFMLExtensions")]
[assembly: System.Reflection.AssemblyConfigurationAttribute("Debug")]
[assembly: System.Reflection.AssemblyFileVersionAttribute("1.0.0.0")]
[assembly: System.Reflection.AssemblyInformationalVersionAttribute("1.0.0+766b2e414b907163c1fd34f3b22b1aa8ae51a9e2")]
[assembly: System.Reflection.AssemblyInformationalVersionAttribute("1.0.0+47ddfed9bc856f69b96a5dee3963e56a0c0d269c")]
[assembly: System.Reflection.AssemblyProductAttribute("Firebird2D.SFMLExtensions")]
[assembly: System.Reflection.AssemblyTitleAttribute("Firebird2D.SFMLExtensions")]
[assembly: System.Reflection.AssemblyVersionAttribute("1.0.0.0")]
// Von der MSBuild WriteCodeFragment-Klasse generiert.
// Generated by the MSBuild WriteCodeFragment class.
@@ -1 +1 @@
f626d59756ad26a054c1d1f23d861aa33ef4951843a64a2988b4cd5ed949a8c9
ead2f01976d183a4249a04181867bc7e061b626d8af29ab0f33a5be7ef71045d
+6 -1
View File
@@ -22,7 +22,12 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Firebird2D.KeyMapping", "Fi
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Firebird2D.DataypesAndInterfaces", "FireBird2D.Interfaces\Firebird2D.DataypesAndInterfaces.csproj", "{7F6F9690-3BD3-4D44-BE62-3A7282DA671D}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Firebird2D.ModulLoading", "Firebird2D.ModulLoader\Firebird2D.ModulLoading.csproj", "{917F395C-6C2E-4F23-9ED1-B123E5F272E9}"
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Firebird2D.ModulLoading", "Firebird2D.ModulLoader\Firebird2D.ModulLoading.csproj", "{917F395C-6C2E-4F23-9ED1-B123E5F272E9}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Code Ideas", "Code Ideas", "{23904BA8-EE2E-421B-A320-2D51049C5936}"
ProjectSection(SolutionItems) = preProject
LoadDynamic and inject dependency.txt = LoadDynamic and inject dependency.txt
EndProjectSection
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
@@ -1,10 +1,9 @@
//------------------------------------------------------------------------------
// <auto-generated>
// Dieser Code wurde von einem Tool generiert.
// Laufzeitversion:4.0.30319.42000
// This code was generated by a tool.
//
// Änderungen an dieser Datei können falsches Verhalten verursachen und gehen verloren, wenn
// der Code erneut generiert wird.
// Changes to this file may cause incorrect behavior and will be lost if
// the code is regenerated.
// </auto-generated>
//------------------------------------------------------------------------------
@@ -14,10 +13,10 @@ using System.Reflection;
[assembly: System.Reflection.AssemblyCompanyAttribute("Firebird2D")]
[assembly: System.Reflection.AssemblyConfigurationAttribute("Debug")]
[assembly: System.Reflection.AssemblyFileVersionAttribute("1.0.0.0")]
[assembly: System.Reflection.AssemblyInformationalVersionAttribute("1.0.0+766b2e414b907163c1fd34f3b22b1aa8ae51a9e2")]
[assembly: System.Reflection.AssemblyInformationalVersionAttribute("1.0.0+47ddfed9bc856f69b96a5dee3963e56a0c0d269c")]
[assembly: System.Reflection.AssemblyProductAttribute("Firebird2D")]
[assembly: System.Reflection.AssemblyTitleAttribute("Firebird2D")]
[assembly: System.Reflection.AssemblyVersionAttribute("1.0.0.0")]
// Von der MSBuild WriteCodeFragment-Klasse generiert.
// Generated by the MSBuild WriteCodeFragment class.
@@ -1 +1 @@
b58b950687c3bc10dc33b3f06fb727341820dba7c020e683d062fa25981537d0
25825266d81fcf1361d25892e26ada2edd110ab12acc96c200ef0eb2e4e09249
@@ -128,6 +128,12 @@
"frameworks": {
"net8.0": {
"targetAlias": "net8.0",
"dependencies": {
"SFML.Net": {
"target": "Package",
"version": "[2.6.1, )"
}
},
"imports": [
"net461",
"net462",
@@ -181,6 +187,9 @@
"projectReferences": {
"G:\\Coding\\Firebird2D\\Firebird2D.EventPipelines\\Firebird2D.EventPipelines.csproj": {
"projectPath": "G:\\Coding\\Firebird2D\\Firebird2D.EventPipelines\\Firebird2D.EventPipelines.csproj"
},
"G:\\Coding\\Firebird2D\\Firebird2D.Requirement\\Firebird2D.Requirement.csproj": {
"projectPath": "G:\\Coding\\Firebird2D\\Firebird2D.Requirement\\Firebird2D.Requirement.csproj"
}
}
}
+5 -1
View File
@@ -1046,6 +1046,9 @@
"Firebird2D.DataypesAndInterfaces/1.0.0": {
"type": "project",
"framework": ".NETCoreApp,Version=v8.0",
"dependencies": {
"SFML.Net": "2.6.1"
},
"compile": {
"bin/placeholder/Firebird2D.DataypesAndInterfaces.dll": {}
},
@@ -1071,7 +1074,8 @@
"type": "project",
"framework": ".NETCoreApp,Version=v8.0",
"dependencies": {
"Firebird2D.EventPipelines": "1.0.0"
"Firebird2D.EventPipelines": "1.0.0",
"Firebird2D.Requirement": "1.0.0"
},
"compile": {
"bin/placeholder/Firebird2D.KeyMapping.dll": {}
+1 -1
View File
@@ -1,6 +1,6 @@
{
"version": 2,
"dgSpecHash": "reTuevwexX0=",
"dgSpecHash": "Hckho++vxAc=",
"success": true,
"projectFilePath": "G:\\Coding\\Firebird2D\\Firebird2D\\Firebird2D.csproj",
"expectedPackageFiles": [
+10
View File
@@ -0,0 +1,10 @@
Assembly assembly = Assembly.LoadFrom("plugin.dll");
Type pluginType = assembly.GetTypes().First(t => typeof(IPlugin).IsAssignableFrom(t));
ConstructorInfo ctor = pluginType.GetConstructor(new[] { typeof(IEventBus) });
if (ctor == null)
throw new InvalidOperationException("Kein passender Konstruktor gefunden.");
IPlugin instance = (IPlugin)ctor.Invoke(new object[] { eventBus });