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