Skip to content
Snippets Groups Projects
Commit bb7c2132 authored by sam edelsten's avatar sam edelsten
Browse files

move click fns to userland

parent adcc85e8
No related branches found
No related tags found
No related merge requests found
use bevy::prelude::*;
use bevy::{prelude::*, window::PrimaryWindow};
use bevy_cosmic_edit::*;
fn setup(mut commands: Commands) {
......@@ -36,7 +36,7 @@ fn setup(mut commands: Commands) {
commands.insert_resource(Focus(Some(sprite_editor)));
}
pub fn bevy_color_to_cosmic(color: bevy::prelude::Color) -> CosmicColor {
fn bevy_color_to_cosmic(color: bevy::prelude::Color) -> CosmicColor {
cosmic_text::Color::rgba(
(color.r() * 255.) as u8,
(color.g() * 255.) as u8,
......@@ -45,6 +45,53 @@ pub fn bevy_color_to_cosmic(color: bevy::prelude::Color) -> CosmicColor {
)
}
fn change_active_editor_ui(
mut commands: Commands,
mut interaction_query: Query<
(&Interaction, Entity),
(
Changed<Interaction>,
(With<CosmicEditor>, Without<ReadOnly>),
),
>,
) {
for (interaction, entity) in interaction_query.iter_mut() {
if let Interaction::Pressed = interaction {
commands.insert_resource(Focus(Some(entity)));
}
}
}
fn change_active_editor_sprite(
mut commands: Commands,
windows: Query<&Window, With<PrimaryWindow>>,
buttons: Res<Input<MouseButton>>,
mut cosmic_edit_query: Query<
(&mut Sprite, &GlobalTransform, Entity),
(With<CosmicEditor>, Without<ReadOnly>),
>,
camera_q: Query<(&Camera, &GlobalTransform)>,
) {
let window = windows.single();
let (camera, camera_transform) = camera_q.single();
if buttons.just_pressed(MouseButton::Left) {
for (sprite, node_transform, entity) in &mut cosmic_edit_query.iter_mut() {
let size = sprite.custom_size.unwrap_or(Vec2::new(1., 1.));
let x_min = node_transform.affine().translation.x - size.x / 2.;
let y_min = node_transform.affine().translation.y - size.y / 2.;
let x_max = node_transform.affine().translation.x + size.x / 2.;
let y_max = node_transform.affine().translation.y + size.y / 2.;
if let Some(pos) = window.cursor_position() {
if let Some(pos) = camera.viewport_to_world_2d(camera_transform, pos) {
if x_min < pos.x && pos.x < x_max && y_min < pos.y && pos.y < y_max {
commands.insert_resource(Focus(Some(entity)))
};
}
};
}
}
}
fn main() {
App::new()
.add_plugins(DefaultPlugins)
......
......@@ -92,8 +92,6 @@ fn main() {
.add_plugins(DefaultPlugins)
.add_plugins(CosmicEditPlugin::default())
.add_systems(Startup, setup)
.add_systems(Update, change_active_editor_ui)
.add_systems(Update, change_active_editor_sprite)
.add_systems(Update, text_swapper)
.run();
}
......@@ -258,7 +258,7 @@ fn setup(mut commands: Commands, windows: Query<&Window, With<PrimaryWindow>>) {
commands.insert_resource(Focus(id));
}
pub fn bevy_color_to_cosmic(color: bevy::prelude::Color) -> CosmicColor {
fn bevy_color_to_cosmic(color: bevy::prelude::Color) -> CosmicColor {
cosmic_text::Color::rgba(
(color.r() * 255.) as u8,
(color.g() * 255.) as u8,
......@@ -267,6 +267,23 @@ pub fn bevy_color_to_cosmic(color: bevy::prelude::Color) -> CosmicColor {
)
}
fn change_active_editor_ui(
mut commands: Commands,
mut interaction_query: Query<
(&Interaction, Entity),
(
Changed<Interaction>,
(With<CosmicEditor>, Without<ReadOnly>),
),
>,
) {
for (interaction, entity) in interaction_query.iter_mut() {
if let Interaction::Pressed = interaction {
commands.insert_resource(Focus(Some(entity)));
}
}
}
fn main() {
let font_config = CosmicFontConfig {
fonts_dir_path: None,
......@@ -279,6 +296,5 @@ fn main() {
.add_plugins(CosmicEditPlugin { font_config })
.add_systems(Startup, setup)
.add_systems(Update, change_active_editor_ui)
.add_systems(Update, change_active_editor_sprite)
.run();
}
......@@ -40,7 +40,5 @@ fn main() {
.add_plugins(DefaultPlugins)
.add_plugins(CosmicEditPlugin::default())
.add_systems(Startup, setup)
.add_systems(Update, change_active_editor_ui)
.add_systems(Update, change_active_editor_sprite)
.run();
}
......@@ -65,7 +65,7 @@ fn setup(mut commands: Commands, windows: Query<&Window, With<PrimaryWindow>>) {
commands.spawn(cosmic_edit_2);
}
pub fn bevy_color_to_cosmic(color: bevy::prelude::Color) -> CosmicColor {
fn bevy_color_to_cosmic(color: bevy::prelude::Color) -> CosmicColor {
cosmic_text::Color::rgba(
(color.r() * 255.) as u8,
(color.g() * 255.) as u8,
......@@ -74,6 +74,36 @@ pub fn bevy_color_to_cosmic(color: bevy::prelude::Color) -> CosmicColor {
)
}
fn change_active_editor_sprite(
mut commands: Commands,
windows: Query<&Window, With<PrimaryWindow>>,
buttons: Res<Input<MouseButton>>,
mut cosmic_edit_query: Query<
(&mut Sprite, &GlobalTransform, Entity),
(With<CosmicEditor>, Without<ReadOnly>),
>,
camera_q: Query<(&Camera, &GlobalTransform)>,
) {
let window = windows.single();
let (camera, camera_transform) = camera_q.single();
if buttons.just_pressed(MouseButton::Left) {
for (sprite, node_transform, entity) in &mut cosmic_edit_query.iter_mut() {
let size = sprite.custom_size.unwrap_or(Vec2::new(1., 1.));
let x_min = node_transform.affine().translation.x - size.x / 2.;
let y_min = node_transform.affine().translation.y - size.y / 2.;
let x_max = node_transform.affine().translation.x + size.x / 2.;
let y_max = node_transform.affine().translation.y + size.y / 2.;
if let Some(pos) = window.cursor_position() {
if let Some(pos) = camera.viewport_to_world_2d(camera_transform, pos) {
if x_min < pos.x && pos.x < x_max && y_min < pos.y && pos.y < y_max {
commands.insert_resource(Focus(Some(entity)))
};
}
};
}
}
}
fn main() {
let font_bytes: &[u8] = include_bytes!("../assets/fonts/VictorMono-Regular.ttf");
let font_config = CosmicFontConfig {
......@@ -86,7 +116,6 @@ fn main() {
.add_plugins(DefaultPlugins)
.add_plugins(CosmicEditPlugin { font_config })
.add_systems(Startup, setup)
.add_systems(Update, change_active_editor_ui)
.add_systems(Update, change_active_editor_sprite)
.run();
}
......@@ -43,7 +43,5 @@ fn main() {
.add_plugins(DefaultPlugins)
.add_plugins(CosmicEditPlugin::default())
.add_systems(Startup, setup)
.add_systems(Update, change_active_editor_ui)
.add_systems(Update, change_active_editor_sprite)
.run();
}
#![allow(clippy::type_complexity)]
use std::{collections::VecDeque, path::PathBuf, time::Duration};
#[path = "utils.rs"]
pub mod utils;
pub use utils::*;
use bevy::{
asset::HandleId,
......@@ -1508,6 +1505,19 @@ fn draw_pixel(
buffer[offset + 3] = (current >> 24) as u8;
}
#[cfg(target_arch = "wasm32")]
pub fn get_timestamp() -> f64 {
js_sys::Date::now()
}
#[cfg(not(target_arch = "wasm32"))]
pub fn get_timestamp() -> f64 {
use std::time::SystemTime;
use std::time::UNIX_EPOCH;
let duration = SystemTime::now().duration_since(UNIX_EPOCH).unwrap();
duration.as_millis() as f64
}
#[cfg(test)]
mod tests {
use crate::*;
......
#[cfg(target_arch = "wasm32")]
pub fn get_timestamp() -> f64 {
js_sys::Date::now()
}
#[cfg(not(target_arch = "wasm32"))]
pub fn get_timestamp() -> f64 {
use std::time::SystemTime;
use std::time::UNIX_EPOCH;
let duration = SystemTime::now().duration_since(UNIX_EPOCH).unwrap();
duration.as_millis() as f64
}
use crate::{CosmicEditor, Focus, ReadOnly};
use bevy::{prelude::*, ui::Interaction, window::PrimaryWindow};
// util fns for examples
//
pub fn change_active_editor_ui(
mut commands: Commands,
mut interaction_query: Query<
(&Interaction, Entity),
(
Changed<Interaction>,
(With<CosmicEditor>, Without<ReadOnly>),
),
>,
) {
for (interaction, entity) in interaction_query.iter_mut() {
if let Interaction::Pressed = interaction {
commands.insert_resource(Focus(Some(entity)));
}
}
}
pub fn change_active_editor_sprite(
mut commands: Commands,
windows: Query<&Window, With<PrimaryWindow>>,
buttons: Res<Input<MouseButton>>,
mut cosmic_edit_query: Query<
(&mut Sprite, &GlobalTransform, Entity),
(With<CosmicEditor>, Without<ReadOnly>),
>,
camera_q: Query<(&Camera, &GlobalTransform)>,
) {
let window = windows.single();
let (camera, camera_transform) = camera_q.single();
if buttons.just_pressed(MouseButton::Left) {
for (sprite, node_transform, entity) in &mut cosmic_edit_query.iter_mut() {
let size = sprite.custom_size.unwrap_or(Vec2::new(1., 1.));
let x_min = node_transform.affine().translation.x - size.x / 2.;
let y_min = node_transform.affine().translation.y - size.y / 2.;
let x_max = node_transform.affine().translation.x + size.x / 2.;
let y_max = node_transform.affine().translation.y + size.y / 2.;
if let Some(pos) = window.cursor_position() {
if let Some(pos) = camera.viewport_to_world_2d(camera_transform, pos) {
if x_min < pos.x && pos.x < x_max && y_min < pos.y && pos.y < y_max {
commands.insert_resource(Focus(Some(entity)))
};
}
};
}
}
}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment