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

How would I go about converting this to FilteringEnabled?

Asked by 6 years ago
Edited 6 years ago

I am part of a ROBLOX community that participates in tank battles. I've been tasked with converting the tank scripts to FilteringEnabled; I've been quite successful thus far. I managed to get the firing and reloading to work with FilteringEnabled. But my current issue is getting the turret and gun rotation to work.

This is inside a localScript inside a tool, and it works perfectly.

function setTurretDirection(elevation, rotation)
    parts.MantletBase.MainGunWeld.C1 = CFrame.new(0,0,0) * CFrame.fromEulerAnglesXYZ(0, elevation, 0);
    parts.TurretRing2.TurretRingWeld.C1 = CFrame.new(0,0,0.8) * CFrame.fromEulerAnglesXYZ(0, 0, rotation); 
end

function getSmoothRotation(rotations)

    local targElev = rotations[1];
    local targRot = rotations[2];    

    local maxGunDepression = Info.depression;

    if math.abs(targElev) > maxGunDepression then
        targElev = maxGunDepression*sign(targElev);
    end

    local elevDiff = targElev - currentElev;
    if math.abs(elevDiff) < 0.01 then -- If they're close
        currentElev = targElev;
    else -- Move towards it
        currentElev = currentElev + 0.01*sign(elevDiff);
    end

    local rotDiff = targRot - currentRot;

    if rotDiff > math.pi then
        rotDiff = rotDiff - 2*math.pi;
    elseif rotDiff < -math.pi then
        rotDiff = rotDiff + 2*math.pi;
    end

    local turretSpeed = Info.turretTraverse;

    if math.abs(rotDiff) < turretSpeed then -- If they're close
        currentRot = targRot;
    else -- Move towards it
        currentRot = currentRot + turretSpeed*sign(rotDiff);
    end

    local rotations = {};
    rotations[1] = targElev;
    rotations[2] = targRot;    
    return rotations;

end

currentElev = 0;
currentRot = 0;

while wait() do
    if (myMouse) then
        -- Position of mouse in world
        mousePoint = myMouse.Hit.p;       
        targetVector = (mousePoint - parts.GunBase.CFrame.p).unit;        
        targetRotations = determineNewDirections(targetVector);        
        for i = 1, 4 do        
            newRotations = getSmoothRotation(targetRotations);
            setTurretDirection(currentElev, currentRot);
            wait();
        end
    end
end

However, with FilteringEnabled, it only works client-side; I understand this is how FilteringEnabled works. I also need to optimize it so that there's as little lag as possible. I've been told that I could just transfer the numbers I need to a Server Script and have the Server Script handle the actual rotation functions. But I don't know how I'd go about doing so.

Answer this question