Modules/FileSystem/file/readFloat: Difference between revisions
Jump to navigation
Jump to search
(Created page with "__NOTOC__ This function attempts to read a float (native type) from a file and return it. The amount of bytes read should be four. ==Syntax== <syntaxhighlight lang="lua"> float file:readFloat () </syntaxhighlight> ==Returns== Returns a float if it was successfully read from the file, '''false''' otherwise. ==Example== <section name="Server" class="server" show="true"> This snippet demonstrates a binary vehicle handling format. This saves space in comparison to a .XML...") |
(No difference)
|
Revision as of 03:35, 19 January 2022
This function attempts to read a float (native type) from a file and return it. The amount of bytes read should be four.
Syntax
float file:readFloat ()
Returns
Returns a float if it was successfully read from the file, false otherwise.
Example
Click to collapse [-]
ServerThis snippet demonstrates a binary vehicle handling format. This saves space in comparison to a .XML based format.
local function writeFileString( theFile, string )
theFile:writeShort( #string );
theFile:write( string );
end
local function readFileString( theFile )
local stringLen = theFile:readShort();
if not ( stringLen ) then
return false;
end
return theFile:read( stringLen );
end
local function saveVehicleHandling( theFile, handlingDict )
-- Write down the details.
theFile:writeDouble( handlingDict.mass );
theFile:writeDouble( handlingDict.turnMass );
theFile:writeFloat( handlingDict.dragCoeff );
theFile:writeFloat( handlingDict.centerOfMass[1] );
theFile:writeFloat( handlingDict.centerOfMass[2] );
theFile:writeFloat( handlingDict.centerOfMass[3] );
theFile:writeInt( handlingDict.percentSubmerged );
theFile:writeDouble( handlingDict.tractionMultiplier );
theFile:writeFloat( handlingDict.tractionLoss );
theFile:writeFloat( handlingDict.tractionBias );
theFile:writeShort( handlingDict.numberOfGears );
theFile:writeDouble( handlingDict.maxVelocity );
theFile:writeDouble( handlingDict.engineAcceleration );
theFile:writeFloat( handlingDict.engineInertia );
writeFileString( theFile, tostring( handlingDict.driveType ) );
writeFileString( theFile, tostring( handlingDict.engineType ) );
theFile:writeDouble( handlingDict.brakeDeceleration );
theFile:writeBoolean( handlingDict.ABS );
theFile:writeFloat( handlingDict.steeringLock );
theFile:writeFloat( handlingDict.suspensionForceLevel );
theFile:writeFloat( handlingDict.suspensionDamping );
theFile:writeFloat( handlingDict.suspensionHighSpeedDamping );
theFile:writeFloat( handlingDict.suspensionUpperLimit );
theFile:writeFloat( handlingDict.suspensionLowerLimit );
theFile:writeFloat( handlingDict.suspensionFrontRearBias );
theFile:writeFloat( handlingDict.suspensionAntiDiveMultiplier );
theFile:writeFloat( handlingDict.seatOffsetDistance );
theFile:writeFloat( handlingDict.collisionDamageMultiplier );
theFile:writeInt( handlingDict.monetary );
theFile:writeInt( handlingDict.modelFlags );
theFile:writeInt( handlingDict.handlingFlags );
writeFileString( theFile, handlingDict.headLight );
writeFileString( theFile, handlingDict.tailLight );
theFile:writeShort( handlingDict.animGroup );
end
local function attemptFileRead( theFile, theOperation, defaultOut )
local output = theOperation( theFile );
if not ( output ) then
return defaultOut;
end
return output;
end
local function loadVehicleHandling( theFile )
local handlingEntry = {
mass = attemptFileRead( theFile, theFile.readDouble, 1000 ),
turnMass = attemptFileRead( theFile, theFile.readDouble, 1000 ),
dragCoeff = attemptFileRead( theFile, theFile.readFloat, 0 ),
{
[1] = attemptFileRead( theFile, theFile.readFloat, 0 ),
[2] = attemptFileRead( theFile, theFile.readFloat, 0 ),
[3] = attemptFileRead( theFile, theFile.readFloat, 0 )
},
percentSubmerged = attemptFileRead( theFile, theFile.readInt, 100 ),
tractionMultiplier = attemptFileRead( theFile, theFile.readDouble, 1.0 ),
tractionLoss = attemptFileRead( theFile, theFile.readFloat, 1.0 ),
tractionBias = attemptFileRead( theFile, theFile.readFloat, 1.0 ),
numberOfGears = attemptFileRead( theFile, theFile.readShort, 4 ),
maxVelocity = attemptFileRead( theFile, theFile.readDouble, 240 ),
engineAcceleration = attemptFileRead( theFile, theFile.readDouble, 9 ),
engineInertia = attemptFileRead( theFile, theFile.readFloat, 3 ),
driveType = attemptFileRead( theFile, function(theFile) return readFileString( theFile ) end, "fwd" ),
engineType = attemptFileRead( theFile, function(theFile) return readFileString( theFile ) end, "diesel" ),
brakeDeceleration = attemptFileRead( theFile, theFile.readDouble, 5 ),
brakeBias = attemptFileRead( theFile, theFile.readFloat, 1.0 ),
ABS = attemptFileRead( theFile, theFile.readBoolean, false ),
steeringLock = attemptFileRead( theFile, theFile.readFloat, 180 ),
suspensionForceLevel = attemptFileRead( theFile, theFile.readFloat, 10 ),
suspensionDamping = attemptFileRead( theFile, theFile.readFloat, 10 ),
suspensionHighSpeedDamping = attemptFileRead( theFile, theFile.readFloat, 50 ),
suspensionUpperLimit = attemptFileRead( theFile, theFile.readFloat, 0 ),
suspensionLowerLimit = attemptFileRead( theFile, theFile.readFloat, 0 ),
suspensionFrontRearBias = attemptFileRead( theFile, theFile.readFloat, 0.4 ),
suspensionAntiDiveMultiplier = attemptFileRead( theFile, theFile.readFloat, 10 ),
seatOffsetDistance = attemptFileRead( theFile, theFile.readFloat, 4 ),
collisionDamageMultiplier = attemptFileRead( theFile, theFile.readFloat, 0.5 ),
monetary = attemptFileRead( theFile, theFile.readInt, 10000 ),
modelFlags = attemptFileRead( theFile, theFile.readInt, 0 ),
handlingFlags = attemptFileRead( theFile, theFile.readInt, 0 ),
headLight = attemptFileRead( theFile, function(theFile) return readFileString( theFile ) end, "big" ),
tailLight = attemptFileRead( theFile, function(theFile) return readFileString( theFile ) end, "big" ),
animGroup = attemptFileRead( theFile, theFile.readShort, 1 )
};
return handlingEntry;
end
-- Save the handling of your vehicle, so you can reuse it later.
addCommandHandler( "savehandling",
function(player)
local myVehicle = getPedOccupiedVehicle( player );
if ( myVehicle ) then
local handling = getVehicleHandling( myVehicle );
local handlingFile = fileCreate( getPlayerName( player ) .. "_saved_handling.dat" );
if ( handlingFile ) then
saveVehicleHandling( handlingFile, handling );
handlingFile:destroy();
outputChatBox( "successfully saved handling" );
end
end
end
);
-- Load the handling of the vehicle for reusage.
addCommandHandler( "loadhandling",
function(player)
local handlingName = getPlayerName( player ) .. "_saved_handling.dat";
if ( fileExists( handlingName ) ) then
local myVehicle = getPedOccupiedVehicle( player );
if ( myVehicle ) then
local handlingFile = fileOpen( handlingName );
if ( handlingFile ) then
local handling = loadVehicleHandling( handlingFile );
handlingFile:destroy();
-- Apply the saved handling.
for m,n in pairs( handling ) do
setVehicleHandling( myVehicle, m, n );
end
outputChatBox( "successfully restored handling" );
end
end
end
end
);