mirror of
https://github.com/EsotericSoftware/spine-runtimes.git
synced 2026-02-08 00:04:54 +08:00
137 lines
5.0 KiB
Markdown
137 lines
5.0 KiB
Markdown
# Project: Spine Runtimes
|
|
|
|
Multi-language runtime libraries for Spine 2D skeletal animations. The project provides core runtimes for different programming languages and integrations for various game engines and frameworks.
|
|
|
|
## Core Runtimes (Language-specific implementations)
|
|
|
|
### spine-libgdx (Java) - Reference Implementation
|
|
- **Build**: `./gradlew build`
|
|
- **Publish**: `./gradlew publishToMavenLocal`
|
|
- All other runtimes are ports of this reference implementation
|
|
|
|
### spine-cpp (C++)
|
|
- **Build**: `cmake -B build && cmake --build build`
|
|
- Port of spine-libgdx
|
|
- Uses custom RTTI (no C++ exceptions/RTTI)
|
|
|
|
### spine-csharp (C#)
|
|
- **Build**: `msbuild spine-csharp.csproj` or `dotnet build`
|
|
- Port of spine-libgdx
|
|
- Targets .NET Framework 4.8
|
|
|
|
### spine-ts (TypeScript/JavaScript)
|
|
- **Build**: `npm install && npm run build`
|
|
- **Dev**: `npm run dev`
|
|
- Port of spine-libgdx
|
|
- Core module at spine-ts/spine-core/
|
|
|
|
### spine-haxe (Haxe)
|
|
- **Build**: `./build.sh`
|
|
- Port of spine-libgdx
|
|
- Uses Haxelib package manager
|
|
|
|
### spine-c (C)
|
|
- **Build**: `cmake -B build && cmake --build build`
|
|
- Actively maintained C implementation
|
|
- Different structure from other runtimes due to C language constraints
|
|
|
|
## Integration Runtimes (Engine/Framework-specific)
|
|
|
|
### Using spine-cpp:
|
|
- **spine-cocos2dx** - Cocos2d-x engine
|
|
- **spine-flutter** - Flutter (via spine-cpp-lite C wrapper + Dart FFI)
|
|
- **spine-glfw** - GLFW/OpenGL example
|
|
- **spine-godot** - Godot Engine
|
|
- **spine-ios** - iOS native (via spine-cpp-lite C wrapper + Swift codegen)
|
|
- **spine-sdl** - SDL (optional, can use spine-c)
|
|
- **spine-sfml/cpp** - SFML C++ version
|
|
- **spine-ue** - Unreal Engine 4.27-5.4
|
|
|
|
### Using spine-csharp:
|
|
- **spine-unity** - Unity game engine
|
|
- **spine-monogame** - MonoGame framework
|
|
- **spine-xna** - XNA Framework (legacy)
|
|
|
|
### Using spine-libgdx:
|
|
- **spine-android** - Android native
|
|
|
|
### Using spine-c:
|
|
- **spine-sdl** - SDL (optional, can use spine-cpp)
|
|
- **spine-sfml/c** - SFML C version
|
|
|
|
### Using spine-core (TypeScript):
|
|
- **spine-canvas** - HTML5 Canvas
|
|
- **spine-webgl** - Direct WebGL
|
|
- **spine-phaser** - Phaser.js (v3 & v4)
|
|
- **spine-pixi** - PixiJS (v7 & v8)
|
|
- **spine-threejs** - Three.js
|
|
- **spine-player** - Embeddable web player
|
|
- **spine-canvaskit** - Skia CanvasKit
|
|
- **spine-webcomponents** - Web Components
|
|
|
|
## Special Cases
|
|
|
|
### spine-cpp-lite
|
|
- C wrapper around spine-cpp for FFI-friendly bindings
|
|
- Located in spine-cpp/spine-cpp-lite/
|
|
- Provides simplified C API consumed by:
|
|
- spine-flutter (via Dart FFI)
|
|
- spine-ios (via Swift code generation)
|
|
|
|
## Commands Summary
|
|
- **Check spine-cpp**: `cd spine-cpp && cmake -B build && cmake --build build`
|
|
- **Check spine-ts**: `cd spine-ts && npm install && npm run build`
|
|
- **Check spine-libgdx**: `cd spine-libgdx && ./gradlew build`
|
|
- **Check spine-csharp**: `cd spine-csharp && msbuild spine-csharp.csproj`
|
|
- **Check spine-c**: `cd spine-c && cmake -B build && cmake --build build`
|
|
|
|
## Development Workflow
|
|
- All changes start in spine-libgdx (reference implementation)
|
|
- Port changes to other core runtimes using git diffs
|
|
- Integration runtimes automatically inherit changes from their core runtime
|
|
|
|
## Type System Documentation
|
|
For a complete reference of all types in the Spine runtime, see [spine-runtimes-types.md](spine-runtimes-types.md).
|
|
To regenerate this documentation, run: `node docs/generate-type-hierarchy.js`
|
|
|
|
## Spine Type System Overview (from spine-libgdx)
|
|
|
|
### Core Types
|
|
- **Skeleton** - Stores the current pose for a skeleton
|
|
- **SkeletonData** - Stores setup pose and stateless data
|
|
- **Bone/BoneData** - Current pose and setup data for bones
|
|
- **Slot/SlotData** - Manages attachments and drawing order
|
|
- **Skin** - Collection of attachments keyed by slot and name
|
|
|
|
### Animation System
|
|
- **Animation** - List of timelines to animate skeleton pose
|
|
- **AnimationState** - Applies animations, handles mixing and layering
|
|
- **AnimationStateData** - Stores mix (crossfade) durations
|
|
|
|
### Attachment Types (Visual Elements)
|
|
- **Attachment** - Base class for all attachments
|
|
- **RegionAttachment** - Textured quadrilateral
|
|
- **MeshAttachment** - Textured mesh with vertices
|
|
- **BoundingBoxAttachment** - Polygon for hit detection
|
|
- **ClippingAttachment** - Polygon for clipping rendering
|
|
- **PathAttachment** - Composite Bezier curve
|
|
- **PointAttachment** - Single point with rotation
|
|
- **SkeletonAttachment** - Nested skeleton
|
|
|
|
### Constraint Types
|
|
- **IkConstraint** - Inverse kinematics (1-2 bones)
|
|
- **TransformConstraint** - Copy/mix transform from target
|
|
- **PathConstraint** - Follow path attachment
|
|
- **PhysicsConstraint** - Apply physics simulation
|
|
|
|
### Pose System (new in 4.2+)
|
|
- **Pose** - Interface for pose data
|
|
- **BoneLocal/BonePose** - Local and world bone transforms
|
|
- **Update** - Interface for updateable elements
|
|
- **PosedActive/PosedData** - Base classes for runtime/setup data
|
|
|
|
### Other Core Types
|
|
- **Event/EventData** - Animation events system
|
|
- **Sequence** - Frame-by-frame texture sequences
|
|
- **SkeletonBounds** - Hit detection utilities
|
|
- **SkeletonLoader** - Base for JSON/Binary loaders |