Control panels can be disassembled in the panel creator now

added the missing background textures
changed the "base item" for control panels to be a basic machine casing
This commit is contained in:
malte0811 2017-05-01 18:40:29 +02:00
parent 6717e7c815
commit 4586e57b84
18 changed files with 126 additions and 84 deletions

View file

@ -133,7 +133,7 @@ public class TileEntityPanel extends TileEntityIWBase implements IDirectionalTil
}
}
public void readFromItemNBT(NBTTagCompound nbt) {
public void readFromItemNBT(@Nullable NBTTagCompound nbt) {
if (nbt!=null) {
NBTTagList l = nbt.getTagList("components", 10);
PanelUtils.readListFromNBT(l, components);

View file

@ -128,7 +128,7 @@ public class TileEntityPanelCreator extends TileEntityIWBase implements IIEInven
}
break;
case CREATE_PANEL:
if (ApiUtils.compareToOreName(inv[0], "plateIron")) {
if (PanelUtils.getPanelBase().equals(inv[0])) {
NBTTagCompound panelNBT = new NBTTagCompound();
writeToItemNBT(panelNBT, true);
ItemStack panel = new ItemStack(IndustrialWires.panel, 1, BlockTypes_Panel.TOP.ordinal());
@ -151,6 +151,15 @@ public class TileEntityPanelCreator extends TileEntityIWBase implements IIEInven
}
}
break;
case DISASSEMBLE:
if (components.size() == 0 && inv[0] != null && inv[0].getItem() == PanelUtils.PANEL_ITEM) {
TileEntityPanel te = new TileEntityPanel();
te.readFromItemNBT(inv[0].getTagCompound());
components = new ArrayList<>(te.getComponents());
height = te.getComponents().height;
inv[0] = null;
}
break;
}
markDirty();
IBlockState state = worldObj.getBlockState(pos);

View file

@ -11,6 +11,7 @@ import malte0811.industrialWires.containers.ContainerPanelComponent;
import malte0811.industrialWires.controlpanel.IConfigurableComponent;
import malte0811.industrialWires.controlpanel.PanelComponent;
import malte0811.industrialWires.network.MessageComponentSync;
import net.minecraft.client.gui.Gui;
import net.minecraft.client.gui.GuiTextField;
import net.minecraft.client.gui.inventory.GuiContainer;
import net.minecraft.client.renderer.GlStateManager;
@ -18,6 +19,7 @@ import net.minecraft.client.renderer.RenderHelper;
import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.nbt.NBTTagList;
import net.minecraft.util.EnumHand;
import net.minecraft.util.ResourceLocation;
import org.lwjgl.input.Keyboard;
import java.io.IOException;
@ -34,7 +36,6 @@ public class GuiPanelComponent extends GuiContainer {
private List<GuiIntChooser> intChoosers = new ArrayList<>();
private List<GuiSliderIE> floatSliders = new ArrayList<>();
//TODO int, float
public GuiPanelComponent(EnumHand h, PanelComponent pc) {
super(new ContainerPanelComponent(h));
container = (ContainerPanelComponent) inventorySlots;
@ -44,46 +45,53 @@ public class GuiPanelComponent extends GuiContainer {
@Override
public void initGui() {
super.initGui();
xSize = 150;
ySize = 150;
Keyboard.enableRepeatEvents(true);
if (component instanceof IConfigurableComponent) {
confComp = (IConfigurableComponent) component;
IConfigurableComponent.BoolConfig[] bools = confComp.getBooleanOptions();
boolButtons.clear();
int componentLeft = this.guiLeft+5;
int componentTop = this.guiTop+5;
for (int i = 0;i<bools.length;i++) {
IConfigurableComponent.BoolConfig bc = bools[i];
//TODO check whether ID==0 is a bad thing when using custom button lists
boolButtons.add(new GuiButtonCheckbox(0, guiLeft + bc.x, guiTop + bc.y, confComp.fomatConfigName(IConfigurableComponent.ConfigType.BOOL, i), bc.value));
boolButtons.add(new GuiButtonCheckbox(0, componentLeft + bc.x, componentTop + bc.y, confComp.fomatConfigName(IConfigurableComponent.ConfigType.BOOL, i), bc.value));
}
IConfigurableComponent.StringConfig[] strings = confComp.getStringOptions();
stringTexts.clear();
for (IConfigurableComponent.StringConfig sc : strings) {
GuiTextField toAdd = new GuiTextField(0, mc.fontRendererObj, guiLeft + sc.x, guiTop + sc.y, 58, 12);
GuiTextField toAdd = new GuiTextField(0, mc.fontRendererObj, componentLeft + sc.x, componentTop + sc.y, 58, 12);
toAdd.setText(sc.value);
stringTexts.add(toAdd);
}
IConfigurableComponent.RSChannelConfig[] rs = confComp.getRSChannelOptions();
rsChannelChoosers.clear();
for (IConfigurableComponent.RSChannelConfig rc : rs) {
rsChannelChoosers.add(new GuiChannelPicker(0, guiLeft + rc.x, guiTop + rc.y, 40, rc.value));
rsChannelChoosers.add(new GuiChannelPicker(0, componentLeft + rc.x, componentTop + rc.y, 40, rc.value));
}
intChoosers.clear();
IConfigurableComponent.IntConfig[] is = confComp.getIntegerOptions();
for (IConfigurableComponent.IntConfig ic : is) {
intChoosers.add(new GuiIntChooser(guiLeft+ic.x, guiTop+ic.y, ic.allowNegative, ic.value, ic.digits));
intChoosers.add(new GuiIntChooser(componentLeft+ic.x, componentTop+ic.y, ic.allowNegative, ic.value, ic.digits));
}
floatSliders.clear();
IConfigurableComponent.FloatConfig[] fs = confComp.getFloatOptions();
for (int i = 0;i<fs.length;i++) {
IConfigurableComponent.FloatConfig fc = fs[i];
floatSliders.add(new GuiSliderIE(0, guiLeft+fc.x, guiTop+fc.y, fc.width,
floatSliders.add(new GuiSliderIE(0, componentLeft+fc.x, componentTop+fc.y, fc.width,
confComp.fomatConfigName(IConfigurableComponent.ConfigType.FLOAT, i), fc.value));
}
}
}
private ResourceLocation textureLoc = new ResourceLocation(IndustrialWires.MODID, "textures/gui/panel_component.png");
@Override
protected void drawGuiContainerBackgroundLayer(float partialTicks, int mouseX, int mouseY) {
//TODO background
ResourceLocation textureLoc = new ResourceLocation(IndustrialWires.MODID, "textures/gui/panel_component.png");
GlStateManager.color(1,1,1,1);
mc.getTextureManager().bindTexture(textureLoc);
Gui.drawModalRectWithCustomSizedTexture(guiLeft, guiTop, 0, 0, xSize, ySize, 150, 150);
}
@Override
@ -224,7 +232,7 @@ public class GuiPanelComponent extends GuiContainer {
}
for (int i = 0;i<floatSliders.size();i++) {
GuiSliderIE choose = floatSliders.get(i);
String tooltip = confComp.fomatConfigDescription(IConfigurableComponent.ConfigType.INT, i);
String tooltip = confComp.fomatConfigDescription(IConfigurableComponent.ConfigType.FLOAT, i);
if (tooltip!=null&&choose.isMouseOver()) {
ClientUtils.drawHoveringText(ImmutableList.of(tooltip), mouseX, mouseY, mc.fontRendererObj);
}

View file

@ -55,8 +55,6 @@ public class GuiPanelCreator extends GuiContainer {
@Override
protected void drawGuiContainerBackgroundLayer(float partialTicks, int mouseX, int mouseY) {
//TODO proper background
textureLoc = new ResourceLocation(IndustrialWires.MODID, "textures/gui/panel_creator.png");
GlStateManager.color(1,1,1,1);
mc.getTextureManager().bindTexture(textureLoc);
this.drawTexturedModalRect(guiLeft,guiTop, 0, 0, xSize, ySize);
@ -121,8 +119,9 @@ public class GuiPanelCreator extends GuiContainer {
buttonList.clear();
int buttonTop = guiTop+62;
buttonList.add(new GuiButton(0, guiLeft+2, buttonTop, 20, 20, "C"));
buttonList.add(new GuiButton(1, guiLeft+2, buttonTop+22, 20, 20, "D"));
buttonList.add(new GuiButton(1, guiLeft+2, buttonTop+22, 20, 20, "R"));
buttonList.add(new GuiButton(2, guiLeft+2, buttonTop+44, 20, 20, "S"));
buttonList.add(new GuiButton(3, guiLeft+2, buttonTop-54, 20, 20, "D"));
}
@Override
@ -195,6 +194,9 @@ public class GuiPanelCreator extends GuiContainer {
case 2:
snapToGrid = !snapToGrid;
break;
case 3:
nbt.setInteger("type", MessageType.DISASSEMBLE.ordinal());
break;
}
if (!nbt.hasNoTags()) {
IndustrialWires.packetHandler.sendToServer(new MessageGUIInteract(container.tile, nbt));

View file

@ -20,54 +20,56 @@ package malte0811.industrialWires.client.gui;
import malte0811.industrialWires.IndustrialWires;
import malte0811.industrialWires.blocks.controlpanel.TileEntityRSPanelConn;
import malte0811.industrialWires.client.gui.elements.GuiIntChooser;
import malte0811.industrialWires.containers.ContainerRSPanelConn;
import malte0811.industrialWires.network.MessageGUIInteract;
import net.minecraft.client.gui.GuiButton;
import net.minecraft.client.gui.GuiLabel;
import net.minecraft.client.gui.GuiScreen;
import net.minecraft.client.gui.Gui;
import net.minecraft.client.gui.inventory.GuiContainer;
import net.minecraft.client.renderer.GlStateManager;
import net.minecraft.client.renderer.RenderHelper;
import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.util.ResourceLocation;
import java.io.IOException;
public class GuiRSPanelConn extends GuiScreen {
public class GuiRSPanelConn extends GuiContainer {
private TileEntityRSPanelConn te;
private int curr = 0;
private GuiIntChooser chooser;
public GuiRSPanelConn(TileEntityRSPanelConn tile) {
super(new ContainerRSPanelConn(tile));
te = tile;
}
@Override
public void initGui() {
super.initGui();
buttonList.clear();
buttonList.add(new GuiButton(0, width/2-8, height/2-32, 16, 16, "+1"));
buttonList.add(new GuiButton(1, width/2-8, height/2+32, 16, 16, "-1"));
buttonList.add(new GuiButton(2, width/2-8, height/2+48, 16, 16, "Ok"));
curr = te.getRsId();
onChange();
chooser = new GuiIntChooser((width-32)/2, (height-4)/2, false, te.getRsId(), 2);
xSize = 64;
ySize = 64;
guiLeft = (width-xSize)/2;
guiTop = (height-ySize)/2;
}
@Override
protected void actionPerformed(GuiButton button) throws IOException {
super.actionPerformed(button);
switch (button.id) {
case 0:
curr++;
onChange();
break;
case 1:
curr--;
onChange();
break;
case 2:
mc.displayGuiScreen(null);
mc.setIngameFocus();
break;
}
protected void mouseClicked(int mouseX, int mouseY, int mouseButton) throws IOException {
super.mouseClicked(mouseX, mouseY, mouseButton);
chooser.click(mouseX, mouseY);
}
@Override
public void drawBackground(int tint) {
super.drawBackground(tint);
//TODO proper background
public void drawScreen(int mouseX, int mouseY, float partialTicks) {
super.drawScreen(mouseX, mouseY, partialTicks);
GlStateManager.color(1, 1, 1, 1);
RenderHelper.disableStandardItemLighting();
chooser.drawChooser();
RenderHelper.enableStandardItemLighting();
}
private ResourceLocation textureLoc = new ResourceLocation(IndustrialWires.MODID, "textures/gui/rs_wire_controller.png");
@Override
protected void drawGuiContainerBackgroundLayer(float partialTicks, int mouseX, int mouseY) {
GlStateManager.color(1,1,1,1);
mc.getTextureManager().bindTexture(textureLoc);
Gui.drawModalRectWithCustomSizedTexture(guiLeft, guiTop, 0, 0, xSize, ySize, 64, 64);
}
@Override
@ -75,14 +77,16 @@ public class GuiRSPanelConn extends GuiScreen {
return false;
}
@Override
public void onGuiClosed() {
super.onGuiClosed();
onChange();
}
private void onChange() {
curr = Math.max(0, curr);
labelList.clear();
labelList.add(new GuiLabel(mc.fontRendererObj, 0, width/2-8, height/2-8, 16, 16, 0xff0000));
labelList.get(0).addLine(Integer.toString(curr));
if (curr!=te.getRsId()) {
if (chooser.getValue()!=te.getRsId()) {
NBTTagCompound nbt = new NBTTagCompound();
nbt.setInteger("rsId", curr);
nbt.setInteger("rsId", chooser.getValue());
IndustrialWires.packetHandler.sendToServer(new MessageGUIInteract(te, nbt));
}
}

View file

@ -7,8 +7,9 @@ public class GuiIntChooser extends Gui {
private boolean allowNegative;
private int value;
private int xPos, yPos;
private int xBtn;
private int xPlus;
private int max;
private String format;
private Minecraft mc = Minecraft.getMinecraft();
public GuiIntChooser(int x, int y, boolean neg, int initialValue, int digits) {
allowNegative = neg;
@ -16,25 +17,29 @@ public class GuiIntChooser extends Gui {
xPos = x;
yPos = y;
max = (int) Math.pow(10, digits)-1;
xBtn = x+mc.fontRendererObj.getCharWidth('0')*(digits+1);
xPlus = x+mc.fontRendererObj.getCharWidth('0')*(digits+(allowNegative?1:0))+mc.fontRendererObj.getCharWidth('-')+2;
format = "%"+digits+"s";
}
public void drawChooser() {
int color = 0xE0E0E0;
mc.fontRendererObj.drawStringWithShadow(Integer.toString(value), xPos, yPos, color);
//TODO nicer buttons
mc.fontRendererObj.drawStringWithShadow("^", xBtn, yPos, color);
mc.fontRendererObj.drawStringWithShadow("V", xBtn, yPos+mc.fontRendererObj.FONT_HEIGHT/2, color);
String val = String.format(format, Integer.toString(value)).replace(' ', '0');
if (value>=0&&allowNegative) {
val = "+"+val;
}
mc.fontRendererObj.drawStringWithShadow(val, xPos+mc.fontRendererObj.getCharWidth('-')+1, yPos, color);
mc.fontRendererObj.drawStringWithShadow("-", xPos, yPos, color);
mc.fontRendererObj.drawStringWithShadow("+", xPlus, yPos, color);
}
public void click(int x, int y) {
int height = mc.fontRendererObj.FONT_HEIGHT;
if (x>=xBtn&&x<xBtn+mc.fontRendererObj.getCharWidth('V')) {
if (y>=yPos&&y<yPos+height/2) {
if (value<max) {
if (y >= yPos && y < yPos + height) {
if (x >= xPlus && x < xPlus + mc.fontRendererObj.getCharWidth('+')) {
if (value < max) {
value++;
}
} else if (y<yPos+height&&y>=yPos+height/2) {
if (allowNegative||value>0) {
} else if (x >= xPos && x <= xPos + mc.fontRendererObj.getCharWidth('-')) {
if (value > (allowNegative ? -value : 0)) {
value--;
}
}
@ -46,6 +51,6 @@ public class GuiIntChooser extends Gui {
}
public boolean isMouseOver(int mX, int mY) {
return mX>=xPos&&mX<xBtn+mc.fontRendererObj.getCharWidth('V')&&mY>=yPos&&mY<yPos+mc.fontRendererObj.FONT_HEIGHT;
return mX>=xPos&&mX< xPlus +mc.fontRendererObj.getCharWidth('V')&&mY>=yPos&&mY<yPos+mc.fontRendererObj.FONT_HEIGHT;
}
}

View file

@ -21,7 +21,6 @@ package malte0811.industrialWires.client.panelmodel;
import com.google.common.cache.Cache;
import com.google.common.cache.CacheBuilder;
import com.google.common.collect.ImmutableList;
import malte0811.industrialWires.IndustrialWires;
import malte0811.industrialWires.blocks.controlpanel.BlockTypes_Panel;
import malte0811.industrialWires.blocks.controlpanel.PropertyComponents;
import malte0811.industrialWires.blocks.controlpanel.PropertyComponents.PanelRenderProperties;
@ -31,7 +30,6 @@ import net.minecraft.block.state.IBlockState;
import net.minecraft.client.renderer.block.model.*;
import net.minecraft.client.renderer.texture.TextureAtlasSprite;
import net.minecraft.entity.EntityLivingBase;
import net.minecraft.item.Item;
import net.minecraft.item.ItemStack;
import net.minecraft.util.EnumFacing;
import net.minecraft.world.World;
@ -160,7 +158,6 @@ public class PanelModel implements IBakedModel {
}
private static final Item panel = new ItemStack(IndustrialWires.panel).getItem();
private static final PanelItemOverride INSTANCE = new PanelItemOverride();
private static class PanelItemOverride extends ItemOverrideList {
@ -175,7 +172,7 @@ public class PanelModel implements IBakedModel {
@Nonnull
@Override
public IBakedModel handleItemState(@Nonnull IBakedModel originalModel, ItemStack stack, World world, EntityLivingBase entity) {
if (stack != null && stack.getItem() == panel && stack.getMetadata() == BlockTypes_Panel.TOP.ordinal()) {
if (stack != null && stack.getItem() == PanelUtils.PANEL_ITEM && stack.getMetadata() == BlockTypes_Panel.TOP.ordinal()) {
try {
return ITEM_MODEL_CACHE.get(stack, ()-> {
TileEntityPanel te = new TileEntityPanel();

View file

@ -18,9 +18,9 @@
package malte0811.industrialWires.containers;
import blusunrize.immersiveengineering.api.ApiUtils;
import blusunrize.immersiveengineering.common.gui.ContainerIEBase;
import malte0811.industrialWires.blocks.controlpanel.TileEntityPanelCreator;
import malte0811.industrialWires.controlpanel.PanelUtils;
import net.minecraft.entity.player.InventoryPlayer;
import net.minecraft.inventory.Slot;
import net.minecraft.item.ItemStack;
@ -42,8 +42,9 @@ public class ContainerPanelCreator extends ContainerIEBase<TileEntityPanelCreato
@Override
public boolean isItemValid(@Nullable ItemStack stack) {
return ApiUtils.compareToOreName(stack, "plateIron");
return stack != null && (ItemStack.areItemStacksEqual(stack, PanelUtils.getPanelBase()) || stack.getItem() == PanelUtils.PANEL_ITEM);
}
});
for (int i = 0; i < 3; i++)
for (int j = 0; j < 9; j++)

View file

@ -215,17 +215,19 @@ public class IndicatorLight extends PanelComponent implements IConfigurableCompo
@Override
public IntConfig[] getIntegerOptions() {
return new IntConfig[] {
new IntConfig("rsId", 0, 45, rsInputId, 3, false)
new IntConfig("rsId", 0, 45, rsInputId, 2, false)
};
}
@Override
public FloatConfig[] getFloatOptions() {
float[] color = PanelUtils.getFloatColor(true, this.colorA);
int x = 70;
int yOffset = 10;
return new FloatConfig[]{
new FloatConfig("red", 0, 70, color[0], 60),
new FloatConfig("green", 0, 90, color[1], 60),
new FloatConfig("blue", 0, 110, color[2], 60)
new FloatConfig("red", x, yOffset, color[0], 60),
new FloatConfig("green", x, yOffset+20, color[1], 60),
new FloatConfig("blue", x, yOffset+40, color[2], 60)
};
}

View file

@ -178,9 +178,9 @@ public class Label extends PanelComponent implements IConfigurableComponent {
public FloatConfig[] getFloatOptions() {
float[] color = PanelUtils.getFloatColor(true, this.color);
return new FloatConfig[]{
new FloatConfig("red", 0, 20, color[0], 60),
new FloatConfig("green", 0, 40, color[1], 60),
new FloatConfig("blue", 0, 60, color[2], 60)
new FloatConfig("red", 0, 30, color[0], 60),
new FloatConfig("green", 0, 50, color[1], 60),
new FloatConfig("blue", 0, 70, color[2], 60)
};
}
}

View file

@ -255,21 +255,23 @@ public class LightedButton extends PanelComponent implements IConfigurableCompon
@Override
public IntConfig[] getIntegerOptions() {
return new IntConfig[]{new IntConfig("rsId", 0, 70, rsOutputId, 2, false)};
return new IntConfig[]{new IntConfig("rsId", 0, 50, rsOutputId, 2, false)};
}
@Override
public BoolConfig[] getBooleanOptions() {
return new BoolConfig[]{new BoolConfig("latching", 0, 50, latching)};
return new BoolConfig[]{new BoolConfig("latching", 0, 70, latching)};
}
@Override
public FloatConfig[] getFloatOptions() {
float[] color = PanelUtils.getFloatColor(true, this.color);
int x = 70;
int yOffset = 10;
return new FloatConfig[]{
new FloatConfig("red", 0, 100, color[0], 60),
new FloatConfig("green", 0, 120, color[1], 60),
new FloatConfig("blue", 0, 140, color[2], 60)
new FloatConfig("red", x, yOffset, color[0], 60),
new FloatConfig("green", x, yOffset+20, color[1], 60),
new FloatConfig("blue", x, yOffset+40, color[2], 60)
};
}

View file

@ -22,5 +22,6 @@ public enum MessageType {
ADD,
REMOVE,
CREATE_PANEL,
REMOVE_ALL;
REMOVE_ALL,
DISASSEMBLE;
}

View file

@ -20,6 +20,7 @@ package malte0811.industrialWires.controlpanel;
import blusunrize.immersiveengineering.api.Lib;
import blusunrize.immersiveengineering.common.util.chickenbones.Matrix4;
import ic2.api.item.IC2Items;
import malte0811.industrialWires.IndustrialWires;
import malte0811.industrialWires.blocks.controlpanel.PropertyComponents.PanelRenderProperties;
import malte0811.industrialWires.client.RawQuad;
@ -30,6 +31,7 @@ import net.minecraft.client.renderer.vertex.DefaultVertexFormats;
import net.minecraft.client.renderer.vertex.VertexFormat;
import net.minecraft.client.resources.I18n;
import net.minecraft.item.EnumDyeColor;
import net.minecraft.item.Item;
import net.minecraft.item.ItemStack;
import net.minecraft.nbt.NBTBase;
import net.minecraft.nbt.NBTTagCompound;
@ -51,6 +53,8 @@ import static malte0811.industrialWires.controlpanel.PanelComponent.*;
public final class PanelUtils {
public static TextureAtlasSprite PANEL_TEXTURE;
public static final Item PANEL_ITEM = new ItemStack(IndustrialWires.panel).getItem();
private static ItemStack panelBase;
private PanelUtils() {
}
@ -267,4 +271,11 @@ public final class PanelUtils {
}
}
}
public static ItemStack getPanelBase() {
if (panelBase==null) {
panelBase = IC2Items.getItem("resource", "machine");
}
return panelBase;
}
}

View file

@ -278,7 +278,7 @@ public class Slider extends PanelComponent implements IConfigurableComponent {
@Override
public IntConfig[] getIntegerOptions() {
return new IntConfig[] {
new IntConfig("rsId", 0, 50, rsId, 3, false)
new IntConfig("rsId", 0, 50, rsId, 2, false)
};
}

View file

@ -91,7 +91,7 @@
"thirdperson_righthand": { "translation": [ -0.0625, 0.125, 0.1875 ], "rotation": [{ "x": 70 }, { "y": 70 }]},
"thirdperson_lefthand": { "translation": [ -0.0625, 0.125, 0.1875 ], "rotation": [{ "x": 70 }, { "y": 70 }]},
"fixed": {"scale": [ 2,2,2 ], "translation": [ 0, 0, 0 ], "rotation": [{ "y": -90 }]},
"gui": { "translation": [ 0, 0.0625, 0 ], "rotation": [{ "x": 30 },{ "y": 135 },{ "z": 0 }], "scale": [ 1.5, 1.5, 1.5 ] }
"gui": { "translation": [ 0, 0.0625, 0 ], "rotation": [{ "x": 30 },{ "y": 135 },{ "z": 0 }], "scale": [ 1.25, 1.25, 1.25 ] }
}
},
"inventory,type=top": {

View file

@ -43,7 +43,7 @@ industrialwires.desc.disable_snap=Allow free placing of components
industrialwires.desc.latching=Latching
industrialwires.desc.latching_info=Does this button stay on indefinitely?
industrialwires.desc.rschannel_info=The channel/color to output a signal to
industrialwires.desc.rsid_info=The ID of the panel connector to output a signal to
industrialwires.desc.rsid_info=The ID of the redstone wire controller to output a signal to
industrialwires.desc.label_text=The text in this label
industrialwires.desc.red=Red
industrialwires.desc.green=Green

Binary file not shown.

After

Width:  |  Height:  |  Size: 478 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 307 B