diff --git a/src/main/java/de/extio/game_engine/renderer/g2d/control/CustomControlConfiguration.java b/src/main/java/de/extio/game_engine/renderer/g2d/control/CustomControlConfiguration.java index 794aa39..76b9b7c 100644 --- a/src/main/java/de/extio/game_engine/renderer/g2d/control/CustomControlConfiguration.java +++ b/src/main/java/de/extio/game_engine/renderer/g2d/control/CustomControlConfiguration.java @@ -9,5 +9,7 @@ public interface CustomControlConfiguration { T createControl(); void setCustomData(T controlImpl, Object data); + + void setLastControlDataUpdateTime(T controlImpl, long time); } diff --git a/src/main/java/de/extio/game_engine/renderer/g2d/control/G2DDrawControl.java b/src/main/java/de/extio/game_engine/renderer/g2d/control/G2DDrawControl.java index d6237ee..9ca013d 100644 --- a/src/main/java/de/extio/game_engine/renderer/g2d/control/G2DDrawControl.java +++ b/src/main/java/de/extio/game_engine/renderer/g2d/control/G2DDrawControl.java @@ -76,6 +76,8 @@ public class G2DDrawControl extends G2DAbstractRenderingBo implements ControlRen private SetFocusData setFocusData; private Object customData; + + private long lastControlDataUpdateTime; private boolean visible; @@ -122,6 +124,7 @@ public class G2DDrawControl extends G2DAbstractRenderingBo implements ControlRen @Override public ControlRenderingBo setControlData(final Object data) { + this.lastControlDataUpdateTime = System.currentTimeMillis(); if (data instanceof final LabelData labelData) { this.labelData = labelData; } @@ -332,12 +335,15 @@ public class G2DDrawControl extends G2DAbstractRenderingBo implements ControlRen ((LabelControl) control).setCustomData(this.labelData); } else if (this.clazz == ToggleButtonControl.class && this.toggleButtonData != null) { + ((ToggleButtonControl) control).setLastControlDataUpdateTime(this.lastControlDataUpdateTime); ((ToggleButtonControl) control).setCustomData(this.toggleButtonData); } else if (this.clazz == SwitchControl.class && this.switchData != null) { + ((SwitchControl) control).setLastControlDataUpdateTime(this.lastControlDataUpdateTime); ((SwitchControl) control).setCustomData(this.switchData); } else if (this.clazz == ButtonControl.class && this.buttonData != null) { + ((ButtonControl) control).setLastControlDataUpdateTime(this.lastControlDataUpdateTime); ((ButtonControl) control).setCustomData(this.buttonData); } else if (this.clazz == WindowCloseButtonControl.class && this.windowCloseButtonData != null) { @@ -373,6 +379,7 @@ public class G2DDrawControl extends G2DAbstractRenderingBo implements ControlRen else { for (final var customControlConfiguration : this.customControlConfigurations) { if (customControlConfiguration.getControlClass().equals(this.clazz)) { + ((CustomControlConfiguration) customControlConfiguration).setLastControlDataUpdateTime(control, this.lastControlDataUpdateTime); ((CustomControlConfiguration) customControlConfiguration).setCustomData(control, this.customData); break; } @@ -410,6 +417,7 @@ public class G2DDrawControl extends G2DAbstractRenderingBo implements ControlRen this.visibleArea = o.visibleArea; this.controlArea = o.controlArea; this.customControlConfigurations = o.customControlConfigurations; + this.lastControlDataUpdateTime = o.lastControlDataUpdateTime; } } @@ -442,6 +450,7 @@ public class G2DDrawControl extends G2DAbstractRenderingBo implements ControlRen this.visibleArea = null; this.controlArea = null; this.customControlConfigurations = null; + this.lastControlDataUpdateTime = 0L; } @Override diff --git a/src/main/java/de/extio/game_engine/renderer/g2d/control/components/CustomAbstractButton.java b/src/main/java/de/extio/game_engine/renderer/g2d/control/components/CustomAbstractButton.java index 780bc28..87a1216 100644 --- a/src/main/java/de/extio/game_engine/renderer/g2d/control/components/CustomAbstractButton.java +++ b/src/main/java/de/extio/game_engine/renderer/g2d/control/components/CustomAbstractButton.java @@ -60,6 +60,8 @@ public abstract class CustomAbstractButton extends Component { protected StaticResourceService staticResourceService; protected CoordI2 lastMousePosition; + + protected long lastControlDataUpdateTime; public void setCaption(final String caption) { this.caption = caption; @@ -113,6 +115,10 @@ public abstract class CustomAbstractButton extends Component { } super.setEnabled(b); } + + public void setLastControlDataUpdateTime(final long time) { + this.lastControlDataUpdateTime = time; + } public CustomAbstractButton(final boolean toggle, final ActionListener listener) { this.setIgnoreRepaint(true); diff --git a/src/main/java/de/extio/game_engine/renderer/g2d/control/impl/G2DAbstractToggleButtonControlImpl.java b/src/main/java/de/extio/game_engine/renderer/g2d/control/impl/G2DAbstractToggleButtonControlImpl.java index 3cb75ad..58cf526 100644 --- a/src/main/java/de/extio/game_engine/renderer/g2d/control/impl/G2DAbstractToggleButtonControlImpl.java +++ b/src/main/java/de/extio/game_engine/renderer/g2d/control/impl/G2DAbstractToggleButtonControlImpl.java @@ -14,14 +14,20 @@ public abstract class G2DAbstractToggleButtonControlImpl extends G2DButtonContro protected void applyToggleButtonData(final ToggleButtonData data) { if (data != null) { - this.setToggled(data.toggled()); + if (this.lastControlDataUpdateTimeInternal < this.lastControlDataUpdateTime) { + this.setToggled(data.toggled()); + this.lastControlDataUpdateTimeInternal = this.lastControlDataUpdateTime; + } this.setIconResource(data.iconResource()); } } protected void applySwitchData(final SwitchData data) { if (data != null) { - this.setToggled(data.toggled()); + if (this.lastControlDataUpdateTimeInternal < this.lastControlDataUpdateTime) { + this.setToggled(data.toggled()); + this.lastControlDataUpdateTimeInternal = this.lastControlDataUpdateTime; + } this.setIconResource(data.iconResource()); this.setDrawBorder(data.drawBorder()); } diff --git a/src/main/java/de/extio/game_engine/renderer/g2d/control/impl/G2DButtonControlImpl.java b/src/main/java/de/extio/game_engine/renderer/g2d/control/impl/G2DButtonControlImpl.java index a12097e..7877326 100644 --- a/src/main/java/de/extio/game_engine/renderer/g2d/control/impl/G2DButtonControlImpl.java +++ b/src/main/java/de/extio/game_engine/renderer/g2d/control/impl/G2DButtonControlImpl.java @@ -18,7 +18,11 @@ public class G2DButtonControlImpl extends G2DBaseControlImpl implements ButtonCo protected StaticResource iconResource; - private RgbaColor backgroundColor; + protected RgbaColor backgroundColor; + + protected long lastControlDataUpdateTime; + + protected long lastControlDataUpdateTimeInternal; @Override public void setCustomData(final ButtonData data) { @@ -28,6 +32,11 @@ public class G2DButtonControlImpl extends G2DBaseControlImpl implements ButtonCo } } + @Override + public void setLastControlDataUpdateTime(final long time) { + this.lastControlDataUpdateTime = time; + } + @Override public void build() { super.build(); @@ -110,5 +119,5 @@ public class G2DButtonControlImpl extends G2DBaseControlImpl implements ButtonCo this.modified |= !Objects.equals(this.backgroundColor, backgroundColor); this.backgroundColor = backgroundColor; } - + } diff --git a/src/main/java/de/extio/game_engine/renderer/g2d/control/impl/G2DSwitchControlImpl.java b/src/main/java/de/extio/game_engine/renderer/g2d/control/impl/G2DSwitchControlImpl.java index 8f5c1aa..48a52c3 100644 --- a/src/main/java/de/extio/game_engine/renderer/g2d/control/impl/G2DSwitchControlImpl.java +++ b/src/main/java/de/extio/game_engine/renderer/g2d/control/impl/G2DSwitchControlImpl.java @@ -21,6 +21,7 @@ public class G2DSwitchControlImpl extends G2DAbstractToggleButtonControlImpl { protected void createControl() { this.control = new CustomSwitch(true, event -> this.performAction(), (G2DThemeManager) this.rendererData.getThemeManager()); this.control.setName(this.id); + this.lastControlDataUpdateTimeInternal = 0; } @Override diff --git a/src/main/java/de/extio/game_engine/renderer/g2d/control/impl/G2DToggleButtonControlImpl.java b/src/main/java/de/extio/game_engine/renderer/g2d/control/impl/G2DToggleButtonControlImpl.java index d30c26c..11ea4b9 100644 --- a/src/main/java/de/extio/game_engine/renderer/g2d/control/impl/G2DToggleButtonControlImpl.java +++ b/src/main/java/de/extio/game_engine/renderer/g2d/control/impl/G2DToggleButtonControlImpl.java @@ -21,6 +21,7 @@ public class G2DToggleButtonControlImpl extends G2DAbstractToggleButtonControlIm protected void createControl() { this.control = new CustomButton(true, event -> this.performAction(), (G2DThemeManager) this.rendererData.getThemeManager()); this.control.setName(this.id); + this.lastControlDataUpdateTimeInternal = 0; } } diff --git a/src/main/java/de/extio/game_engine/renderer/model/bo/ControlRenderingBo.java b/src/main/java/de/extio/game_engine/renderer/model/bo/ControlRenderingBo.java index cf057e3..153dc69 100644 --- a/src/main/java/de/extio/game_engine/renderer/model/bo/ControlRenderingBo.java +++ b/src/main/java/de/extio/game_engine/renderer/model/bo/ControlRenderingBo.java @@ -117,6 +117,8 @@ public interface ControlRenderingBo extends RenderingBoHasDimension { public static interface ButtonControl extends BaseControl { void setCustomData(ButtonData data); + + void setLastControlDataUpdateTime(long time); }