[!NOTE] The core mechanic of “picking a place to go, doing something, and leaving” was functional early on. However, stakeholders requested more immediate action and gameplay loops. This mandate caused engineering focus to pivot abruptly into building the Target Shooting and Time Trial systems below, which subsequently halted development on other core progression features (like the Shop System) to meet the new action-oriented milestones.

Dynamic Game Modes

Category: Activity Structures
Context: Beyond the core extraction loop of POV 3.0, the game features two distinct in-world activity types designed to test mechanical skill: Checkpoint Racing and Target Shooting. These are not menus — they are embedded activities managed by independent singleton systems that overlay objectives onto the existing world space without requiring hard scene loads.

Activity Type 1: Checkpoint Racing (Time Trials)

The TimeTrialManager handles checkpoint racing courses. Rather than hard-coding races into levels, it uses dynamic prefab instantiation.

  1. Initialization: On load, the manager iterates over a list of TimeTrialData objects, instantiating the course prefabs (timeTrialPrefab) but keeping their physical checkpoints disabled to prevent clutter.
  2. Activation: When a player enters a TimeTrialActivityTrigger, the route is activated, the timer (currentTimeInTimeTrial) begins, and the CheckpointManager wakes up.
  3. Hierarchy Parsing: The CheckpointManager doesn’t rely on strict manual arrays. Instead, it finds all objects tagged CheckpointParent and sorts them dynamically based on their sibling index in the Unity hierarchy GetSiblingIndex(). This allows level designers to quickly drag-and-drop checkpoints to build routes without breaking array links.
  4. Resolution: If the clock exceeds timeTrialLength, the trial fails. If the player hits all checkpoints sequentially, their completion time is recorded and translated into a Star Rating (1-3 stars) by the TimeTrialData object.

Activity Type 2: Target Shooting

The TargetChallengeManager orchestrates shooting gallery mechanics. This is a separate activity type from checkpoint racing — the player goes to a physical shooting range in the world.

It bifurcates into two variants based on the attached TargetConfig:

graph TD
    A[Player Reaches Target Range] --> B{Challenge Type?}
    B -- Normal --> C[Spawn Fixed Target Count]
    B -- Quickshot --> D[Start Challenge Timer]
    
    C --> E[Shoot Targets]
    D --> F[Player Shoots as Many as Possible]
    
    F --> G{Time Up?}
    G -- No --> F
    G -- Yes --> H[Calculate Star Rating]
    H --> I[Reward: 1 to 3 Stars]

To prevent memory leaks and overhead during frantic shooting, the system uses object pooling concepts. When a target is destroyed, the manager listens via an OnTargetDestroyed action and immediately cycles the empty placement transform backward into a Queue<Transform>. This allows infinite target spawning within limited physical placements without overlapping.