66 lines
2.4 KiB
C#
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 {
|
|
}
|
|
}
|