From a11e210c3de6db82e205a87e39cd4b37cbdfbe5a Mon Sep 17 00:00:00 2001 From: damp11113 Date: Tue, 20 Aug 2024 21:17:35 +0700 Subject: [PATCH] update 1.3 --- blocks/CCPeripheral/generator.js | 6 +- blocks/Create_Additions/block_design.json | 787 ++++++++++++++++++++++ blocks/Create_Additions/generator.js | 330 +++++++++ blocks/Create_Additions/icon.png | Bin 0 -> 59244 bytes blocks/Create_Additions/index.json | 22 + blocks/Create_Additions/toolbox.xml | 125 ++++ ccIDE Defines.xlsx | Bin 52633 -> 52642 bytes index.js | 117 ++-- package.json | 2 +- src/index.html | 3 +- src/splash.html | 13 +- 11 files changed, 1357 insertions(+), 48 deletions(-) create mode 100644 blocks/Create_Additions/block_design.json create mode 100644 blocks/Create_Additions/generator.js create mode 100644 blocks/Create_Additions/icon.png create mode 100644 blocks/Create_Additions/index.json create mode 100644 blocks/Create_Additions/toolbox.xml diff --git a/blocks/CCPeripheral/generator.js b/blocks/CCPeripheral/generator.js index 4621679..9aa1163 100644 --- a/blocks/CCPeripheral/generator.js +++ b/blocks/CCPeripheral/generator.js @@ -47,7 +47,11 @@ luaGenerator.forBlock['peripheral_call'] = function(block, generator) { var method = generator.valueToCode(block, 'METHOD', generator.ORDER_ATOMIC); var args = generator.valueToCode(block, 'ARGS', generator.ORDER_ATOMIC); - return [`peripheral.call(${name}, ${method}, ${args})`, luaGenerator.ORDER_NONE]; + if (block.outputConnection && block.outputConnection.targetConnection) { + return [`peripheral.call(${name}, ${method}, ${args})`, luaGenerator.ORDER_NONE]; + } else { + return `peripheral.call(${name}, ${method}, ${args})\n` + } }; luaGenerator.forBlock['peripheral_wrap'] = function(block, generator) { diff --git a/blocks/Create_Additions/block_design.json b/blocks/Create_Additions/block_design.json new file mode 100644 index 0000000..ed812c1 --- /dev/null +++ b/blocks/Create_Additions/block_design.json @@ -0,0 +1,787 @@ +{ + "create_addition_electric_motor_set_speed": { + "message0": "Set motor %1 speed to %2 RPM", + "args0": [ + { + "type": "input_value", + "name": "MOTOR", + "check": "Peripheral" + }, + { + "type": "input_value", + "name": "RPM", + "check": "Number" + } + ], + "previousStatement": null, + "nextStatement": null, + "colour": 70, + "tooltip": "To set the speed of the Electric Motor, call setSpeed(rpm) where the argument rpm is a number between -256 and 256. The function will throw an exception if it is called too many times per second." + }, + "create_addition_electric_motor_stop": { + "message0": "Stop motor %1", + "args0": [ + { + "type": "input_value", + "name": "MOTOR", + "check": "Peripheral" + } + ], + "previousStatement": null, + "nextStatement": null, + "colour": 70, + "tooltip": "This is a shorthand for setSpeed(0)." + }, + "create_addition_electric_motor_rotate": { + "message0": "Calculate rotation for motor %1 to rotate %2 degrees with speed %3 RPM", + "args0": [ + { + "type": "input_value", + "name": "MOTOR", + "check": "Peripheral" + }, + { + "type": "input_value", + "name": "DEGREES", + "check": "Number" + }, + { + "type": "input_value", + "name": "RPM", + "check": "Number" + } + ], + "output": "Number", + "colour": 70, + "tooltip": "This will return the time it will take to rotate the shaft by the argument degrees at the current speed. If the optional argument rpm is given it will set the speed of the motor and return the rotation time at the new speed." + }, + "create_addition_electric_motor_translate": { + "message0": "Translate motor %1 by %2 blocks with speed %3 RPM", + "args0": [ + { + "type": "input_value", + "name": "MOTOR", + "check": "Peripheral" + }, + { + "type": "input_value", + "name": "BLOCKS", + "check": "Number" + }, + { + "type": "input_value", + "name": "RPM", + "check": "Number" + } + ], + "output": "Number", + "colour": 70, + "tooltip": "This will return the time it will take to rotate the shaft to push a piston or gantry shaft by distance given by the argument blocks at the current speed. " + }, + "create_addition_electric_motor_get_speed": { + "message0": "Get current speed from motor %1", + "args0": [ + { + "type": "input_value", + "name": "MOTOR", + "check": "Peripheral" + } + ], + "output": "Number", + "colour": 70, + "tooltip": "This will return the current motor speed." + }, + "create_addition_electric_motor_get_stress_capacity": { + "message0": "Get stress capacity from motor %1", + "args0": [ + { + "type": "input_value", + "name": "MOTOR", + "check": "Peripheral" + } + ], + "output": "Number", + "colour": 70, + "tooltip": "This will return the produced stress capacity (output su)." + }, + "create_addition_electric_motor_get_energy_consumption": { + "message0": "Get energy consumption from motor %1", + "args0": [ + { + "type": "input_value", + "name": "MOTOR", + "check": "Peripheral" + } + ], + "output": "Number", + "colour": 70, + "tooltip": "This will return the motor energy consumption in FE/t." + }, + "create_addition_electric_motor_get_max_input": { + "message0": "Get max input from motor %1", + "args0": [ + { + "type": "input_value", + "name": "MOTOR", + "check": "Peripheral" + } + ], + "output": "Number", + "colour": 70, + "tooltip": "This will return the Motor max input in fe." + }, + "create_addition_electric_motor_get_max_output": { + "message0": "Get max output from motor %1", + "args0": [ + { + "type": "input_value", + "name": "MOTOR", + "check": "Peripheral" + } + ], + "output": "Number", + "colour": 70, + "tooltip": "This will return the Motor max output in fe (Always 0)." + }, + + "create_addition_accumulator_get_energy": { + "message0": "Get current energy is store in accumulator %1", + "args0": [ + { + "type": "input_value", + "name": "ACCUMULATOR", + "check": "Peripheral" + } + ], + "output": "Number", + "colour": 70, + "tooltip": "This will return the accumulator total stored charge in fe." + }, + "create_addition_accumulator_get_capacity": { + "message0": "Get total capacity in accumulator %1", + "args0": [ + { + "type": "input_value", + "name": "ACCUMULATOR", + "check": "Peripheral" + } + ], + "output": "Number", + "colour": 70, + "tooltip": "This will return the accumulator total capacity in fe." + }, + "create_addition_accumulator_get_percent": { + "message0": "Get percent energy is store in accumulator %1", + "args0": [ + { + "type": "input_value", + "name": "ACCUMULATOR", + "check": "Peripheral" + } + ], + "output": "Number", + "colour": 70, + "tooltip": "This will return the accumulator total charge in relation to the total capacity in percent." + }, + "create_addition_accumulator_get_max_input": { + "message0": "Get max input from accumulator %1", + "args0": [ + { + "type": "input_value", + "name": "ACCUMULATOR", + "check": "Peripheral" + } + ], + "output": "Number", + "colour": 70, + "tooltip": "This will return the accumulator max input per block face in fe." + }, + "create_addition_accumulator_get_max_output": { + "message0": "Get max output from accumulator %1", + "args0": [ + { + "type": "input_value", + "name": "ACCUMULATOR", + "check": "Peripheral" + } + ], + "output": "Number", + "colour": 70, + "tooltip": "This will return the accumulator max output per block face in fe." + }, + "create_addition_accumulator_get_height": { + "message0": "Get current height from accumulator %1", + "args0": [ + { + "type": "input_value", + "name": "ACCUMULATOR", + "check": "Peripheral" + } + ], + "output": "Number", + "colour": 70, + "tooltip": "This will return the accumulator height in block." + }, + "create_addition_accumulator_get_width": { + "message0": "Get current width from accumulator %1", + "args0": [ + { + "type": "input_value", + "name": "ACCUMULATOR", + "check": "Peripheral" + } + ], + "output": "Number", + "colour": 70, + "tooltip": "This will return the accumulator width in block." + }, + + "create_addition_pei_get_energy": { + "message0": "Get current energy is store in source from PEI %1", + "args0": [ + { + "type": "input_value", + "name": "PEI", + "check": "Peripheral" + } + ], + "output": "Number", + "colour": 70, + "tooltip": "This will return the connected contraption total stored charge in fe, (-1 if not connected)." + }, + "create_addition_pei_get_capacity": { + "message0": "Get total capacity in source from PEI %1", + "args0": [ + { + "type": "input_value", + "name": "PEI", + "check": "Peripheral" + } + ], + "output": "Number", + "colour": 70, + "tooltip": "This will return the connected contraption total capacity in fe, (-1 if not connected)." + }, + "create_addition_pei_is_connected": { + "message0": "Is PEI %1 connected", + "args0": [ + { + "type": "input_value", + "name": "PEI", + "check": "Peripheral" + } + ], + "output": "Boolean", + "colour": 70, + "tooltip": "This will return true if a contraption is connected." + }, + "create_addition_pei_get_max_input": { + "message0": "Get max input from PEI %1", + "args0": [ + { + "type": "input_value", + "name": "PEI", + "check": "Peripheral" + } + ], + "output": "Number", + "colour": 70, + "tooltip": "This will return the PEI max input in fe." + }, + "create_addition_pei_get_max_output": { + "message0": "Get max output from PEI %1", + "args0": [ + { + "type": "input_value", + "name": "PEI", + "check": "Peripheral" + } + ], + "output": "Number", + "colour": 70, + "tooltip": "This will return the PEI max output in fe." + }, + + "create_addition_relay_get_max_input": { + "message0": "Get max input from relay %1", + "args0": [ + { + "type": "input_value", + "name": "RELAY", + "check": "Peripheral" + } + ], + "output": "Number", + "colour": 70, + "tooltip": "This will return the Relay max input in fe." + }, + "create_addition_relay_get_max_output": { + "message0": "Get max output from relay %1", + "args0": [ + { + "type": "input_value", + "name": "RELAY", + "check": "Peripheral" + } + ], + "output": "Number", + "colour": 70, + "tooltip": "This will return the Relay max output in fe." + }, + "create_addition_relay_get_throughput": { + "message0": "Get current throughput relay %1", + "args0": [ + { + "type": "input_value", + "name": "RELAY", + "check": "Peripheral" + } + ], + "output": "Number", + "colour": 70, + "tooltip": "This will return the current throughput in fe." + }, + "create_addition_relay_is_powered": { + "message0": "Is relay %1 powered", + "args0": [ + { + "type": "input_value", + "name": "RELAY", + "check": "Peripheral" + } + ], + "output": "Boolean", + "colour": 70, + "tooltip": "This will return the redstone state of the Relay." + }, + + "create_addition_da_rotational_speed_control_set_target_speed": { + "message0": "Set target speed to %1 rpm to controller %2 at %3 side of adapter", + "args0": [ + { + "type": "input_value", + "name": "RPM" + }, + { + "type": "input_value", + "name": "DA", + "check": "Peripheral" + }, + { + "type": "field_dropdown", + "name": "SIDE", + "options": [ + ["Top", "top"], + ["Bottom", "bottom"], + ["North", "north"], + ["East", "east"], + ["West", "west"], + ["South", "south"] + ] + } + ], + "previousStatement": null, + "nextStatement": null, + "colour": 70, + "tooltip": "This will set the target speed of a Rotation Speed Controller attached to the side of a Digital Adapter." + }, + "create_addition_da_rotational_speed_control_get_target_speed": { + "message0": "Get target speed from controller %1 at %2 side of adapter", + "args0": [ + { + "type": "input_value", + "name": "DA", + "check": "Peripheral" + }, + { + "type": "field_dropdown", + "name": "SIDE", + "options": [ + ["Top", "top"], + ["Bottom", "bottom"], + ["North", "north"], + ["East", "east"], + ["West", "west"], + ["South", "south"] + ] + } + ], + "output": "Number", + "colour": 70, + "tooltip": "This will get the target speed of a Rotation Speed Controller attached to the side of a Digital Adapter." + }, + + "create_addition_da_stressometer_get_kinetic_stress": { + "message0": "Get current stress from stressometer %1 at %2 side of adapter", + "args0": [ + { + "type": "input_value", + "name": "DA", + "check": "Peripheral" + }, + { + "type": "field_dropdown", + "name": "SIDE", + "options": [ + ["Top", "top"], + ["Bottom", "bottom"], + ["North", "north"], + ["East", "east"], + ["West", "west"], + ["South", "south"] + ] + } + ], + "output": "Number", + "colour": 70, + "tooltip": "This will get the stress of a Stressometer attached to the side of a Digital Adapter." + }, + "create_addition_da_stressometer_get_kinetic_capacity": { + "message0": "Get capacity stress from stressometer %1 at %2 side of adapter", + "args0": [ + { + "type": "input_value", + "name": "DA", + "check": "Peripheral" + }, + { + "type": "field_dropdown", + "name": "SIDE", + "options": [ + ["Top", "top"], + ["Bottom", "bottom"], + ["North", "north"], + ["East", "east"], + ["West", "west"], + ["South", "south"] + ] + } + ], + "output": "Number", + "colour": 70, + "tooltip": "This will get the stress capacity of a Stressometer attached to the side of a Digital Adapter." + }, + + "create_addition_da_speedometer_get_kinetic_speed": { + "message0": "Get current speed from speedometer %1 at %2 side of adapter", + "args0": [ + { + "type": "input_value", + "name": "DA", + "check": "Peripheral" + }, + { + "type": "field_dropdown", + "name": "SIDE", + "options": [ + ["Top", "top"], + ["Bottom", "bottom"], + ["North", "north"], + ["East", "east"], + ["West", "west"], + ["South", "south"] + ] + } + ], + "output": "Number", + "colour": 70, + "tooltip": "This will get the speed of a Speedometer attached to the side of a Digital Adapter." + }, + "create_addition_da_speedometer_get_kinetic_max_speed": { + "message0": "Get max speed from speedometer %1 of adapter", + "args0": [ + { + "type": "input_value", + "name": "DA", + "check": "Peripheral" + } + ], + "output": "Number", + "colour": 70, + "tooltip": "This will get the top speed as set by Create." + }, + + "create_addition_da_pulleys_get_pulleys_distance": { + "message0": "Get current distance from pulleys %1 at %2 side of adapter", + "args0": [ + { + "type": "input_value", + "name": "DA", + "check": "Peripheral" + }, + { + "type": "field_dropdown", + "name": "SIDE", + "options": [ + ["Top", "top"], + ["Bottom", "bottom"], + ["North", "north"], + ["East", "east"], + ["West", "west"], + ["South", "south"] + ] + } + ], + "output": "Number", + "colour": 70, + "tooltip": "This will get the extended distance of a Rope, Hose, or Elevator -Pulley attached to the side of a Digital Adapter." + }, + + "create_addition_da_elevator_pulley_get_elevator_floor": { + "message0": "Get current floor from elevator %1 at %2 side of adapter", + "args0": [ + { + "type": "input_value", + "name": "DA", + "check": "Peripheral" + }, + { + "type": "field_dropdown", + "name": "SIDE", + "options": [ + ["Top", "top"], + ["Bottom", "bottom"], + ["North", "north"], + ["East", "east"], + ["West", "west"], + ["South", "south"] + ] + } + ], + "output": "Number", + "colour": 70, + "tooltip": "This will get the current floor index of an Elevator Pulley attached to the side of a Digital Adapter." + }, + "create_addition_da_elevator_pulley_get_elevator_floors": { + "message0": "Get total floors from elevator %1 at %2 side of adapter", + "args0": [ + { + "type": "input_value", + "name": "DA", + "check": "Peripheral" + }, + { + "type": "field_dropdown", + "name": "SIDE", + "options": [ + ["Top", "top"], + ["Bottom", "bottom"], + ["North", "north"], + ["East", "east"], + ["West", "west"], + ["South", "south"] + ] + } + ], + "output": "Number", + "colour": 70, + "tooltip": "This will get the number of floors of an Elevator Pulley attached to the side of a Digital Adapter." + }, + "create_addition_da_elevator_pulley_get_elevator_floor_name": { + "message0": "Get floor %1 name from elevator %2 at %3 side of adapter", + "args0": [ + { + "type": "input_value", + "name": "INDEX", + "check": "Number" + }, + { + "type": "input_value", + "name": "DA", + "check": "Peripheral" + }, + { + "type": "field_dropdown", + "name": "SIDE", + "options": [ + ["Top", "top"], + ["Bottom", "bottom"], + ["North", "north"], + ["East", "east"], + ["West", "west"], + ["South", "south"] + ] + } + ], + "output": "Number", + "colour": 70, + "tooltip": "This will get floor name at floor index of a Elevator Pulley attached to the side of a Digital Adapter." + }, + "create_addition_da_elevator_pulley_goto_elevator_floor_name": { + "message0": "Goto floor %1 with elevator %2 at %3 side of adapter", + "args0": [ + { + "type": "input_value", + "name": "INDEX", + "check": "Number" + }, + { + "type": "input_value", + "name": "DA", + "check": "Peripheral" + }, + { + "type": "field_dropdown", + "name": "SIDE", + "options": [ + ["Top", "top"], + ["Bottom", "bottom"], + ["North", "north"], + ["East", "east"], + ["West", "west"], + ["South", "south"] + ] + } + ], + "previousStatement": null, + "nextStatement": null, + "output": "Number", + "colour": 70, + "tooltip": "This will trigger a Elevator Pulley attached to the side of a Digital Adapter to move to the given floor index and returns the delta-y to move." + }, + + "create_addition_da_mechanical_piston_get_piston_distance": { + "message0": "Get current extended distance from piston %1 at %2 side of adapter", + "args0": [ + { + "type": "input_value", + "name": "DA", + "check": "Peripheral" + }, + { + "type": "field_dropdown", + "name": "SIDE", + "options": [ + ["Top", "top"], + ["Bottom", "bottom"], + ["North", "north"], + ["East", "east"], + ["West", "west"], + ["South", "south"] + ] + } + ], + "output": "Number", + "colour": 70, + "tooltip": "This will get the extended distance of a Mechanical Piston attached to the side of a Digital Adapter." + }, + + "create_addition_da_mechanical_bearing_get_bearing_angle": { + "message0": "Get current angle from Bearing %1 at %2 side of adapter", + "args0": [ + { + "type": "input_value", + "name": "DA", + "check": "Peripheral" + }, + { + "type": "field_dropdown", + "name": "SIDE", + "options": [ + ["Top", "top"], + ["Bottom", "bottom"], + ["North", "north"], + ["East", "east"], + ["West", "west"], + ["South", "south"] + ] + } + ], + "output": "Number", + "colour": 70, + "tooltip": "This will get the angle of a Mechanical Bearing attached to the side of a Digital Adapter." + }, + + "create_addition_da_dp_link_print": { + "message0": "Print %1 to display %2 with adapter", + "args0": [ + { + "type": "input_value", + "name": "TEXT", + "check": "String" + }, + { + "type": "input_value", + "name": "DA", + "check": "Peripheral" + } + ], + "previousStatement": null, + "nextStatement": null, + "colour": 70, + "tooltip": "This will print a string on the currently selected line to an internal buffer which can be read by a Display Link and put on a Display Board, print will increment the currently selected line." + }, + "create_addition_da_dp_link_clear_line": { + "message0": "Clear current line in display %1 with adapter", + "args0": [ + { + "type": "input_value", + "name": "DA", + "check": "Peripheral" + } + ], + "previousStatement": null, + "nextStatement": null, + "colour": 70, + "tooltip": "This will clear the text on the currently selected line." + }, + "create_addition_da_dp_link_clear": { + "message0": "Clear display %1 with adapter", + "args0": [ + { + "type": "input_value", + "name": "DA", + "check": "Peripheral" + } + ], + "previousStatement": null, + "nextStatement": null, + "colour": 70, + "tooltip": "This will clear all the text on all lines." + }, + "create_addition_da_dp_link_get_line": { + "message0": "Get current line from display %1 with adapter", + "args0": [ + { + "type": "input_value", + "name": "DA", + "check": "Peripheral" + } + ], + "output": "Number", + "colour": 70, + "tooltip": "This will return the currently selected line (starts at 1)." + }, + "create_addition_da_dp_link_set_line": { + "message0": "Goto line %1 in display %2 with adapter", + "args0": [ + { + "type": "input_value", + "name": "LINE", + "check": "Number" + }, + { + "type": "input_value", + "name": "DA", + "check": "Peripheral" + } + ], + "previousStatement": null, + "nextStatement": null, + "colour": 70, + "tooltip": "This will set the currently selected line to line (starts at 1)." + }, + "create_addition_da_dp_link_get_max_line": { + "message0": "Get max line in display %1 with adapter", + "args0": [ + { + "type": "input_value", + "name": "DA", + "check": "Peripheral" + } + ], + "output": "Number", + "colour": 70, + "tooltip": "This will return the max number of lines that can be displayable using the Digital Adapter (will always return 16)." + } +} diff --git a/blocks/Create_Additions/generator.js b/blocks/Create_Additions/generator.js new file mode 100644 index 0000000..86a55d0 --- /dev/null +++ b/blocks/Create_Additions/generator.js @@ -0,0 +1,330 @@ +// this file not for generator only + +const { luaGenerator } = require('blockly/lua'); + +// Check if luaGenerator.forBlock is defined and initialize if necessary +if (!luaGenerator.forBlock) { + luaGenerator.forBlock = {}; +} + +// generator for Electric Motor + +luaGenerator.forBlock['create_addition_electric_motor_set_speed'] = function(block, generator) { + var motor = generator.valueToCode(block, 'MOTOR', generator.ORDER_ATOMIC); + var speed = generator.valueToCode(block, 'RPM', generator.ORDER_ATOMIC); + + return `${motor}.setSpeed(${speed})\n`; +}; + +luaGenerator.forBlock['create_addition_electric_motor_stop'] = function(block, generator) { + var motor = generator.valueToCode(block, 'MOTOR', generator.ORDER_ATOMIC); + + return `${motor}.stop()\n`; +}; + +luaGenerator.forBlock['create_addition_electric_motor_rotate'] = function(block, generator) { + var motor = generator.valueToCode(block, 'MOTOR', generator.ORDER_ATOMIC); + var degrees = generator.valueToCode(block, 'DEGREES', generator.ORDER_ATOMIC); + var speed = generator.valueToCode(block, 'RPM', generator.ORDER_ATOMIC); + + if (speed == "nil") { + return [`${motor}.rotate(${degrees})`, luaGenerator.ORDER_NONE]; + } else { + return [`${motor}.rotate(${degrees}, ${speed})`, luaGenerator.ORDER_NONE]; + } +}; + +luaGenerator.forBlock['create_addition_electric_motor_translate'] = function(block, generator) { + var motor = generator.valueToCode(block, 'MOTOR', generator.ORDER_ATOMIC); + var tblock = generator.valueToCode(block, 'BLOCKS', generator.ORDER_ATOMIC); + var speed = generator.valueToCode(block, 'RPM', generator.ORDER_ATOMIC); + + if (speed == "nil") { + return [`${motor}.translate(${tblock})`, luaGenerator.ORDER_NONE]; + } else { + return [`${motor}.translate(${tblock}, ${speed})`, luaGenerator.ORDER_NONE]; + } +}; + +luaGenerator.forBlock['create_addition_electric_motor_get_speed'] = function(block, generator) { + var motor = generator.valueToCode(block, 'MOTOR', generator.ORDER_ATOMIC); + + return [`${motor}.getSpeed()`, luaGenerator.ORDER_NONE]; +}; + +luaGenerator.forBlock['create_addition_electric_motor_get_stress_capacity'] = function(block, generator) { + var motor = generator.valueToCode(block, 'MOTOR', generator.ORDER_ATOMIC); + + return [`${motor}.getStressCapacity()`, luaGenerator.ORDER_NONE]; +}; + +luaGenerator.forBlock['create_addition_electric_motor_get_energy_consumption'] = function(block, generator) { + var motor = generator.valueToCode(block, 'MOTOR', generator.ORDER_ATOMIC); + + return [`${motor}.getEnergyConsumption()`, luaGenerator.ORDER_NONE]; +}; + +luaGenerator.forBlock['create_addition_electric_motor_get_max_input'] = function(block, generator) { + var motor = generator.valueToCode(block, 'MOTOR', generator.ORDER_ATOMIC); + + return [`${motor}.getMaxInsert()`, luaGenerator.ORDER_NONE]; +}; + +luaGenerator.forBlock['create_addition_electric_motor_get_max_output'] = function(block, generator) { + var motor = generator.valueToCode(block, 'MOTOR', generator.ORDER_ATOMIC); + + return [`${motor}.getMaxExtract()`, luaGenerator.ORDER_NONE]; +}; + +// generator for Accumulator + +luaGenerator.forBlock['create_addition_accumulator_get_energy'] = function(block, generator) { + var accumulator = generator.valueToCode(block, 'ACCUMULATOR', generator.ORDER_ATOMIC); + + return [`${accumulator}.getEnergy()`, luaGenerator.ORDER_NONE]; +}; + +luaGenerator.forBlock['create_addition_accumulator_get_capacity'] = function(block, generator) { + var accumulator = generator.valueToCode(block, 'ACCUMULATOR', generator.ORDER_ATOMIC); + + return [`${accumulator}.getCapacity()`, luaGenerator.ORDER_NONE]; +}; + +luaGenerator.forBlock['create_addition_accumulator_get_percent'] = function(block, generator) { + var accumulator = generator.valueToCode(block, 'ACCUMULATOR', generator.ORDER_ATOMIC); + + return [`${accumulator}.getPercent()`, luaGenerator.ORDER_NONE]; +}; + +luaGenerator.forBlock['create_addition_accumulator_get_max_input'] = function(block, generator) { + var accumulator = generator.valueToCode(block, 'ACCUMULATOR', generator.ORDER_ATOMIC); + + return [`${accumulator}.getMaxInsert()`, luaGenerator.ORDER_NONE]; +}; + +luaGenerator.forBlock['create_addition_accumulator_get_max_output'] = function(block, generator) { + var accumulator = generator.valueToCode(block, 'ACCUMULATOR', generator.ORDER_ATOMIC); + + return [`${accumulator}.getMaxExtract()`, luaGenerator.ORDER_NONE]; +}; + +luaGenerator.forBlock['create_addition_accumulator_get_height'] = function(block, generator) { + var accumulator = generator.valueToCode(block, 'ACCUMULATOR', generator.ORDER_ATOMIC); + + return [`${accumulator}.getHeight()`, luaGenerator.ORDER_NONE]; +}; + +luaGenerator.forBlock['create_addition_accumulator_get_width'] = function(block, generator) { + var accumulator = generator.valueToCode(block, 'ACCUMULATOR', generator.ORDER_ATOMIC); + + return [`${accumulator}.getWidth()`, luaGenerator.ORDER_NONE]; +}; + +// generator for Portable Energy Interface (PEI) + +luaGenerator.forBlock['create_addition_pei_get_energy'] = function(block, generator) { + var pei = generator.valueToCode(block, 'PEI', generator.ORDER_ATOMIC); + + return [`${pei}.getEnergy()`, luaGenerator.ORDER_NONE]; +}; + +luaGenerator.forBlock['create_addition_pei_get_capacity'] = function(block, generator) { + var pei = generator.valueToCode(block, 'PEI', generator.ORDER_ATOMIC); + + return [`${pei}.getCapacity()`, luaGenerator.ORDER_NONE]; +}; + +luaGenerator.forBlock['create_addition_pei_is_connected'] = function(block, generator) { + var pei = generator.valueToCode(block, 'PEI', generator.ORDER_ATOMIC); + + return [`${pei}.isConnected()`, luaGenerator.ORDER_NONE]; +}; + +luaGenerator.forBlock['create_addition_pei_get_max_input'] = function(block, generator) { + var pei = generator.valueToCode(block, 'PEI', generator.ORDER_ATOMIC); + + return [`${pei}.getMaxInsert()`, luaGenerator.ORDER_NONE]; +}; + +luaGenerator.forBlock['create_addition_pei_get_max_output'] = function(block, generator) { + var pei = generator.valueToCode(block, 'PEI', generator.ORDER_ATOMIC); + + return [`${pei}.getMaxExtract()`, luaGenerator.ORDER_NONE]; +}; + +// generator for Redstone Relay + +luaGenerator.forBlock['create_addition_relay_get_max_input'] = function(block, generator) { + var relay = generator.valueToCode(block, 'RELAY', generator.ORDER_ATOMIC); + + return [`${relay}.getMaxInsert()`, luaGenerator.ORDER_NONE]; +}; + +luaGenerator.forBlock['create_addition_relay_get_max_output'] = function(block, generator) { + var relay = generator.valueToCode(block, 'RELAY', generator.ORDER_ATOMIC); + + return [`${relay}.getMaxExtract()`, luaGenerator.ORDER_NONE]; +}; + +luaGenerator.forBlock['create_addition_relay_get_throughput'] = function(block, generator) { + var relay = generator.valueToCode(block, 'RELAY', generator.ORDER_ATOMIC); + + return [`${relay}.getThroughput()`, luaGenerator.ORDER_NONE]; +}; + +luaGenerator.forBlock['create_addition_relay_is_powered'] = function(block, generator) { + var relay = generator.valueToCode(block, 'RELAY', generator.ORDER_ATOMIC); + + return [`${relay}.isPowered()`, luaGenerator.ORDER_NONE]; +}; + +// Digital Adapter | Rotational Speed Controller + +luaGenerator.forBlock['create_addition_da_rotational_speed_control_set_target_speed'] = function(block, generator) { + var speed = generator.valueToCode(block, 'RPM', generator.ORDER_ATOMIC); + var adapter = generator.valueToCode(block, 'DA', generator.ORDER_ATOMIC); + var side = block.getFieldValue('SIDE'); + + return `${adapter}.setTargetSpeed("${side}", ${speed})\n`; +}; + +luaGenerator.forBlock['create_addition_da_rotational_speed_control_get_target_speed'] = function(block, generator) { + var adapter = generator.valueToCode(block, 'DA', generator.ORDER_ATOMIC); + var side = block.getFieldValue('SIDE'); + + return [`${adapter}.getTargetSpeed("${side}")`, luaGenerator.ORDER_NONE]; +}; + +// Digital Adapter | Stressometer + +luaGenerator.forBlock['create_addition_da_stressometer_get_kinetic_stress'] = function(block, generator) { + var adapter = generator.valueToCode(block, 'DA', generator.ORDER_ATOMIC); + var side = block.getFieldValue('SIDE'); + + return [`${adapter}.getKineticStress("${side}")`, luaGenerator.ORDER_NONE]; +}; + +luaGenerator.forBlock['create_addition_da_stressometer_get_kinetic_capacity'] = function(block, generator) { + var adapter = generator.valueToCode(block, 'DA', generator.ORDER_ATOMIC); + var side = block.getFieldValue('SIDE'); + + return [`${adapter}.getKineticSpeed("${side}")`, luaGenerator.ORDER_NONE]; +}; + +// Digital Adapter | Speedometer + +luaGenerator.forBlock['create_addition_da_speedometer_get_kinetic_speed'] = function(block, generator) { + var adapter = generator.valueToCode(block, 'DA', generator.ORDER_ATOMIC); + var side = block.getFieldValue('SIDE'); + + return [`${adapter}.getKineticSpeed("${side}")`, luaGenerator.ORDER_NONE]; +}; + +luaGenerator.forBlock['create_addition_da_speedometer_get_kinetic_max_speed'] = function(block, generator) { + var adapter = generator.valueToCode(block, 'DA', generator.ORDER_ATOMIC); + + return [`${adapter}.getKineticTopSpeed()`, luaGenerator.ORDER_NONE]; +}; + +// Digital Adapter | Pulleys + +luaGenerator.forBlock['create_addition_da_pulleys_get_pulleys_distance'] = function(block, generator) { + var adapter = generator.valueToCode(block, 'DA', generator.ORDER_ATOMIC); + var side = block.getFieldValue('SIDE'); + + return [`${adapter}.getPulleyDistance("${side}")`, luaGenerator.ORDER_NONE]; +}; + +// Digital Adapter | Elevator Pulley + +luaGenerator.forBlock['create_addition_da_elevator_pulley_get_elevator_floor'] = function(block, generator) { + var adapter = generator.valueToCode(block, 'DA', generator.ORDER_ATOMIC); + var side = block.getFieldValue('SIDE'); + + return [`${adapter}.getElevatorFloor("${side}")`, luaGenerator.ORDER_NONE]; +}; + +luaGenerator.forBlock['create_addition_da_elevator_pulley_get_elevator_floors'] = function(block, generator) { + var adapter = generator.valueToCode(block, 'DA', generator.ORDER_ATOMIC); + var side = block.getFieldValue('SIDE'); + + return [`${adapter}.getElevatorFloors("${side}")`, luaGenerator.ORDER_NONE]; +}; + +luaGenerator.forBlock['create_addition_da_elevator_pulley_get_elevator_floor_name'] = function(block, generator) { + var floorindex = generator.valueToCode(block, 'INDEX', generator.ORDER_ATOMIC); + var adapter = generator.valueToCode(block, 'DA', generator.ORDER_ATOMIC); + var side = block.getFieldValue('SIDE'); + + return [`${adapter}.getElevatorFloorName("${side}", ${floorindex})`, luaGenerator.ORDER_NONE]; +}; + +luaGenerator.forBlock['create_addition_da_elevator_pulley_goto_elevator_floor_name'] = function(block, generator) { + var floorindex = generator.valueToCode(block, 'INDEX', generator.ORDER_ATOMIC); + var adapter = generator.valueToCode(block, 'DA', generator.ORDER_ATOMIC); + var side = block.getFieldValue('SIDE'); + + if (block.outputConnection && block.outputConnection.targetConnection) { + return [`${adapter}.gotoElevatorFloor("${side}", ${floorindex})`, luaGenerator.ORDER_NONE]; + } else { + return `${adapter}.gotoElevatorFloor("${side}", ${floorindex})\n`; + } +}; + +// Digital Adapter | Mechanical Piston + +luaGenerator.forBlock['create_addition_da_mechanical_piston_get_piston_distance'] = function(block, generator) { + var adapter = generator.valueToCode(block, 'DA', generator.ORDER_ATOMIC); + var side = block.getFieldValue('SIDE'); + + return [`${adapter}.getPistonDistance("${side}")`, luaGenerator.ORDER_NONE]; +}; + +// Digital Adapter | Mechanical Bearing + +luaGenerator.forBlock['create_addition_da_mechanical_bearing_get_bearing_angle'] = function(block, generator) { + var adapter = generator.valueToCode(block, 'DA', generator.ORDER_ATOMIC); + var side = block.getFieldValue('SIDE'); + + return [`${adapter}.getBearingAngle("${side}")`, luaGenerator.ORDER_NONE]; +}; + +// Digital Adapter | Display Link + +luaGenerator.forBlock['create_addition_da_dp_link_print'] = function(block, generator) { + var text = generator.valueToCode(block, 'TEXT', generator.ORDER_ATOMIC); + var adapter = generator.valueToCode(block, 'DA', generator.ORDER_ATOMIC); + + return `${adapter}.print("${text}")\n`; +}; + +luaGenerator.forBlock['create_addition_da_dp_link_clear_line'] = function(block, generator) { + var adapter = generator.valueToCode(block, 'DA', generator.ORDER_ATOMIC); + + return `${adapter}.clearLine()\n`; +}; + +luaGenerator.forBlock['create_addition_da_dp_link_clear'] = function(block, generator) { + var adapter = generator.valueToCode(block, 'DA', generator.ORDER_ATOMIC); + + return `${adapter}.clear()\n`; +}; + +luaGenerator.forBlock['create_addition_da_dp_link_get_line'] = function(block, generator) { + var adapter = generator.valueToCode(block, 'DA', generator.ORDER_ATOMIC); + + return [`${adapter}.getLine()`, luaGenerator.ORDER_NONE]; +}; + +luaGenerator.forBlock['create_addition_da_dp_link_set_line'] = function(block, generator) { + var line = generator.valueToCode(block, 'LINE', generator.ORDER_ATOMIC); + var adapter = generator.valueToCode(block, 'DA', generator.ORDER_ATOMIC); + + return `${adapter}.setLine()\n`; +}; + +luaGenerator.forBlock['create_addition_da_dp_link_get_max_line'] = function(block, generator) { + var adapter = generator.valueToCode(block, 'DA', generator.ORDER_ATOMIC); + + return [`${adapter}.getMaxLines()`, luaGenerator.ORDER_NONE]; +}; \ No newline at end of file diff --git a/blocks/Create_Additions/icon.png b/blocks/Create_Additions/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..c5efe71fc192cc0b4bd2244270fac3a60e5f53ef GIT binary patch literal 59244 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 FV1k|b@Y?_Y literal 0 HcmV?d00001 diff --git a/blocks/Create_Additions/index.json b/blocks/Create_Additions/index.json new file mode 100644 index 0000000..c420196 --- /dev/null +++ b/blocks/Create_Additions/index.json @@ -0,0 +1,22 @@ +{ + "name": "Create Crafts & Additions", + "author": "DPSoftware Foundation", + "description": "https://www.curseforge.com/minecraft/mc-mods/createaddition", + "version": "1.0", + "category": "Create", + "keyword": "create mod", + "license": "GPL-3.0-or-later", + "peripherals": true, + "library": false, + "require_network": false, + "dependencies": {}, + "design_for_computer": { + "basic": true, + "adv": true, + "command": true, + "pocket": false, + "advpocket": false, + "turtle": true, + "advturtle": true + } +} diff --git a/blocks/Create_Additions/toolbox.xml b/blocks/Create_Additions/toolbox.xml new file mode 100644 index 0000000..148d0ba --- /dev/null +++ b/blocks/Create_Additions/toolbox.xml @@ -0,0 +1,125 @@ + diff --git a/ccIDE Defines.xlsx b/ccIDE Defines.xlsx index 23276d2f1e1b0c9448934ccb7a7951926986b774..839e2b8a8a8a39c9eec47f846b9f1b0a02cd4f48 100644 GIT binary patch delta 2663 zcmZ8jc{J1u8~%;44YH1G;}b?#_Ob6GSxdH|D9ex~ONc1UWXp2xKg2a7YswxP>)6J= zrqR77Yf>u9*fOH{&h4MC^SysP=Y5|)-gDmPdCyZ&2rVsyHtaCNUPdrA_Co={7d&DX z#;s^_pJ3noOq5=t%=W^#bL$>u>XhF{hfxnKD@KveUYf1oH{n%xPLIvK~D{Y!P^uUA$(v52-MffpJVO}X%Lb*#o$x7txFl%q{spok(L8hSpjbM=TS97d4& zb1malX6TLBIcJ2nGi-?!E7;482#hV`azyKbM#;JQP|6ACKFcX;7lq}E-5kOR;=Pg& zv-N^OvZRbqG%q@|nV%#~{@haQUYz&Qf}{7i{MB}ne30U#W2a|}&R6Yb->x^Ko>ifQ zY#F_=Hm~o)n`B%6*}^kabujNqkZ`7pV$jb&B?;2Mq{!Vw-gYasuGgN^-=sjJVdDPQ5O+S>%mXvnJ7hhrMs ze79q>L*a4!i&tkSqVpy|YIGuD-{Zm$1_NI&{6X)!Xyd{uod#LTZ9ml7_`2GdF=JyXS8o;}YnOL{4g!1^Gb19}(#tl#pn_!ce^X-*0K0mWz8 z;9>8+Vx9(hJY3}+-byT!ZP&xQ!CQ232|KX|VpHR^$7CwkhX&t(7JR^rtlIb+>f(;J zKw;MUdjS6s+c7^&)+t(NXjL<2G`=5+Q#rW~U=Rms|Cvz5Vc6RlQ6G%lg3{-optekV zBQ*C|l_-)tFp{}4PB0?B++FNynfu*TIsIP~8uIzYDjtO zHinJlZb@IfrY$oYvawQ-V%yBS_^51(lpf)k9L4HjGRBdzfV-luc_}rvB+Jb?`b9IL zWKt8!#HYGdCcg8!M&O|*fDp}eS-xt{JKlF9S8&ycY_rEbcsg{?ZA?$Uvw``xVTFs? zU$yUVb-7o=(AM_q$@g_R5T8L{jGnQo<#_oYas3ev!N4+AB~d*!9twacFL={Dn*#$ovdu%)$p!!})Iz{4KS3NyAtJyZ zZ$Fp*PKi6Zeg>EH!z%V3RKjhbue5H)0bM^e7~CU~ZZ{{_fIcO8fB>&daW1P$aL6Qn zN67oIfvD!9V`sN?GF0aX7iw-j9SC zkLa=f!s8@l=WSU0B?VR*jl0prRs^?&VU``_p|@mBLRffjbKmdqJ;z%AI!4@%9yDCK zoHK!3V09>fCS#;f#jf=cwa)5>v=Tn!T8*$o3mfP_?34Ko(F?nb6GcyQ?LBRbmUIw& zUpL`Dj9N>Hsm|Tck(y}RvA)9|1VYu7Xu!%0DKULEc0w!d4KAL=v9~Z6J@0EV?;FXI z)y=wm7ipQ{dB4M+`2IWV&)(piaj{CuWG7v7v!4|4x6nAH(n`a;XvGCSwBvaskd~;$ zk{IAvgc)GH8gy`h;}SeIF)$VzLVWAp=I!}2i{EQ>^i7v&#c*V1Nh9h?8eZ1*`?aYTP!N<$!S^C2*@(wZ{bQ_f-c!Wp}y z6}_3LIiITMv2Iaq%0Y`51I9CfNsUnk9)I=O$FVM{S=@#pw`s7zYkzP^QQKNSw%ssP z-?p>7sPWEhr}{>7cKW&P>6mlG;{I;V7zI&A4Eq-yg5zla85d?uTrvxGro)A`sNLxA z$8iU%>a0;==aS^5za4AHd=uvGXNG?Zj9sRz$r$>}Cg^v)T#936-0^(#Eud$6T2GMO z9NJFeI@ILMY_4e6s2SMQoGph`9O6uv0)bOVQ!7`R16vbS4<*0^03yO*rk@Z_<(K5Z zk-#}6?#DEyBTfby?<;B=<5-OQkWb)3_zMS1)UtsACDAG0C~ymy`L&8 zQ`8UUBg?=b+X5PyjN!dF6eiyua2b1YJ&_C9kRGN6w#TL5d$WhW4{sq4%!v;r_f zt=albSKB)e*i)!x^w;lkSIW{boCXtl?-qgTM5L6j@Q__q{^wyc=?OiK1=U!x#U3ek zGL0LWtyQx`ENv0^YlXfHSLuir3#ol*>>m%`(!FS29Pzz#v)NrFIr?cferMTp+hS)@ zL79A*md!iwQ!OGOUXZS~M09-}tBjReIKT;>BHDeR(oK2bI<$eraHQ<^Mtc+hF3q;Qh;z2TFAar-3O@@{F>8l`*dcRq-L{B;9X_+d>=X8xxq)@_*50} zR*w3nmLdiQ`|&q53?xB+i(rN$R*)Gmb3`8T+xG?pf!|B!47fAO4{nVpGPJw=f~uqZ zi2pec_&>g?*Dun;QALIrzhAItR1p#eZjWAOkP83RxH6^)$poXuE<$8M(wH`62|OG# zWMF9qQ^!R>hjCR14g7Q58X^YHk86wkdvsF>0C+P10MGA>0rDVfLLX8M22DsZw+#O~ F`Y(>90PO$( delta 2655 zcmZ9OcQo6J9>5b@T6!V`fiShr%FRs$h*x&r@er!<*4DN$8=l~a@rR%4B|IAFKh$B{R$+{FwdL|pquOIAxZ~c)=NHIQPE(=!# zc-8ray9^Inwn4b;X;9(d7$`>^iG+4DS(l%QXM`{IYB|pqt_D2vqc;6af!fxtzLaYc1wo=AybupL|xjuNs>z?ZymT}&D7aC=0 zst;vc8=1sDZ~VA5<@2e^4PTDke0V%(V^Q8};LNSu(3SkPva7%CVkE|LQU-$);yy)E z(G5b1Jj!F;Mpiegm)*)OaI28#<(4;V$^()kC;WfX-C1HKGY>?1vsYv3c^?E`)1Wc; z>kM`#Zp~qkE7=FH1a*zMnm;J)&t?lbdW+nDm|5MYkv>u@!0bw>#H*Lc*}P+A8XW9$ z>B^gLqCz6we%x5Atn}+$E|Zl1>~mziIlmmOa`&X=({xNt?7VkRrHATzRYhR>lwN>Y zXKB7*@VT12gC~B`;g)6&ah+15tiaAX<=$o67sAZaZ&_8#^UWt06-5$1!^Tx4NZv;k z687z(x}8~NtkUxA(s)Z*gIpJbYg|_4)y>BBiDd@?6(f?9ej09f3(XToKPn!#p&;(w zWdWpQzbgpN;^R0VFuh_2=ryvlFJ81~xcR}TCs@i;H- zU@1!Q#q%x4ciuRdfV%rPPjqZs8`SecGExP49|VmB z-)AOes}VVHNgiJP;alMbGt*X_s{Durf59K(ucr&1a%NN{RV7?`TGUMdvaA? zGnb8)sMnzA?1*dTk<&}GDdxq8nzj*?2>Rp~D9Rb&OW*6^;{ci$_qO>0n%j;Bqni?c zFPjOhuRu4Ri*g=J#e)GbiNAdVf@WZsqPvK@TY*3bz>q@{pF_@AQRlwDtGq8JMFFVA zv26COEj7v=w(~o*6)jHtp*y}s%#QnOI-2Z~6%3B-!lN|$mc+EoU{Z;~GrMY7-aMP@ z^Hg25Rl%Mw0!ev3r4#+e=Sp31PMe!F$xB2pjq)5C_{ecvzTGO!1hwtwXA(9ITI~X%;mAaMQ2RYVT3NTB2p^c0o)pg;*VL7$ z(AUZ!9BqcK6dZ^@F6k1Q)=r4{@%n?@n9XYHhF0lyI`OOeyH~DGxsUBHAo+@;A%on^ zn-xXn62$@g%PW^Wz7Cigb0nw;M;I?iIJj0fs5EMuW*<12enmdm@zO{19Q!BnpL)V~ zZl15g-*h^?l-2EGq|?-atf4hGc)Hb?(S1MB6pE-n2=j~YhM`PH;S8sS8#f-ob62l(SR=bf>UE93Nnxeh(PyVA? zKgUbkH1inxqpWtT*)WM}d_$Tx?>C|E^t@5rmge0tXN55XNh1S9p0&%YI8j!6Qf)Wf zF_nC$CDk}*gRY^3Wjy3+@8C*DL-@r4-k)Ixf!IZW^w3}Mm(;=o{EGo{23hjov&Vg) z*|}NuK)_2t7J7Gg#g=Q4Dbt-_T`dc!>x*K2*P{GZ&T%Y!q?`^NIlf+&;h3#wFK_NN z3$sv&L+6`z77h{DOyRE1x3&+mEUx?MiH>NRJ&!JgEVoY-BpM>;I!R4g)&Vmu*W zvAe;%$6cDYp@Ntei+DCx2nx$W6aL-;dX&Yla`Nu17^`Ft59OWRkGilga5JTvBMXZo zyO2Xj@LYJWT0}8NYX>!*sIA)14wGHTXn!GKe2$5Nn!rANWplhVn$Unta9G$Lei>1T zcivJPZ)dTrSaj+2X7SO580{K0G#^N`>w422nV>=J(02Vn7#Lrji?~9L8!r`Qv*4#7 zgP$-L!DMCv>FcC5-%%!skm<3!5H&@?DBG(PmlFTb2POm}8!YJFYclV%ro6ABMlUa^ z+OK&l%z#B5e_ga=hUdTqO9R|rM6#U`@_gev?u(54P(NZF*0T{?hs2Jns#BIs)jg%8a~W?@ z$9l=GQ^n4ScY|b-e-1v~x8{7^Hx$dllV~5RaL0Q6ThgV`eO_CK!nL6f0mTH3Yl;Ok zu%GWS`aP6kQI?PSH0KRnxiCM%T-ptSWwN}1Ej6{->V!ZNXn#7K%=nLo%XG{F{1PY_ zQ-%KbVmE?8!k~YK3_u$*Vt9rDvO@&`y>S82|Lqy*|5W(xzomrn^9d{0RT@LGMu&pXP!a<=SdjDR@a{>3v^E^ vF$i`8I^Bu@*AzGOukK$3gFs#kAP~<#O9aUP+EbUoL?B{Hnx*Ntzfyky{Eh1m diff --git a/index.js b/index.js index aa543de..cc91b58 100644 --- a/index.js +++ b/index.js @@ -11,16 +11,31 @@ const logger = pino(pretty()) process.env['ELECTRON_DISABLE_SECURITY_WARNINGS'] = 'true'; -let currentprojectpath = null; -let currentprojectname = null; -let currentprojectopen = false; -let appexiting = false; -let appreloading = false; -let currentworkspacechange = false; -let isopennewproject = false; +var currentprojectpath = null; +var currentprojectname = null; +var currentprojectopen = false; +var appexiting = false; +var appreloading = false; +var currentworkspacechange = false; +var isopennewproject = false; +var appstarted = false; +var version; -let appstarted = false; +try { + // Read package.json synchronously + const data = fs.readFileSync('package.json', 'utf8'); + + // Parse JSON + const packageJson = JSON.parse(data); + + // Get project version + version = packageJson.version; + + console.log("Project version:", version); +} catch (err) { + console.error("Error reading package.json:", err); +} app.whenReady().then(() => { logger.info("Initializing splash window...") @@ -65,12 +80,15 @@ app.whenReady().then(() => { dialog.showErrorBox("Error on startup", "Can't find index.html"); } } - win.setTitle(`ccIDE`) + win.setTitle(`ccIDE v${version}`) ipc.once('ready', () => { + splash.webContents.send("isloaded") + splash.webContents.send("change-status", "Thanks for using software from DPSoftware.") + splash.webContents.send("change-title", `ccIDE v${version}`) logger.info("Ready!") if (splash) { - splash.close(); + splash.hide(); } win.show(); //win.maximize(); @@ -111,7 +129,7 @@ app.whenReady().then(() => { appreloading = false; isopennewproject = false; if (isloaded) { - win.setTitle(`ccIDE`) + win.setTitle(`ccIDE v${version}`) win.reload(); } } @@ -183,7 +201,7 @@ app.whenReady().then(() => { currentprojectname = path.basename(result.filePaths[0]); currentprojectopen = true; - win.setTitle(`${currentprojectname} | ccIDE`) + win.setTitle(`${currentprojectname} | ccIDE v${version}`) }); } @@ -218,7 +236,7 @@ app.whenReady().then(() => { currentprojectname = path.basename(result.filePaths[0]); currentprojectopen = true; - win.setTitle(`${currentprojectname} | ccIDE`) + win.setTitle(`${currentprojectname} | ccIDE v${version}`) }); } @@ -288,6 +306,16 @@ app.whenReady().then(() => { click: () => { win.webContents.send("open-about") } + }, + { + label: 'Splash Screen', + click: () => { + if (!splash.isVisible()) { + splash.show(); + } else { + splash.hide(); + } + } } ] } @@ -348,7 +376,7 @@ app.whenReady().then(() => { win.webContents.send('workspace-saved', true); - win.setTitle(`${currentprojectname} | ccIDE`) + win.setTitle(`${currentprojectname} | ccIDE v${version}`) if (currentworkspacechange) { currentworkspacechange = false; } @@ -373,7 +401,7 @@ app.whenReady().then(() => { win.webContents.send('workspace-saved', true); - win.setTitle(`${currentprojectname} | ccIDE`) + win.setTitle(`${currentprojectname} | ccIDE v${version}`) if (currentworkspacechange) { currentworkspacechange = false; @@ -408,7 +436,7 @@ app.whenReady().then(() => { currentprojectname = path.basename(result.filePaths[0]); currentprojectopen = true; - win.setTitle(`${currentprojectname} | ccIDE`) + win.setTitle(`${currentprojectname} | ccIDE v${version}`) }); } @@ -444,41 +472,44 @@ app.whenReady().then(() => { }); ipc.on('workspace-notsave', (event) => { - win.setTitle(`${currentprojectname}* | ccIDE`) + win.setTitle(`${currentprojectname}* | ccIDE v${version}`) currentworkspacechange = true; }) ipc.on('workspace-unsave', (event) => { currentworkspacechange = true; }) -}) - -app.on("close", function(e) { - console.log("Close event triggered"); - if (currentprojectopen) { - const result = dialog.showMessageBoxSync({ - type: 'question', - buttons: ['Save', 'Don\'t Save', 'Cancel'], - defaultId: 2, - title: 'Save Changes', - message: "Your project is not saved", - }); - if (result === 1) { - // Don't save, continue closing - win = null; - } else if (result === 0) { - // Save and then quit - appexiting = true; - win.webContents.send('save-workspace-request'); + // Listen for the close event of the main window + win.on('close', (event) => { + event.preventDefault() + if (currentprojectopen) { + const result = dialog.showMessageBoxSync({ + type: 'question', + buttons: ['Save', 'Don\'t Save', 'Cancel'], + defaultId: 2, + title: 'Save Changes', + message: "Your project is not saved", + }); + if (result === 1) { + // Don't save, continue closing + win.close(); + } else if (result === 0) { + // Save and then quit + appexiting = true; + win.webContents.send('save-workspace-request'); + } } else { - // Cancel the close operation - e.preventDefault(); + win.destroy(); } - } else { - // No unsaved changes, continue closing - win = null; - } -}); + }); + + win.on("closed", () => { + if (splash) { + splash.close() + } + }) + +}) app.on('window-all-closed', () => { if (process.platform !== 'darwin') { diff --git a/package.json b/package.json index 5433c55..fff7bbd 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "ccide", - "version": "1.1", + "version": "1.3", "description": "ComputerCraft mod virtual lua IDE", "main": "index.js", "scripts": { diff --git a/src/index.html b/src/index.html index 0419d7c..caaeb6b 100644 --- a/src/index.html +++ b/src/index.html @@ -3,7 +3,6 @@ - ccIDE