|
| 1 | +--- |
| 2 | +title: v0.11.0 |
| 3 | +description: Estella v0.11.0 release notes |
| 4 | +--- |
| 5 | + |
| 6 | +import { Aside } from '@astrojs/starlight/components'; |
| 7 | + |
| 8 | +<Aside type="tip"> |
| 9 | +v0.11.0 introduces a full visual StateMachine system, replaces the layout engine with Yoga, ships a custom dock system, and delivers numerous editor UX improvements. |
| 10 | +</Aside> |
| 11 | + |
| 12 | +## StateMachine: Visual State Management |
| 13 | + |
| 14 | +A complete state machine system for driving animations and game logic, with a visual node-graph editor inspired by Rive and Unity Animator. |
| 15 | + |
| 16 | +### Component & Asset |
| 17 | + |
| 18 | +The new `StateMachine` component references a `.statemachine` asset and supports `autoPlay`. Define named states (Idle, Run, Attack…), each linked to a timeline clip, and connect them with condition-based transitions using user-defined parameters (float, int, bool, trigger). |
| 19 | + |
| 20 | +### Node Graph Editor |
| 21 | + |
| 22 | +A dedicated panel provides a full node-graph editing experience: |
| 23 | + |
| 24 | +- Drag between state nodes to create transitions |
| 25 | +- Click transitions to configure conditions (parameter comparisons, exit time) |
| 26 | +- Right-click canvas to add states or set the default state |
| 27 | +- Multi-layer tabs for switching between layers |
| 28 | + |
| 29 | +### Multi-Layer, Blend State & Exit State |
| 30 | + |
| 31 | +- **Multiple layers**: each layer runs its own state graph independently with configurable weight (0.0–1.0) and blend mode (Override / Additive) |
| 32 | +- **Blend State**: blends between multiple timeline clips via a 1D blend tree — define motion entries at threshold values and the runtime interpolates between the two nearest motions |
| 33 | +- **Exit State**: a special node that signals a layer has finished, useful for one-shot animations |
| 34 | + |
| 35 | +### Timeline Integration |
| 36 | + |
| 37 | +Selecting a state in the graph opens its timeline clip in the Timeline panel for direct editing. StateMachine timeline handles are managed independently from regular timeline handles. Timeline assets are preloaded when entering Play Mode to prevent missing animation data. |
| 38 | + |
| 39 | +### Inspector |
| 40 | + |
| 41 | +Collapsible parameter and layer editors with persistent collapse state. Add, remove, and rename parameters; configure layer weights and blend modes — all inline in the Inspector. |
| 42 | + |
| 43 | +## Yoga Layout Engine |
| 44 | + |
| 45 | +The hand-written CSS Flexbox implementation has been replaced with **Yoga**, Facebook's battle-tested cross-platform layout engine (used by React Native). This brings more correct handling of edge cases in flex layout. |
| 46 | + |
| 47 | +- `FlexContainer`: flexDirection, justifyContent, alignItems, alignContent, flexWrap, gap, padding, overflow |
| 48 | +- `FlexItem`: flexGrow, flexShrink, flexBasis, alignSelf, width/height, min/max dimensions, margin, aspectRatio, position (relative/absolute), positionInsets |
| 49 | + |
| 50 | +Properties are now organized into groups (Layout, Alignment, Spacing, Sizing, Position) with human-readable display names in the Inspector. |
| 51 | + |
| 52 | +## Custom Dock System |
| 53 | + |
| 54 | +The third-party dockview library has been replaced with a fully custom dock system: |
| 55 | + |
| 56 | +- **Drag-and-drop tabs**: reorder within a dock area or move panels between areas |
| 57 | +- **Split layouts**: drop tabs on edge indicators to split horizontally or vertically |
| 58 | +- **Resizable splitters**: drag borders between dock areas |
| 59 | +- **Floating panels**: pop out any panel as a floating window |
| 60 | +- **Persistent layout**: saved to localStorage and restored on reload, with a menu option to reset to defaults |
| 61 | + |
| 62 | +## Add Component Popup |
| 63 | + |
| 64 | +The "Add Component" button now opens a redesigned anchored panel: |
| 65 | + |
| 66 | +- **Fuzzy search**: type to filter components with fuzzy matching |
| 67 | +- **Categorized list**: components organized by category (Rendering, UI, Physics, Audio, Layout, Animation, etc.) |
| 68 | +- **Keyboard navigation**: arrow keys to navigate, Enter to select |
| 69 | + |
| 70 | +## spawn(name) API |
| 71 | + |
| 72 | +- `world.spawn(name?)` creates a new entity with an optional name |
| 73 | +- `world.getEntityByName(name)` provides O(1) name-based entity lookup via an internal name index |
| 74 | +- The Hierarchy panel displays tag badges next to entity names for quick visual identification |
| 75 | + |
| 76 | +## Enhanced Selection & Gizmo Cursors |
| 77 | + |
| 78 | +- **Context-aware cursors**: move arrows show directional cursor, scale handles show resize cursor, rotate ring shows rotation cursor |
| 79 | +- **Hover highlighting**: gizmo handles highlight on hover with color feedback |
| 80 | +- **Click-through prevention**: gizmos take priority over entity selection when overlapping |
| 81 | + |
| 82 | +## Multiple Output Handlers |
| 83 | + |
| 84 | +`OutputService` now supports registering multiple output handlers via `addOutputHandler()` / `removeOutputHandler()`. Handlers are called in sequence, enabling scenarios like writing to file, sending to preview, and logging to console simultaneously. |
| 85 | + |
| 86 | +## MCP Enhancements |
| 87 | + |
| 88 | +- UI template instantiation route for creating UI hierarchies from templates |
| 89 | +- Improved screenshot capture with timeout, panel content selector, and html2canvas integration |
| 90 | +- MCP server extracted to a standalone repository as a git submodule |
| 91 | + |
| 92 | +## Bug Fixes |
| 93 | + |
| 94 | +- Fixed preview server port binding failure on Windows |
| 95 | +- Fixed MCP bridge file not created on Windows |
| 96 | +- Fixed popup and dropdown menus overflowing viewport bounds — positions are now clamped |
| 97 | +- Fixed padding editor style inconsistency with vec editor |
| 98 | +- Fixed Canvas missing UIRect when creating a new scene |
0 commit comments