Skip to content

Releases

Release v1.4.0

Choose a tag to compare

@github-actions github-actions released this 16 Oct 03:34
94fd45b

Added

  • Count the records that share an index value with IndexedCollection:countAll.

Changed

  • RingBuffer:get (and DeduplicatingQueue:get) now takes the same time for every position instead of slowing down for items further from the front. Fractional positions still round down.
  • RingBuffer:get and DeduplicatingQueue:get now return nil for a NaN position. They previously returned the front item.
  • IndexedCollection:getAll takes time proportional to the matching records instead of the whole collection. Records still come back in the order they were added, including after replace moves a record to another index value.

Release v1.3.1

Choose a tag to compare

@github-actions github-actions released this 24 Sep 03:28
d6f14d0

Fixed

  • IsFiniteVec2 and IsFiniteVec3 no longer error on every call. In 1.3.0 they called a helper that had been removed, which broke every function that validates a vector.

Release v1.2.0

Choose a tag to compare

@github-actions github-actions released this 02 Sep 17:43
1345b36

Added

  • RingBuffer:rotate, DeduplicatingQueue, IndexedPriorityQueue, and IndexedCollection provide reusable queue and collection operations.

Release v1.1.0

Choose a tag to compare

@github-actions github-actions released this 30 Aug 00:45

Added

  • CircleUnionArea2D calculates the exact analytic union area of validated horizontal circles without polygon approximation.

Fixed

  • Repeated bundled loads now preserve namespaced logger instances and their message prefixes.

Removed

  • Harness no longer creates the shared global Log; consumers create and retain a local logger with HarnessLogger(namespace).

Release v1.0.2

Choose a tag to compare

@github-actions github-actions released this 29 Aug 23:51

Fixed

  • CreateFireAtPointTask now projects target Vec3 X/Z coordinates to the DCS FireAtPoint Vec2 X/Y fields.

Release v1.0.1

Choose a tag to compare

@github-actions github-actions released this 21 Aug 03:41
3eb93d5

Added

  • GetUnitHealth returns a validated current and initial life snapshot with derived alive and damaged states for a named unit.

Release v1.0.0

Choose a tag to compare

@github-actions github-actions released this 19 Aug 04:14
49268cd

Added

  • dist/harness.d.lua provides the generated LuaLS public API definition.
  • HeadingVector2D returns the DCS Vec2 unit vector for a heading.
  • GroundTrackFromVelocity returns track from horizontal Vec3 velocity above a configurable minimum speed.
  • HeadingFrame2D creates forward and right axes at a Vec3 origin.
  • ProjectPointToHeadingFrame2D returns along and lateral position in a heading frame.
  • ProjectVectorToHeadingFrame2D returns forward and lateral vector components in a heading frame.
  • GetReciprocalRunwayName calculates the reciprocal designator and swaps L/R suffixes.
  • NormalizeDirectionalRunways validates raw runway records and emits primary and reciprocal directions.
  • GetDirectionalRunways protects the Airbase:getRunways() compatibility call and normalizes its result.
  • GetRunwayRelativePosition returns along and lateral position from a runway threshold.
  • GetRunwayRelativeVelocity returns forward and lateral velocity for a runway.
  • GetRunwayLineupError returns signed centerline error outside a configurable minimum range.
  • GetRunwayGlidepathAngle returns threshold glidepath angle outside a configurable minimum range.
  • GetHeadwindComponent returns the wind component opposing a landing heading.
  • SelectRunwayByHeadwind returns the first runway with the greatest headwind component.
  • FindNearestRunway returns the runway with the nearest paved-surface center.
  • GetUnitPosition3 returns one protected and fully validated DCS Position3 value.
  • GetAttitudeFromPosition3 returns heading, pitch, and bank from Position3 axes.
  • AirRelativeVelocity subtracts wind velocity from ground velocity.
  • GetAerodynamicAngles returns angle of attack, sideslip, and true airspeed.
  • CalculateIsaAtmosphere returns International Standard Atmosphere data from 0 through 20 km.
  • GetAirData returns DCS atmosphere data with an ISA fallback.
  • MachFromTrueAirspeed returns Mach from true airspeed and temperature.
  • TrueAirspeedToCalibratedAirspeed converts subsonic true airspeed to calibrated airspeed.
  • GetUnitDrawArguments reads a caller-supplied argument ID array and reports whether the result is complete.
  • GetAllAirbases merges world and coalition airbases, deduplicates them by name, and sorts them.
  • FindAirbasesWithin filters a caller-supplied airbase list by radius.
  • GetAllPlayerUnits returns name-sorted player units from neutral, red, and blue coalitions.
  • GetPlayerIds returns the network player ID list.
  • GetPlayerInfos returns available information for all network player IDs.
  • FindPlayerInfosByName returns every exact player-name match and accepts a caller-supplied list.
  • GetWorldEventUnit resolves a named unit from an event initiator or unit field.
  • GetMissionFileCapabilities reports whether protected mission file access is available.
  • SanitizeFilenameComponent produces a bounded safe filename component.
  • EnsureMissionDirectory creates a validated relative directory below lfs.writedir().
  • WriteMissionTextFile writes a new protected text file without overwriting an existing target.
  • WriteUniqueMissionTextFile writes the first available name within a bounded numeric suffix range.
  • TimeWeightedStats creates a constant-size duration-weighted statistics accumulator.
  • TimeWeightedStats:add accepts one value and positive duration and updates the bounded accumulator.
  • TimeWeightedStats:count returns the accepted sample count.
  • TimeWeightedStats:duration returns the total accepted duration.
  • TimeWeightedStats:mean returns the duration-weighted mean.
  • TimeWeightedStats:rms returns the duration-weighted root mean square.
  • TimeWeightedStats:min returns the minimum accepted value.
  • TimeWeightedStats:max returns the maximum accepted value.
  • TimeWeightedStats:peak returns the signed greatest-absolute value and its label.
  • TimeWeightedStats:reset clears all accumulator state.
  • HarnessConstants.AIR_SPECIFIC_HEAT_RATIO defines the dry-air ratio of specific heats.
  • HarnessConstants.DRY_AIR_GAS_CONSTANT_J_KG_K defines the dry-air gas constant.
  • HarnessConstants.SEA_LEVEL_PRESSURE_PA defines standard sea-level pressure.
  • HarnessConstants.SEA_LEVEL_DENSITY_KG_M3 defines standard sea-level density.
  • HarnessConstants.SEA_LEVEL_TEMPERATURE_K defines standard sea-level temperature.
  • HarnessConstants.AIR_DATA_SOURCE_DCS identifies DCS atmosphere data.
  • HarnessConstants.AIR_DATA_SOURCE_ISA identifies calculated ISA data.

