fixed/enhanced logger and added some ldoc

This commit is contained in:
Lukas Kropatschek 2016-01-06 00:49:30 +01:00
parent e19c4f4c2c
commit 08b8811e31

125
mist.lua
View File

@ -9,8 +9,11 @@ Official Release: https://github.com/mrSkortch/MissionScriptingTools/tree/master
]] ]]
--- MiST Mission Scripting Tools --- MiST Mission Scripting Tools.
-- @module mist -- @module mist
-- @author Speed
-- @author Grimes
-- @author lukrop
mist = {} mist = {}
-- don't change these -- don't change these
@ -18,8 +21,8 @@ mist.majorVersion = 4
mist.minorVersion = 0 mist.minorVersion = 0
mist.build = 60 mist.build = 60
--- Logger class --- Logger class.
-- @section Logger -- @type mist.Logger
mist.Logger = { mist.Logger = {
tag = "", tag = "",
level = 1, level = 1,
@ -27,9 +30,12 @@ mist.Logger = {
-- Logger scope -- Logger scope
do do
--- Logger constructor --- Logger constructor.
-- creates a new logger with empty tag and log level set to 'error' -- Creates a new logger object.
-- @tparam[opt] mist.Logger optional existing logger object -- @tparam[opt] table l optional logger object.
-- @usage myLogger = mist.Logger:new
-- @usage myLogger = mist.Logger:new{tag = "MyScript", level = 2}
-- @treturn mist.Logger
function mist.Logger:new(l) function mist.Logger:new(l)
l = l or {} l = l or {}
setmetatable(l, self) setmetatable(l, self)
@ -37,12 +43,14 @@ do
return l return l
end end
--- Sets the level of verbosity for this logger --- Sets the level of verbosity for this logger.
-- "none" or 0 disables all logging -- "none" or 0 disables all logging
-- "error" or 1 shows error messages only -- "error" or 1 shows error messages only
-- "warning" or 2 shows error and warning messages -- "warning" or 2 shows error and warning messages
-- "info" or 3 shows error, warning and info messages -- "info" or 3 shows error, warning and info messages
-- @param level this can either be a string or an integer level -- @param level this can either be a string or an integer level
-- @usage myLogger:setLevel("info")
-- @usage myLogger:setLevel(3) -- show everything!
function mist.Logger:setLevel(level) function mist.Logger:setLevel(level)
if type(level) == 'string' then if type(level) == 'string' then
if level == 'none' or level == 'off' then if level == 'none' or level == 'off' then
@ -63,7 +71,7 @@ do
-- @tparam string text string containing keywords to substitute with values -- @tparam string text string containing keywords to substitute with values
-- @tparam array vars values to use for substitution -- @tparam array vars values to use for substitution
-- @treturn string new string with keywords substituted -- @treturn string new string with keywords substituted
local function mist.Logger:substituteKeys(text, vars) local function substituteKeys(text, vars)
local substText = text local substText = text
for identifier in text:gmatch("%%%d") do for identifier in text:gmatch("%%%d") do
local index = tonumber(identifier:match("%d+")) local index = tonumber(identifier:match("%d+"))
@ -76,31 +84,54 @@ do
return substText return substText
end end
--- Logs an error.
-- logs to dcs.log as long as at least the "error" log level is set.
-- @tparam string text the text with keywords to substitute.
-- @tparam[opt] table vars this the values to be used for substitution.
-- @tparam[opt] boolean showBox whether to show a box and pause the game.
-- @usage myLogger:error("Just an error!")
-- @usage myLogger:error("This is a serious error! Foo is %1 instead of 'bar'", {'derp'})
-- @usage myLogger:error("It's a trap!", {}, true)
function mist.Logger:error(text, vars, showBox) function mist.Logger:error(text, vars, showBox)
showBox = showBox or false showBox = showBox or false
if self.level >= 1 then if self.level >= 1 then
if vars then if vars then
text = self.subsituteKeys(text, vars) -- check if table is empty
if not next(vars) == nil then
text = subsituteKeys(text, vars)
end
end end
env.error(tag .. ' | ' .. text, showBox) env.error(tag .. ' | ' .. text, showBox)
end end
end end
--- Logs a warning.
-- @tparam string text the text with keywords to substitute.
-- @tparam[opt] table vars this the values to be used for substitution.
-- @usage myLogger:warn("I warned you! Those %1 from the interwebs are %2", {"geeks", 1337})
function mist.Logger:warn(text, vars) function mist.Logger:warn(text, vars)
if self.level >= 2 then if self.level >= 2 then
if vars then if vars then
text = self.subsituteKeys(text, vars) if not next(vars) == nil then
text = subsituteKeys(text, vars)
end
end end
env.warning(tag .. ' | ' .. text) env.warning(tag .. ' | ' .. text)
end end
end end
--- Logs a info
-- @tparam string text the text with keywords to substitute.
-- @tparam[opt] table vars this the values to be used for substitution.
-- @see warn
function mist.Logger:info(text, vars) function mist.Logger:info(text, vars)
if self.level >= 4 then if self.level >= 4 then
if vars then if vars then
text = self.subsituteKeys(text, vars) if not next(vars) == nil then
text = subsituteKeys(text, vars)
end end
env.error(tag .. ' | ' .. text) end
env.info(tag .. ' | ' .. text)
end end
end end
end end
@ -955,7 +986,8 @@ do
end end
--- Utility methods. E.g. conversions between units etc. --- Utility methods.
-- E.g. conversions between units etc.
-- @section utils -- @section utils
mist.utils = {} mist.utils = {}
@ -988,9 +1020,9 @@ function mist.utils.metersToFeet (meters)
end end
--- Converts nautical miles to meters --- Converts nautical miles to meters
-- @param NM distance in nautical miles -- @param nm distance in nautical miles
-- @return distance in meters -- @return distance in meters
function mist.utils.NMToMeters (NM) function mist.utils.NMToMeters (nm)
return NM*1852 return NM*1852
end end
@ -1030,48 +1062,51 @@ function mist.utils.kmphToMps (kmph)
end end
--- Converts a Vec3 to a Vec2. --- Converts a Vec3 to a Vec2.
-- @param Vec3 the 3D vector -- @tparam Vec3 vec the 3D vector
-- @return vector converted to Vec2 -- @return vector converted to Vec2
function mist.utils.makeVec2(Vec3) function mist.utils.makeVec2(vec)
if Vec3.z then if vec.z then
return {x = Vec3.x, y = Vec3.z} return {x = vec.x, y = vec.z}
else else
return {x = Vec3.x, y = Vec3.y} -- it was actually already vec2. return {x = vec.x, y = vec.y} -- it was actually already vec2.
end end
end end
--- Converts a Vec2 to a Vec3. --- Converts a Vec2 to a Vec3.
-- @param Vec2 the 2D vector -- @tparam Vec2 vec the 2D vector
-- @param y optional new y axis (altitude) value. If omitted it's 0. -- @param y optional new y axis (altitude) value. If omitted it's 0.
function mist.utils.makeVec3(Vec2, y) function mist.utils.makeVec3(vec, y)
if not Vec2.z then if not vec.z then
if Vec2.alt and not y then if vec.alt and not y then
y = Vec2.alt y = vec.alt
elseif not y then elseif not y then
y = 0 y = 0
end end
return {x = Vec2.x, y = y, z = Vec2.y} return {x = vec.x, y = y, z = vec.y}
else else
return {x = Vec2.x, y = Vec2.y, z = Vec2.z} -- it was already Vec3, actually. return {x = vec.x, y = vec.y, z = vec.z} -- it was already Vec3, actually.
end end
end end
--- Converts a Vec2 to a Vec3 using ground level as altitude. --- Converts a Vec2 to a Vec3 using ground level as altitude.
-- The ground level at the specific point is used as altitude (y-axis) -- The ground level at the specific point is used as altitude (y-axis)
-- for the new vector. Optionally a offset can be specified. -- for the new vector. Optionally a offset can be specified.
-- @tparam Vec2 Vec2 the 2D vector -- @tparam Vec2 vec the 2D vector
-- @param[opt] offset offset to be applied to the ground level -- @param[opt] offset offset to be applied to the ground level
-- @return new 3D vector -- @return new 3D vector
function mist.utils.makeVec3GL(Vec2, offset) function mist.utils.makeVec3GL(vec, offset)
local adj = offset or 0 local adj = offset or 0
if not Vec2.z then if not vec.z then
return {x = Vec2.x, y = (land.getHeight(Vec2) + adj), z = Vec2.y} return {x = vec.x, y = (land.getHeight(vec) + adj), z = vec.y}
else else
return {x = Vec2.x, y = (land.getHeight({x = Vec2.x, y = Vec2.z}) + adj), z = Vec2.z} return {x = vec.x, y = (land.getHeight({x = vec.x, y = vec.z}) + adj), z = vec.z}
end end
end end
--- Returns the center of a zone as Vec3
-- @tparam string|table zone trigger zone name or table
-- @treturn Vec3 center of the zone
function mist.utils.zoneToVec3 (zone) function mist.utils.zoneToVec3 (zone)
local new = {} local new = {}
if type(zone) == 'table' and zone.point then if type(zone) == 'table' and zone.point then
@ -1090,30 +1125,43 @@ function mist.utils.zoneToVec3 (zone)
end end
end end
-- gets heading-error corrected direction from point along vector vec. --- Returns heading-error corrected direction.
-- True-north corrected direction from point along vector vec.
-- @tparam Vec3 vec
-- @tparam Vec2 point
-- @return heading-error corrected direction from point.
function mist.utils.getDir(vec, point) function mist.utils.getDir(vec, point)
local dir = math.atan2(vec.z, vec.x) local dir = math.atan2(vec.z, vec.x)
if point then if point then
dir = dir + mist.getNorthCorrection(point) dir = dir + mist.getNorthCorrection(point)
end end
if dir < 0 then if dir < 0 then
dir = dir + 2*math.pi -- put dir in range of 0 to 2*pi dir = dir + 2 * math.pi -- put dir in range of 0 to 2*pi
end end
return dir return dir
end end
-- gets distance in meters between two points (2 dimensional) --- Returns distance in meters between two points.
-- @tparam Vec2|Vec3 point1 first point
-- @tparam Vec2|Vec3 point2 second point
-- @treturn number distance between given points.
function mist.utils.get2DDist(point1, point2) function mist.utils.get2DDist(point1, point2)
point1 = mist.utils.makeVec3(point1) point1 = mist.utils.makeVec3(point1)
point2 = mist.utils.makeVec3(point2) point2 = mist.utils.makeVec3(point2)
return mist.vec.mag({x = point1.x - point2.x, y = 0, z = point1.z - point2.z}) return mist.vec.mag({x = point1.x - point2.x, y = 0, z = point1.z - point2.z})
end end
-- gets distance in meters between two points (3 dimensional) --- Returns distance in meters between two points in 3D space.
-- @tparam Vec3 point1 first point
-- @tparam Vec3 point2 second point
-- @treturn number distancen between given points in 3D space.
function mist.utils.get3DDist(point1, point2) function mist.utils.get3DDist(point1, point2)
return mist.vec.mag({x = point1.x - point2.x, y = point1.y - point2.y, z = point1.z - point2.z}) return mist.vec.mag({x = point1.x - point2.x, y = point1.y - point2.y, z = point1.z - point2.z})
end end
--- Creates a waypoint from a vector.
-- @tparam Vec2|Vec3 vec position of the new waypoint
-- @treturn Waypoint a new waypoint to be used inside paths.
function mist.utils.vecToWP(vec) function mist.utils.vecToWP(vec)
local newWP = {} local newWP = {}
newWP.x = vec.x newWP.x = vec.x
@ -1127,6 +1175,11 @@ function mist.utils.vecToWP(vec)
return newWP return newWP
end end
--- Creates a waypoint from a unit.
-- This function also considers the units speed.
-- The alt_type of this waypoint is set to "BARO".
-- @tparam Unit unit Unit whose position and speed will be used.
-- @treturn Waypoint new waypoint.
function mist.utils.unitToWP(unit) function mist.utils.unitToWP(unit)
if type(unit) == 'string' then if type(unit) == 'string' then
if Unit.getByName(unit) then if Unit.getByName(unit) then