Search in sources :

Example 11 with Opcode

use of mcjty.rftoolscontrol.api.code.Opcode in project RFToolsControl by McJty.

the class GuiProgrammer method handleNewIconOverlay.

// Try to make a connection to this one in case there are no connections yet
private void handleNewIconOverlay(IIcon icon, int x, int y) {
    // We didn't move, do nothing
    if (x == iconLeavesFromX && y == iconLeavesFromY) {
        return;
    }
    Opcode opcode = Opcodes.OPCODES.get(icon.getID());
    if (opcode.isEvent()) {
        return;
    }
    tryConnectToThis(x - 1, y, icon, Connection.RIGHT);
    tryConnectToThis(x + 1, y, icon, Connection.LEFT);
    tryConnectToThis(x, y - 1, icon, Connection.DOWN);
    tryConnectToThis(x, y + 1, icon, Connection.UP);
}
Also used : Opcode(mcjty.rftoolscontrol.api.code.Opcode)

Example 12 with Opcode

use of mcjty.rftoolscontrol.api.code.Opcode in project RFToolsControl by McJty.

the class GridInstance method readFromJson.

public static GridInstance readFromJson(JsonElement element) {
    JsonObject gridObject = element.getAsJsonObject();
    String id = gridObject.get("id").getAsString();
    GridInstance.Builder builder = GridInstance.builder(id);
    if (gridObject.has("primary")) {
        String primary = gridObject.get("primary").getAsString();
        builder.primaryConnection(Connection.getConnection(primary));
    }
    if (gridObject.has("secondary")) {
        String secondary = gridObject.get("secondary").getAsString();
        builder.secondaryConnection(Connection.getConnection(secondary));
    }
    Opcode opcode = Opcodes.OPCODES.get(id);
    if (opcode == null) {
        // Sanity check in case an opcode got removed
        return null;
    }
    List<ParameterDescription> parameters = opcode.getParameters();
    JsonArray parameterArray = gridObject.get("parameters").getAsJsonArray();
    for (int i = 0; i < parameterArray.size(); i++) {
        JsonObject parObject = parameterArray.get(i).getAsJsonObject();
        Parameter parameter = ParameterTools.readFromJson(parObject);
        if (parameter.getParameterType() != parameters.get(i).getType()) {
            // Sanity check
            builder.parameter(Parameter.builder().type(parameters.get(i).getType()).value(ParameterValue.constant(null)).build());
        } else {
            builder.parameter(parameter);
        }
    }
    return builder.build();
}
Also used : JsonArray(com.google.gson.JsonArray) JsonObject(com.google.gson.JsonObject) Opcode(mcjty.rftoolscontrol.api.code.Opcode) Parameter(mcjty.rftoolscontrol.api.parameters.Parameter) ParameterDescription(mcjty.rftoolscontrol.api.parameters.ParameterDescription)

Example 13 with Opcode

use of mcjty.rftoolscontrol.api.code.Opcode in project RFToolsControl by McJty.

the class GridInstance method readFromNBT.

public static GridInstance readFromNBT(NBTTagCompound tag) {
    String opcodeid = tag.getString("id");
    GridInstance.Builder builder = GridInstance.builder(opcodeid);
    if (tag.hasKey("prim")) {
        builder.primaryConnection(Connection.getConnection(tag.getString("prim")));
    }
    if (tag.hasKey("sec")) {
        builder.secondaryConnection(Connection.getConnection(tag.getString("sec")));
    }
    Opcode opcode = Opcodes.OPCODES.get(opcodeid);
    if (opcode == null) {
        // Sanity check in case an opcode got removed
        return null;
    }
    List<ParameterDescription> parameters = opcode.getParameters();
    NBTTagList parList = tag.getTagList("pars", Constants.NBT.TAG_COMPOUND);
    for (int i = 0; i < parList.tagCount(); i++) {
        NBTTagCompound parTag = (NBTTagCompound) parList.get(i);
        Parameter parameter = ParameterTools.readFromNBT(parTag);
        if (parameter.getParameterType() != parameters.get(i).getType()) {
            // Sanity check
            builder.parameter(Parameter.builder().type(parameters.get(i).getType()).value(ParameterValue.constant(null)).build());
        } else {
            builder.parameter(parameter);
        }
    }
    return builder.build();
}
Also used : NBTTagList(net.minecraft.nbt.NBTTagList) NBTTagCompound(net.minecraft.nbt.NBTTagCompound) Opcode(mcjty.rftoolscontrol.api.code.Opcode) Parameter(mcjty.rftoolscontrol.api.parameters.Parameter) ParameterDescription(mcjty.rftoolscontrol.api.parameters.ParameterDescription)

Example 14 with Opcode

use of mcjty.rftoolscontrol.api.code.Opcode in project RFToolsControl by McJty.

