# 3xtomorrow/the-last-scoop architecture

> Architecture diagram of the GitHub repository 3xtomorrow/the-last-scoop, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-11-12). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/3xtomorrow/the-last-scoop
- Repository: https://github.com/3xtomorrow/the-last-scoop

## Overview

This Unity project is a first-person horror game set in an ice-cream store. The main player workflow is to move and look around, interact with store objects, complete objectives, and encounter manager dialogue and scares. The graph also shows the separate BetterFolders Unity Editor extension for folder styling. Relationships are limited to source-index references and shown excerpts; scene and asset wiring is not available here.

Main entry points: [`Scripts/PlayerScripts/PlayerRaycast.cs`](https://github.com/3xtomorrow/the-last-scoop/blob/main/Scripts/PlayerScripts/PlayerRaycast.cs) (Interaction raycast), [`Scripts/Managers/MovementManager.cs`](https://github.com/3xtomorrow/the-last-scoop/blob/main/Scripts/Managers/MovementManager.cs) (Movement control), [`Scripts/TaskSheet.cs`](https://github.com/3xtomorrow/the-last-scoop/blob/main/Scripts/TaskSheet.cs) (Task sheet), [`Scripts/JumpscareScripts/ManagerJumpscare.cs`](https://github.com/3xtomorrow/the-last-scoop/blob/main/Scripts/JumpscareScripts/ManagerJumpscare.cs) (Manager jumpscare)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_player["Player Runtime"]
  node_player["Player movement<br/>[PlayerMovement.cs]"]
  node_camera["Camera movement<br/>[CameraMovement.cs]"]
  node_input["Input actions<br/>[InputManager.cs]"]
  node_cam_animation["Camera bob"]
  node_footsteps["Footsteps"]
  node_movement_manager["Movement control<br/>[MovementManager.cs]"]
end

subgraph group_store["Store Interactions"]
  node_raycast["Interaction raycast<br/>[PlayerRaycast.cs]"]
  node_cone["Cone and scoops<br/>[ConeHolder.cs]"]
  node_trash["Empty trash<br/>[EmptyTrash.cs]"]
  node_door["Door control<br/>[Door.cs]"]
  node_clockin["Clock in<br/>[ClockIn.cs]"]
  node_tasksheet["Task sheet<br/>[TaskSheet.cs]"]
  node_power["Power switch<br/>[PowerScript.cs]"]
end

subgraph group_story["Objectives and Story"]
  node_objectives["Objective tracking"]
  node_dialogue["Dialogue presentation<br/>[DialogueManager.cs]"]
  node_dialogue_data["Dialogue data<br/>[DialogueSO.cs]"]
  node_jumpscare["Manager jumpscare"]
  node_boss["Boss controller<br/>[BossController.cs]"]
end

subgraph group_editor["Folder Editor"]
  node_settings["Folder settings"]
  node_folder_colors["Folder styling<br/>[FolderColors.cs]"]
  node_folder_window["Folder edit window"]
  node_settings_editor["Settings inspector"]
end

node_raycast -->|"checks interaction"| node_input
node_raycast -->|"changes cone"| node_cone
node_raycast -->|"invokes emptying"| node_trash
node_raycast -->|"opens door"| node_door
node_raycast -->|"clocks in"| node_clockin
node_raycast -->|"opens sheet"| node_tasksheet
node_raycast -->|"toggles power"| node_power
node_trash -->|"uses cone state"| node_cone
node_clockin -->|"references"| node_tasksheet
node_clockin -->|"advances objective"| node_objectives
node_movement_manager -->|"enables or disables"| node_player
node_movement_manager -->|"enables or disables"| node_camera
node_movement_manager -->|"controls playback"| node_footsteps
node_movement_manager -->|"controls animation"| node_cam_animation
node_cam_animation -->|"reads movement"| node_input
node_footsteps -->|"reads input"| node_input
node_footsteps -->|"uses animation"| node_cam_animation
node_dialogue -->|"presents data"| node_dialogue_data
node_dialogue -->|"enables movement"| node_movement_manager
node_jumpscare -->|"starts dialogue"| node_dialogue
node_jumpscare -->|"advances objective"| node_objectives
node_jumpscare -->|"disables movement"| node_movement_manager
node_tasksheet -->|"positions boss"| node_boss
node_tasksheet -->|"disables or enables"| node_movement_manager
node_tasksheet -->|"advances objective"| node_objectives
node_tasksheet -->|"referenced by clock-in flow"| node_boss
node_folder_colors -->|"loads settings"| node_settings
node_folder_colors -->|"opens editor"| node_folder_window
node_settings_editor -->|"edits settings"| node_settings
node_settings_editor -->|"clears cache"| node_folder_colors
node_folder_window -->|"uses settings"| node_settings

click node_player "https://github.com/3xtomorrow/the-last-scoop/blob/main/Scripts/PlayerScripts/PlayerMovement.cs"
click node_camera "https://github.com/3xtomorrow/the-last-scoop/blob/main/Scripts/PlayerScripts/CameraMovement.cs"
click node_input "https://github.com/3xtomorrow/the-last-scoop/blob/main/Scripts/Managers/InputManager.cs"
click node_cam_animation "https://github.com/3xtomorrow/the-last-scoop/blob/main/Scripts/PlayerScripts/CamAnimationManager.cs"
click node_footsteps "https://github.com/3xtomorrow/the-last-scoop/blob/main/Scripts/Managers/FootstepsManager.cs"
click node_movement_manager "https://github.com/3xtomorrow/the-last-scoop/blob/main/Scripts/Managers/MovementManager.cs"
click node_raycast "https://github.com/3xtomorrow/the-last-scoop/blob/main/Scripts/PlayerScripts/PlayerRaycast.cs"
click node_cone "https://github.com/3xtomorrow/the-last-scoop/blob/main/Scripts/ConeHolder.cs"
click node_trash "https://github.com/3xtomorrow/the-last-scoop/blob/main/Scripts/EmptyTrash.cs"
click node_door "https://github.com/3xtomorrow/the-last-scoop/blob/main/Scripts/Door.cs"
click node_clockin "https://github.com/3xtomorrow/the-last-scoop/blob/main/Scripts/ClockIn.cs"
click node_tasksheet "https://github.com/3xtomorrow/the-last-scoop/blob/main/Scripts/TaskSheet.cs"
click node_power "https://github.com/3xtomorrow/the-last-scoop/blob/main/Scripts/PowerScript.cs"
click node_objectives "https://github.com/3xtomorrow/the-last-scoop/blob/main/Scripts/Managers/ObjectiveManager.cs"
click node_dialogue "https://github.com/3xtomorrow/the-last-scoop/blob/main/Scripts/Managers/DialogueManager.cs"
click node_dialogue_data "https://github.com/3xtomorrow/the-last-scoop/blob/main/Scripts/ScriptableObjectScripts/DialogueSO.cs"
click node_jumpscare "https://github.com/3xtomorrow/the-last-scoop/blob/main/Scripts/JumpscareScripts/ManagerJumpscare.cs"
click node_boss "https://github.com/3xtomorrow/the-last-scoop/blob/main/Scripts/BossScripts/BossController.cs"
click node_settings "https://github.com/3xtomorrow/the-last-scoop/blob/main/BetterFolders/Editor/FolderColorSettings.cs"
click node_folder_colors "https://github.com/3xtomorrow/the-last-scoop/blob/main/BetterFolders/Editor/FolderColors.cs"
click node_folder_window "https://github.com/3xtomorrow/the-last-scoop/blob/main/BetterFolders/Editor/FolderColorEditWindow.cs"
click node_settings_editor "https://github.com/3xtomorrow/the-last-scoop/blob/main/BetterFolders/Editor/FolderColorSettingsEditor.cs"

classDef toneNeutral fill:#f8fafc,stroke:#334155,stroke-width:1.5px,color:#0f172a
classDef toneBlue fill:#dbeafe,stroke:#2563eb,stroke-width:1.5px,color:#172554
classDef toneAmber fill:#fef3c7,stroke:#d97706,stroke-width:1.5px,color:#78350f
classDef toneMint fill:#dcfce7,stroke:#16a34a,stroke-width:1.5px,color:#14532d
classDef toneRose fill:#ffe4e6,stroke:#e11d48,stroke-width:1.5px,color:#881337
classDef toneIndigo fill:#e0e7ff,stroke:#4f46e5,stroke-width:1.5px,color:#312e81
classDef toneTeal fill:#ccfbf1,stroke:#0f766e,stroke-width:1.5px,color:#134e4a
class node_player,node_camera,node_input,node_cam_animation,node_footsteps,node_movement_manager toneBlue
class node_raycast,node_cone,node_trash,node_door,node_clockin,node_tasksheet,node_power toneAmber
class node_objectives,node_dialogue,node_dialogue_data,node_jumpscare,node_boss toneMint
class node_settings,node_folder_colors,node_folder_window,node_settings_editor toneRose
```

## Components

### Player Runtime

- [Player movement](https://github.com/3xtomorrow/the-last-scoop/blob/main/Scripts/PlayerScripts/PlayerMovement.cs): `Scripts/PlayerScripts/PlayerMovement.cs`
- [Camera movement](https://github.com/3xtomorrow/the-last-scoop/blob/main/Scripts/PlayerScripts/CameraMovement.cs): `Scripts/PlayerScripts/CameraMovement.cs`
- [Input actions](https://github.com/3xtomorrow/the-last-scoop/blob/main/Scripts/Managers/InputManager.cs): `Scripts/Managers/InputManager.cs`
- [Camera bob](https://github.com/3xtomorrow/the-last-scoop/blob/main/Scripts/PlayerScripts/CamAnimationManager.cs): `Scripts/PlayerScripts/CamAnimationManager.cs`
- [Footsteps](https://github.com/3xtomorrow/the-last-scoop/blob/main/Scripts/Managers/FootstepsManager.cs): `Scripts/Managers/FootstepsManager.cs`
- [Movement control](https://github.com/3xtomorrow/the-last-scoop/blob/main/Scripts/Managers/MovementManager.cs): `Scripts/Managers/MovementManager.cs`

### Store Interactions

- [Interaction raycast](https://github.com/3xtomorrow/the-last-scoop/blob/main/Scripts/PlayerScripts/PlayerRaycast.cs): `Scripts/PlayerScripts/PlayerRaycast.cs`
- [Cone and scoops](https://github.com/3xtomorrow/the-last-scoop/blob/main/Scripts/ConeHolder.cs): `Scripts/ConeHolder.cs`
- [Empty trash](https://github.com/3xtomorrow/the-last-scoop/blob/main/Scripts/EmptyTrash.cs): `Scripts/EmptyTrash.cs`
- [Door control](https://github.com/3xtomorrow/the-last-scoop/blob/main/Scripts/Door.cs): `Scripts/Door.cs`
- [Clock in](https://github.com/3xtomorrow/the-last-scoop/blob/main/Scripts/ClockIn.cs): `Scripts/ClockIn.cs`
- [Task sheet](https://github.com/3xtomorrow/the-last-scoop/blob/main/Scripts/TaskSheet.cs): `Scripts/TaskSheet.cs`
- [Power switch](https://github.com/3xtomorrow/the-last-scoop/blob/main/Scripts/PowerScript.cs): `Scripts/PowerScript.cs`

### Objectives and Story

- [Objective tracking](https://github.com/3xtomorrow/the-last-scoop/blob/main/Scripts/Managers/ObjectiveManager.cs): `Scripts/Managers/ObjectiveManager.cs`
- [Dialogue presentation](https://github.com/3xtomorrow/the-last-scoop/blob/main/Scripts/Managers/DialogueManager.cs): `Scripts/Managers/DialogueManager.cs`
- [Dialogue data](https://github.com/3xtomorrow/the-last-scoop/blob/main/Scripts/ScriptableObjectScripts/DialogueSO.cs): `Scripts/ScriptableObjectScripts/DialogueSO.cs`
- [Manager jumpscare](https://github.com/3xtomorrow/the-last-scoop/blob/main/Scripts/JumpscareScripts/ManagerJumpscare.cs): `Scripts/JumpscareScripts/ManagerJumpscare.cs`
- [Boss controller](https://github.com/3xtomorrow/the-last-scoop/blob/main/Scripts/BossScripts/BossController.cs): `Scripts/BossScripts/BossController.cs`

### Folder Editor

- [Folder settings](https://github.com/3xtomorrow/the-last-scoop/blob/main/BetterFolders/Editor/FolderColorSettings.cs): `BetterFolders/Editor/FolderColorSettings.cs`
- [Folder styling](https://github.com/3xtomorrow/the-last-scoop/blob/main/BetterFolders/Editor/FolderColors.cs): `BetterFolders/Editor/FolderColors.cs`
- [Folder edit window](https://github.com/3xtomorrow/the-last-scoop/blob/main/BetterFolders/Editor/FolderColorEditWindow.cs): `BetterFolders/Editor/FolderColorEditWindow.cs`
- [Settings inspector](https://github.com/3xtomorrow/the-last-scoop/blob/main/BetterFolders/Editor/FolderColorSettingsEditor.cs): `BetterFolders/Editor/FolderColorSettingsEditor.cs`

## Connections

- Interaction raycast → Input actions: checks interaction (evidence: `Scripts/PlayerScripts/PlayerRaycast.cs`)
- Interaction raycast → Cone and scoops: changes cone (evidence: `Scripts/PlayerScripts/PlayerRaycast.cs`)
- Interaction raycast → Empty trash: invokes emptying (evidence: `Scripts/PlayerScripts/PlayerRaycast.cs`)
- Interaction raycast → Door control: opens door (evidence: `Scripts/PlayerScripts/PlayerRaycast.cs`)
- Interaction raycast → Clock in: clocks in (evidence: `Scripts/PlayerScripts/PlayerRaycast.cs`)
- Interaction raycast → Task sheet: opens sheet (evidence: `Scripts/PlayerScripts/PlayerRaycast.cs`)
- Interaction raycast → Power switch: toggles power (evidence: `Scripts/PlayerScripts/PlayerRaycast.cs`)
- Empty trash → Cone and scoops: uses cone state (evidence: `Scripts/EmptyTrash.cs`)
- Clock in → Task sheet: references (evidence: `Scripts/ClockIn.cs`)
- Clock in → Objective tracking: advances objective (evidence: `Scripts/ClockIn.cs`)
- Movement control → Player movement: enables or disables (evidence: `Scripts/Managers/MovementManager.cs`)
- Movement control → Camera movement: enables or disables (evidence: `Scripts/Managers/MovementManager.cs`)
- Movement control → Footsteps: controls playback (evidence: `Scripts/Managers/MovementManager.cs`)
- Movement control → Camera bob: controls animation (evidence: `Scripts/Managers/MovementManager.cs`)
- Camera bob → Input actions: reads movement (evidence: `Scripts/PlayerScripts/CamAnimationManager.cs`)
- Footsteps → Input actions: reads input (evidence: `Scripts/Managers/FootstepsManager.cs`)
- Footsteps → Camera bob: uses animation (evidence: `Scripts/Managers/FootstepsManager.cs`)
- Dialogue presentation → Dialogue data: presents data (evidence: `Scripts/Managers/DialogueManager.cs`)
- Dialogue presentation → Movement control: enables movement (evidence: `Scripts/Managers/DialogueManager.cs`)
- Manager jumpscare → Dialogue presentation: starts dialogue (evidence: `Scripts/JumpscareScripts/ManagerJumpscare.cs`)
- Manager jumpscare → Objective tracking: advances objective (evidence: `Scripts/JumpscareScripts/ManagerJumpscare.cs`)
- Manager jumpscare → Movement control: disables movement (evidence: `Scripts/JumpscareScripts/ManagerJumpscare.cs`)
- Task sheet → Boss controller: positions boss (evidence: `Scripts/TaskSheet.cs`)
- Task sheet → Movement control: disables or enables (evidence: `Scripts/TaskSheet.cs`)
- Task sheet → Objective tracking: advances objective (evidence: `Scripts/TaskSheet.cs`)
- Task sheet → Boss controller: referenced by clock-in flow (evidence: `Scripts/TaskSheet.cs`)
- Folder styling → Folder settings: loads settings (evidence: `BetterFolders/Editor/FolderColors.cs`)
- Folder styling → Folder edit window: opens editor (evidence: `BetterFolders/Editor/FolderColors.cs`)
- Settings inspector → Folder settings: edits settings (evidence: `BetterFolders/Editor/FolderColorSettingsEditor.cs`)
- Settings inspector → Folder styling: clears cache (evidence: `BetterFolders/Editor/FolderColorSettingsEditor.cs`)
- Folder edit window → Folder settings: uses settings (evidence: `BetterFolders/Editor/FolderColorEditWindow.cs`)
