craftingpanel implementation
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
df8991e875
commit
50ad6dcfc6
@ -2,6 +2,7 @@
|
|||||||
"recipes": [
|
"recipes": [
|
||||||
{
|
{
|
||||||
"id": 0,
|
"id": 0,
|
||||||
|
"displayName": "Katana (Two Hand)",
|
||||||
"ingredients": [
|
"ingredients": [
|
||||||
{
|
{
|
||||||
"itemType": "katana2H",
|
"itemType": "katana2H",
|
||||||
@ -14,6 +15,22 @@
|
|||||||
"count": 1
|
"count": 1
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": 1,
|
||||||
|
"displayName": "Katana (One Hand)",
|
||||||
|
"ingredients": [
|
||||||
|
{
|
||||||
|
"itemType": "katana",
|
||||||
|
"count": 1
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"products": [
|
||||||
|
{
|
||||||
|
"itemType": "katana",
|
||||||
|
"count": 1
|
||||||
|
}
|
||||||
|
]
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"files": [
|
"files": [
|
||||||
|
|||||||
@ -903,6 +903,9 @@ Notes on biomes
|
|||||||
OpenSimplex util class
|
OpenSimplex util class
|
||||||
Chemistry system collision engine instance on server and client
|
Chemistry system collision engine instance on server and client
|
||||||
|
|
||||||
|
(10/24/2024)
|
||||||
|
CraftingPanel implementation
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
# TODO
|
# TODO
|
||||||
|
|||||||
@ -0,0 +1,152 @@
|
|||||||
|
package electrosphere.client.ui.components;
|
||||||
|
|
||||||
|
import electrosphere.client.ui.menu.WindowStrings;
|
||||||
|
import electrosphere.engine.Globals;
|
||||||
|
import electrosphere.engine.signal.Signal.SignalType;
|
||||||
|
import electrosphere.game.data.crafting.RecipeData;
|
||||||
|
import electrosphere.game.data.crafting.RecipeIngredientData;
|
||||||
|
import electrosphere.renderer.ui.elements.Button;
|
||||||
|
import electrosphere.renderer.ui.elements.Div;
|
||||||
|
import electrosphere.renderer.ui.elements.Label;
|
||||||
|
import electrosphere.renderer.ui.elements.VirtualScrollable;
|
||||||
|
import electrosphere.renderer.ui.elementtypes.Element;
|
||||||
|
import electrosphere.renderer.ui.elementtypes.ContainerElement.YogaAlignment;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The crafting panel
|
||||||
|
*/
|
||||||
|
public class CraftingPanel {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The title of the panel
|
||||||
|
*/
|
||||||
|
public static final String PANEL_TITLE = "Crafting";
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The width of the recipe scrollable
|
||||||
|
*/
|
||||||
|
public static final int SCROLLABLE_WIDTH = 500;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The height of the recipe scrollable
|
||||||
|
*/
|
||||||
|
public static final int SCROLLABLE_HEIGHT = 800;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The width of the details section
|
||||||
|
*/
|
||||||
|
public static final int DETAILS_WIDTH = 500;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The height of the spacer on the details panel
|
||||||
|
*/
|
||||||
|
public static final int DETAILS_SPACER_HEIGHT = 10;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The selected recipe
|
||||||
|
*/
|
||||||
|
private static RecipeData selectedRecipe = null;
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Creates the crafting panel component
|
||||||
|
* @return The component
|
||||||
|
*/
|
||||||
|
public static Element createCraftingPanelComponent(){
|
||||||
|
|
||||||
|
//top level element
|
||||||
|
Div rVal = Div.createCol();
|
||||||
|
|
||||||
|
|
||||||
|
//title label
|
||||||
|
Label titleLabel = Label.createLabel(PANEL_TITLE);
|
||||||
|
titleLabel.setMarginBottom(DETAILS_SPACER_HEIGHT);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
//details about the current recipe selected
|
||||||
|
Div recipeDetailsSection = Div.createDiv();
|
||||||
|
recipeDetailsSection.setWidth(DETAILS_WIDTH);
|
||||||
|
recipeDetailsSection.setHeight(SCROLLABLE_HEIGHT);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
//select the first recipe
|
||||||
|
selectedRecipe = Globals.gameConfigCurrent.getRecipeMap().getTypes().iterator().next();
|
||||||
|
setDetails(rVal, recipeDetailsSection, selectedRecipe);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
//the scrollable containing the list of recipes to select
|
||||||
|
VirtualScrollable recipeScrollable = new VirtualScrollable(SCROLLABLE_WIDTH, SCROLLABLE_HEIGHT);
|
||||||
|
Globals.gameConfigCurrent.getRecipeMap().getTypes().forEach((RecipeData recipe) -> {
|
||||||
|
Button recipeButton = Button.createButton(recipe.getDisplayName(), () -> {
|
||||||
|
setDetails(rVal, recipeDetailsSection, selectedRecipe);
|
||||||
|
});
|
||||||
|
recipeScrollable.addChild(recipeButton);
|
||||||
|
});
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
//the button to actually craft
|
||||||
|
Button craftButton = Button.createButton("Craft", () -> {
|
||||||
|
System.out.println("Craft an item here");
|
||||||
|
});
|
||||||
|
Div buttonRow = Div.createRow(
|
||||||
|
craftButton
|
||||||
|
);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
//actually layout the panel
|
||||||
|
rVal.addChild(titleLabel);
|
||||||
|
rVal.addChild(Div.createRow(
|
||||||
|
recipeScrollable,
|
||||||
|
recipeDetailsSection
|
||||||
|
));
|
||||||
|
rVal.addChild(buttonRow);
|
||||||
|
rVal.setAlignItems(YogaAlignment.Center);
|
||||||
|
|
||||||
|
return rVal;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sets the details panel when a recipe is selected
|
||||||
|
* @param detailsPanel The details panel
|
||||||
|
* @param currentRecipe The recipe that was selected
|
||||||
|
*/
|
||||||
|
private static void setDetails(Div topLevelEl, Div detailsPanel, RecipeData currentRecipe){
|
||||||
|
Globals.signalSystem.post(SignalType.UI_MODIFICATION,() -> {
|
||||||
|
//clear the panel
|
||||||
|
detailsPanel.clearChildren();
|
||||||
|
|
||||||
|
//ingredients
|
||||||
|
detailsPanel.addChild(Label.createLabel("Ingredients"));
|
||||||
|
currentRecipe.getIngredients().forEach((RecipeIngredientData ingredient) -> {
|
||||||
|
Label label = Label.createLabel(ingredient.getItemType());
|
||||||
|
label.setMarginTop(5);
|
||||||
|
label.setMarginLeft(15);
|
||||||
|
detailsPanel.addChild(label);
|
||||||
|
});
|
||||||
|
|
||||||
|
//spacer
|
||||||
|
Div spacerDiv = Div.createDiv();
|
||||||
|
spacerDiv.setMarginBottom(DETAILS_SPACER_HEIGHT);
|
||||||
|
detailsPanel.addChild(spacerDiv);
|
||||||
|
|
||||||
|
//products
|
||||||
|
detailsPanel.addChild(Label.createLabel("Products"));
|
||||||
|
currentRecipe.getProducts().forEach((RecipeIngredientData ingredient) -> {
|
||||||
|
Label label = Label.createLabel(ingredient.getItemType());
|
||||||
|
label.setMarginTop(5);
|
||||||
|
label.setMarginLeft(15);
|
||||||
|
detailsPanel.addChild(label);
|
||||||
|
});
|
||||||
|
|
||||||
|
//apply yoga
|
||||||
|
Globals.signalSystem.post(SignalType.YOGA_APPLY, Globals.elementService.getWindow(WindowStrings.WINDOW_CHARACTER));
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@ -8,6 +8,7 @@ import org.joml.Vector3f;
|
|||||||
|
|
||||||
import electrosphere.client.entity.camera.CameraEntityUtils;
|
import electrosphere.client.entity.camera.CameraEntityUtils;
|
||||||
import electrosphere.client.ui.components.CharacterCustomizer;
|
import electrosphere.client.ui.components.CharacterCustomizer;
|
||||||
|
import electrosphere.client.ui.components.CraftingPanel;
|
||||||
import electrosphere.client.ui.components.EquipmentInventoryPanel;
|
import electrosphere.client.ui.components.EquipmentInventoryPanel;
|
||||||
import electrosphere.client.ui.components.InputMacros;
|
import electrosphere.client.ui.components.InputMacros;
|
||||||
import electrosphere.client.ui.components.NaturalInventoryPanel;
|
import electrosphere.client.ui.components.NaturalInventoryPanel;
|
||||||
@ -63,6 +64,7 @@ public class MenuGeneratorsUITesting {
|
|||||||
"EquipInventoryPanel",
|
"EquipInventoryPanel",
|
||||||
"VoxelPicker",
|
"VoxelPicker",
|
||||||
"EntitySpawnPicker",
|
"EntitySpawnPicker",
|
||||||
|
"CraftingPanel",
|
||||||
}),
|
}),
|
||||||
(ValueChangeEvent event) -> {
|
(ValueChangeEvent event) -> {
|
||||||
attachComponent(rVal,event.getAsString());
|
attachComponent(rVal,event.getAsString());
|
||||||
@ -151,6 +153,9 @@ public class MenuGeneratorsUITesting {
|
|||||||
System.out.println(entType.getId());
|
System.out.println(entType.getId());
|
||||||
}));
|
}));
|
||||||
} break;
|
} break;
|
||||||
|
case "CraftingPanel": {
|
||||||
|
formEl.addChild(CraftingPanel.createCraftingPanelComponent());
|
||||||
|
} break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -11,6 +11,11 @@ public class RecipeData {
|
|||||||
* The id of the recipe
|
* The id of the recipe
|
||||||
*/
|
*/
|
||||||
int id;
|
int id;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The display name for the recipe
|
||||||
|
*/
|
||||||
|
String displayName;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* The ingredients required for the recipe
|
* The ingredients required for the recipe
|
||||||
@ -70,6 +75,14 @@ public class RecipeData {
|
|||||||
this.id = id;
|
this.id = id;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Gets the display name
|
||||||
|
* @return The display name
|
||||||
|
*/
|
||||||
|
public String getDisplayName(){
|
||||||
|
return displayName;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user