tools architecture

Guide for tools architecture

Architecture: Legends Tools Suite

🎯 Overview

We will implement two distinct tools sharing a common core library. This ensures code reuse while tailoring the UX for specific roles (Artists vs. Level Designers).

🏗️ Architecture

1. Shared Core (loh-editor-core)

Location: loh-libs/rust/editor-core/ Purpose: Common UI widgets, camera controls, asset loading, and manipulation logic. Components:
  • AssetBrowser: Universal GLB/Texture viewer with drag-and-drop.
  • Gizmos: Transform controls (Translate, Rotate, Scale).
  • CameraRig: RTS-style and Free-roam camera logic.
  • Save/Load: JSON serialization for scene data.

2. Storyboard Tool (bin/legends_storyboard)

Target Audience: 3D Artists, Directors. Focus: Visuals, Sequencing, Posing. Exclusive Features:
  • Pose Puppet: FK/IK controls for character bones.
  • Timeline: Shot sequencing (Shot A -> Shot B).
  • Render Capture: High-res screenshots and "Play Blast" recording.
  • Lighting Studio: HDRI and light rig adjustments.

3. World Designer (bin/legends_world_designer)

Target Audience: Level Designers. Focus: Terrain, Zones, Gameplay placement. Exclusive Features:
  • Terrain Sculpting: Heightmap brushes.
  • NavMesh Generation: Walkable/blocked tile flagging.
  • Zone Painter: PVP safe/danger zones.
  • Entity Spawners: NPC and Item spawn points.

🛠️ Implementation Plan

Phase 1: The Core (Dependencies)

  • Create loh-editor-core crate.
  • Move existing cam_orbit.rs and camera.rs logic here.
  • Implement bevy_egui base layout.

Phase 2: Storyboard Tool (Priority for Artists)

  • Create src/bin/storyboard.rs.
  • Implement Asset Browser (using editor-core).
  • Implement Timeline UI.

Phase 3: World Designer

  • Create src/bin/world_designer.rs.
  • Implement Tile Painter (using editor-core grid).

📊 Comparison

FeatureStoryboard ToolWorld Designer
Primary ViewCinematic CameraOrthographic / Top-Down
SelectionBones / PropsTiles / Zones
OutputImages / VideoServer Map Data (.json)
LogicVisual OnlyLogic Aware (Collision, Nav)