From ec22fa9c68ed558ccc86893ed4be2c463c02ee08 Mon Sep 17 00:00:00 2001 From: austin Date: Thu, 29 May 2025 16:16:05 -0400 Subject: [PATCH] fix string carousels --- assets/Data/entity/creatures/human.json | 7 ++ docs/src/progress/renderertodo.md | 1 + .../electrosphere/engine/signal/Signal.java | 1 + .../renderer/ui/ElementService.java | 13 ++++ .../renderer/ui/elements/StringCarousel.java | 68 +++++++++++-------- 5 files changed, 63 insertions(+), 27 deletions(-) diff --git a/assets/Data/entity/creatures/human.json b/assets/Data/entity/creatures/human.json index cd4522cf..6e1f78f1 100644 --- a/assets/Data/entity/creatures/human.json +++ b/assets/Data/entity/creatures/human.json @@ -141,6 +141,13 @@ "meshes" : [ "Hair" ] + }, + { + "id" : "hairshort2", + "model" : "Models/creatures/person2/hair/hairshort1meshed.fbx", + "meshes" : [ + "Hair" + ] } ] } diff --git a/docs/src/progress/renderertodo.md b/docs/src/progress/renderertodo.md index 8b706ef1..c45e42bb 100644 --- a/docs/src/progress/renderertodo.md +++ b/docs/src/progress/renderertodo.md @@ -2064,6 +2064,7 @@ Refactor animation logic into dedicated actor class Simplify draw call logic Error report on window.java Delete ActorShaderMask +Fix string carousels diff --git a/src/main/java/electrosphere/engine/signal/Signal.java b/src/main/java/electrosphere/engine/signal/Signal.java index 9e0fc2cb..c87a5ff7 100644 --- a/src/main/java/electrosphere/engine/signal/Signal.java +++ b/src/main/java/electrosphere/engine/signal/Signal.java @@ -28,6 +28,7 @@ public class Signal { //UI // YOGA_APPLY, + YOGA_APPLY_ROOT, YOGA_DESTROY, UI_MODIFICATION, diff --git a/src/main/java/electrosphere/renderer/ui/ElementService.java b/src/main/java/electrosphere/renderer/ui/ElementService.java index f613c8f2..120a672e 100644 --- a/src/main/java/electrosphere/renderer/ui/ElementService.java +++ b/src/main/java/electrosphere/renderer/ui/ElementService.java @@ -48,6 +48,7 @@ public class ElementService extends SignalServiceImpl { "ElementService", new SignalType[]{ SignalType.YOGA_APPLY, + SignalType.YOGA_APPLY_ROOT, SignalType.YOGA_DESTROY, SignalType.UI_MODIFICATION, } @@ -609,6 +610,18 @@ public class ElementService extends SignalServiceImpl { target.applyYoga(0, 0); rVal = true; } break; + case YOGA_APPLY_ROOT: { + Element target = (Element)signal.getData(); + if(target == null){ + throw new Error("You forgot to include an element with the signal!"); + } + //find the root node + while(target.getParent() != null){ + target = target.getParent(); + } + target.applyYoga(0, 0); + rVal = true; + } break; case YOGA_DESTROY: { Element target = (Element)signal.getData(); target.destroy(); diff --git a/src/main/java/electrosphere/renderer/ui/elements/StringCarousel.java b/src/main/java/electrosphere/renderer/ui/elements/StringCarousel.java index 07b2928c..6a40d839 100644 --- a/src/main/java/electrosphere/renderer/ui/elements/StringCarousel.java +++ b/src/main/java/electrosphere/renderer/ui/elements/StringCarousel.java @@ -181,7 +181,47 @@ public class StringCarousel extends StandardContainerElement implements Drawable public void setVisible(boolean draw) { this.visible = draw; } + + /** + * The default menu event handler + * @param event + * @return + */ + private boolean defaultMenuEventHandler(MenuEvent event){ + if(event.getType() == MenuEventType.INCREMENT){ + if(options.size() > 0){ + currentOption++; + if(currentOption > options.size() - 1){ + currentOption = 0; + } + String newOption = options.get(currentOption); + this.setText(newOption); + if(onValueChange != null){ + onValueChange.execute(new ValueChangeEvent(newOption)); + } + Globals.engineState.signalSystem.post(SignalType.YOGA_APPLY_ROOT,this); + } + } else if(event.getType() == MenuEventType.DECREMENT){ + if(options.size() > 0){ + currentOption--; + if(currentOption < 0){ + currentOption = options.size() - 1; + } + String newOption = options.get(currentOption); + this.setText(newOption); + if(onValueChange != null){ + onValueChange.execute(new ValueChangeEvent(newOption)); + } + Globals.engineState.signalSystem.post(SignalType.YOGA_APPLY_ROOT,this); + } + } + return false; + } + /** + * Handles an event + * @param event The event + */ public boolean handleEvent(Event event){ boolean propagate = true; if(event instanceof MenuEvent){ @@ -190,33 +230,7 @@ public class StringCarousel extends StandardContainerElement implements Drawable propagate = onMenuEventCallback.execute(menuEvent); } else { //default behavior - if(menuEvent.getType() == MenuEventType.INCREMENT){ - propagate = false; - if(options.size() > 0){ - currentOption++; - if(currentOption > options.size() - 1){ - currentOption = 0; - } - String newOption = options.get(currentOption); - setText(newOption); - if(onValueChange != null){ - onValueChange.execute(new ValueChangeEvent(newOption)); - } - } - } else if(menuEvent.getType() == MenuEventType.DECREMENT){ - propagate = false; - if(options.size() > 0){ - currentOption--; - if(currentOption < 0){ - currentOption = options.size() - 1; - } - String newOption = options.get(currentOption); - setText(newOption); - if(onValueChange != null){ - onValueChange.execute(new ValueChangeEvent(newOption)); - } - } - } + propagate = this.defaultMenuEventHandler(menuEvent); } } else if(event instanceof FocusEvent){ FocusEvent focusEvent = (FocusEvent) event;