mirror of
https://github.com/storytold/storyteller-bevy.git
synced 2026-10-29 09:08:58 +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 value = 0; // Начальное значение
|
||||||
let isMouseDown = false;
|
let isMouseDown = false;
|
||||||
let startX = 0;
|
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) => {
|
element.addEventListener('mousedown', (e: MouseEvent) => {
|
||||||
isMouseDown = true;
|
isMouseDown = true;
|
||||||
startX = e.clientX;
|
startX = e.clientX;
|
||||||
|
max_dx = 0;
|
||||||
value = parseInt(element.value, 10);
|
value = parseInt(element.value, 10);
|
||||||
document.addEventListener('mousemove', onMouseMove);
|
document.addEventListener('mousemove', onMouseMove);
|
||||||
document.addEventListener('mouseup', onMouseUp);
|
document.addEventListener('mouseup', onMouseUp);
|
||||||
});
|
});
|
||||||
|
|
||||||
const onMouseMove = (e: MouseEvent) => {
|
const onMouseMove = (e: MouseEvent) => {
|
||||||
if (isMouseDown) {
|
if (isMouseDown && !isSelected) {
|
||||||
const dx = e.clientX - startX;
|
const dx = e.clientX - startX;
|
||||||
startX = e.clientX;
|
startX = e.clientX;
|
||||||
|
max_dx = Math.max(max_dx, dx);
|
||||||
var float_value = parseFloat(element.value);
|
var float_value = parseFloat(element.value);
|
||||||
if (float_value == null) {
|
if (float_value == null) {
|
||||||
return;
|
return;
|
||||||
@@ -165,6 +174,9 @@ function create_float_input(element : HTMLInputElement) {
|
|||||||
|
|
||||||
const onMouseUp = () => {
|
const onMouseUp = () => {
|
||||||
isMouseDown = false;
|
isMouseDown = false;
|
||||||
|
if (Math.abs(max_dx) < 1) {
|
||||||
|
isSelected = true;
|
||||||
|
}
|
||||||
document.removeEventListener('mousemove', onMouseMove);
|
document.removeEventListener('mousemove', onMouseMove);
|
||||||
document.removeEventListener('mouseup', onMouseUp);
|
document.removeEventListener('mouseup', onMouseUp);
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -286,7 +286,8 @@ fn check_predefined(r : &dyn Reflect, onchange : ReflectChange) -> Option<Elemen
|
|||||||
onchange: Some(EntityChangeExecutor::new_boxed(
|
onchange: Some(EntityChangeExecutor::new_boxed(
|
||||||
onchange.entity_id,
|
onchange.entity_id,
|
||||||
|world : &mut World, entity, value : String| {
|
|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 value = value.to_radians();
|
||||||
let mut e = world.get_entity_mut(entity).unwrap();
|
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,
|
onchange.entity_id,
|
||||||
|world : &mut World, entity, value : String| {
|
|world : &mut World, entity, value : String| {
|
||||||
let Some(mut 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 mut e = world.get_entity_mut(entity).unwrap();
|
let mut e = world.get_entity_mut(entity).unwrap();
|
||||||
let mut transform = e.get_mut::<Transform>().unwrap();
|
let mut transform = e.get_mut::<Transform>().unwrap();
|
||||||
if transform.is_changed() {
|
if transform.is_changed() {
|
||||||
@@ -335,7 +337,8 @@ fn check_predefined(r : &dyn Reflect, onchange : ReflectChange) -> Option<Elemen
|
|||||||
onchange: Some(EntityChangeExecutor::new_boxed(
|
onchange: Some(EntityChangeExecutor::new_boxed(
|
||||||
onchange.entity_id,
|
onchange.entity_id,
|
||||||
|world : &mut World, entity, value : String| {
|
|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 value = value.to_radians();
|
||||||
let mut e = world.get_entity_mut(entity).unwrap();
|
let mut e = world.get_entity_mut(entity).unwrap();
|
||||||
let mut transform = e.get_mut::<Transform>().unwrap();
|
let mut transform = e.get_mut::<Transform>().unwrap();
|
||||||
|
|||||||
Reference in New Issue
Block a user