Files
security-game/src/core/access_policy.gd
T
zwitschi 439e0a4281
CI / headless-tests (push) Canceled after 49s
Implement prototype: venue-driven simulation core, scenarios, tests, and playable entrance scene
- Godot 4.3 project scaffold with first-person guard, procedural world,
  interaction HUD, access inspection, radio forms, debug overlay, shift review
- Simulation core: ShiftCoordinator, VenueScenario, EventScheduler, NPCController/FSM,
  AccessVerifier, EscalationManager, RadioSystem, IncidentRecorder,
  ReputationEvaluator, CrowdSystem, EventBus
- Three authored scenarios (Hollywood Blvd building, The Joke Shop, TV studio)
- Custom headless test runner (25 tests) replacing editor-dependent GUT,
  plus GitHub Actions CI
- Documentation workflow live: README, PLAN (tech stack), TODO/DONE, MEMORY
2026-10-31 11:37:54 +01:00

33 lines
1.2 KiB
GDScript

class_name AccessPolicy
extends Resource
## Venue admission rules (PLAN.md: access rules per venue).
## Minimum required artifacts. For the Hollywood Blvd building this may be
## { WRISTBAND: true }. The Joke Shop may require { ID: true, TICKET: true }.
@export var required_artifacts: Dictionary = {}
## OR-admission: when true, entry is granted as soon as ANY required artifact
## kind is valid (e.g. TV studio). When false, every kind must be satisfied.
@export var grant_if_any_required: bool = false
## Artifact kinds accepted as OR-equivalent: e.g. { GUEST_LIST: true } when a
## reservation list can replace a ticket. If true, the verifier grants when any
## listed kind is valid.
@export_range(1, 8) var minimum_age: int = 0
## Wether identification is required or only checked when present.
@export var require_id: bool = false
@export var wand_screening_required: bool = false
## Displayed rules summary used by dialogue/UI.
@export var policy_summary: String = ""
func requires(kind: int) -> bool:
return required_artifacts.get(kind, false)
func description() -> String:
if not policy_summary.is_empty():
return policy_summary
return str(required_artifacts)