Scripting Helpers is winding down operations and is now read-only. More info→
Ad
Log in to vote
0

Why is this program that manages plane direction not working?

Asked by 5 years ago
Edited 5 years ago

I have this code for a plane script on mobile that hasn't been working right. The plane on mobile won't respond to the user's commands on direction via their movement on the touch screen. I'm trying to get the plane to move based on the touch location of the mobile user (i.e. where they tap/drag/whatever), such as if the player is dragging/touching right, it'll bank right, same for up, down, left, etc. This script does not respond to any of the mobile user's touch commands, and I have no idea why. I'm pretty new to working with mobile commands, so I'm not even sure if this is the right approach.

Basically, I need to find and detect the mobile equivalent of mouse.Hit, mouse.ViewSizeX, and mouse.X on PC.

Can someone assist me? Code is below

---Client sided code
local dY --- different approach I tried
local dX
local lastTouchTranslation = nil
local function setup_Touch(touchPositions, totalTranslation, velocity, state)
    local difference
    if state == Enum.UserInputState.Change or state == Enum.UserInputState.End then
        difference = totalTranslation - lastTouchTranslation
    end
    lastTouchTranslation = totalTranslation
    print(difference.X)
    print(difference.Y) ---print statements won't work
    dX = difference.X
    dY = difference.Y
    return difference.X, difference.Y ---I tried to get the code to work via a return of this function originally, to no avail, so I tried a different methoe with the dX and dY functions.
end

UserInputService.TouchPan:Connect(function() rem.onMouseMoved:FireServer(mouse.Hit,setup_Touch) end) --- this code is in a bigger function group that detects input on different devices

---Server sided code; code works on PC perfectly with mouse input, doesn't work so much with mobile input.

function GetBankAngle(M,ViewSizeX,X) 
    local VSX,X = ViewSizeX,X
    local Ratio = (((VSX / 2) - X)/(VSX / 2))
    Ratio = (Ratio < -1 and -1 or Ratio > 1 and 1 or Ratio)
    return math.rad(Ratio * 90)
end

function onMouseMoved(mouse,ViewSizeX,X)
    local BankAngle = GetBankAngle(mouse,ViewSizeX,X) 
    if fly == true then
        turn = true
        while turn == true do
            if heli ~= nil then
                if heli.Parts:FindFirstChild("Engine") ~= nil then
                    heli.Parts.Engine.BodyGyro.cframe = (mouse * CFrame.Angles(0,0,BankAngle))
                    --Direction.cframe = (mouse.Hit * CFrame.Angles(0,0,BankAngle))
                    --heli.Parts.Engine.BodyGyro.cframe = mouse.Hit
                end
            end
            wait(0.1)
        end
    end
end
local rem=script.Parent.Remotes
rem.onMouseMoved.OnServerEvent:connect(function(player,hit,ViewSizeX,X)
    onMouseMoved(hit,ViewSizeX,X)
end)

---the output I am given says that they cannot perform arithmetic on nil values, that being the ViewSizeX and X values.

Answer this question