This skill should be used when the user asks about "namespaces", "singleton", "TileManager", "GameManager", "TokenManager", "InputManager", "data flow", "class responsibilities", "layers", "folder structure", "code organization", "design patterns", "ScriptableObject", "databases", or discusses Zero-Day Attack codebase architecture and patterns.
Explains Zero-Day Attack Unity architecture, namespaces, singletons, and data flow patterns.
/plugin marketplace add jwmyers/vui-vux-plugins/plugin install zero-day-dev@vui-vuxThis skill inherits all available tools. When active, it can use any tool Claude has access to.
Expert knowledge of the Zero-Day Attack Unity codebase structure, design patterns, and architectural decisions.
The codebase organizes into distinct layers:
| Layer | Location | Purpose |
|---|---|---|
| Data | Core/Data/ | Immutable data structures, ScriptableObjects |
| State | Core/State/ | Mutable runtime game state |
| Logic | Core/GameManager.cs | Game rules, orchestration |
| View | View/ | Visual representation, Unity components |
| Input | Input/ | Board SDK abstraction |
| Config | Config/ | Static layout constants |
Only InputManager.cs imports Board.Input namespace. This:
Core systems use singleton pattern with Instance property:
GameManager.Instance // Game state and logic
TileManager.Instance // Tile spawning, positioning
TokenManager.Instance // Token spawning, input handling
InputManager.Instance // Board SDK event broadcasting
Game data stored in ScriptableObjects:
TileDatabase - 25 tile definitions with sprites and pathsTokenDatabase - 6 token definitions with sprites and glyph IDs| Namespace | Purpose |
|---|---|
ZeroDayAttack.Config | Layout constants (LayoutConfig) |
ZeroDayAttack.Core | Game orchestration (GameManager) |
ZeroDayAttack.Core.Data | Data structures, enums, databases |
ZeroDayAttack.Core.State | Runtime state classes |
ZeroDayAttack.View | Visual components, managers |
ZeroDayAttack.Input | Board SDK wrapper |
ZeroDayAttack.Diagnostics | Debug utilities |
ZeroDayAttack.Editor | Editor-only tools |
When creating new scripts:
namespace ZeroDayAttack.View { }ZeroDayAttack.EditorAssets/Scripts/
├── Config/
│ └── LayoutConfig.cs # Static layout constants
│
├── Core/
│ ├── GameManager.cs # Game orchestrator singleton
│ ├── Data/ # Immutable data structures
│ │ ├── Enums.cs # EdgeNode, PathColor, Player, etc.
│ │ ├── PathSegment.cs # Path connection between nodes
│ │ ├── TileData.cs # Tile definition
│ │ ├── TileDatabase.cs # ScriptableObject: all tiles
│ │ ├── TokenData.cs # Token definition
│ │ └── TokenDatabase.cs # ScriptableObject: all tokens
│ └── State/ # Mutable runtime state
│ ├── BoardState.cs # Grid, reserves, deck
│ ├── GameState.cs # Phase, current player
│ └── TokenState.cs # Token position, ownership
│
├── View/ # Visual components
│ ├── TileManager.cs # Singleton: tile spawning
│ ├── TileView.cs # Individual tile visual
│ ├── TokenManager.cs # Singleton: token spawning
│ ├── TokenView.cs # Individual token visual
│ ├── BackgroundRenderer.cs # Board background
│ ├── CameraController.cs # Camera setup
│ └── GridOverlayRenderer.cs # Grid lines with glow
│
├── Input/
│ └── InputManager.cs # Board SDK wrapper (ONLY Board.Input)
│
├── Diagnostics/
│ └── SceneDiagnostic.cs # Runtime debug
│
└── Editor/
├── TileParser.cs # Menu: ZeroDayAttack > Parse Tiles
└── TokenParser.cs # Menu: ZeroDayAttack > Parse Tokens
| Class | Responsibility |
|---|---|
GameManager | Initialize game, manage phases, orchestrate state. No direct visuals. |
GameState | Hold BoardState, TokenState[], current player, phase, actions |
BoardState | 5×5 grid (TileData[,]), reserves, deck, discard |
TokenState | Token identity, position (tile, node), physical tracking |
| Class | Responsibility |
|---|---|
TileData | Define tile: ID, sprite, segments, rotation, grid position |
TokenData | Define token: ID, sprite, owner, type, glyph ID |
PathSegment | Connect two EdgeNode values with PathColor |
TileDatabase | ScriptableObject with List<TileData> |
TokenDatabase | ScriptableObject with 6 token slots |
| Class | Responsibility |
|---|---|
TileManager | Spawn tiles, grid-to-world conversion, hold TileDatabase |
TokenManager | Spawn tokens, handle glyph events, snap to nodes |
TileView | MonoBehaviour on tile GameObjects, manage sprite |
TokenView | MonoBehaviour on token GameObjects, manage position |
BackgroundRenderer | Render board background |
GridOverlayRenderer | Draw 5×5 grid with glow effect |
CameraController | Configure orthographic camera |
| Class | Responsibility |
|---|---|
InputManager | Poll BoardInput, fire events, coordinate conversion |
Board Hardware (touch/glyph)
│
▼
InputManager ← Only Board.Input import
│
┌────┴────┐
▼ ▼
TokenManager (Future: Tile touch)
│
▼
GameManager ← Game logic decisions
│
┌───┴───┐
▼ ▼
GameState TileManager
BoardState (spawn tiles)
TokenState
GameplayScene
├── MainCamera [CameraController]
├── GlobalLight2D
├── GameManager [GameManager]
├── TileManager [TileManager]
├── TokenManager [TokenManager]
├── InputManager [InputManager]
├── BackgroundRenderer [BackgroundRenderer]
├── GridOverlayRenderer [GridOverlayRenderer]
├── Tiles (spawned at runtime)
└── Tokens (spawned at runtime)
// Grid to World (via LayoutConfig)
float x = LayoutConfig.GridLeft + (gridX * LayoutConfig.TileSize) + (LayoutConfig.TileSize / 2f);
float y = LayoutConfig.GridBottom + (gridY * LayoutConfig.TileSize) + (LayoutConfig.TileSize / 2f);
Follow singleton pattern:
public class NewManager : MonoBehaviour
{
public static NewManager Instance { get; private set; }
void Awake()
{
if (Instance != null) { Destroy(gameObject); return; }
Instance = this;
}
}
For immutable data in Core/Data/:
namespace ZeroDayAttack.Core.Data
{
[System.Serializable]
public class NewData
{
public string Id;
// Serialized fields...
}
}
For visual components in View/:
namespace ZeroDayAttack.View
{
public class NewView : MonoBehaviour
{
[SerializeField] private SpriteRenderer spriteRenderer;
// View logic...
}
}
For comprehensive architecture details:
When modifying architecture, review:
LayoutConfig.cs - All layout constantsGameManager.cs - Game orchestrationTileManager.cs - Tile coordinate conversionThis skill should be used when the user asks to "create a slash command", "add a command", "write a custom command", "define command arguments", "use command frontmatter", "organize commands", "create command with file references", "interactive command", "use AskUserQuestion in command", or needs guidance on slash command structure, YAML frontmatter fields, dynamic arguments, bash execution in commands, user interaction patterns, or command development best practices for Claude Code.
This skill should be used when the user asks to "create an agent", "add an agent", "write a subagent", "agent frontmatter", "when to use description", "agent examples", "agent tools", "agent colors", "autonomous agent", or needs guidance on agent structure, system prompts, triggering conditions, or agent development best practices for Claude Code plugins.
This skill should be used when the user asks to "create a hook", "add a PreToolUse/PostToolUse/Stop hook", "validate tool use", "implement prompt-based hooks", "use ${CLAUDE_PLUGIN_ROOT}", "set up event-driven automation", "block dangerous commands", or mentions hook events (PreToolUse, PostToolUse, Stop, SubagentStop, SessionStart, SessionEnd, UserPromptSubmit, PreCompact, Notification). Provides comprehensive guidance for creating and implementing Claude Code plugin hooks with focus on advanced prompt-based hooks API.