View difference between Paste ID: KAG8v5eC and fE7Cnpk7
SHOW: | | - or go back to the newest paste.
1
local ship = peripheral.find("warpdriveShipCore")
2
local lasers = peripheral.getNames()
3
4
local offsetDistance = 18
5
6
for i = #lasers, 1, -1 do
7
    if peripheral.getType(lasers[i]) ~= "warpdriveLaserCamera" then
8
        table.remove(lasers, i)
9
    else
10
        peripheral.wrap(lasers[i]).beamFrequency(1420)
11
    end
12
end
13
14
ship_front, ship_right, ship_up = ship.dim_positive()
15
ship_back, ship_left, ship_down = ship.dim_negative()
16
ship_isInHyper = ship.isInHyperspace()
17
ship_movement = { ship.movement() }
18
ship_rotationSteps = ship.rotationSteps()
19
20
print("Emit Scanning Laser to Jump Ship and Aligning the Mining Laser")
21
22
while true do
23
    local event, laserName, lx, ly, lz, block, _, _, _, type, metadata, resistance = os.pullEvent()
24
25
    if event == "laserScanning" then
26
        -- Convert the laser scanning coordinates to numbers and store them
27
        local lastLx = tonumber(lx)
28
        local lastLy = tonumber(ly)
29
        local lastLz = tonumber(lz)
30
        
31
        -- Get current ship position from the ship core.
32
        local mx, my, mz = ship.getLocalPosition()
33
        
34
        print("Laser target: X:" .. lastLx .. " Y:" .. lastLy .. " Z:" .. lastLz)
35
        print("Ship current position: X:" .. mx .. " Y:" .. my .. " Z:" .. mz)
36
        
37
        -- Calculate the vector from laser target (L) to ship (M)
38
        local vx = mx - lastLx
39
        local vy = my - lastLy
40
        local vz = mz - lastLz
41
        
42
        local dist = math.sqrt(vx * vx + vy * vy + vz * vz)
43
        
44
        if dist > 0 then
45
            -- Normalize the vector.
46
            local ux = vx / dist
47
            local uy = vy / dist
48
            local uz = vz / dist
49
50
            -- Calculate dx, dy, dz as the point offsetDistance away from the laser target along the vector toward the ship.
51
            local dx = lastLx + ux * offsetDistance
52
            local dy = lastLy + uy * offsetDistance
53
            local dz = lastLz + uz * offsetDistance
54
            
55
            -- Round the coordinates to whole numbers.
56
            dx = math.floor(dx + 0.5)
57
            dy = math.floor(dy + 0.5)
58
            dz = math.floor(dz + 0.5)
59
            
60
            print("Calculated jump coordinates: (" .. dx .. ", " .. dy .. ", " .. dz .. ")")
61
        local rx, ry, rz = ship.getOrientation()
62-
            print("Error: The ship and the laser target are at the same location!")
62+
        minForwardBack = math.abs(ship_front+ship_back+1)
63
        minLeftRight = math.abs(ship_left+ship_right+1)
64
		minUpDown = math.abs(ship_up+ship_down+1)
65
            jx = dx-mx
66
            jy = dy-my
67
            jz = dz-mz
68
69
		forwardBackMov = 0
70
        leftRightMov = 0
71
        upDownMov = 0
72
 
73
        if rx == 1 then
74
            forwardBackMov = jx
75
            leftRightMov = jz
76
        elseif rx == -1 then
77
            forwardBackMov = -jx
78
            leftRightMov = -jz
79
        elseif rz == 1 then
80
            forwardBackMov = jz
81
            leftRightMov = -jx
82
        elseif rz == -1 then
83
            forwardBackMov = -jz
84
            leftRightMov = jx
85
        end
86
87
		if math.abs(forwardBackMov) < minForwardBack or math.abs(upDownMov) < minUpDown or math.abs(leftRightMov) < minLeftRight then
88
            print("The movement is too small!")
89
        else
90
            leftRightMov = leftRightMov*1
91
            ship.movement(forwardBackMov, upDownMov, leftRightMov)
92
            ship.rotationSteps(0)
93
            ship.command("MANUAL", true)
94
        end
95
    end
96
end
97