mirror of
https://github.com/storytold/storyteller-bevy.git
synced 2026-10-17 00:13:17 +00:00
Allow to block drag logic for value changing
This commit is contained in:
@@ -136,19 +136,28 @@ function create_float_input(element : HTMLInputElement) {
|
||||
let value = 0; // Начальное значение
|
||||
let isMouseDown = false;
|
||||
let startX = 0;
|
||||
let isSelected = false;
|
||||
let max_dx = 0;
|
||||
|
||||
//if focus is lost set isSelected to false
|
||||
element.addEventListener('focusout', () => {
|
||||
isSelected = false;
|
||||
});
|
||||
|
||||
element.addEventListener('mousedown', (e: MouseEvent) => {
|
||||
isMouseDown = true;
|
||||
startX = e.clientX;
|
||||
max_dx = 0;
|
||||
value = parseInt(element.value, 10);
|
||||
document.addEventListener('mousemove', onMouseMove);
|
||||
document.addEventListener('mouseup', onMouseUp);
|
||||
});
|
||||
|
||||
const onMouseMove = (e: MouseEvent) => {
|
||||
if (isMouseDown) {
|
||||
if (isMouseDown && !isSelected) {
|
||||
const dx = e.clientX - startX;
|
||||
startX = e.clientX;
|
||||
max_dx = Math.max(max_dx, dx);
|
||||
var float_value = parseFloat(element.value);
|
||||
if (float_value == null) {
|
||||
return;
|
||||
@@ -165,6 +174,9 @@ function create_float_input(element : HTMLInputElement) {
|
||||
|
||||
const onMouseUp = () => {
|
||||
isMouseDown = false;
|
||||
if (Math.abs(max_dx) < 1) {
|
||||
isSelected = true;
|
||||
}
|
||||
document.removeEventListener('mousemove', onMouseMove);
|
||||
document.removeEventListener('mouseup', onMouseUp);
|
||||
};
|
||||
|
||||
@@ -286,7 +286,8 @@ fn check_predefined(r : &dyn Reflect, onchange : ReflectChange) -> Option<Elemen
|
||||
onchange: Some(EntityChangeExecutor::new_boxed(
|
||||
onchange.entity_id,
|
||||
|world : &mut World, entity, value : String| {
|
||||
let Some(value) = value.parse::<f32>().ok() else { return; };
|
||||
let Some(mut value) = value.parse::<f32>().ok() else { return; };
|
||||
if value == -180.0 { value = 180.0; }
|
||||
let value = value.to_radians();
|
||||
let mut e = world.get_entity_mut(entity).unwrap();
|
||||
|
||||
@@ -312,6 +313,7 @@ fn check_predefined(r : &dyn Reflect, onchange : ReflectChange) -> Option<Elemen
|
||||
onchange.entity_id,
|
||||
|world : &mut World, entity, value : String| {
|
||||
let Some(mut value) = value.parse::<f32>().ok() else { return; };
|
||||
if value == -180.0 { value = 180.0; }
|
||||
let mut e = world.get_entity_mut(entity).unwrap();
|
||||
let mut transform = e.get_mut::<Transform>().unwrap();
|
||||
if transform.is_changed() {
|
||||
@@ -335,7 +337,8 @@ fn check_predefined(r : &dyn Reflect, onchange : ReflectChange) -> Option<Elemen
|
||||
onchange: Some(EntityChangeExecutor::new_boxed(
|
||||
onchange.entity_id,
|
||||
|world : &mut World, entity, value : String| {
|
||||
let Some(value) = value.parse::<f32>().ok() else { return; };
|
||||
let Some(mut value) = value.parse::<f32>().ok() else { return; };
|
||||
if value == -180.0 { value = 180.0; }
|
||||
let value = value.to_radians();
|
||||
let mut e = world.get_entity_mut(entity).unwrap();
|
||||
let mut transform = e.get_mut::<Transform>().unwrap();
|
||||
|
||||
Reference in New Issue
Block a user