Changed

  • Version changed from 0.8.0 to 1.0.0-rc2.
  • ControllerSetROE now exports a Selene signature that accepts numeric and named ROE values.
  • ControllerSetAlarmState now exports a Selene signature that accepts numeric and named alarm states.
  • GeoGrid now exports its optional cell size and allowed-type table accurately to Selene.
  • EventBus now exports its key selector as an optional function.
  • GetCoalitionGroups now has one authoritative definition and returns an empty array on invalid input or API failure.
  • BuildAirOptions now uses ordered option definitions and preserves explicit false RTB overrides.
  • _HarnessInternal.cache.addController now stores recognized controller metadata when provided.
  • GetUnitController now delegates controller metadata storage to the cache owner.
  • GetGroupController now delegates controller metadata storage to the cache owner.
  • EstimateTwoBodyCPA now shares horizontal position calculations without changing its result contract.
  • EstimateInterceptForSpeed now isolates nonnegative root selection without changing its result contract.
  • ProcessDrawingGeometry now delegates drawing types and polygon modes to private handlers.
  • NormalizeDirectionalRunways now separates raw-record validation from directional runway creation.
  • Vec2 now stores DCS {x,y} fields instead of {x,z}.
  • IsVec2 now accepts only DCS {x,y} values without a Z component.
  • ToVec2 now returns DCS {x,y} and maps Vec3 Z to Vec2 Y.
  • ToVec3 now maps Vec2 Y to Vec3 Z and uses its altitude argument for Vec3 Y.
  • VecAdd now adds Vec2 X/Y components.
  • VecSub now subtracts Vec2 X/Y components.
  • VecScale now scales Vec2 X/Y components.
  • VecDiv now divides Vec2 X/Y components.
  • VecLength now measures Vec2 X/Y components.
  • VecLength2D now measures Vec2 X/Y or Vec3 X/Z components.
  • VecDot now computes Vec2 dot products from X/Y components.
  • Distance2D now measures Vec2 X/Y or Vec3 X/Z separation.
  • Distance2DSquared now measures squared Vec2 X/Y or Vec3 X/Z separation.
  • Bearing now uses positive world X as north and east as 90 degrees.
  • BearingBetween now delegates to Bearing.
  • FromBearingDistance now displaces X by cosine and east by sine.
  • DisplacePoint2D now delegates to FromBearingDistance.
  • Midpoint now returns Vec2 X/Y midpoints.
  • VecLerp now interpolates Vec2 X/Y components.
  • Vec2ToString now formats Vec2 X/Y fields.
  • Vec2:toVec3 now maps Vec2 Y to Vec3 Z and uses its argument for Vec3 altitude.
  • Vec2:length now measures X/Y components.
  • Vec2:normalized now normalizes X/Y components.
  • Vec2:dot now computes its dot product from X/Y components.
  • Vec2:distanceTo now measures X/Y separation.
  • Vec2:bearingTo now uses positive X as north and positive Y as east.
  • Vec2:displace now displaces X by cosine and Y by sine.
  • Vec2:midpointTo now returns an X/Y midpoint.
  • Vec2:angleTo now calculates its angle from X/Y components.
  • Vec2:rotate now rotates X/Y components.
  • Vec3:toVec2 now projects Vec3 X/Z to Vec2 X/Y.
  • Vec3:bearingTo now uses positive X as north and positive Z as east.
  • Vec3:displace2D now displaces X by cosine and Z by sine while preserving altitude.
  • MidPoint now accepts and returns DCS Vec2 X/Y values or Vec3 values.
  • RotatePoint2D now rotates DCS Vec2 X/Y or Vec3 X/Z coordinates.
  • NormalizeVector2D now normalizes DCS Vec2 X/Y or Vec3 X/Z coordinates.
  • DotProduct2D now uses DCS Vec2 X/Y or Vec3 X/Z components.
  • AngleBetweenVectors2D now uses DCS Vec2 X/Y or Vec3 X/Z components.
  • PointInPolygon2D now accepts DCS Vec2 X/Y or Vec3 X/Z points.
  • CircleLineIntersection2D now accepts and returns DCS Vec2 or Vec3 coordinates.
  • PolygonArea2D now calculates area from DCS Vec2 X/Y or Vec3 X/Z points.
  • PolygonCentroid2D now returns a DCS Vec2 or Vec3 centroid matching its input.
  • ConvexHull2D now reads DCS Vec2 X/Y or Vec3 X/Z points.
  • GetWindHeading now uses the same DCS world convention as unit heading.
  • GetTerrainHeight now projects Vec3 X/Z to DCS Vec2 X/Y and rejects malformed tables.
  • GetSurfaceType now projects Vec3 X/Z to DCS Vec2 X/Y and rejects malformed tables.
  • GetAGL now gets ground height through the corrected Vec3-to-Vec2 projection.
  • SetAGL now gets ground height through the corrected Vec3-to-Vec2 projection.
  • GetClosestRoadPoint now returns a DCS Vec2 {x,y}.
  • FindRoadPath now returns DCS Vec2 {x,y} points.
  • AddCommand now forwards caption before path and returns the native Path.
  • AddCommandForCoalition now forwards coalition ID, caption, path, handler, and argument.
  • AddCommandForGroup now forwards group ID, caption, path, handler, and argument.
  • AddSubMenu now forwards caption before path and returns the native Path.
  • AddSubMenuForCoalition now forwards coalition ID, caption, and path.
  • AddSubMenuForGroup now forwards group ID, caption, and path.
  • RemoveItem now accepts a nil root path.
  • RemoveItemForCoalition now accepts a nil root path.
  • RemoveItemForGroup now accepts a nil root path.
  • GetUnitID now accepts names or unit objects and normalizes positive integral numeric strings.
  • GetUnitVelocity now accepts names or unit objects and returns a validated Vec3.
  • OutTextForUnit now normalizes positive integral numeric IDs and numeric strings before the unit-scoped DCS call.
  • GetUnitPosition now derives from GetUnitPosition3.
  • GetUnitHeading ...
Read more

Release v0.8.0

Choose a tag to compare

@github-actions github-actions released this 02 May 03:17

Added

  • HarnessConstants global table consolidating all shared constants
  • GetTacanFrequency TACAN frequency calculator
  • GetWindHeading and GetWindSpeed atmosphere helpers
  • InverseHeading reciprocal heading utility
  • ConvertKiasToGroundSpeed and ConvertKiasToMps ISA-based airspeed conversion
  • GetAllShips and GetAllAircraftGroups coalition-wide queries
  • IsSuperCarrier unit type detection
  • GetUnitHeading now accepts unit objects in addition to names
  • GetUnitOrientation and GetUnitPositionAndHeading combo queries
  • DecimalToDMS, GetLatLonOrientation, and CoordToMGRS coordinate formatting
  • BuildGroundWaypoint and GoRoute ground unit routing helpers
  • IsNotAtMapOrigin non-origin position guard
  • RingBuffer:reverseIter newest-to-oldest iteration with early exit

v0.7.1

Choose a tag to compare

@github-actions github-actions released this 30 Sep 19:38
Release v0.7.1

v0.7.0

Choose a tag to compare

@github-actions github-actions released this 30 Sep 15:46
Release v0.7.0