use nightshade::prelude::*;
use crate::appearance::{set_color, set_unlit};
use crate::picking::{clicked_entity, entity_under_cursor};
use crate::placement::{set_position, set_rotation, set_scale};
use crate::scene::{set_parent, spawn_group, spawn_plane};
use crate::text::spawn_label;
const FACE_FORWARD: f32 = -std::f32::consts::FRAC_PI_2;
fn oriented_quad(
world: &mut World,
parent: Entity,
x: f32,
y: f32,
z: f32,
size: Vec2,
color: [f32; 4],
) -> Entity {
let quad = spawn_plane(world, Vec3::zeros());
set_parent(world, quad, Some(parent));
set_position(world, quad, vec3(x, y, z));
set_rotation(world, quad, Vec3::x(), FACE_FORWARD);
set_scale(world, quad, vec3(size.x, 1.0, size.y));
set_color(world, quad, color);
set_unlit(world, quad, true);
quad
}
pub fn spawn_world_panel(
world: &mut World,
position: Vec3,
width: f32,
height: f32,
color: [f32; 4],
) -> Entity {
let panel = spawn_group(world, position);
oriented_quad(world, panel, 0.0, 0.0, 0.0, vec2(width, height), color);
panel
}
pub fn world_panel_button(
world: &mut World,
panel: Entity,
x: f32,
y: f32,
width: f32,
height: f32,
color: [f32; 4],
) -> Entity {
oriented_quad(world, panel, x, y, 0.01, vec2(width, height), color)
}
pub fn world_panel_label(world: &mut World, panel: Entity, text: &str, x: f32, y: f32) -> Entity {
let label = spawn_label(world, text, Vec3::zeros());
set_parent(world, label, Some(panel));
set_position(world, label, vec3(x, y, 0.02));
label
}
pub fn world_button_clicked(world: &World, button: Entity) -> bool {
clicked_entity(world) == Some(button)
}
pub fn world_button_hovered(world: &World, button: Entity) -> bool {
entity_under_cursor(world) == Some(button)
}