Files
encounter-system/Runtime/IEncounterKind.cs
2026-04-19 12:25:49 +02:00

66 lines
2.4 KiB
C#

using System;
namespace Jovian.EncounterSystem {
/// <summary>
/// Marker interface for the polymorphic payload of an <see cref="IEncounter"/>.
/// Each concrete kind carries its own designer-facing data. Behaviour lives in resolvers
/// and play modes — kinds are pure data. Add new kinds by creating a new <see cref="IEncounterKind"/>
/// implementation; the SubclassSelector drawer will surface it automatically.
/// </summary>
public interface IEncounterKind {
}
/// <summary>Combat encounter: triggers combat play mode with the specified enemy group.</summary>
[Serializable]
public class CombatKind : IEncounterKind {
public string enemyGroupId;
public string rewardTableId;
}
/// <summary>Quest encounter: a step in a quest chain. The <see cref="nextEncounter"/> link is what
/// <see cref="QuestProgress"/> walks to build the gated progression graph.</summary>
[Serializable]
public class QuestKind : IEncounterKind {
public EncounterLink nextEncounter;
public string questTitle;
}
/// <summary>Dialogue-driven encounter with an NPC and optional faction reputation impact.</summary>
[Serializable]
public class SocialKind : IEncounterKind {
public string npcId;
public string factionId;
public int reputationDelta;
}
/// <summary>Puzzle encounter gated by a skill check against <see cref="difficultyClass"/>.</summary>
[Serializable]
public class PuzzleKind : IEncounterKind {
public string puzzleId;
public int difficultyClass;
}
/// <summary>Exploration/discovery encounter gated by a perception check (<see cref="perceptionDC"/>).</summary>
[Serializable]
public class ExplorationKind : IEncounterKind {
public int perceptionDC;
}
/// <summary>Tutorial encounter driving a tutorial subsystem by id.</summary>
[Serializable]
public class TutorialKind : IEncounterKind {
public string tutorialId;
}
/// <summary>Environmental hazard that applies damage or a status without player choice.</summary>
[Serializable]
public class HazardKind : IEncounterKind {
public int damageAmount;
}
/// <summary>Catch-all with no kind-specific data — useful while prototyping.</summary>
[Serializable]
public class OtherKind : IEncounterKind {
}
}