gioser

tawasuyu/llimphi

Sovereign retained-mode GPU UI framework in Rust (wgpu+vello+taffy+parley), Elm loop, 40+ widgets.

Rust 229TOML 101Markdown 82Shell 24052 Definiciones

⎇ main llimphi-voxel-studio/src/main.rs Rust · 118 líneas · 4.2 KB Historia Quién tocó qué crudo

chore: refresco desde el monorepo — 132 miembros, 79 widgets, la galería vuelve y licencia dual d8edd9a9c · Sergio ·

1//! # llimphi-voxel-studio — el creador de mundos, con interfaz
2//!
3//! Editor por **niveles de composición**: Leyes → Materiales → Seres → Biomas →
4//! Mundos → Escenas. Cada nivel tiene su lista de items **creables, editables,
5//! renombrables, borrables y duplicables**, su editor a la derecha y (donde aplica)
6//! preview 3D en vivo. La jerarquía vive en el [`Project`] agnóstico de
7//! `llimphi-voxel`; esta app sólo la pinta.
8//!
9//! ```bash
10//! cargo run -p llimphi-voxel-studio --release            # ventana interactiva
11//! cargo run -p llimphi-voxel-studio --release -- --shot  # PNG headless a /tmp
12//! ```
13
14use std::sync::{Arc, Mutex};
15use std::time::Duration;
16
17use llimphi_3d::glam::{Mat4, Vec3};
18use llimphi_3d::{push_cube, Atmosphere, Camera3d, VoxelGrid};
19use llimphi_icons::{icon_view, Icon};
20use llimphi_theme::Theme;
21use llimphi_ui::llimphi_layout::taffy::prelude::{
22    auto, length, percent, AlignItems, Dimension, FlexDirection, Position, Size, Style,
23};
24use llimphi_ui::llimphi_raster::peniko::Color;
25use llimphi_ui::{
26    App, DragPhase, Handle, Key, KeyEvent, KeyState, Modifiers, NamedKey, View, WheelDelta,
27};
28use llimphi_voxel::{
29    forward_h, hex_corto, right_h, window_origin_for_cast, world_dim, ActorKeySpec, ActorScript,
30    ActorSpec, Age, BinOp, Bioma, Documento, Historia, Player, Suceso, TipoSuceso,
31    BiomaPalette, CharSpec, Clip, FieldDef, FieldEngine, Forma, Impulso, LeyKind, LeyUso, MatRole,
32    Material, MaterialDef, Mundo, MundoRender, ParamDef, Primitiva, Program, Project, Reduce,
33    SceneSpec, ShotKind, ShotSpec, UnOp, PREVIEW_DIM_XZ,
34    Mineral, MineralUso, Mueble, Interior, Cutaway, CasaTipo, CasaUso, PuebloTipo,
35    Bicho, BichoUso, Cielo, Decorado, Peinado, Sombrero, Utileria, UtileriaSpec,
36};
37use pixel_verbo_core::Proveedor;
38use pixel_verbo_daemon::ClienteBloqueante;
39use llimphi_widget_button::{button_view, ButtonPalette};
40use llimphi_widget_rag_sidebar::{
41    rag_multiselect_view, rag_sidebar_view, RagOptions, RagSidebarMsg, RagSidebarPalette,
42    RagSidebarState, RagSidebarView, RagSide, RagTooth,
43};
44use llimphi_widget_slider::{slider_view, SliderPalette};
45use llimphi_clipboard::SystemClipboard;
46use llimphi_widget_text_input::{
47    text_input_view_full, TextInputEvent, TextInputPalette, TextInputState,
48};
49use llimphi_widget_nodegraph::{nodegraph_view_ex, NodeId, NodegraphMetrics, NodegraphPalette, PinIdx};
50use llimphi_image::{from_rgba8, Image};
51use graph::{EqGraph, NodeOp};
52
53mod ai;
54mod graph;
55mod mapa_import;
56// El preview 3D y el bucle de cuadro viven en `llimphi-voxel-render`: los
57// comparte con el taller de películas (`ende`), que filma con el MISMO
58// código con el que este editor muestra. Si fueran dos, divergirían.
59pub(crate) use llimphi_voxel_render::preview;
60mod render;
61mod rostro;
62mod shot;
63mod soundtrack;
64use ai::MatRefs;
65use preview::WorldPreview;
66
67/// Dónde se guarda/carga el proyecto (relativo al cwd).
68const PROJECT_PATH: &str = "voxel-studio.ron";
69
70/// Dónde persiste la HISTORIA (DAG de versiones/alternativas).
71const HISTORY_PATH: &str = "voxel-studio.voxdag";
72/// Paso de tiempo de la reproducción de escenas (~30 fps).
73const DT: f32 = 1.0 / 30.0;
74
75/// Ancho de la tira de dientes de un sidebar unificado (px).
76const RAIL_W: f32 = 46.0;
77
78/// Lado de la grilla 2D del **laboratorio de leyes** (petri dish del nivel Leyes).
79const LAB_DIM: u32 = 64;
80/// Sub‑pasos del laboratorio por cuadro (la reacción‑difusión evoluciona lento).
81const LAB_SUBSTEPS: usize = 4;
82/// Tolerancia por canal para clasificar las celdas de un material en el mundo (el
83/// terreno lleva grano que varía el color base; el agua no). Ver [`EcuacionSim`].
84const ECUACION_TOL: i32 = 28;
85
86
87// El corte en piezas es del 26-ago: esto era un solo `main.rs` de 4.907 líneas.
88// El `update` vive aparte de su propio `impl App` porque un trait admite un solo
89// bloque por tipo: el impl delega en una línea.
90
91mod actualizar;
92mod app;
93mod arranque;
94mod editores;
95mod helpers;
96mod items;
97mod lab;
98mod lienzo;
99mod modelo;
100mod vista;
101
102#[cfg(test)]
103mod pruebas;
104
105use actualizar::*;
106use app::*;
107use arranque::main_de_verdad;
108use editores::*;
109use helpers::*;
110use items::*;
111use lab::*;
112use lienzo::*;
113use modelo::*;
114use vista::*;
115
116fn main() {
117    main_de_verdad()
118}