diff --git a/Editor/EncounterDrawer.cs b/Editor/EncounterDrawer.cs
index 4bc2547..9b74d07 100644
--- a/Editor/EncounterDrawer.cs
+++ b/Editor/EncounterDrawer.cs
@@ -1,4 +1,3 @@
-using Jovian.EncounterSystem;
using UnityEditor;
using UnityEngine;
diff --git a/Runtime/EncounterReference.cs b/Runtime/EncounterReference.cs
index cd4dd89..a1ac382 100644
--- a/Runtime/EncounterReference.cs
+++ b/Runtime/EncounterReference.cs
@@ -9,6 +9,5 @@ namespace Jovian.EncounterSystem {
public TextMeshProUGUI encounterDescription;
public Image encounterArt;
public Transform encounterOptionsContainer;
- public Button submitButton;
}
}
diff --git a/Runtime/EncounterRegistry.cs b/Runtime/EncounterRegistry.cs
index 2513130..5d93a71 100644
--- a/Runtime/EncounterRegistry.cs
+++ b/Runtime/EncounterRegistry.cs
@@ -56,6 +56,73 @@ namespace Jovian.EncounterSystem {
}
}
}
+ public EncounterTable GetEncounterTable(string id) {
+ foreach(var collection in encounterCollections) {
+ foreach(var table in collection.encounterTables) {
+ if(table.id == id) {
+ return table;
+ }
+ }
+ }
+ return null;
+ }
+
+ public IEncounter GetRandomEncounter(string encounterTableId) {
+ var table = GetEncounterTable(encounterTableId);
+ if(!table) {
+ return null;
+ }
+ var ec = table.encounters;
+ return ec[UnityEngine.Random.Range(0, ec.Count)];
+ }
+
+ /// Random pick restricted to encounters whose runtime type matches .
+ /// Zero-alloc — uses reservoir sampling instead of building an intermediate filtered list.
+ public IEncounter GetRandomEncounter(string encounterTableId, IEncounterKind encounterKind) {
+ var table = GetEncounterTable(encounterTableId);
+ if(!table || encounterKind == null) {
+ return null;
+ }
+
+ IEncounter selected = null;
+ var seen = 0;
+ for(var i = 0; i < encounters.Count; i++) {
+ var encounter = table.encounters[i];
+ if(encounter == null || encounter.GetType() != encounterKind.GetType()) {
+ continue;
+ }
+ seen++;
+ if(UnityEngine.Random.Range(0, seen) == 0) {
+ selected = encounter;
+ }
+ }
+ return selected;
+ }
+
+ /// Random pick restricted by . Used with
+ /// to exclude gated encounters. Zero-alloc via reservoir sampling.
+ public IEncounter GetRandomEncounter(Predicate filter, string encounterTableId) {
+ var table = GetEncounterTable(encounterTableId);
+ if(!table) {
+ return null;
+ }
+ if(filter == null) {
+ return GetRandomEncounter(encounterTableId);
+ }
+
+ IEncounter selected = null;
+ var seen = 0;
+ foreach(var encounter in table.encounters) {
+ if(encounter == null || !filter(encounter)) {
+ continue;
+ }
+ seen++;
+ if(UnityEngine.Random.Range(0, seen) == 0) {
+ selected = encounter;
+ }
+ }
+ return selected;
+ }
}
#if UNITY_EDITOR
diff --git a/Runtime/EncounterTable.cs b/Runtime/EncounterTable.cs
index 1142d3f..f35c1fa 100644
--- a/Runtime/EncounterTable.cs
+++ b/Runtime/EncounterTable.cs
@@ -26,61 +26,6 @@ namespace Jovian.EncounterSystem {
idCache = null;
}
- public IEncounter GetRandomEncounter() {
- if(encounters == null || encounters.Count == 0) {
- return null;
- }
-
- return encounters[UnityEngine.Random.Range(0, encounters.Count)];
- }
-
- /// Random pick restricted to encounters whose runtime type matches .
- /// Zero-alloc — uses reservoir sampling instead of building an intermediate filtered list.
- public IEncounter GetRandomEncounter(Type type) {
- if(encounters == null || encounters.Count == 0 || type == null) {
- return null;
- }
-
- IEncounter selected = null;
- var seen = 0;
- for(var i = 0; i < encounters.Count; i++) {
- var encounter = encounters[i];
- if(encounter == null || encounter.GetType() != type) {
- continue;
- }
- seen++;
- if(UnityEngine.Random.Range(0, seen) == 0) {
- selected = encounter;
- }
- }
- return selected;
- }
-
- /// Random pick restricted by . Used with
- /// to exclude gated encounters. Zero-alloc via reservoir sampling.
- public IEncounter GetRandomEncounter(Predicate filter) {
- if(encounters == null || encounters.Count == 0) {
- return null;
- }
- if(filter == null) {
- return GetRandomEncounter();
- }
-
- IEncounter selected = null;
- var seen = 0;
- for(var i = 0; i < encounters.Count; i++) {
- var encounter = encounters[i];
- if(encounter == null || !filter(encounter)) {
- continue;
- }
- seen++;
- if(UnityEngine.Random.Range(0, seen) == 0) {
- selected = encounter;
- }
- }
- return selected;
- }
-
private void EnsureCache() {
if(idCache != null) {
return;
diff --git a/Runtime/IEncounterKind.cs b/Runtime/IEncounterKind.cs
index d61a30c..a9f37c1 100644
--- a/Runtime/IEncounterKind.cs
+++ b/Runtime/IEncounterKind.cs
@@ -3,11 +3,10 @@ using System;
namespace Jovian.EncounterSystem {
/// Polymorphic payload on an . Add a new kind by implementing
/// this interface; the SubclassSelector drawer surfaces it automatically.
- public interface IEncounterKind {
- }
+ public interface IEncounterKind { }
[Serializable]
- public partial class QuestKind : IEncounterKind {
+ public class QuestKind : IEncounterKind {
public EncounterLink nextEncounter;
}
}