Module rusty_spine::controller

source ·
Expand description

Provides SkeletonController, a helper struct for updating and drawing Spine skeletons.

use std::sync::Arc;

use rusty_spine::{controller::*, *};

// Load and initialize the atlas and skeleton
let atlas_path = "assets/spineboy/export/spineboy.atlas";
let json_path = "assets/spineboy/export/spineboy-pro.json";
let atlas = Arc::new(Atlas::new_from_file(atlas_path).unwrap());
let skeleton_json = SkeletonJson::new(atlas);
let skeleton_data = Arc::new(skeleton_json.read_skeleton_data_file(json_path).unwrap());
let animation_state_data = Arc::new(AnimationStateData::new(skeleton_data.clone()));

// Create the controller
let mut skeleton_controller =
    SkeletonController::new(skeleton_data.clone(), animation_state_data);

// Update for one frame
skeleton_controller.update(0.016, Physics::Update);

// Get renderable mesh data
// Note: if slot_index is not important, use the much faster
// `combined_renderables()` method instead
let renderables = skeleton_controller.renderables();
println!("Skeleton:");
println!("");
println!("  Atlas: {}", atlas_path);
println!("  JSON: {}", json_path);
println!("  Version: {}", skeleton_data.version().unwrap_or("??"));
println!("  Hash: {}", skeleton_data.hash());
println!("");
println!("Renderables:");
println!("");
for renderable in renderables.iter() {
    let slot = skeleton_controller
        .skeleton
        .slot_at_index(renderable.slot_index)
        .unwrap();
    println!("  {}", slot.data().name());
    println!("    {} Vertices / UVs", renderable.vertices.len());
    println!("    {} Indices", renderable.indices.len());
    println!("    {:?} Blend Mode", renderable.blend_mode);
    println!("    {:?}", renderable.color);
    println!(
        "    {}",
        if renderable.premultiplied_alpha {
            "Premultiplied Alpha"
        } else {
            "No Premultiplied Alpha"
        }
    );
    println!("");
}

Structs§