use crate::ecs::world::World;
use crate::mcp::McpResponse;
pub(crate) fn mcp_spawn_3d_text(
world: &mut World,
request: crate::mcp::Spawn3dTextRequest,
) -> McpResponse {
use crate::ecs::text::components::Text;
use crate::ecs::transform::components::LocalTransform;
use crate::ecs::world::{GLOBAL_TRANSFORM, LOCAL_TRANSFORM, LOCAL_TRANSFORM_DIRTY, NAME, TEXT};
let font_size = request.font_size.unwrap_or(32.0);
let color = request.color.unwrap_or([1.0, 1.0, 1.0, 1.0]);
let billboard = request.billboard.unwrap_or(false);
let text_index = world.resources.text_cache.add_text(&request.text);
let entity = world
.spawn_entities(
NAME | LOCAL_TRANSFORM | LOCAL_TRANSFORM_DIRTY | GLOBAL_TRANSFORM | TEXT,
1,
)
.into_iter()
.next()
.unwrap();
let pos = nalgebra_glm::Vec3::new(
request.position[0],
request.position[1],
request.position[2],
);
world
.core
.set_local_transform(entity, LocalTransform::from_translation(pos));
let mut text_component = Text::new(text_index);
text_component.billboard = billboard;
text_component.properties.font_size = font_size;
text_component.properties.color =
nalgebra_glm::Vec4::new(color[0], color[1], color[2], color[3]);
world.core.set_text(entity, text_component);
world.core.set_name(
entity,
crate::ecs::name::components::Name(request.name.clone()),
);
world
.resources
.entity_names
.insert(request.name.clone(), entity);
McpResponse::Success(format!("Spawned 3D text '{}'", request.name))
}