ccIDE/blocks/CCTurtle/generator.js
damp11113 acab98dfa6 update 1.1.2 and add new block
added block CCRedstone and CCRednet
and CCTurtle is finished
2024-07-17 22:32:34 +07:00

354 lines
9.5 KiB
JavaScript

const { luaGenerator } = require('blockly/lua');
// Check if luaGenerator.forBlock is defined and initialize if necessary
if (!luaGenerator.forBlock) {
luaGenerator.forBlock = {};
}
luaGenerator.forBlock['turtle_move_operation'] = function(block, generator) {
var operator = block.getFieldValue('OPERATION');
var FOR = generator.valueToCode(block, 'FOR', generator.ORDER_ATOMIC);
var movecommand = '';
switch (operator) {
case 'FORWARD':
movecommand = 'turtle.forward()';
break;
case 'BACK':
movecommand = 'turtle.back()';
break;
case 'UP':
movecommand = 'turtle.up()';
break;
case 'DOWN':
movecommand = 'turtle.down()';
break;
default:
movecommand = 'turtle.forward()';
break;
}
if (FOR == 1) {
var code = movecommand;
} else {
var code = `for i=${FOR},1,-1 do ${movecommand} end`;
};
return code + "\n";
};
luaGenerator.forBlock['turtle_turn_operation'] = function(block, generator) {
var operator = block.getFieldValue('OPERATION');
var FOR = generator.valueToCode(block, 'ROUND', generator.ORDER_ATOMIC);
var movecommand = '';
switch (operator) {
case 'LEFT':
movecommand = 'turtle.turnLeft()';
break;
case 'RIGHT':
movecommand = 'turtle.turnRight()';
break;
default:
movecommand = 'turtle.turnLeft()';
break;
}
if (FOR == 1) {
var code = movecommand;
} else {
var code = `for i=${FOR},1,-1 do ${movecommand} end`;
};
return code + "\n";
};
luaGenerator.forBlock['turtle_turn_operation'] = function(block, generator) {
var operator = block.getFieldValue('OPERATION');
var FOR = generator.valueToCode(block, 'ROUND', generator.ORDER_ATOMIC);
var movecommand = '';
switch (operator) {
case 'LEFT':
movecommand = 'turtle.turnLeft()';
break;
case 'RIGHT':
movecommand = 'turtle.turnRight()';
break;
default:
movecommand = 'turtle.turnLeft()';
break;
}
if (FOR == 1) {
var code = movecommand;
} else {
var code = `for i=${FOR},1,-1 do ${movecommand} end`;
};
return code + "\n";
};
luaGenerator.forBlock['turtle_dig_operation'] = function(block, generator) {
var operator = block.getFieldValue('OPERATION');
var side = block.getFieldValue('SIDE');
var code = '';
switch (operator) {
case 'FRONT':
code = `turtle.dig("${side}")`;
break;
case 'UP':
code = `turtle.digUp("${side}")`;
break;
case 'DOWN':
code = `turtle.digDown("${side}")`;
break;
default:
code = `turtle.dig("${side}")`;
break;
}
return code + "\n";
};
luaGenerator.forBlock['turtle_attack_operation'] = function(block, generator) {
var operator = block.getFieldValue('OPERATION');
var side = block.getFieldValue('SIDE');
var code = '';
switch (operator) {
case 'FRONT':
code = `turtle.attack("${side}")`;
break;
case 'UP':
code = `turtle.attackUp("${side}")`;
break;
case 'DOWN':
code = `turtle.attackDown("${side}")`;
break;
default:
code = `turtle.attack("${side}")`;
break;
}
return code + "\n";
};
luaGenerator.forBlock['turtle_place_operation'] = function(block, generator) {
var operator = block.getFieldValue('OPERATION');
var code = '';
switch (operator) {
case 'FRONT':
code = `turtle.place()`;
break;
case 'UP':
code = `turtle.placeUp()`;
break;
case 'DOWN':
code = `turtle.placeDown()`;
break;
default:
code = `turtle.place()`;
break;
}
return code + "\n";
};
luaGenerator.forBlock['turtle_drop_operation'] = function(block, generator) {
var operator = block.getFieldValue('OPERATION');
var count = generator.valueToCode(block, 'COUNT', generator.ORDER_ATOMIC);
var code = '';
switch (operator) {
case 'FRONT':
code = `turtle.drop(${count})`;
break;
case 'UP':
code = `turtle.dropUp(${count})`;
break;
case 'DOWN':
code = `turtle.dropDown(${count})`;
break;
default:
code = `turtle.drop(${count})`;
break;
}
return code + "\n";
};
luaGenerator.forBlock['turtle_select_item'] = function(block, generator) {
var slot = generator.valueToCode(block, 'SLOT', generator.ORDER_ATOMIC);
return `turtle.select(${slot})\n`;
};
luaGenerator.forBlock['turtle_get_item_count'] = function(block, generator) {
var slot = generator.valueToCode(block, 'SLOT', generator.ORDER_ATOMIC);
return [`turtle.getItemCount(${slot})`, luaGenerator.ORDER_NONE];
};
luaGenerator.forBlock['turtle_get_slot_free'] = function(block, generator) {
var slot = generator.valueToCode(block, 'SLOT', generator.ORDER_ATOMIC);
return [`turtle.getItemSpace(${slot})`, luaGenerator.ORDER_NONE];
};
luaGenerator.forBlock['turtle_detect_block'] = function(block, generator) {
var operator = block.getFieldValue('OPERATION');
var code = '';
switch (operator) {
case 'FRONT':
code = `turtle.detect()`;
break;
case 'UP':
code = `turtle.detectUp()`;
break;
case 'DOWN':
code = `turtle.detectDown()`;
break;
default:
code = `turtle.detect()`;
break;
}
return [code, luaGenerator.ORDER_NONE];
};
luaGenerator.forBlock['turtle_compare_item'] = function(block, generator) {
var operator = block.getFieldValue('OPERATION');
var code = '';
switch (operator) {
case 'FRONT':
code = `turtle.compare()`;
break;
case 'UP':
code = `turtle.compareUp()`;
break;
case 'DOWN':
code = `turtle.compareDown()`;
break;
default:
code = `turtle.compare()`;
break;
}
return [code, luaGenerator.ORDER_NONE];
};
luaGenerator.forBlock['turtle_collect_item'] = function(block, generator) {
var count = generator.valueToCode(block, 'COUNT', generator.ORDER_ATOMIC);
var operator = block.getFieldValue('OPERATION');
var code = '';
switch (operator) {
case 'FRONT':
code = `turtle.suck(${count})`;
break;
case 'UP':
code = `turtle.suckUp(${count})`;
break;
case 'DOWN':
code = `turtle.suckDown(${count})`;
break;
default:
code = `turtle.suck(${count})`;
break;
}
return code + "\n";
};
luaGenerator.forBlock['turtle_get_fuel_level'] = function(block) {
return ["turtle.getFuelLevel()", luaGenerator.ORDER_NONE];
};
luaGenerator.forBlock['turtle_refuel'] = function(block, generator) {
var count = generator.valueToCode(block, 'COUNT', generator.ORDER_ATOMIC);
if (count == 0) {
var code = "turtle.refuel()"
} else {
var code = `turtle.refuel(${count})`
}
return code + "\n";
};
luaGenerator.forBlock['turtle_compare_to'] = function(block, generator) {
var slot = generator.valueToCode(block, 'SLOT', generator.ORDER_ATOMIC);
return [`turtle.compareTo(${slot})`, luaGenerator.ORDER_NONE];
};
luaGenerator.forBlock['turtle_transfer_to'] = function(block, generator) {
var slot = generator.valueToCode(block, 'SLOT', generator.ORDER_ATOMIC);
var count = generator.valueToCode(block, 'COUNT', generator.ORDER_ATOMIC);
return `turtle.transferTo(${slot}, ${count})\n`;
};
luaGenerator.forBlock['turtle_get_selected_slot'] = function(block) {
return [`turtle.getSelectedSlot()`, luaGenerator.ORDER_NONE];
};
luaGenerator.forBlock['turtle_get_fuel_limit'] = function(block) {
return [`turtle.getFuelLimit()`, luaGenerator.ORDER_NONE];
};
luaGenerator.forBlock['turtle_equip'] = function(block) {
var side = block.getFieldValue('SIDE');
var code = '';
switch (side) {
case 'LEFT':
code = `turtle.equipLeft()`;
break;
case 'RIGHT':
code = `turtle.equipRight() `;
break;
default:
code = `turtle.equipLeft()`;
break;
}
return [code, luaGenerator.ORDER_NONE];
};
luaGenerator.forBlock['turtle_inspect'] = function(block) {
var operator = block.getFieldValue('OPERATION');
var code = '';
switch (operator) {
case 'FRONT':
code = `turtle.inspect()`;
break;
case 'UP':
code = `turtle.inspectUp()`;
break;
case 'DOWN':
code = `turtle.inspectDown()`;
break;
default:
code = `turtle.inspect()`;
break;
}
return [code, luaGenerator.ORDER_NONE];
};
luaGenerator.forBlock['turtle_get_item_detail'] = function(block, generator) {
var slot = generator.valueToCode(block, 'SLOT', generator.ORDER_ATOMIC);
return [`turtle.getItemDetail(${slot})`, luaGenerator.ORDER_NONE];
};
luaGenerator.forBlock['turtle_craft'] = function(block, generator) {
var limit = generator.valueToCode(block, 'LIMIT', generator.ORDER_ATOMIC);
return `turtle.craft(${limit})\n`;
};