mirror of
https://github.com/damp11113-software/ccIDE.git
synced 2025-04-27 22:48:13 +00:00
354 lines
9.5 KiB
JavaScript
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`;
|
|
}; |