From 3686e0de639fe1b8c2fa14966d5bf0e57aa68e50 Mon Sep 17 00:00:00 2001 From: Frank Date: Sun, 26 Oct 2025 23:00:32 +0100 Subject: [PATCH] Vector --- Moose Development/Moose/Core/Vector.lua | 80 +++++++++++++++++---- Moose Development/Moose/Utilities/Utils.lua | 16 +++++ 2 files changed, 83 insertions(+), 13 deletions(-) diff --git a/Moose Development/Moose/Core/Vector.lua b/Moose Development/Moose/Core/Vector.lua index 086cfd6c6..68ead6645 100644 --- a/Moose Development/Moose/Core/Vector.lua +++ b/Moose Development/Moose/Core/Vector.lua @@ -135,6 +135,9 @@ VECTOR = { -- @field #string version VECTOR.version="0.0.3" +--- VECTOR unique ID +_VECTORID=0 + --- VECTOR private index. -- @field #VECTOR __index VECTOR.__index = VECTOR @@ -168,6 +171,10 @@ function VECTOR:New(x, y, z) else self=setmetatable({x=x or 0, y=y or 0, z=z or 0}, VECTOR) end + + _VECTORID=_VECTORID+1 + + self.uid=_VECTORID return self end @@ -578,7 +585,7 @@ end -- @param #VECTOR Vector The destination vector. -- @param #number Fraction The fraction (0,1) where the new vector is created. Default 0.5, *i.e.* in the middle. -- @return #VECTOR Vector between this and the other vector. -function VECTOR:GetIntermediateCoordinate(Vector, Fraction) +function VECTOR:GetIntermediateVector(Vector, Fraction) local f=Fraction or 0.5 @@ -590,13 +597,7 @@ function VECTOR:GetIntermediateCoordinate(Vector, Fraction) -- Set/scale the length. vec:SetLength(f*length) - - --TODO: Not sure what this was supposed to do?! --- if f>1 then --- local norm=UTILS.VecNorm(vec) --- f=Fraction/norm --- end - + -- Get to the desired position. vec=self+vec @@ -675,7 +676,7 @@ function VECTOR:AddVec(Vec) return self end ---- Substract a vector from this one. This function works for DCS#Vec2, DCS#Vec3, VECTOR, COORDINATE objects. +--- Subtract a vector from this one. This function works for DCS#Vec2, DCS#Vec3, VECTOR, COORDINATE objects. -- Note that if you want to add a VECTOR, you can also simply use the `-` operator. -- @param #VECTOR self -- @param DCS#Vec3 Vec Vector to substract. Can also be a DCS#Vec2, DCS#Vec3, COORDINATE or VECTOR object. @@ -1057,8 +1058,61 @@ function VECTOR:GetTemperaturAndPressure() return t,p end +--- Creates a smoke at this vector. +-- @param #VECTOR self +-- @param #number Color Color of the smoke: 0=Green, 1=Red, 2=White, 3=Orange, 4=Blue. Default 0. +-- @param #number Duration (Optional) Duration of the smoke in seconds. Default nil. +function VECTOR:Smoke(Color, Duration) + + local vec3=self:GetVec3() + + Color=Color or 0 + + self.nameSmoke=string.format("Vector-Smoke-%d", self.uid) + + trigger.action.smoke(vec3, Color, self.nameSmoke) + + + if Duration and Duration>0 then + self:StopSmoke(Duration) + end + + return self +end + + +--- Stops smoke. +-- @param #VECTOR self +-- @return #VECTOR self +function VECTOR:StopSmoke(Delay) + + printf("stop smoke") + + if Delay and Delay>0 then + timer.scheduleFunction(VECTOR.StopSmoke, self, timer.getTime()+Delay) + printf("stop smoke scheduled") + else + if self.nameSmoke then + trigger.action.effectSmokeStop(self.nameSmoke) + self.nameSmoke=nil + printf("stop smoke NOW") + end + end + + return self +end --- Creates a large smoke and fire effect of a specified type and density at this vector. +-- +-- * 1 = small smoke and fire +-- * 2 = medium smoke and fire +-- * 3 = large smoke and fire +-- * 4 = huge smoke and fire +-- * 5 = small smoke +-- * 6 = medium smoke +-- * 7 = large smoke +-- * 8 = huge smoke +-- -- @param #VECTOR self -- @param #number Preset Preset of smoke. Default `BIGSMOKEPRESET.LargeSmokeAndFire`. -- @param #number Density Density between [0,1]. Default 0.5. @@ -1126,10 +1180,10 @@ end -- @param #table FillColor RGB color with alpha {r, g, b, alpha}. Default {1, 0, 0, 0.5}. -- @param #number LineType Line type: 0=No line, 1=Solid, 2=Dashed, 3=Dotted, 4=Dot Dash, 5=Long Dash, 6=Two Dash. Default 1. -- @return #number Marker ID. Can be used to remove the drawing. -function VECTOR:ArrowToAll(Vector, Coalition, Color, FillColor, LineType) +function VECTOR:ArrowTo(Vector, Coalition, Color, FillColor, LineType) - local vec3Start=self:GetVec3() - local vec3End=Vector:GetVec3() + local vec3End=self:GetVec3() + local vec3Start=Vector:GetVec3() local id=UTILS.GetMarkID() @@ -1169,7 +1223,7 @@ function VECTOR.__add(a,b) return c end ---- Meta function to substract vectors. +--- Meta function to subtract vectors. -- @param #VECTOR a Vector a. -- @param #VECTOR b Vector b. -- @return #VECTOR Returns a new VECTOR c with c[i]=a[i]-b[i] for i=x,y,z. diff --git a/Moose Development/Moose/Utilities/Utils.lua b/Moose Development/Moose/Utilities/Utils.lua index 9d52ee972..a6c393484 100644 --- a/Moose Development/Moose/Utilities/Utils.lua +++ b/Moose Development/Moose/Utilities/Utils.lua @@ -3227,6 +3227,22 @@ function UTILS.BearingToCardinal(Heading) end end +--- Adjust given heading so that is is in [0, 360). +-- @param #number Heading The heading in degrees. +-- @return #number Adjust heading in [0,360). +function UTILS.AdjustHeading360(Heading) + + while Heading>=360 or Heading<0 do + if Heading>=360 then + Heading=Heading-360 + elseif Heading<0 then + Heading=Heading+360 + end + end + + return Heading +end + --- Create a BRAA NATO call string BRAA between two GROUP objects -- @param Wrapper.Group#GROUP FromGrp GROUP object -- @param Wrapper.Group#GROUP ToGrp GROUP object