mirror of
https://github.com/mrSkortch/MissionScriptingTools.git
synced 2025-08-15 10:47:23 +00:00
fixed/enhanced logger and added some ldoc
This commit is contained in:
parent
e19c4f4c2c
commit
08b8811e31
125
mist.lua
125
mist.lua
@ -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
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user