the class CompiledCard method compile.

public static CompiledCard compile(ProgramCardInstance cardInstance) {
    if (cardInstance == null) {
        return null;
    }
    CompiledCard card = new CompiledCard();
    Map<GridPos, GridInstance> gridInstances = cardInstance.getGridInstances();
    // First find the indices of all compiled grid instances
    Map<GridPos, Integer> posToIndex = new HashMap<>();
    for (Map.Entry<GridPos, GridInstance> entry : gridInstances.entrySet()) {
        GridPos location = entry.getKey();
        posToIndex.put(location, posToIndex.size());
    }
    // Index of a dummy stop opcode that we can use to go too in case there is no real connection
    int stopIdx = posToIndex.size();
    for (Map.Entry<GridPos, GridInstance> entry : gridInstances.entrySet()) {
        GridPos location = entry.getKey();
        GridInstance grid = entry.getValue();
        String id = grid.getId();
        Opcode opcode = Opcodes.OPCODES.get(id);
        GridPos primaryOutput = grid.getPrimaryConnection() != null ? grid.getPrimaryConnection().offset(location) : null;
        GridPos secondaryOutput = grid.getSecondaryConnection() != null ? grid.getSecondaryConnection().offset(location) : null;
        CompiledOpcode.Builder opcodeBuilder = CompiledOpcode.builder().opcode(opcode);
        opcodeBuilder.grid(location.getX(), location.getY());
        if (primaryOutput != null && posToIndex.containsKey(primaryOutput)) {
            opcodeBuilder.primaryIndex(posToIndex.get(primaryOutput));
        } else {
            opcodeBuilder.primaryIndex(stopIdx);
        }
        if (secondaryOutput != null && posToIndex.containsKey(secondaryOutput)) {
            opcodeBuilder.secondaryIndex(posToIndex.get(secondaryOutput));
        } else {
            opcodeBuilder.secondaryIndex(stopIdx);
        }
        List<ParameterDescription> parameters = opcode.getParameters();
        boolean single = false;
        for (int i = 0; i < grid.getParameters().size(); i++) {
            Parameter parameter = grid.getParameters().get(i);
            if (i < parameters.size() && "single".equals(parameters.get(i).getName())) {
                single = TypeConverters.convertToBool(parameter);
            }
            opcodeBuilder.parameter(parameter);
        }
        if (opcode.isEvent()) {
            card.events.putIfAbsent(opcode, new ArrayList<>());
            card.events.get(opcode).add(new CompiledEvent(card.opcodes.size(), single));
        }
        card.opcodes.add(opcodeBuilder.build());
    }
    card.opcodes.add(CompiledOpcode.builder().opcode(Opcodes.DO_STOP_OR_RESUME).build());
    for (Opcode opcode : Opcodes.OPCODES.values()) {
        if (!card.events.containsKey(opcode)) {
            card.events.put(opcode, Collections.emptyList());
        }
    }
    return card;
}
Also used : Opcode(mcjty.rftoolscontrol.api.code.Opcode) GridInstance(mcjty.rftoolscontrol.logic.grid.GridInstance) GridPos(mcjty.rftoolscontrol.logic.grid.GridPos) Parameter(mcjty.rftoolscontrol.api.parameters.Parameter) ParameterDescription(mcjty.rftoolscontrol.api.parameters.ParameterDescription)

Aggregations

Opcode (mcjty.rftoolscontrol.api.code.Opcode)14 ParameterDescription (mcjty.rftoolscontrol.api.parameters.ParameterDescription)8 Parameter (mcjty.rftoolscontrol.api.parameters.Parameter)6 IIcon (mcjty.lib.gui.icons.IIcon)4 GridInstance (mcjty.rftoolscontrol.logic.grid.GridInstance)4 ParameterValue (mcjty.rftoolscontrol.api.parameters.ParameterValue)3 Panel (mcjty.lib.gui.widgets.Panel)2 Connection (mcjty.rftoolscontrol.logic.Connection)2 GridPos (mcjty.rftoolscontrol.logic.grid.GridPos)2 JsonArray (com.google.gson.JsonArray)1 JsonObject (com.google.gson.JsonObject)1 List (java.util.List)1 ImageIcon (mcjty.lib.gui.icons.ImageIcon)1 HorizontalLayout (mcjty.lib.gui.layout.HorizontalLayout)1 ProgramCardInstance (mcjty.rftoolscontrol.logic.grid.ProgramCardInstance)1 NBTTagCompound (net.minecraft.nbt.NBTTagCompound)1 NBTTagList (net.minecraft.nbt.NBTTagList)1 ResourceLocation (net.minecraft.util.ResourceLocation)1 Pair (org.apache.commons.lang3.tuple.Pair)1