diff --git a/DunGenPlus/DunGenPlus/API.cs b/DunGenPlus/DunGenPlus/API.cs
index 45d91e1..a2e198a 100644
--- a/DunGenPlus/DunGenPlus/API.cs
+++ b/DunGenPlus/DunGenPlus/API.cs
@@ -96,6 +96,24 @@ namespace DunGenPlus
return null;
}
+ ///
+ /// Returns true if the Dungeon Generation Plus logic is active for .
+ ///
+ ///
+ ///
+ public static bool IsDunGenExtenderActive(DungeonFlow dungeonFlow){
+ return IsDunGenExtenderActive(GetDunGenExtender(dungeonFlow));
+ }
+
+ ///
+ /// Returns true if the Dungeon Generation Plus logic is active for .
+ ///
+ ///
+ ///
+ public static bool IsDunGenExtenderActive(DunGenExtender extender){
+ return extender != null && extender == DunGenPlusGenerator.Instance;
+ }
+
///
/// Creates and returns an empty .
///
diff --git a/DunGenPlus/DunGenPlus/DunGenPlus/DunGenPlus.dll b/DunGenPlus/DunGenPlus/DunGenPlus/DunGenPlus.dll
index 75d4778..d1c1d36 100644
Binary files a/DunGenPlus/DunGenPlus/DunGenPlus/DunGenPlus.dll and b/DunGenPlus/DunGenPlus/DunGenPlus/DunGenPlus.dll differ
diff --git a/DunGenPlus/DunGenPlus/Patches/DungeonGeneratorPatch.cs b/DunGenPlus/DunGenPlus/Patches/DungeonGeneratorPatch.cs
index 1cefec8..9ffe323 100644
--- a/DunGenPlus/DunGenPlus/Patches/DungeonGeneratorPatch.cs
+++ b/DunGenPlus/DunGenPlus/Patches/DungeonGeneratorPatch.cs
@@ -20,6 +20,24 @@ using DunGenPlus.Components;
namespace DunGenPlus.Patches {
internal class DungeonGeneratorPatch {
+ [HarmonyPriority(Priority.First)]
+ [HarmonyPatch(typeof(DungeonGenerator), "Generate")]
+ [HarmonyPrefix]
+ public static void GeneratePatch(ref DungeonGenerator __instance){
+ DunGenPlusGenerator.Deactivate();
+
+ var flow = __instance.DungeonFlow;
+ var extender = API.GetDunGenExtender(flow);
+ if (extender && extender.Active) {
+ Plugin.logger.LogInfo($"Loading DunGenExtender for {flow.name}");
+ DunGenPlusGenerator.Activate(__instance, extender);
+ return;
+ }
+
+ Plugin.logger.LogInfo($"Did not load a DunGenExtenderer");
+ DunGenPlusGenerator.Deactivate();
+ }
+
[HarmonyPostfix]
[HarmonyPatch(typeof(DungeonGenerator), "InnerGenerate")]
public static void InnerGeneratePatch(ref DungeonGenerator __instance, bool isRetry, ref IEnumerator __result){
diff --git a/DunGenPlus/DunGenPlus/Plugin.cs b/DunGenPlus/DunGenPlus/Plugin.cs
index 4f4f326..f35cfa2 100644
--- a/DunGenPlus/DunGenPlus/Plugin.cs
+++ b/DunGenPlus/DunGenPlus/Plugin.cs
@@ -25,7 +25,7 @@ namespace DunGenPlus {
internal const string modGUID = "dev.ladyalice.dungenplus";
private const string modName = "Dungeon Generation Plus";
- private const string modVersion = "1.2.0";
+ private const string modVersion = "1.2.1";
internal readonly Harmony Harmony = new Harmony(modGUID);
@@ -58,25 +58,8 @@ namespace DunGenPlus {
Assets.LoadAssets();
Assets.LoadAssetBundle();
- DungeonManager.GlobalDungeonEvents.onBeforeDungeonGenerate.AddListener(OnDunGenExtenderLoad);
DoorwayManager.onMainEntranceTeleportSpawnedEvent.AddEvent("DoorwayCleanup", DoorwayManager.onMainEntranceTeleportSpawnedFunction);
}
- void OnDunGenExtenderLoad(RoundManager roundManager) {
- DunGenPlusGenerator.Deactivate();
-
- var generator = roundManager.dungeonGenerator.Generator;
- var flow = generator.DungeonFlow;
- var extender = API.GetDunGenExtender(flow);
- if (extender && extender.Active) {
- Plugin.logger.LogInfo($"Loading DunGenExtender for {flow.name}");
- DunGenPlusGenerator.Activate(generator, extender);
- return;
- }
-
- Plugin.logger.LogInfo($"Did not load a DunGenExtenderer");
- DunGenPlusGenerator.Deactivate();
- }
-
}
}
diff --git a/LoadstonePatch/LoadstoneNighty.sln b/LoadstonePatch/LoadstoneNighty.sln
new file mode 100644
index 0000000..24bcf79
--- /dev/null
+++ b/LoadstonePatch/LoadstoneNighty.sln
@@ -0,0 +1,25 @@
+
+Microsoft Visual Studio Solution File, Format Version 12.00
+# Visual Studio Version 17
+VisualStudioVersion = 17.10.35122.118
+MinimumVisualStudioVersion = 10.0.40219.1
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "LoadstoneNighty", "LoadstoneNighty\LoadstoneNighty.csproj", "{B7C6EABD-16DB-4DE8-8013-1FA7DA6E8DE8}"
+EndProject
+Global
+ GlobalSection(SolutionConfigurationPlatforms) = preSolution
+ Debug|Any CPU = Debug|Any CPU
+ Release|Any CPU = Release|Any CPU
+ EndGlobalSection
+ GlobalSection(ProjectConfigurationPlatforms) = postSolution
+ {B7C6EABD-16DB-4DE8-8013-1FA7DA6E8DE8}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {B7C6EABD-16DB-4DE8-8013-1FA7DA6E8DE8}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {B7C6EABD-16DB-4DE8-8013-1FA7DA6E8DE8}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {B7C6EABD-16DB-4DE8-8013-1FA7DA6E8DE8}.Release|Any CPU.Build.0 = Release|Any CPU
+ EndGlobalSection
+ GlobalSection(SolutionProperties) = preSolution
+ HideSolutionNode = FALSE
+ EndGlobalSection
+ GlobalSection(ExtensibilityGlobals) = postSolution
+ SolutionGuid = {874E9212-EB26-4670-8F00-EE17E1F48E01}
+ EndGlobalSection
+EndGlobal
diff --git a/LoadstonePatch/LoadstoneNighty/LoadstoneNighty.csproj b/LoadstonePatch/LoadstoneNighty/LoadstoneNighty.csproj
new file mode 100644
index 0000000..9a7c7f5
--- /dev/null
+++ b/LoadstonePatch/LoadstoneNighty/LoadstoneNighty.csproj
@@ -0,0 +1,76 @@
+
+
+
+
+ Debug
+ AnyCPU
+ {B7C6EABD-16DB-4DE8-8013-1FA7DA6E8DE8}
+ Library
+ Properties
+ LoadstoneNighty
+ LoadstoneNighty
+ v4.8
+ 512
+ true
+
+
+ true
+ full
+ false
+ bin\Debug\
+ DEBUG;TRACE
+ prompt
+ 4
+
+
+ pdbonly
+ true
+ bin\Release\
+ TRACE
+ prompt
+ 4
+
+
+
+ ..\..\..\Libraries\0Harmony.dll
+
+
+ ..\..\..\Libraries\Assembly-CSharp-firstpass.dll
+
+
+ ..\..\..\Libraries\Assembly-CSharp-publicized.dll
+
+
+ ..\..\..\Libraries\BepInEx.dll
+
+
+ ..\..\..\Libraries\BepInEx.Harmony.dll
+
+
+ ..\..\..\Libraries\com.adibtw.loadstone.dll
+
+
+ ..\..\..\Libraries\DunGenPlus.dll
+
+
+
+
+
+
+
+
+
+
+ ..\..\..\Libraries\UnityEngine.dll
+
+
+ ..\..\..\Libraries\UnityEngine.CoreModule.dll
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/LoadstonePatch/LoadstoneNighty/Patch.cs b/LoadstonePatch/LoadstoneNighty/Patch.cs
new file mode 100644
index 0000000..a006eed
--- /dev/null
+++ b/LoadstonePatch/LoadstoneNighty/Patch.cs
@@ -0,0 +1,83 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using DunGen;
+using DunGen.Graph;
+using DunGenPlus;
+using DunGenPlus.Collections;
+
+namespace LoadstoneNighty {
+
+ public class Patch {
+
+ public static void Activate(){
+ Loadstone.Patches.DungenOptimizationPatches.tileCollectors.Add(GetTiles);
+ }
+
+ private static HashSet GetTiles(DungeonGenerator generator) {
+ var flow = generator.DungeonFlow;
+ var extender = API.GetDunGenExtender(flow);
+ var hashset = new HashSet();
+
+ if (API.IsDunGenExtenderActive(extender)){
+ Plugin.logger.LogDebug("Creating custom hashset for Loadstone");
+ var props = extender.Properties;
+ GenerateTileHashSet(ref hashset, props.MainPathProperties.MainPathDetails);
+ GenerateTileHashSet(ref hashset, props.AdditionalTilesProperties.AdditionalTileSets);
+ GenerateTileHashSet(ref hashset, props.NormalNodeArchetypesProperties.NormalNodeArchetypes);
+ GenerateTileHashSet(ref hashset, props.LineRandomizerProperties.Archetypes);
+ }
+ return hashset;
+ }
+
+ static void GenerateTileHashSet(ref HashSet tiles, List nodes) {
+ foreach (var n in nodes) {
+ GenerateTileHashSet(ref tiles, n.Archetypes);
+ }
+ }
+
+ static void GenerateTileHashSet(ref HashSet tiles, List list) {
+ foreach (var l in list) {
+ GenerateTileHashSet(ref tiles, l.TileSets);
+ }
+ }
+
+ static void GenerateTileHashSet(ref HashSet tiles, List extenders) {
+ foreach (var ext in extenders) {
+ GenerateTileHashSet(ref tiles, ext.Nodes.Value);
+ GenerateTileHashSet(ref tiles, ext.Lines.Value);
+ }
+ }
+
+ static void GenerateTileHashSet(ref HashSet tiles, List nodes) {
+ foreach (var n in nodes) {
+ GenerateTileHashSet(ref tiles, n.TileSets);
+ }
+ }
+
+ static void GenerateTileHashSet(ref HashSet tiles, List lines) {
+ foreach (var l in lines) {
+ GenerateTileHashSet(ref tiles, l.DungeonArchetypes);
+ }
+ }
+
+ static void GenerateTileHashSet(ref HashSet tiles, List archetypes) {
+ foreach (var a in archetypes) {
+ GenerateTileHashSet(ref tiles, a.TileSets);
+ GenerateTileHashSet(ref tiles, a.BranchCapTileSets);
+ }
+ }
+
+ static void GenerateTileHashSet(ref HashSet tiles, List tileSets) {
+ foreach (var tileSet in tileSets) {
+ foreach (var tileChance in tileSet.TileWeights.Weights) {
+ var tile = tileChance.Value.GetComponent();
+ if (tile != null) tiles.Add(tile);
+ }
+ }
+ }
+
+ }
+}
diff --git a/LoadstonePatch/LoadstoneNighty/Plugin.cs b/LoadstonePatch/LoadstoneNighty/Plugin.cs
new file mode 100644
index 0000000..bdb5b78
--- /dev/null
+++ b/LoadstonePatch/LoadstoneNighty/Plugin.cs
@@ -0,0 +1,54 @@
+using BepInEx.Bootstrap;
+using BepInEx.Logging;
+using BepInEx;
+using HarmonyLib;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace LoadstoneNighty {
+ [BepInPlugin(modGUID, modName, modVersion)]
+
+ [BepInDependency("dev.ladyalice.dungenplus", "1.2.1")]
+ [BepInDependency(targetModGUID, BepInDependency.DependencyFlags.SoftDependency)]
+
+ public class Plugin : BaseUnityPlugin {
+
+ public const string modGUID = "dev.ladyalice.dungenplus.loadstonepatch";
+ private const string modName = "Dungeon Generation Plus Loadstone Patch";
+ private const string modVersion = "1.0.0";
+
+ public const string targetModGUID = "com.adibtw.loadstone.Nightly";
+ public const string targetModVersion = "0.1.16";
+
+ public readonly Harmony harmony = new Harmony(modGUID);
+ public static Plugin Instance {get; private set;}
+ public static ManualLogSource logger { get; internal set; }
+
+ void Awake(){
+ if (Instance == null) Instance = this;
+
+ logger = BepInEx.Logging.Logger.CreateLogSource(modGUID);
+
+ var modLoaded = Chainloader.PluginInfos.ContainsKey(targetModGUID);
+ if (!modLoaded) return;
+
+ bool validVersion;
+ var pluginInfo = Chainloader.PluginInfos[targetModGUID];
+ var loadedVersion = pluginInfo.Metadata.Version;
+ if (string.IsNullOrWhiteSpace(targetModVersion)){
+ validVersion = true;
+ } else {
+ var requiredVersion = new Version(targetModVersion);
+ validVersion = loadedVersion >= requiredVersion;
+ }
+
+ if (validVersion){
+ logger.LogInfo($"Plugin {modName} has been added!");
+ Patch.Activate();
+ }
+ }
+ }
+}
diff --git a/LoadstonePatch/LoadstoneNighty/Properties/AssemblyInfo.cs b/LoadstonePatch/LoadstoneNighty/Properties/AssemblyInfo.cs
new file mode 100644
index 0000000..9c52b5f
--- /dev/null
+++ b/LoadstonePatch/LoadstoneNighty/Properties/AssemblyInfo.cs
@@ -0,0 +1,36 @@
+using System.Reflection;
+using System.Runtime.CompilerServices;
+using System.Runtime.InteropServices;
+
+// アセンブリに関する一般情報は以下を通して制御されます
+// 制御されます。アセンブリに関連付けられている情報を変更するには、
+// これらの属性値を変更してください。
+[assembly: AssemblyTitle("LoadstoneNighty")]
+[assembly: AssemblyDescription("")]
+[assembly: AssemblyConfiguration("")]
+[assembly: AssemblyCompany("")]
+[assembly: AssemblyProduct("LoadstoneNighty")]
+[assembly: AssemblyCopyright("Copyright © 2024")]
+[assembly: AssemblyTrademark("")]
+[assembly: AssemblyCulture("")]
+
+// ComVisible を false に設定すると、このアセンブリ内の型は COM コンポーネントから
+// 参照できなくなります。COM からこのアセンブリ内の型にアクセスする必要がある場合は、
+// その型の ComVisible 属性を true に設定してください。
+[assembly: ComVisible(false)]
+
+// このプロジェクトが COM に公開される場合、次の GUID が typelib の ID になります
+[assembly: Guid("b7c6eabd-16db-4de8-8013-1fa7da6e8de8")]
+
+// アセンブリのバージョン情報は、以下の 4 つの値で構成されています:
+//
+// メジャー バージョン
+// マイナー バージョン
+// ビルド番号
+// リビジョン
+//
+// すべての値を指定するか、次を使用してビルド番号とリビジョン番号を既定に設定できます
+// 既定値にすることができます:
+// [assembly: AssemblyVersion("1.0.*")]
+[assembly: AssemblyVersion("1.0.0.0")]
+[assembly: AssemblyFileVersion("1.0.0.0")]