use of buildcraft.lib.gui.IContainingElement in project BuildCraft by BuildCraft.
the class ElementType method deserialize.
public final IGuiElement deserialize(BuildCraftJsonGui gui, IGuiPosition parent, JsonGuiInfo info, JsonGuiElement json) {
IGuiElement element = deserialize0(gui, parent, info, json);
if (element instanceof GuiElementSimple) {
((GuiElementSimple) element).name = json.fullName;
}
gui.context.putConstant(json.fullName + ".pos", IGuiPosition.class, element);
gui.context.putConstant(json.fullName + ".area", IGuiArea.class, element);
gui.varData.addNodes(json.createTickableNodes());
List<IGuiElement> children = new ArrayList<>();
IContainingElement container;
if (element instanceof IContainingElement) {
container = (IContainingElement) element;
} else {
container = new GuiElementContainerResizing(gui, element);
container.getChildElements().add(element);
}
addChildren(gui, container.getChildElementPosition(), info, json, "children", children::add);
// Special case tooltips + help
if (json.json.has("help") && !(this instanceof ElementTypeHelp)) {
addType(gui, parent, info, json, "help", children::add, ElementTypeHelp.INSTANCE);
}
if (json.json.has("tooltip") && !(this instanceof ElementTypeToolTip)) {
addType(gui, parent, info, json, "tooltip", children::add, ElementTypeToolTip.INSTANCE);
}
if (!children.isEmpty()) {
element = container;
container.getChildElements().addAll(children);
container.calculateSizes();
}
return element;
}
use of buildcraft.lib.gui.IContainingElement in project BuildCraft by BuildCraft.
the class BuildCraftJsonGui method load.
public final void load() {
ResourceLoaderContext loadHistory = new ResourceLoaderContext();
try (InputStreamReader reader = loadHistory.startLoading(jsonGuiDefinition)) {
JsonObject obj = new Gson().fromJson(reader, JsonObject.class);
JsonGuiInfo info = new JsonGuiInfo(obj, context, loadHistory);
sizeX = (int) GenericExpressionCompiler.compileExpressionLong(info.sizeX, context).evaluate();
sizeY = (int) GenericExpressionCompiler.compileExpressionLong(info.sizeY, context).evaluate();
varData.setNodes(info.createTickableNodes());
for (JsonGuiElement elem : info.elements) {
String typeName = elem.properties.get("type");
ElementType type = JsonGuiTypeRegistry.TYPES.get(typeName);
if (type == null) {
BCLog.logger.warn("Unknown type " + typeName);
} else {
IGuiElement e = type.deserialize(this, rootElement, info, elem);
String parent = elem.properties.get("parent");
IContainingElement p = properties.get("custom." + parent, IContainingElement.class);
properties.put("custom." + elem.name, e);
if (p == null) {
shownElements.add(e);
} else {
p.getChildElements().add(e);
p.calculateSizes();
}
}
}
} catch (InvalidExpressionException iee) {
throw new JsonSyntaxException("Failed to resolve the size of " + jsonGuiDefinition, iee);
} catch (IOException e) {
throw new Error(e);
}
loadHistory.finishLoading();
}
Aggregations