term.setBackgroundColor(colours.black) term.clear() term.setCursorPos(1,1) -- local propConfig = textutils.unserialize(fs.open("propConfig.txt",'r').readAll()) local propList = propConfig.props local relayList = propConfig.relays local rotorList = {} local airshipConfig = textutils.unserialize(fs.open("airshipConfig.txt",'r').readAll()) local airshipName = airshipConfig.airshipName local airshipChannel = tonumber(airshipConfig.airshipChannel) -- local modem = peripheral.wrap('back') local all_sides = {"front","back","top","bottom","left","right"} local function adjustSpeedController(prop,multiplier) --print(peripheral.getType(prop.rotor)) --print(prop.rotorName,multiplier) if prop.type == 'Create_RotationSpeedController' then prop.rotor.setTargetSpeed(prop.speed*multiplier) elseif prop.type == 'electric_motor' then prop.rotor.setSpeed(prop.speed*multiplier) end end local function adjustRelay(relay,command_axes) for i2,axis in pairs(relay.axes) do if command_axes[i2] > 0 then if axis.pos then relay.relay.setOutput(axis.pos,true) end if axis.neg then relay.relay.setOutput(axis.neg,false) end elseif command_axes[i2] < 0 then if axis.neg then relay.relay.setOutput(axis.neg,true) end if axis.pos then relay.relay.setOutput(axis.pos,false) end else relay.relay.setOutput(axis.pos,false) relay.relay.setOutput(axis.neg,false) end end end local function handleMovementCommand(command_axes) --#props for i,prop in pairs(propList) do local num = 0 local total = 0 local calculated_average = 0 -- for i2,axis in pairs(prop.axes) do local relative_axis = command_axes[i2] if relative_axis ~= 0 and prop.axes[i2] ~= 0 then --print(i2,prop.axes[i2]) total = total + 1 num = num + relative_axis*axis end end if total ~= 0 then --print(total) calculated_average = (num/total) end local ok, err = pcall(adjustSpeedController,prop,calculated_average) end --#relays for i,relay in pairs(relayList) do adjustRelay(relay,command_axes) end end local function handleTransmission(event, modemSide, senderChannel, replyChannel, transmission, senderDistance) if event == 'modem_message' and transmission[1] and transmission[1] == 'airshipTransmission' and senderDistance < 100 then if transmission[2] == airshipName then --print('Received Airship Command Transmission:',airshipName) -- local command_axes = transmission[3] handleMovementCommand(command_axes) end end end -- for i,prop in pairs(propList) do --print('Got Rotor:',prop.peripheralName) prop.rotor = peripheral.wrap(prop.peripheralName) prop.type = peripheral.getType(prop.rotor) adjustSpeedController(prop,0) end for i,relay in pairs(relayList) do --print('Got Relay:',relay.peripheralName) relay.relay = peripheral.wrap(relay.peripheralName) for i,side in pairs(all_sides) do relay.relay.setOutput(side, false) end end modem.open(airshipChannel) while true do local airshipTransmission = handleTransmission(os.pullEvent()) end