From 9381156cec4dff6658b8d89fa56fbd451b12857f Mon Sep 17 00:00:00 2001 From: Mrcubix Date: Wed, 26 Jul 2023 20:00:22 +0200 Subject: [PATCH 1/5] Add support for vscode --- .../.template.config/template.json | 60 +++++++++++++++++++ .../.vscode/launch.json | 37 ++++++++++++ .../.vscode/settings.json | 4 ++ .../.vscode/tasks.json | 17 ++++++ .../.template.config/template.json | 60 +++++++++++++++++++ .../.vscode/launch.json | 37 ++++++++++++ .../.vscode/settings.json | 4 ++ .../.vscode/tasks.json | 17 ++++++ 8 files changed, 236 insertions(+) create mode 100644 src/Bannerlord.Module.CSharp/.vscode/launch.json create mode 100644 src/Bannerlord.Module.CSharp/.vscode/settings.json create mode 100644 src/Bannerlord.Module.CSharp/.vscode/tasks.json create mode 100644 src/Bannerlord.Module.Sdk.CSharp/.vscode/launch.json create mode 100644 src/Bannerlord.Module.Sdk.CSharp/.vscode/settings.json create mode 100644 src/Bannerlord.Module.Sdk.CSharp/.vscode/tasks.json diff --git a/src/Bannerlord.Module.CSharp/.template.config/template.json b/src/Bannerlord.Module.CSharp/.template.config/template.json index 2df819c..b77e21d 100644 --- a/src/Bannerlord.Module.CSharp/.template.config/template.json +++ b/src/Bannerlord.Module.CSharp/.template.config/template.json @@ -193,6 +193,13 @@ } }, + "code": { + "type": "parameter", + "datatype": "bool", + "description": "Generate the project with this argument set to true if you intend to use VSCode as IDE", + "defaultValue": "false" + }, + "langVersion": { "type": "parameter", "datatype": "text", @@ -268,6 +275,41 @@ "value": "(RequireBLSEFeatures == \"assembly-resolver\")" }, + "gameBinariesFolder": { + "type": "generated", + "generator": "switch", + "parameters": { + "evaluator": "C++", + "datatype": "string", + "cases": [ + { + "condition": "gameWindowsStore == null", + "value": "Win64_Shipping_Client" + }, + { + "condition": "(gameWindowsStore == false)", + "value": "Win64_Shipping_Client" + }, + { + "condition": "(gameWindowsStore == true)", + "value": "Gaming.Desktop.x64_Shipping" + } + ] + }, + "replaces": "BINARY_FOLDER" + }, + + "displayName": + { + "type": "generated", + "generator": "coalesce", + "parameters": { + "sourceVariableName": "moduleName", + "fallbackVariableName": "name" + }, + "replaces": "MODULE_NAME" + }, + "HostIdentifier": { "type": "bind", "binding": "HostIdentifier" @@ -279,6 +321,24 @@ } }, "defaultName": "Bannerlord.Module1", + "sources": [ + { + "modifiers": [ + { + "condition": "(code == false)", + "exclude": [ + ".vscode/**" + ] + }, + { + "condition": "(code == true)", + "exclude": [ + "Properties/**" + ] + } + ] + } + ], "primaryOutputs": [ { "path": "BLNamespace.csproj" diff --git a/src/Bannerlord.Module.CSharp/.vscode/launch.json b/src/Bannerlord.Module.CSharp/.vscode/launch.json new file mode 100644 index 0000000..58e8614 --- /dev/null +++ b/src/Bannerlord.Module.CSharp/.vscode/launch.json @@ -0,0 +1,37 @@ +{ + // Use IntelliSense to learn about possible attributes. + // Hover to view descriptions of existing attributes. + // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387 + "version": "0.2.0", + "configurations": [ + { + "name": "Start Debugging Module", + "type": "clr", + "request": "launch", + "preLaunchTask": "build", + "program": "${env:BANNERLORD_GAME_DIR}/bin/${config:gameBinaryFolder}/Bannerlord.exe", + "args": [ + "/singleplayer", + "_MODULES_*Native*SandBoxCore*CustomBattle*Sandbox*StoryMode*${config:moduleName}*_MODULES_" + ], + "cwd": "${env:BANNERLORD_GAME_DIR}/bin/${config:gameBinaryFolder}", + "stopAtEntry": false, + "console": "internalConsole", + "internalConsoleOptions": "openOnSessionStart", + "justMyCode": false, + "logging": { + "moduleLoad": false + }, + }, + { + "name": "Attach", + "type": "clr", + "request": "attach", + "processName": "Bannerlord.exe", + "justMyCode": false, + "logging": { + "moduleLoad": false + }, + } + ] +} \ No newline at end of file diff --git a/src/Bannerlord.Module.CSharp/.vscode/settings.json b/src/Bannerlord.Module.CSharp/.vscode/settings.json new file mode 100644 index 0000000..68b6736 --- /dev/null +++ b/src/Bannerlord.Module.CSharp/.vscode/settings.json @@ -0,0 +1,4 @@ +{ + "moduleName": "MODULE_NAME", + "gameBinaryFolder": "BINARY_FOLDER" +} \ No newline at end of file diff --git a/src/Bannerlord.Module.CSharp/.vscode/tasks.json b/src/Bannerlord.Module.CSharp/.vscode/tasks.json new file mode 100644 index 0000000..b0b735a --- /dev/null +++ b/src/Bannerlord.Module.CSharp/.vscode/tasks.json @@ -0,0 +1,17 @@ +// build task for C# bannerlord mod +{ + "version": "2.0.0", + "tasks": [ + { + "label": "build", + "command": "dotnet", + "type": "process", + "args": [ + "build", + "/property:GenerateFullPaths=true", + "/consoleloggerparameters:NoSummary" + ], + "problemMatcher": "$msCompile", + } + ] +} \ No newline at end of file diff --git a/src/Bannerlord.Module.Sdk.CSharp/.template.config/template.json b/src/Bannerlord.Module.Sdk.CSharp/.template.config/template.json index bd52785..5c04b5c 100644 --- a/src/Bannerlord.Module.Sdk.CSharp/.template.config/template.json +++ b/src/Bannerlord.Module.Sdk.CSharp/.template.config/template.json @@ -179,6 +179,13 @@ ], "defaultValue": "do-not-require-anything" }, + + "code": { + "type": "parameter", + "datatype": "bool", + "description": "Generate the project with this argument if you intend to use VSCode as IDE", + "defaultValue": "false" + }, "langVersion": { "type": "parameter", @@ -251,6 +258,41 @@ "value": "(RequireBLSEFeatures == \"assembly-resolver\")" }, + "gameBinariesFolder": { + "type": "generated", + "generator": "switch", + "parameters": { + "evaluator": "C++", + "datatype": "string", + "cases": [ + { + "condition": "gameWindowsStore == null", + "value": "Win64_Shipping_Client" + }, + { + "condition": "(gameWindowsStore == false)", + "value": "Win64_Shipping_Client" + }, + { + "condition": "(gameWindowsStore == true)", + "value": "Gaming.Desktop.x64_Shipping" + } + ] + }, + "replaces": "BINARY_FOLDER" + }, + + "displayName": + { + "type": "generated", + "generator": "coalesce", + "parameters": { + "sourceVariableName": "moduleName", + "fallbackVariableName": "name" + }, + "replaces": "MODULE_NAME" + }, + "HostIdentifier": { "type": "bind", "binding": "HostIdentifier" @@ -262,6 +304,24 @@ } }, "defaultName": "Bannerlord.Module1", + "sources": [ + { + "modifiers": [ + { + "condition": "(code == false)", + "exclude": [ + ".vscode/**" + ] + }, + { + "condition": "(code == true)", + "exclude": [ + "Properties/**" + ] + } + ] + } + ], "primaryOutputs": [ { "path": "BLNamespace.csproj" diff --git a/src/Bannerlord.Module.Sdk.CSharp/.vscode/launch.json b/src/Bannerlord.Module.Sdk.CSharp/.vscode/launch.json new file mode 100644 index 0000000..58e8614 --- /dev/null +++ b/src/Bannerlord.Module.Sdk.CSharp/.vscode/launch.json @@ -0,0 +1,37 @@ +{ + // Use IntelliSense to learn about possible attributes. + // Hover to view descriptions of existing attributes. + // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387 + "version": "0.2.0", + "configurations": [ + { + "name": "Start Debugging Module", + "type": "clr", + "request": "launch", + "preLaunchTask": "build", + "program": "${env:BANNERLORD_GAME_DIR}/bin/${config:gameBinaryFolder}/Bannerlord.exe", + "args": [ + "/singleplayer", + "_MODULES_*Native*SandBoxCore*CustomBattle*Sandbox*StoryMode*${config:moduleName}*_MODULES_" + ], + "cwd": "${env:BANNERLORD_GAME_DIR}/bin/${config:gameBinaryFolder}", + "stopAtEntry": false, + "console": "internalConsole", + "internalConsoleOptions": "openOnSessionStart", + "justMyCode": false, + "logging": { + "moduleLoad": false + }, + }, + { + "name": "Attach", + "type": "clr", + "request": "attach", + "processName": "Bannerlord.exe", + "justMyCode": false, + "logging": { + "moduleLoad": false + }, + } + ] +} \ No newline at end of file diff --git a/src/Bannerlord.Module.Sdk.CSharp/.vscode/settings.json b/src/Bannerlord.Module.Sdk.CSharp/.vscode/settings.json new file mode 100644 index 0000000..173550b --- /dev/null +++ b/src/Bannerlord.Module.Sdk.CSharp/.vscode/settings.json @@ -0,0 +1,4 @@ +{ + "moduleName": "MODULE_NAME", + "gameBinaryFolder": "BINARY_FOLDER", +} \ No newline at end of file diff --git a/src/Bannerlord.Module.Sdk.CSharp/.vscode/tasks.json b/src/Bannerlord.Module.Sdk.CSharp/.vscode/tasks.json new file mode 100644 index 0000000..b0b735a --- /dev/null +++ b/src/Bannerlord.Module.Sdk.CSharp/.vscode/tasks.json @@ -0,0 +1,17 @@ +// build task for C# bannerlord mod +{ + "version": "2.0.0", + "tasks": [ + { + "label": "build", + "command": "dotnet", + "type": "process", + "args": [ + "build", + "/property:GenerateFullPaths=true", + "/consoleloggerparameters:NoSummary" + ], + "problemMatcher": "$msCompile", + } + ] +} \ No newline at end of file From f1f6f188873626fb21c25fd19c8bcebcadb5fa2e Mon Sep 17 00:00:00 2001 From: Mrcubix Date: Wed, 26 Jul 2023 22:10:47 +0200 Subject: [PATCH 2/5] Remove useless check --- src/Bannerlord.Module.CSharp/.template.config/template.json | 6 +----- .../.template.config/template.json | 6 +----- 2 files changed, 2 insertions(+), 10 deletions(-) diff --git a/src/Bannerlord.Module.CSharp/.template.config/template.json b/src/Bannerlord.Module.CSharp/.template.config/template.json index b77e21d..f5beb9b 100644 --- a/src/Bannerlord.Module.CSharp/.template.config/template.json +++ b/src/Bannerlord.Module.CSharp/.template.config/template.json @@ -283,11 +283,7 @@ "datatype": "string", "cases": [ { - "condition": "gameWindowsStore == null", - "value": "Win64_Shipping_Client" - }, - { - "condition": "(gameWindowsStore == false)", + "condition": "(gameWindows == true)", "value": "Win64_Shipping_Client" }, { diff --git a/src/Bannerlord.Module.Sdk.CSharp/.template.config/template.json b/src/Bannerlord.Module.Sdk.CSharp/.template.config/template.json index 5c04b5c..18cbdf7 100644 --- a/src/Bannerlord.Module.Sdk.CSharp/.template.config/template.json +++ b/src/Bannerlord.Module.Sdk.CSharp/.template.config/template.json @@ -266,11 +266,7 @@ "datatype": "string", "cases": [ { - "condition": "gameWindowsStore == null", - "value": "Win64_Shipping_Client" - }, - { - "condition": "(gameWindowsStore == false)", + "condition": "(gameWindows == true)", "value": "Win64_Shipping_Client" }, { From e9142e086cd73f790d0baf3e5bda0e4d470314ba Mon Sep 17 00:00:00 2001 From: Mrcubix Date: Wed, 26 Jul 2023 22:20:13 +0200 Subject: [PATCH 3/5] Removed comments --- src/Bannerlord.Module.CSharp/.vscode/launch.json | 3 --- src/Bannerlord.Module.CSharp/.vscode/tasks.json | 1 - src/Bannerlord.Module.Sdk.CSharp/.vscode/launch.json | 3 --- src/Bannerlord.Module.Sdk.CSharp/.vscode/tasks.json | 1 - 4 files changed, 8 deletions(-) diff --git a/src/Bannerlord.Module.CSharp/.vscode/launch.json b/src/Bannerlord.Module.CSharp/.vscode/launch.json index 58e8614..473930c 100644 --- a/src/Bannerlord.Module.CSharp/.vscode/launch.json +++ b/src/Bannerlord.Module.CSharp/.vscode/launch.json @@ -1,7 +1,4 @@ { - // Use IntelliSense to learn about possible attributes. - // Hover to view descriptions of existing attributes. - // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387 "version": "0.2.0", "configurations": [ { diff --git a/src/Bannerlord.Module.CSharp/.vscode/tasks.json b/src/Bannerlord.Module.CSharp/.vscode/tasks.json index b0b735a..b42a95f 100644 --- a/src/Bannerlord.Module.CSharp/.vscode/tasks.json +++ b/src/Bannerlord.Module.CSharp/.vscode/tasks.json @@ -1,4 +1,3 @@ -// build task for C# bannerlord mod { "version": "2.0.0", "tasks": [ diff --git a/src/Bannerlord.Module.Sdk.CSharp/.vscode/launch.json b/src/Bannerlord.Module.Sdk.CSharp/.vscode/launch.json index 58e8614..473930c 100644 --- a/src/Bannerlord.Module.Sdk.CSharp/.vscode/launch.json +++ b/src/Bannerlord.Module.Sdk.CSharp/.vscode/launch.json @@ -1,7 +1,4 @@ { - // Use IntelliSense to learn about possible attributes. - // Hover to view descriptions of existing attributes. - // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387 "version": "0.2.0", "configurations": [ { diff --git a/src/Bannerlord.Module.Sdk.CSharp/.vscode/tasks.json b/src/Bannerlord.Module.Sdk.CSharp/.vscode/tasks.json index b0b735a..b42a95f 100644 --- a/src/Bannerlord.Module.Sdk.CSharp/.vscode/tasks.json +++ b/src/Bannerlord.Module.Sdk.CSharp/.vscode/tasks.json @@ -1,4 +1,3 @@ -// build task for C# bannerlord mod { "version": "2.0.0", "tasks": [ From 3bafc9a6bc456ca641b72079b5941965cb5afa0b Mon Sep 17 00:00:00 2001 From: Vitalii Mikhailov Date: Sat, 29 Jul 2023 21:08:24 +0300 Subject: [PATCH 4/5] Added a new template for VSCode, but it's not working for now --- .../.template.config/dotnetcli.host.json | 76 ++++ .../.template.config/icon.png | Bin 0 -> 37821 bytes .../.template.config/template.json | 383 ++++++++++++++++++ .../.vscode/launch.json | 4 +- .../.vscode/settings.json | 8 + .../.vscode/tasks.json | 0 .../BLNamespace.csproj | 152 +++++++ .../SubModule.cs | 48 +++ .../_Module/SubModule.xml | 100 +++++ .../.template.config/template.json | 56 --- .../.vscode/settings.json | 4 - .../.template.config/template.json | 56 --- .../.vscode/launch.json | 34 -- .../.vscode/settings.json | 4 - .../.vscode/tasks.json | 16 - 15 files changed, 769 insertions(+), 172 deletions(-) create mode 100644 src/Bannerlord.Module.CSharp.VSCode/.template.config/dotnetcli.host.json create mode 100644 src/Bannerlord.Module.CSharp.VSCode/.template.config/icon.png create mode 100644 src/Bannerlord.Module.CSharp.VSCode/.template.config/template.json rename src/{Bannerlord.Module.CSharp => Bannerlord.Module.CSharp.VSCode}/.vscode/launch.json (83%) create mode 100644 src/Bannerlord.Module.CSharp.VSCode/.vscode/settings.json rename src/{Bannerlord.Module.CSharp => Bannerlord.Module.CSharp.VSCode}/.vscode/tasks.json (100%) create mode 100644 src/Bannerlord.Module.CSharp.VSCode/BLNamespace.csproj create mode 100644 src/Bannerlord.Module.CSharp.VSCode/SubModule.cs create mode 100644 src/Bannerlord.Module.CSharp.VSCode/_Module/SubModule.xml delete mode 100644 src/Bannerlord.Module.CSharp/.vscode/settings.json delete mode 100644 src/Bannerlord.Module.Sdk.CSharp/.vscode/launch.json delete mode 100644 src/Bannerlord.Module.Sdk.CSharp/.vscode/settings.json delete mode 100644 src/Bannerlord.Module.Sdk.CSharp/.vscode/tasks.json diff --git a/src/Bannerlord.Module.CSharp.VSCode/.template.config/dotnetcli.host.json b/src/Bannerlord.Module.CSharp.VSCode/.template.config/dotnetcli.host.json new file mode 100644 index 0000000..db79fdd --- /dev/null +++ b/src/Bannerlord.Module.CSharp.VSCode/.template.config/dotnetcli.host.json @@ -0,0 +1,76 @@ +{ + "$schema": "https://json.schemastore.org/dotnetcli.host", + "symbolInfo": { + "gameWindows": { + "longName": "game-windows", + "shortName": "" + }, + "gameWindowsStore": { + "longName": "game-windows-store", + "shortName": "" + }, + "providedGameFolder": { + "longName": "game-folder", + "shortName": "" + }, + "moduleId": { + "longName": "module-id", + "shortName": "" + }, + "moduleName": { + "longName": "module-name", + "shortName": "" + }, + "moduleUrl": { + "longName": "module-url", + "shortName": "" + }, + "InstallHarmony": { + "longName": "install-harmony", + "shortName": "" + }, + "InstallButterLib": { + "longName": "install-butterlib", + "shortName": "" + }, + "InstallUIExtenderEx": { + "longName": "install-uiextenderex", + "shortName": "" + }, + "InstallMCM": { + "longName": "install-mcm", + "shortName": "" + }, + "InstallReferenceAssemblies": { + "longName": "install-reference-assemblies", + "shortName": "" + }, + "RequireBLSEFeatures": { + "longName": "require-blse-features", + "shortName": "" + }, + "gameVersion": { + "longName": "gameVersion", + "shortName": "" + }, + "vscode": { + "longName": "vscode", + "shortName": "" + }, + "langVersion": { + "longName": "langVersion", + "shortName": "" + }, + "nullable": { + "longName": "nullable", + "shortName": "" + }, + "skipRestore": { + "longName": "no-restore", + "shortName": "" + } + }, + "usageExamples": [ + "" + ] +} \ No newline at end of file diff --git a/src/Bannerlord.Module.CSharp.VSCode/.template.config/icon.png b/src/Bannerlord.Module.CSharp.VSCode/.template.config/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..da35130724b841cc2e4cacff97344b101db1e5d4 GIT binary patch literal 37821 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 + + + 0.0.1 + + net472;netcoreapp3.1 + + net472 + + netcoreapp3.1 + + x64 + $(ProjectLanguageVersion) + enable + false + false + + + + + true + + + + + false + true + true + + + + + $(MSBuildThisFileDirectory)/.vscode/settings.json + PLACEHOLDER + PLACEHOLDER + PLACEHOLDER + + + + + + + + + + + + + %(Identity) + False + + + %(Identity) + False + + + %(Identity) + False + + + %(Identity) + False + + + %(Identity) + False + + + %(Identity) + False + + + %(Identity) + False + + + %(Identity) + False + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Bannerlord.Module.CSharp.VSCode/SubModule.cs b/src/Bannerlord.Module.CSharp.VSCode/SubModule.cs new file mode 100644 index 0000000..f6be5af --- /dev/null +++ b/src/Bannerlord.Module.CSharp.VSCode/SubModule.cs @@ -0,0 +1,48 @@ +using TaleWorlds.MountAndBlade; + +#if( AddBLSELoadingInterceptor ) +namespace Bannerlord.BUTRLoader +{ + [System.AttributeUsage(System.AttributeTargets.Class)] + public sealed class BLSEInterceptorAttribute : System.Attribute { } +} +#endif + +namespace BLNamespace +{ +#if( AddBLSELoadingInterceptor ) + [Bannerlord.BUTRLoader.BLSEInterceptor] + public static class BLSELoadingInterceptor + { + public static void OnInitializeSubModulesPrefix() + { + + } + public static void OnLoadSubModulesPostfix() + { + + } + } + +#endif + public class SubModule : MBSubModuleBase + { + protected override void OnSubModuleLoad() + { + base.OnSubModuleLoad(); + + } + + protected override void OnSubModuleUnloaded() + { + base.OnSubModuleUnloaded(); + + } + + protected override void OnBeforeInitialModuleScreenSetAsRoot() + { + base.OnBeforeInitialModuleScreenSetAsRoot(); + + } + } +} \ No newline at end of file diff --git a/src/Bannerlord.Module.CSharp.VSCode/_Module/SubModule.xml b/src/Bannerlord.Module.CSharp.VSCode/_Module/SubModule.xml new file mode 100644 index 0000000..150ec87 --- /dev/null +++ b/src/Bannerlord.Module.CSharp.VSCode/_Module/SubModule.xml @@ -0,0 +1,100 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Bannerlord.Module.CSharp/.template.config/template.json b/src/Bannerlord.Module.CSharp/.template.config/template.json index f5beb9b..dde6f4d 100644 --- a/src/Bannerlord.Module.CSharp/.template.config/template.json +++ b/src/Bannerlord.Module.CSharp/.template.config/template.json @@ -192,13 +192,6 @@ ] } }, - - "code": { - "type": "parameter", - "datatype": "bool", - "description": "Generate the project with this argument set to true if you intend to use VSCode as IDE", - "defaultValue": "false" - }, "langVersion": { "type": "parameter", @@ -275,37 +268,6 @@ "value": "(RequireBLSEFeatures == \"assembly-resolver\")" }, - "gameBinariesFolder": { - "type": "generated", - "generator": "switch", - "parameters": { - "evaluator": "C++", - "datatype": "string", - "cases": [ - { - "condition": "(gameWindows == true)", - "value": "Win64_Shipping_Client" - }, - { - "condition": "(gameWindowsStore == true)", - "value": "Gaming.Desktop.x64_Shipping" - } - ] - }, - "replaces": "BINARY_FOLDER" - }, - - "displayName": - { - "type": "generated", - "generator": "coalesce", - "parameters": { - "sourceVariableName": "moduleName", - "fallbackVariableName": "name" - }, - "replaces": "MODULE_NAME" - }, - "HostIdentifier": { "type": "bind", "binding": "HostIdentifier" @@ -317,24 +279,6 @@ } }, "defaultName": "Bannerlord.Module1", - "sources": [ - { - "modifiers": [ - { - "condition": "(code == false)", - "exclude": [ - ".vscode/**" - ] - }, - { - "condition": "(code == true)", - "exclude": [ - "Properties/**" - ] - } - ] - } - ], "primaryOutputs": [ { "path": "BLNamespace.csproj" diff --git a/src/Bannerlord.Module.CSharp/.vscode/settings.json b/src/Bannerlord.Module.CSharp/.vscode/settings.json deleted file mode 100644 index 68b6736..0000000 --- a/src/Bannerlord.Module.CSharp/.vscode/settings.json +++ /dev/null @@ -1,4 +0,0 @@ -{ - "moduleName": "MODULE_NAME", - "gameBinaryFolder": "BINARY_FOLDER" -} \ No newline at end of file diff --git a/src/Bannerlord.Module.Sdk.CSharp/.template.config/template.json b/src/Bannerlord.Module.Sdk.CSharp/.template.config/template.json index 18cbdf7..a6547b0 100644 --- a/src/Bannerlord.Module.Sdk.CSharp/.template.config/template.json +++ b/src/Bannerlord.Module.Sdk.CSharp/.template.config/template.json @@ -180,13 +180,6 @@ "defaultValue": "do-not-require-anything" }, - "code": { - "type": "parameter", - "datatype": "bool", - "description": "Generate the project with this argument if you intend to use VSCode as IDE", - "defaultValue": "false" - }, - "langVersion": { "type": "parameter", "datatype": "text", @@ -258,37 +251,6 @@ "value": "(RequireBLSEFeatures == \"assembly-resolver\")" }, - "gameBinariesFolder": { - "type": "generated", - "generator": "switch", - "parameters": { - "evaluator": "C++", - "datatype": "string", - "cases": [ - { - "condition": "(gameWindows == true)", - "value": "Win64_Shipping_Client" - }, - { - "condition": "(gameWindowsStore == true)", - "value": "Gaming.Desktop.x64_Shipping" - } - ] - }, - "replaces": "BINARY_FOLDER" - }, - - "displayName": - { - "type": "generated", - "generator": "coalesce", - "parameters": { - "sourceVariableName": "moduleName", - "fallbackVariableName": "name" - }, - "replaces": "MODULE_NAME" - }, - "HostIdentifier": { "type": "bind", "binding": "HostIdentifier" @@ -300,24 +262,6 @@ } }, "defaultName": "Bannerlord.Module1", - "sources": [ - { - "modifiers": [ - { - "condition": "(code == false)", - "exclude": [ - ".vscode/**" - ] - }, - { - "condition": "(code == true)", - "exclude": [ - "Properties/**" - ] - } - ] - } - ], "primaryOutputs": [ { "path": "BLNamespace.csproj" diff --git a/src/Bannerlord.Module.Sdk.CSharp/.vscode/launch.json b/src/Bannerlord.Module.Sdk.CSharp/.vscode/launch.json deleted file mode 100644 index 473930c..0000000 --- a/src/Bannerlord.Module.Sdk.CSharp/.vscode/launch.json +++ /dev/null @@ -1,34 +0,0 @@ -{ - "version": "0.2.0", - "configurations": [ - { - "name": "Start Debugging Module", - "type": "clr", - "request": "launch", - "preLaunchTask": "build", - "program": "${env:BANNERLORD_GAME_DIR}/bin/${config:gameBinaryFolder}/Bannerlord.exe", - "args": [ - "/singleplayer", - "_MODULES_*Native*SandBoxCore*CustomBattle*Sandbox*StoryMode*${config:moduleName}*_MODULES_" - ], - "cwd": "${env:BANNERLORD_GAME_DIR}/bin/${config:gameBinaryFolder}", - "stopAtEntry": false, - "console": "internalConsole", - "internalConsoleOptions": "openOnSessionStart", - "justMyCode": false, - "logging": { - "moduleLoad": false - }, - }, - { - "name": "Attach", - "type": "clr", - "request": "attach", - "processName": "Bannerlord.exe", - "justMyCode": false, - "logging": { - "moduleLoad": false - }, - } - ] -} \ No newline at end of file diff --git a/src/Bannerlord.Module.Sdk.CSharp/.vscode/settings.json b/src/Bannerlord.Module.Sdk.CSharp/.vscode/settings.json deleted file mode 100644 index 173550b..0000000 --- a/src/Bannerlord.Module.Sdk.CSharp/.vscode/settings.json +++ /dev/null @@ -1,4 +0,0 @@ -{ - "moduleName": "MODULE_NAME", - "gameBinaryFolder": "BINARY_FOLDER", -} \ No newline at end of file diff --git a/src/Bannerlord.Module.Sdk.CSharp/.vscode/tasks.json b/src/Bannerlord.Module.Sdk.CSharp/.vscode/tasks.json deleted file mode 100644 index b42a95f..0000000 --- a/src/Bannerlord.Module.Sdk.CSharp/.vscode/tasks.json +++ /dev/null @@ -1,16 +0,0 @@ -{ - "version": "2.0.0", - "tasks": [ - { - "label": "build", - "command": "dotnet", - "type": "process", - "args": [ - "build", - "/property:GenerateFullPaths=true", - "/consoleloggerparameters:NoSummary" - ], - "problemMatcher": "$msCompile", - } - ] -} \ No newline at end of file From 2e81b00367270bba1e9f6dfc52b4eeb6827838d9 Mon Sep 17 00:00:00 2001 From: Vitalii Mikhailov Date: Fri, 28 Jun 2024 23:22:45 +0300 Subject: [PATCH 5/5] Easiest vscode integration of my life, just reuse launchProfile --- .../.template.config/dotnetcli.host.json | 76 ---- .../.template.config/icon.png | Bin 37821 -> 0 bytes .../.template.config/template.json | 383 ------------------ .../.vscode/launch.json | 34 -- .../.vscode/settings.json | 8 - .../.vscode/tasks.json | 16 - .../BLNamespace.csproj | 152 ------- .../SubModule.cs | 48 --- .../_Module/SubModule.xml | 100 ----- .../.vscode/launch.json | 47 +++ .../.vscode/launch.json | 47 +++ src/Bannerlord.Templates.csproj | 2 +- 12 files changed, 95 insertions(+), 818 deletions(-) delete mode 100644 src/Bannerlord.Module.CSharp.VSCode/.template.config/dotnetcli.host.json delete mode 100644 src/Bannerlord.Module.CSharp.VSCode/.template.config/icon.png delete mode 100644 src/Bannerlord.Module.CSharp.VSCode/.template.config/template.json delete mode 100644 src/Bannerlord.Module.CSharp.VSCode/.vscode/launch.json delete mode 100644 src/Bannerlord.Module.CSharp.VSCode/.vscode/settings.json delete mode 100644 src/Bannerlord.Module.CSharp.VSCode/.vscode/tasks.json delete mode 100644 src/Bannerlord.Module.CSharp.VSCode/BLNamespace.csproj delete mode 100644 src/Bannerlord.Module.CSharp.VSCode/SubModule.cs delete mode 100644 src/Bannerlord.Module.CSharp.VSCode/_Module/SubModule.xml create mode 100644 src/Bannerlord.Module.CSharp/.vscode/launch.json create mode 100644 src/Bannerlord.Module.Sdk.CSharp/.vscode/launch.json diff --git a/src/Bannerlord.Module.CSharp.VSCode/.template.config/dotnetcli.host.json b/src/Bannerlord.Module.CSharp.VSCode/.template.config/dotnetcli.host.json deleted file mode 100644 index db79fdd..0000000 --- a/src/Bannerlord.Module.CSharp.VSCode/.template.config/dotnetcli.host.json +++ /dev/null @@ -1,76 +0,0 @@ -{ - "$schema": "https://json.schemastore.org/dotnetcli.host", - "symbolInfo": { - "gameWindows": { - "longName": "game-windows", - "shortName": "" - }, - "gameWindowsStore": { - "longName": "game-windows-store", - "shortName": "" - }, - "providedGameFolder": { - "longName": "game-folder", - "shortName": "" - }, - "moduleId": { - "longName": "module-id", - "shortName": "" - }, - "moduleName": { - "longName": "module-name", - "shortName": "" - }, - "moduleUrl": { - "longName": "module-url", - "shortName": "" - }, - "InstallHarmony": { - "longName": "install-harmony", - "shortName": "" - }, - "InstallButterLib": { - "longName": "install-butterlib", - "shortName": "" - }, - "InstallUIExtenderEx": { - "longName": "install-uiextenderex", - "shortName": "" - }, - "InstallMCM": { - "longName": "install-mcm", - "shortName": "" - }, - "InstallReferenceAssemblies": { - "longName": "install-reference-assemblies", - "shortName": "" - }, - "RequireBLSEFeatures": { - "longName": "require-blse-features", - "shortName": "" - }, - "gameVersion": { - "longName": "gameVersion", - "shortName": "" - }, - "vscode": { - "longName": "vscode", - "shortName": "" - }, - "langVersion": { - "longName": "langVersion", - "shortName": "" - }, - "nullable": { - "longName": "nullable", - "shortName": "" - }, - "skipRestore": { - "longName": "no-restore", - "shortName": "" - } - }, - "usageExamples": [ - "" - ] -} \ No newline at end of file diff --git a/src/Bannerlord.Module.CSharp.VSCode/.template.config/icon.png b/src/Bannerlord.Module.CSharp.VSCode/.template.config/icon.png deleted file mode 100644 index da35130724b841cc2e4cacff97344b101db1e5d4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 37821 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 - - - 0.0.1 - - net472;netcoreapp3.1 - - net472 - - netcoreapp3.1 - - x64 - $(ProjectLanguageVersion) - enable - false - false - - - - - true - - - - - false - true - true - - - - - $(MSBuildThisFileDirectory)/.vscode/settings.json - PLACEHOLDER - PLACEHOLDER - PLACEHOLDER - - - - - - - - - - - - - %(Identity) - False - - - %(Identity) - False - - - %(Identity) - False - - - %(Identity) - False - - - %(Identity) - False - - - %(Identity) - False - - - %(Identity) - False - - - %(Identity) - False - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/src/Bannerlord.Module.CSharp.VSCode/SubModule.cs b/src/Bannerlord.Module.CSharp.VSCode/SubModule.cs deleted file mode 100644 index f6be5af..0000000 --- a/src/Bannerlord.Module.CSharp.VSCode/SubModule.cs +++ /dev/null @@ -1,48 +0,0 @@ -using TaleWorlds.MountAndBlade; - -#if( AddBLSELoadingInterceptor ) -namespace Bannerlord.BUTRLoader -{ - [System.AttributeUsage(System.AttributeTargets.Class)] - public sealed class BLSEInterceptorAttribute : System.Attribute { } -} -#endif - -namespace BLNamespace -{ -#if( AddBLSELoadingInterceptor ) - [Bannerlord.BUTRLoader.BLSEInterceptor] - public static class BLSELoadingInterceptor - { - public static void OnInitializeSubModulesPrefix() - { - - } - public static void OnLoadSubModulesPostfix() - { - - } - } - -#endif - public class SubModule : MBSubModuleBase - { - protected override void OnSubModuleLoad() - { - base.OnSubModuleLoad(); - - } - - protected override void OnSubModuleUnloaded() - { - base.OnSubModuleUnloaded(); - - } - - protected override void OnBeforeInitialModuleScreenSetAsRoot() - { - base.OnBeforeInitialModuleScreenSetAsRoot(); - - } - } -} \ No newline at end of file diff --git a/src/Bannerlord.Module.CSharp.VSCode/_Module/SubModule.xml b/src/Bannerlord.Module.CSharp.VSCode/_Module/SubModule.xml deleted file mode 100644 index 150ec87..0000000 --- a/src/Bannerlord.Module.CSharp.VSCode/_Module/SubModule.xml +++ /dev/null @@ -1,100 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/src/Bannerlord.Module.CSharp/.vscode/launch.json b/src/Bannerlord.Module.CSharp/.vscode/launch.json new file mode 100644 index 0000000..28117eb --- /dev/null +++ b/src/Bannerlord.Module.CSharp/.vscode/launch.json @@ -0,0 +1,47 @@ +{ + "version": "0.2.0", + "configurations": [ + //#if (gameWindows) + { + "name": "Start Debugging [net472] (Steam/GOG/Epic)", + "type": "dotnet", + "request": "launch", + "projectPath": "${workspaceFolder}\\BLNamespace.csproj", + "launchConfigurationId": "TargetFramework=net472;Bannerlord" + }, + { + "name": "Attach to Bannerlord [net472] (Steam/GOG/Epic)", + "type": "clr", + "request": "attach", + "processName": "Bannerlord.exe", + }, + { + "name": "Attach to BLSE Bannerlord [net472] (Steam/GOG/Epic)", + "type": "clr", + "request": "attach", + "processName": "Bannerlord.BLSE.Standalone.exe", + }, + //#endif + //#if (gameWindowsStore) + { + "name": "Start Debugging [net6] (Xbox)", + "type": "dotnet", + "request": "launch", + "projectPath": "${workspaceFolder}\\BLNamespace.csproj", + "launchConfigurationId": "TargetFramework=net6;Bannerlord" + }, + { + "name": "Attach to Bannerlord [net6] (Xbox)", + "type": "coreclr", + "request": "attach", + "processName": "Bannerlord.exe", + }, + { + "name": "Attach to BLSE Bannerlord [net6] (Xbox)", + "type": "coreclr", + "request": "attach", + "processName": "Bannerlord.BLSE.Standalone.exe", + } + //#endif + ] +} \ No newline at end of file diff --git a/src/Bannerlord.Module.Sdk.CSharp/.vscode/launch.json b/src/Bannerlord.Module.Sdk.CSharp/.vscode/launch.json new file mode 100644 index 0000000..28117eb --- /dev/null +++ b/src/Bannerlord.Module.Sdk.CSharp/.vscode/launch.json @@ -0,0 +1,47 @@ +{ + "version": "0.2.0", + "configurations": [ + //#if (gameWindows) + { + "name": "Start Debugging [net472] (Steam/GOG/Epic)", + "type": "dotnet", + "request": "launch", + "projectPath": "${workspaceFolder}\\BLNamespace.csproj", + "launchConfigurationId": "TargetFramework=net472;Bannerlord" + }, + { + "name": "Attach to Bannerlord [net472] (Steam/GOG/Epic)", + "type": "clr", + "request": "attach", + "processName": "Bannerlord.exe", + }, + { + "name": "Attach to BLSE Bannerlord [net472] (Steam/GOG/Epic)", + "type": "clr", + "request": "attach", + "processName": "Bannerlord.BLSE.Standalone.exe", + }, + //#endif + //#if (gameWindowsStore) + { + "name": "Start Debugging [net6] (Xbox)", + "type": "dotnet", + "request": "launch", + "projectPath": "${workspaceFolder}\\BLNamespace.csproj", + "launchConfigurationId": "TargetFramework=net6;Bannerlord" + }, + { + "name": "Attach to Bannerlord [net6] (Xbox)", + "type": "coreclr", + "request": "attach", + "processName": "Bannerlord.exe", + }, + { + "name": "Attach to BLSE Bannerlord [net6] (Xbox)", + "type": "coreclr", + "request": "attach", + "processName": "Bannerlord.BLSE.Standalone.exe", + } + //#endif + ] +} \ No newline at end of file diff --git a/src/Bannerlord.Templates.csproj b/src/Bannerlord.Templates.csproj index d86745c..1e14cf5 100644 --- a/src/Bannerlord.Templates.csproj +++ b/src/Bannerlord.Templates.csproj @@ -1,7 +1,7 @@ - net5.0 + net8.0 Template true true