toolbar preview ui
Some checks failed
studiorailgun/Renderer/pipeline/head There was a failure building this commit
Some checks failed
studiorailgun/Renderer/pipeline/head There was a failure building this commit
This commit is contained in:
parent
aef0673ca6
commit
d9b7f9c25c
@ -1,3 +1,3 @@
|
|||||||
#maven.buildNumber.plugin properties file
|
#maven.buildNumber.plugin properties file
|
||||||
#Sat Apr 26 14:36:52 EDT 2025
|
#Sat Apr 26 19:41:37 EDT 2025
|
||||||
buildNumber=620
|
buildNumber=621
|
||||||
|
|||||||
@ -1557,6 +1557,7 @@ Block cursor custom textures
|
|||||||
New block type
|
New block type
|
||||||
Fix inventory item tooltip not clearing
|
Fix inventory item tooltip not clearing
|
||||||
More item icons
|
More item icons
|
||||||
|
Toolbar preview ui element
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@ -8,6 +8,7 @@ import electrosphere.client.fluid.manager.ClientFluidManager;
|
|||||||
import electrosphere.client.instancing.InstanceUpdater;
|
import electrosphere.client.instancing.InstanceUpdater;
|
||||||
import electrosphere.client.interact.ClientInteractionEngine;
|
import electrosphere.client.interact.ClientInteractionEngine;
|
||||||
import electrosphere.client.terrain.manager.ClientTerrainManager;
|
import electrosphere.client.terrain.manager.ClientTerrainManager;
|
||||||
|
import electrosphere.client.ui.menu.ingame.ToolbarPreviewWindow;
|
||||||
import electrosphere.engine.Globals;
|
import electrosphere.engine.Globals;
|
||||||
import electrosphere.entity.Entity;
|
import electrosphere.entity.Entity;
|
||||||
import electrosphere.entity.EntityTags;
|
import electrosphere.entity.EntityTags;
|
||||||
@ -133,6 +134,7 @@ public class ClientSimulation {
|
|||||||
//bones have potenitally moved, so need to update where attached entities actually are before drawing
|
//bones have potenitally moved, so need to update where attached entities actually are before drawing
|
||||||
AttachUtils.clientUpdateAttachedEntityPositions();
|
AttachUtils.clientUpdateAttachedEntityPositions();
|
||||||
ClientInteractionEngine.updateInteractionTargetLabel();
|
ClientInteractionEngine.updateInteractionTargetLabel();
|
||||||
|
ToolbarPreviewWindow.checkVisibility();
|
||||||
// updateCellManager();
|
// updateCellManager();
|
||||||
Globals.profiler.endCpuSample();
|
Globals.profiler.endCpuSample();
|
||||||
}
|
}
|
||||||
|
|||||||
@ -1,5 +1,7 @@
|
|||||||
package electrosphere.client.ui.components;
|
package electrosphere.client.ui.components;
|
||||||
|
|
||||||
|
import org.joml.Vector4f;
|
||||||
|
|
||||||
import electrosphere.audio.VirtualAudioSourceManager.VirtualAudioSourceType;
|
import electrosphere.audio.VirtualAudioSourceManager.VirtualAudioSourceType;
|
||||||
import electrosphere.client.ui.menu.WindowStrings;
|
import electrosphere.client.ui.menu.WindowStrings;
|
||||||
import electrosphere.client.ui.menu.WindowUtils;
|
import electrosphere.client.ui.menu.WindowUtils;
|
||||||
@ -18,6 +20,7 @@ import electrosphere.logger.LoggerInterface;
|
|||||||
import electrosphere.renderer.ui.elements.Div;
|
import electrosphere.renderer.ui.elements.Div;
|
||||||
import electrosphere.renderer.ui.elements.ImagePanel;
|
import electrosphere.renderer.ui.elements.ImagePanel;
|
||||||
import electrosphere.renderer.ui.elements.Label;
|
import electrosphere.renderer.ui.elements.Label;
|
||||||
|
import electrosphere.renderer.ui.elements.Panel;
|
||||||
import electrosphere.renderer.ui.elements.Tooltip;
|
import electrosphere.renderer.ui.elements.Tooltip;
|
||||||
import electrosphere.renderer.ui.elementtypes.ClickableElement.ClickEventCallback;
|
import electrosphere.renderer.ui.elementtypes.ClickableElement.ClickEventCallback;
|
||||||
import electrosphere.renderer.ui.elementtypes.ContainerElement;
|
import electrosphere.renderer.ui.elementtypes.ContainerElement;
|
||||||
@ -49,6 +52,12 @@ public class ToolbarInventoryPanel {
|
|||||||
public static Element createToolbarInventoryPanel(Entity entity){
|
public static Element createToolbarInventoryPanel(Entity entity){
|
||||||
RelationalInventoryState inventory = InventoryUtils.getToolbarInventory(entity);
|
RelationalInventoryState inventory = InventoryUtils.getToolbarInventory(entity);
|
||||||
|
|
||||||
|
int selectedIndex = 0;
|
||||||
|
if(ClientToolbarState.hasClientToolbarState(entity)){
|
||||||
|
ClientToolbarState clientToolbarState = ClientToolbarState.getClientToolbarState(entity);
|
||||||
|
selectedIndex = clientToolbarState.getSelectedSlot();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
Div div = Div.createDiv();
|
Div div = Div.createDiv();
|
||||||
div.setJustifyContent(YogaJustification.Center);
|
div.setJustifyContent(YogaJustification.Center);
|
||||||
@ -139,10 +148,10 @@ public class ToolbarInventoryPanel {
|
|||||||
ImagePanel panel = ImagePanel.createImagePanel(texturePath);
|
ImagePanel panel = ImagePanel.createImagePanel(texturePath);
|
||||||
panel.setMinWidth(panelWidth);
|
panel.setMinWidth(panelWidth);
|
||||||
panel.setMinHeight(panelHeight);
|
panel.setMinHeight(panelHeight);
|
||||||
panel.setMarginRight(15);
|
panel.setMarginRight(5);
|
||||||
panel.setMarginBottom(15);
|
panel.setMarginBottom(5);
|
||||||
panel.setMarginLeft(15);
|
panel.setMarginLeft(5);
|
||||||
panel.setMarginTop(15);
|
panel.setMarginTop(5);
|
||||||
panel.setAlignSelf(YogaAlignment.Start);
|
panel.setAlignSelf(YogaAlignment.Start);
|
||||||
panel.setAbsolutePosition(false);
|
panel.setAbsolutePosition(false);
|
||||||
if(hasItem == true && inventory.getItemSlot("" + i) != Globals.draggedItem){
|
if(hasItem == true && inventory.getItemSlot("" + i) != Globals.draggedItem){
|
||||||
@ -244,7 +253,18 @@ public class ToolbarInventoryPanel {
|
|||||||
return false;
|
return false;
|
||||||
}});
|
}});
|
||||||
}
|
}
|
||||||
panelContainer.addChild(panel);
|
ContainerElement container = null;
|
||||||
|
if(i == selectedIndex){
|
||||||
|
container = Panel.createPanel(panel);
|
||||||
|
((Panel)container).setColor(new Vector4f(1.0f));
|
||||||
|
} else {
|
||||||
|
container = Div.createCol(panel);
|
||||||
|
container.setMarginBottom(10);
|
||||||
|
container.setMarginLeft(10);
|
||||||
|
container.setMarginRight(10);
|
||||||
|
container.setMarginTop(10);
|
||||||
|
}
|
||||||
|
panelContainer.addChild(container);
|
||||||
}
|
}
|
||||||
div.addChild(panelContainer);
|
div.addChild(panelContainer);
|
||||||
}
|
}
|
||||||
|
|||||||
@ -85,4 +85,9 @@ public class WindowStrings {
|
|||||||
*/
|
*/
|
||||||
public static final String TARGET_TOOLTIP = "targetTooltip";
|
public static final String TARGET_TOOLTIP = "targetTooltip";
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The toolbar preview
|
||||||
|
*/
|
||||||
|
public static final String TOOLBAR_PREVIEW = "toolbarPreview";
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@ -149,7 +149,7 @@ public class WindowUtils {
|
|||||||
public static void replaceWindow(String window, Window windowEl){
|
public static void replaceWindow(String window, Window windowEl){
|
||||||
Globals.elementService.unregisterWindow(window);
|
Globals.elementService.unregisterWindow(window);
|
||||||
Globals.elementService.registerWindow(window, windowEl);
|
Globals.elementService.registerWindow(window, windowEl);
|
||||||
recursiveSetVisible(windowEl, true);
|
WindowUtils.recursiveSetVisible(windowEl, true);
|
||||||
Globals.elementService.focusFirstElement();
|
Globals.elementService.focusFirstElement();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -35,7 +35,7 @@ public class FabMenus {
|
|||||||
* Creates the level editor side panel window
|
* Creates the level editor side panel window
|
||||||
* @return
|
* @return
|
||||||
*/
|
*/
|
||||||
public static Window createVoxelTypeSelectionPanel(){
|
public static Window createFabSelectionPanel(){
|
||||||
//setup window
|
//setup window
|
||||||
Window fabSelectionPanelWindow = Window.create(Globals.renderingEngine.getOpenGLState(), 0, 0, WINDOW_WIDTH, WINDOW_HEIGHT, true);
|
Window fabSelectionPanelWindow = Window.create(Globals.renderingEngine.getOpenGLState(), 0, 0, WINDOW_WIDTH, WINDOW_HEIGHT, true);
|
||||||
fabSelectionPanelWindow.setParentAlignContent(YogaAlignment.Center);
|
fabSelectionPanelWindow.setParentAlignContent(YogaAlignment.Center);
|
||||||
|
|||||||
@ -0,0 +1,73 @@
|
|||||||
|
package electrosphere.client.ui.menu.ingame;
|
||||||
|
|
||||||
|
import electrosphere.client.ui.components.ToolbarInventoryPanel;
|
||||||
|
import electrosphere.client.ui.menu.WindowStrings;
|
||||||
|
import electrosphere.client.ui.menu.WindowUtils;
|
||||||
|
import electrosphere.engine.Globals;
|
||||||
|
import electrosphere.engine.signal.Signal.SignalType;
|
||||||
|
import electrosphere.renderer.ui.elements.Window;
|
||||||
|
import electrosphere.renderer.ui.elementtypes.ContainerElement.YogaJustification;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Window that shows the toolbar preview
|
||||||
|
*/
|
||||||
|
public class ToolbarPreviewWindow {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Frame number to hide the toolbar preview on
|
||||||
|
*/
|
||||||
|
static long frameToHide = 0;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The preview window
|
||||||
|
*/
|
||||||
|
static Window previewWindow;
|
||||||
|
|
||||||
|
//width of the panel
|
||||||
|
static final int WINDOW_WIDTH = 550;
|
||||||
|
static final int WINDOW_HEIGHT = 550;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Number of frames to reveal for
|
||||||
|
*/
|
||||||
|
static final int REVEAL_FRAME_COUNT = 50;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Creates the level editor side panel window
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
public static Window createToolbarPreviewWindow(){
|
||||||
|
//setup window
|
||||||
|
Window rVal = Window.createExpandableCenterAligned(Globals.renderingEngine.getOpenGLState(), false);
|
||||||
|
rVal.setJustifyContent(YogaJustification.End);
|
||||||
|
|
||||||
|
//attach scrollable after search input for organzation purposes
|
||||||
|
rVal.addChild(ToolbarInventoryPanel.createToolbarInventoryPanel(Globals.playerEntity));
|
||||||
|
|
||||||
|
Globals.signalSystem.post(SignalType.YOGA_APPLY,rVal);
|
||||||
|
|
||||||
|
return rVal;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Checks the visibility of the toolbar preview
|
||||||
|
*/
|
||||||
|
public static void checkVisibility(){
|
||||||
|
long currentFrame = Globals.timekeeper.getNumberOfSimFramesElapsed();
|
||||||
|
if(currentFrame > frameToHide){
|
||||||
|
if(previewWindow != null && previewWindow.getVisible()){
|
||||||
|
previewWindow.setVisible(false);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Reveals the toolbar preview window
|
||||||
|
*/
|
||||||
|
public static void reveal(){
|
||||||
|
previewWindow = ToolbarPreviewWindow.createToolbarPreviewWindow();
|
||||||
|
WindowUtils.replaceWindow(WindowStrings.TOOLBAR_PREVIEW, previewWindow);
|
||||||
|
frameToHide = Globals.timekeeper.getNumberOfSimFramesElapsed() + REVEAL_FRAME_COUNT;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@ -37,7 +37,7 @@ public class ScriptMenuUtils {
|
|||||||
*/
|
*/
|
||||||
@Export
|
@Export
|
||||||
public static void openFabSelection(){
|
public static void openFabSelection(){
|
||||||
WindowUtils.replaceWindow(WindowStrings.FAB_SELECTION,FabMenus.createVoxelTypeSelectionPanel());
|
WindowUtils.replaceWindow(WindowStrings.FAB_SELECTION,FabMenus.createFabSelectionPanel());
|
||||||
Globals.controlHandler.hintUpdateControlState(ControlsState.IN_GAME_MAIN_MENU);
|
Globals.controlHandler.hintUpdateControlState(ControlsState.IN_GAME_MAIN_MENU);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -17,6 +17,7 @@ import electrosphere.game.data.item.Item;
|
|||||||
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
|
import electrosphere.client.ui.menu.ingame.ToolbarPreviewWindow;
|
||||||
import electrosphere.collision.PhysicsEntityUtils;
|
import electrosphere.collision.PhysicsEntityUtils;
|
||||||
import electrosphere.controls.cursor.CursorState;
|
import electrosphere.controls.cursor.CursorState;
|
||||||
import electrosphere.engine.Globals;
|
import electrosphere.engine.Globals;
|
||||||
@ -52,6 +53,11 @@ public class ClientToolbarState implements BehaviorTree {
|
|||||||
@SyncedField
|
@SyncedField
|
||||||
int selectedSlot;
|
int selectedSlot;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The slot selected the previous frame -- used to detect changes
|
||||||
|
*/
|
||||||
|
int previousFrameSlot;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* The parent entity
|
* The parent entity
|
||||||
*/
|
*/
|
||||||
@ -362,6 +368,10 @@ public class ClientToolbarState implements BehaviorTree {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void simulate(float deltaTime) {
|
public void simulate(float deltaTime) {
|
||||||
|
if(this.previousFrameSlot != this.selectedSlot){
|
||||||
|
this.previousFrameSlot = this.selectedSlot;
|
||||||
|
ToolbarPreviewWindow.reveal();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
@ -279,12 +279,14 @@ public class Button extends StandardContainerElement implements DrawableElement,
|
|||||||
if(this.drawFrame){
|
if(this.drawFrame){
|
||||||
if(this.isFocused()){
|
if(this.isFocused()){
|
||||||
UIFrameUtils.drawFrame(
|
UIFrameUtils.drawFrame(
|
||||||
|
openGLState,
|
||||||
AssetDataStrings.UI_FRAME_TEXTURE_DEFAULT_3, frameColor, 48, 12,
|
AssetDataStrings.UI_FRAME_TEXTURE_DEFAULT_3, frameColor, 48, 12,
|
||||||
this.getAbsoluteX(), this.getAbsoluteY(), this.getWidth(), this.getHeight(),
|
this.getAbsoluteX(), this.getAbsoluteY(), this.getWidth(), this.getHeight(),
|
||||||
framebuffer, framebufferPosX, framebufferPosY
|
framebuffer, framebufferPosX, framebufferPosY
|
||||||
);
|
);
|
||||||
} else {
|
} else {
|
||||||
UIFrameUtils.drawFrame(
|
UIFrameUtils.drawFrame(
|
||||||
|
openGLState,
|
||||||
AssetDataStrings.UI_FRAME_TEXTURE_DEFAULT_3, frameBackgroundColor, 48, 12,
|
AssetDataStrings.UI_FRAME_TEXTURE_DEFAULT_3, frameBackgroundColor, 48, 12,
|
||||||
this.getAbsoluteX(), this.getAbsoluteY(), this.getWidth(), this.getHeight(),
|
this.getAbsoluteX(), this.getAbsoluteY(), this.getWidth(), this.getHeight(),
|
||||||
framebuffer, framebufferPosX, framebufferPosY
|
framebuffer, framebufferPosX, framebufferPosY
|
||||||
|
|||||||
@ -78,9 +78,7 @@ public class Panel extends StandardContainerElement implements DrawableElement {
|
|||||||
* @param color The color
|
* @param color The color
|
||||||
*/
|
*/
|
||||||
public void setColor(Vector4f color){
|
public void setColor(Vector4f color){
|
||||||
for(Element character : childList){
|
this.frameColor = color;
|
||||||
((BitmapCharacter)character).setColor(color);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@ -93,6 +91,7 @@ public class Panel extends StandardContainerElement implements DrawableElement {
|
|||||||
) {
|
) {
|
||||||
|
|
||||||
UIFrameUtils.drawFrame(
|
UIFrameUtils.drawFrame(
|
||||||
|
openGLState,
|
||||||
AssetDataStrings.UI_FRAME_TEXTURE_DEFAULT_3, frameColor, 48, 12,
|
AssetDataStrings.UI_FRAME_TEXTURE_DEFAULT_3, frameColor, 48, 12,
|
||||||
this.getAbsoluteX(), this.getAbsoluteY(), this.getWidth(), this.getHeight(),
|
this.getAbsoluteX(), this.getAbsoluteY(), this.getWidth(), this.getHeight(),
|
||||||
framebuffer, framebufferPosX, framebufferPosY
|
framebuffer, framebufferPosX, framebufferPosY
|
||||||
|
|||||||
@ -193,12 +193,14 @@ public class TextInput extends StandardContainerElement implements DrawableEleme
|
|||||||
//render background of window
|
//render background of window
|
||||||
if(this.isFocused()){
|
if(this.isFocused()){
|
||||||
UIFrameUtils.drawFrame(
|
UIFrameUtils.drawFrame(
|
||||||
|
openGLState,
|
||||||
AssetDataStrings.UI_FRAME_TEXTURE_DEFAULT_3, backgroundColor, 48, 12,
|
AssetDataStrings.UI_FRAME_TEXTURE_DEFAULT_3, backgroundColor, 48, 12,
|
||||||
this.getAbsoluteX(), this.getAbsoluteY(), this.getWidth(), this.getHeight(),
|
this.getAbsoluteX(), this.getAbsoluteY(), this.getWidth(), this.getHeight(),
|
||||||
framebuffer, framebufferPosX, framebufferPosY
|
framebuffer, framebufferPosX, framebufferPosY
|
||||||
);
|
);
|
||||||
} else {
|
} else {
|
||||||
UIFrameUtils.drawFrame(
|
UIFrameUtils.drawFrame(
|
||||||
|
openGLState,
|
||||||
AssetDataStrings.UI_FRAME_TEXTURE_DEFAULT_3, backgroundColor, 48, 12,
|
AssetDataStrings.UI_FRAME_TEXTURE_DEFAULT_3, backgroundColor, 48, 12,
|
||||||
this.getAbsoluteX(), this.getAbsoluteY(), this.getWidth(), this.getHeight(),
|
this.getAbsoluteX(), this.getAbsoluteY(), this.getWidth(), this.getHeight(),
|
||||||
framebuffer, framebufferPosX, framebufferPosY
|
framebuffer, framebufferPosX, framebufferPosY
|
||||||
|
|||||||
@ -249,6 +249,7 @@ public class Window implements DrawableElement, ContainerElement, NavigableEleme
|
|||||||
//render background of window
|
//render background of window
|
||||||
if(planeModel != null && windowFrame != null && this.showDecorations){
|
if(planeModel != null && windowFrame != null && this.showDecorations){
|
||||||
UIFrameUtils.drawFrame(
|
UIFrameUtils.drawFrame(
|
||||||
|
openGLState,
|
||||||
AssetDataStrings.UI_FRAME_TEXTURE_DEFAULT_3, color, 48, 12,
|
AssetDataStrings.UI_FRAME_TEXTURE_DEFAULT_3, color, 48, 12,
|
||||||
this.getAbsoluteX(), this.getAbsoluteY(), this.getWidth(), this.getHeight(),
|
this.getAbsoluteX(), this.getAbsoluteY(), this.getWidth(), this.getHeight(),
|
||||||
framebuffer, framebufferPosX, framebufferPosY
|
framebuffer, framebufferPosX, framebufferPosY
|
||||||
|
|||||||
@ -4,6 +4,7 @@ import org.joml.Vector3f;
|
|||||||
import org.joml.Vector4f;
|
import org.joml.Vector4f;
|
||||||
|
|
||||||
import electrosphere.engine.Globals;
|
import electrosphere.engine.Globals;
|
||||||
|
import electrosphere.renderer.OpenGLState;
|
||||||
import electrosphere.renderer.framebuffer.Framebuffer;
|
import electrosphere.renderer.framebuffer.Framebuffer;
|
||||||
import electrosphere.renderer.model.Material;
|
import electrosphere.renderer.model.Material;
|
||||||
import electrosphere.renderer.model.Model;
|
import electrosphere.renderer.model.Model;
|
||||||
@ -41,6 +42,7 @@ public class UIFrameUtils {
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* Draws a frame
|
* Draws a frame
|
||||||
|
* @param openGLState The opengl state
|
||||||
* @param frame The texture of the frame to draw
|
* @param frame The texture of the frame to draw
|
||||||
* @param color The color to draw
|
* @param color The color to draw
|
||||||
* @param frameCornerDim The dimensions of a corner of the frame texture
|
* @param frameCornerDim The dimensions of a corner of the frame texture
|
||||||
@ -53,10 +55,14 @@ public class UIFrameUtils {
|
|||||||
* @param framebufferPosY The y position of the framebuffer
|
* @param framebufferPosY The y position of the framebuffer
|
||||||
*/
|
*/
|
||||||
public static void drawFrame(
|
public static void drawFrame(
|
||||||
|
OpenGLState openGLState,
|
||||||
String frame, Vector4f color, int frameTexDim, int frameCornerDim,
|
String frame, Vector4f color, int frameTexDim, int frameCornerDim,
|
||||||
int posX, int posY, int width, int height,
|
int posX, int posY, int width, int height,
|
||||||
Framebuffer framebuffer, int framebufferPosX, int framebufferPosY
|
Framebuffer framebuffer, int framebufferPosX, int framebufferPosY
|
||||||
){
|
){
|
||||||
|
framebuffer.bind(openGLState);
|
||||||
|
openGLState.glViewport(framebuffer.getWidth(), framebuffer.getHeight());
|
||||||
|
|
||||||
Model planeModel = Globals.assetManager.fetchModel(Globals.imagePlaneModelID);
|
Model planeModel = Globals.assetManager.fetchModel(Globals.imagePlaneModelID);
|
||||||
Texture windowFrame = Globals.assetManager.fetchTexture(frame);
|
Texture windowFrame = Globals.assetManager.fetchTexture(frame);
|
||||||
//render background of window
|
//render background of window
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user