diff --git a/.github/FUNDING.yml b/.github/FUNDING.yml new file mode 100644 index 0000000..445c4c0 --- /dev/null +++ b/.github/FUNDING.yml @@ -0,0 +1,12 @@ +# These are supported funding model platforms + +github: Jericho1060 +patreon: # Replace with a single Patreon username +open_collective: # Replace with a single Open Collective username +ko_fi: jericho1060 +tidelift: # Replace with a single Tidelift platform-name/package-name e.g., npm/babel +community_bridge: # Replace with a single Community Bridge project-name e.g., cloud-foundry +liberapay: # Replace with a single Liberapay username +issuehunt: # Replace with a single IssueHunt username +otechie: # Replace with a single Otechie username +custom: # Replace with up to 4 custom sponsorship URLs e.g., ['link1', 'link2'] diff --git a/README.MD b/README.MD new file mode 100644 index 0000000..cb3a682 --- /dev/null +++ b/README.MD @@ -0,0 +1,57 @@ +# DU-ELEVATOR + +A Generic Elevator script for Dual universe + +# Guilded Server (better than Discord) + +You can join me on Guilded for help or suggestions or requests by following that link : https://guilded.jericho.dev + +# Discord Server + +You can join me on Discord for help or suggestions or requests by following that link : https://discord.gg/qkdjyqDZQZ + +# Instalation + +### Important notice + +- the script was only tested on a remote control + +### Links + +You must link the following elements to the remote control (order doesn't matter, the script will detect them automatically): +- Link the core to the remote control +- Link the fuel tank to the remote control (only if you want to see the fuel gauge) + +### Setup + +- you need at least a vertical engine pointing the bottom +- you need at least one engine on each horizontal direction (forward, right, left, backward) +- you need at least 3 adjustors on each angles of the construct : (see picture below) + - one pointing up (this one is used for autoroll and autopitch) + - one pointing on one side (this one is used for autoyaw) + - one pointing on the orther side of the angle (this one is used for autoyaw) + - ![Adustors Positioning](./images/adjustors.png) + +### Installation of the script + +- copy the content of the config.json file and paste it on the remote control (right click on the remote control -> advanced -> paste lua configuration from clipboard) + +### Lua parameters + +- `DEBUG` : if set to true, the script will print debug messages in the chat +- `BaseAltitude` : the default altitude of the elevator when landed on the floor +- `StrafeSpeedFactor` : the speed multiplier when strafing. adjust it depending on how many engines you have on the sides + +### Usage + +- open the "lua" chat channel and type `goto:` to go to the specified altitude with `` the altitude in meters, if the altitude is missing or invalid, it will send you the `BaseAltitude` + +# Coming Soon + +- Bookmark system: you will be able to name and store your favorite floors and go to them with a key press +- support for emitter to be able to send a signal to a specific channel to close a door to lock the elevator in position +- dedicated HUD with more informations and with some customizations possible (AR View of the position of the elevator, custom fuel gauge, etc...) + +# Support or donation + +if you like it, [](https://ko-fi.com/jericho1060) \ No newline at end of file diff --git a/Source/Construct/OnConstructDocked.lua b/Source/Construct/OnConstructDocked.lua new file mode 100644 index 0000000..13788bb --- /dev/null +++ b/Source/Construct/OnConstructDocked.lua @@ -0,0 +1 @@ +Script.construct:constructDocked(id) \ No newline at end of file diff --git a/Source/Construct/OnPlayerBoarded.lua b/Source/Construct/OnPlayerBoarded.lua new file mode 100644 index 0000000..afb66f5 --- /dev/null +++ b/Source/Construct/OnPlayerBoarded.lua @@ -0,0 +1 @@ +Script.construct:playerBoarded(id) \ No newline at end of file diff --git a/Source/Construct/OnUndocked.lua b/Source/Construct/OnUndocked.lua new file mode 100644 index 0000000..eda9a32 --- /dev/null +++ b/Source/Construct/OnUndocked.lua @@ -0,0 +1 @@ +Script.construct:undocked(id) \ No newline at end of file diff --git a/Source/Construct/OnVRStationEntered.lua b/Source/Construct/OnVRStationEntered.lua new file mode 100644 index 0000000..1acdbe6 --- /dev/null +++ b/Source/Construct/OnVRStationEntered.lua @@ -0,0 +1 @@ +Script.construct:VRStationEntered(id) \ No newline at end of file diff --git a/Source/Construct/onPvPTimer.lua b/Source/Construct/onPvPTimer.lua new file mode 100644 index 0000000..8e28892 --- /dev/null +++ b/Source/Construct/onPvPTimer.lua @@ -0,0 +1 @@ +Script.construct:PvPTimer(active) \ No newline at end of file diff --git a/Source/Player/OnParentChanged.lua b/Source/Player/OnParentChanged.lua new file mode 100644 index 0000000..479e8f4 --- /dev/null +++ b/Source/Player/OnParentChanged.lua @@ -0,0 +1 @@ +Script.player:parentChanged(oldId, newId) \ No newline at end of file diff --git a/Source/System/OnActionLoop.lua b/Source/System/OnActionLoop.lua new file mode 100644 index 0000000..09d6fc2 --- /dev/null +++ b/Source/System/OnActionLoop.lua @@ -0,0 +1 @@ +Script.system:actionLoop(action) \ No newline at end of file diff --git a/Source/System/OnActionStart.lua b/Source/System/OnActionStart.lua new file mode 100644 index 0000000..be355e2 --- /dev/null +++ b/Source/System/OnActionStart.lua @@ -0,0 +1 @@ +Script.system:actionStart(action) \ No newline at end of file diff --git a/Source/System/OnActionStop.lua b/Source/System/OnActionStop.lua new file mode 100644 index 0000000..2e3522f --- /dev/null +++ b/Source/System/OnActionStop.lua @@ -0,0 +1 @@ +Script.system:actionStop(action) \ No newline at end of file diff --git a/Source/System/OnFlush.lua b/Source/System/OnFlush.lua new file mode 100644 index 0000000..da8b76b --- /dev/null +++ b/Source/System/OnFlush.lua @@ -0,0 +1 @@ +Script.system:flush() \ No newline at end of file diff --git a/Source/System/OnInputText.lua b/Source/System/OnInputText.lua new file mode 100644 index 0000000..fc140c1 --- /dev/null +++ b/Source/System/OnInputText.lua @@ -0,0 +1 @@ +Script.system:inputText(text) \ No newline at end of file diff --git a/Source/System/OnUpdate.lua b/Source/System/OnUpdate.lua new file mode 100644 index 0000000..ca28d61 --- /dev/null +++ b/Source/System/OnUpdate.lua @@ -0,0 +1 @@ +Script.system:update() \ No newline at end of file diff --git a/Source/Unit/OnStart.lua b/Source/Unit/OnStart.lua new file mode 100644 index 0000000..f8fdcc5 --- /dev/null +++ b/Source/Unit/OnStart.lua @@ -0,0 +1,386 @@ +--[[ + DU-ELEVATOR by Jericho +]] + +__DEBUG = false --export: Debug mode, will print more information in the console + +--[[ + Version Management +]] + +local version = "V 1.0.0" +local log_split = "=================================================" +--printing version in lua chat +system.print(log_split)local a=""local b=math.ceil((50-#version-2)/2)for c=1,b,1 do a=a..'='end;a=a.." "..version.." "for c=1,b,1 do a=a..'='end;system.print(a)system.print(log_split) + +--[[ + Detecting elements linked +]] +core = nil +fuelTanks = {} + +for slot_name, slot in pairs(unit) do + if + type(slot) == "table" + and type(slot.export) == "table" + and slot.getClass + then + local class = slot.getClass():lower() + if class:find("coreunit") then + core = slot + elseif class:find("fuelcontainer") then + table.insert(fuelTanks, slot) + end + end +end + +--[[ + stopping the script if required elements are not linked +]] +if core == nil then + system.print('Core unit is not linked, exiting the script') + unit.exit() +end + +--[[ + Default Unit Start Mechanics +]] +pitchInput = 0 +pitchInputFromDevice = 0 +rollInput = 0 +yawInput = 0 +verticalStrafeInput = 0 +lateralStrafeInput = 0 +brakeInput = 1 --braking by default +goingBack = false +goingForward = false +shiftPressed = false +jumpDelta = 0 +baseAcceleration = 0.8 + +Nav = Navigator.new(system, core, unit) +Nav.axisCommandManager:setupCustomTargetSpeedRanges(axisCommandId.longitudinal, {100, 500, 1000, 2000,3000, 5000}) +Nav.axisCommandManager:setTargetGroundAltitude(0) +unit.deactivateGroundEngineAltitudeStabilization() + +-- Parenting widget +parentingPanelId = system.createWidgetPanel("Docking") +parentingWidgetId = system.createWidget(parentingPanelId,"parenting") +system.addDataToWidget(unit.getWidgetDataId(),parentingWidgetId) + +-- Fuel widget generation (Updated code By Jericho) +--TODO: replace by custom HUD +if (#fuelTanks > 0) then + fuelTankPanelId = system.createWidgetPanel("Fuel Tanks") + fuelTankWidgetId = system.createWidget(fuelTankPanelId,"fuel_container") + for _,tank in pairs(fuelTanks) do + system.addDataToWidget(tank.getWidgetDataId(),fuelTankWidgetId) + end +end + +--[[ + Storing base position and orientation of the elevator +]] +ConstructInitPos = construct.getWorldPosition() +--replace that pos by a hand written value to be sure the construct will always realign the same position +--ConstructInitPos = {-1231538.185042, 1201297.6879598, -2617220.2766464} +if __DEBUG then system.print('ConstructInitPos: ' .. json.encode(ConstructInitPos)) end +BaseForward = vec3(construct.getWorldForward()) +if __DEBUG then system.print('BaseForward: ' .. json.encode(BaseForward)) end +BaseAltitute = 285 --export: the start altitude of the elevator (lower position altitude) + +--TODO: to replace with a computing in flush from the current acceleration and the friction acceleration (construct.getWorldAirFrictionAcceleration) +MaxSpeed = construct.getFrictionBurnSpeed() -- for security to avoid burning if going too fast +if __DEBUG then system.print('MaxSpeed: ' .. MaxSpeed) end + +--init a value to store the target altitude +TargetAltitude = core.getAltitude() --by default to the start altitude to avoid falling down if in the air + +--[[ + Kinematics functions by Jaylebreak + Source available at https://gitlab.com/JayleBreak/dualuniverse/-/blob/master/DUflightfiles/autoconf/custom/kinematics.lua +]] +function computeAccelerationTime(initial, acceleration, final) return (final - initial)/acceleration end +function computeDistanceAndTime(initial, final, mass, thrust, t50, brakeThrust) + t50 = t50 or 0 + brakeThrust = brakeThrust or 0 + local speedUp = initial < final + local a0 = thrust / (speedUp and mass or -mass) + local b0 = -brakeThrust/mass + local totA = a0+b0 + if initial == final then + return 0, 0 + elseif speedUp and totA <= 0 or not speedUp and totA >= 0 then + return -1, -1 + end + local distanceToMax, timeToMax = 0, 0 + if a0 ~= 0 and t50 > 0 then + local c1 = math.pi/t50/2 + local v = function(t) + return a0*(t/2 - t50*math.sin(c1*t)/math.pi) + b0*t + initial + end + local speedchk = speedUp and function(s) return s >= final end or function(s) return s <= final end + timeToMax = 2*t50 + if speedchk(v(timeToMax)) then + local lasttime = 0 + while math.abs(timeToMax - lasttime) > 0.25 do + local t = (timeToMax + lasttime)/2 + if speedchk(v(t)) then + timeToMax = t + else + lasttime = t + end + end + end + local K = 2*a0*t50^2/math.pi^2 + distanceToMax = K*(math.cos(c1*timeToMax) - 1) + (a0+2*b0)*timeToMax^2/4 + initial*timeToMax + if timeToMax < 2*t50 then + return distanceToMax, timeToMax + end + initial = v(timeToMax) + end + local a = a0+b0 + local t = computeAccelerationTime(initial, a, final) + local d = initial*t + a*t*t/2 + return distanceToMax+d, timeToMax+t +end + +--[[ + Commpute angle betwwen vectors by Jericho +]] +function signedAngleBetween(vec1, vec2, planeNormal) + local normVec1 = vec1:project_on_plane(planeNormal):normalize() + local normVec2 = vec2:normalize() + local v1v2dot = normVec1:dot(normVec2) + local angle = math.acos(utils.clamp(v1v2dot,-1,1)) + local crossProduct = vec1:cross(vec2) + if crossProduct:dot(planeNormal) < 0 then + return -angle + end + return angle +end + +--[[ + DU-LUA-Framework by Jericho + Permit to code easier by grouping most of the code in a single event Unit > Start + Unminified Source available here: https://github.com/Jericho1060/du-lua-framework +]]-- +local a=system.print;local b=error;local c=pcall;local d=assert;local e=coroutine;local f=e.create;local g=e.status;local h=e.resume;local i="dead"local j="suspended"function runFunction(k,l,...)local m,n=c(k,...)if not m then b(l..n)end end;local o={__index={cos={update={},flush={}},fns={update={},flush={},action={start={},stop={},loop={}},inputText=nil,start=nil,stop=nil},ACTIONS={FORWARD="forward",BACKWARD="backward",YAW_LEFT="yawleft",YAW_RIGHT="yawright",STRAFE_LEFT="strafeleft",STRAFE_RIGHT="straferight",LEFT="left",RIGHT="right",UP="up",DOWN="down",GROUND_ALTITUDE_UP="groundaltitudeup",GROUND_ALTITUDE_DOWN="groundaltitudedown",LEFT_ALT="lalt",LEFT_SHIFT="lshift",GEAR="gear",LIGHT="light",BRAKE="brake",OPTION_1="option1",OPTION_2="option2",OPTION_3="option3",OPTION_4="option4",OPTION_5="option5",OPTION_6="option6",OPTION_7="option7",OPTION_8="option8",OPTION_9="option9",OPTION_10="option10",OPTION_11="option11",OPTION_12="option12",OPTION_13="option13",OPTION_14="option14",OPTION_15="option15",OPTION_16="option16",OPTION_17="option17",OPTION_18="option18",OPTION_19="option19",OPTION_20="option20",OPTION_21="option21",OPTION_22="option22",OPTION_23="option23",OPTION_24="option24",OPTION_25="option25",OPTION_26="option26",OPTION_27="option27",OPTION_28="option28",OPTION_29="option29",LEFT_MOUSE="leftmouse",STOP_ENGINES="stopengines",SPEED_UP="speedup",SPEED_DOWN="speeddown",ANTIGRAVITY="antigravity",BOOSTER="booster"},main={update=f(function()end),flush=f(function()end)},update=function(self)local p=g(self.main.update)if p==i then self.main.update=f(function()self:runUpdate()end)elseif p==j then d(h(self.main.update))end end,flush=function(self)local p=g(self.main.flush)if p==i then self.main.flush=f(function()self:runFlush()end)elseif p==j then d(h(self.main.flush))end end,action=function(self,q,r)if self.fns.action[q][r]then runFunction(self.fns.action[q][r],"System Action "..q.." Error: ")end end,actionStart=function(self,r)self:action('start',r)end,actionStop=function(self,r)self:action('stop',r)end,actionLoop=function(self,r)self:action('loop',r)end,inputText=function(self,s)if self.fns.inputText then runFunction(self.fns.inputText,"System Input Text Error: ",s)end end,runUpdate=function(self)for t,u in pairs(self.cos.update)do local m=g(u)if m==i then self.cos.update[t]=f(self.fns.update[t])elseif m==j then d(h(u))end end end,runFlush=function(self)for t,u in pairs(self.cos.flush)do local m=g(u)if m==i then self.cos.flush[t]=f(self.fns.flush[t])elseif m==j then d(h(u))end end end,onUpdate=function(self,v)for t,w in pairs(v)do self.fns.update[t]=w;self.cos.update[t]=f(w)end end,onFlush=function(self,v)for t,w in pairs(v)do self.fns.flush[t]=w;self.cos.flush[t]=f(w)end end,onAction=function(self,q,v)for t,w in pairs(v)do self.fns.action[q][t]=w end end,onActionStart=function(self,v)self:onAction("start",v)end,onActionStop=function(self,v)self:onAction("stop",v)end,onActionLoop=function(self,v)self:onAction("loop",v)end,onInputText=function(self,k)self.fns.inputText=k end}}local x={__index={timers={},stopFn=function()end,timer=function(self,y)if self.timers[y]then runFunction(self.timers[y],"Unit Timer "..y.." Error: ")end end,setTimer=function(self,y,z,k)self.timers[y]=k;unit.setTimer(y,z)end,stopTimer=function(self,y)unit.stopTimer(y)self.timers[y]=nil end,onStop=function(self,k)self.stopFn=k end,stop=function(self)if self.stopFn then runFunction(self.stopFn,"Unit Stop Error: ")end end}}local A={__index={parentChangedFn=function(B,C)end,onParentChange=function(self,k)self.parentChangedFn=k end,parentChanged=function(self,B,C)if self.parentChangedFn then runFunction(self.parentChangedFn,"Player Parent Changed Error: ",B,C)end end}}local D={__index={dockedFn=function(E)end,onDocked=function(self,k)self.dockedFn=k end,docked=function(self,E)if self.dockedFn then runFunction(self.dockedFn,"Construct Docked Error: ",E)end end,undockedFn=function(E)end,onUndocked=function(self,k)self.undockedFn=k end,undocked=function(self,E)if self.undockedFn then runFunction(self.undockedFn,"Construct Undocked Error: ",E)end end,playerBoardedFn=function(E)end,onPlayerBoarded=function(self,k)self.playerBoardedFn=k end,playerBoarded=function(self,E)if self.playerBoardedFn then runFunction(self.playerBoardedFn,"Construct Player Boarded Error: ",E)end end,VRStationEnteredFn=function(E)end,onVRStationEntered=function(self,k)self.VRStationEnteredFn=k end,VRStationEntered=function(self,E)if self.VRStationEnteredFn then runFunction(self.VRStationEnteredFn,"Construct VR Station Entered Error: ",E)end end,constructDockedFn=function(E)end,onConstructDocked=function(self,k)self.constructDockedFn=k end,constructDocked=function(self,E)if self.constructDockedFn then runFunction(self.constructDockedFn,"Construct Construct Docked Error: ",E)end end,PvPTimerFn=function(F)end,onPvPTimer=function(self,k)self.PvPTimerFn=k end,PvPTimer=function(self,F)if self.PvPTimerFn then runFunction(self.PvPTimerFn,"Construct PvP Timer Error: ",F)end end}}DU_Framework={__index={system=setmetatable({},o),unit=setmetatable({},x),player=setmetatable({},A),construct=setmetatable({},D)}} + +Script = {} +setmetatable(Script, DU_Framework) + +--[[ + String Helpers For Lua By Jericho +]] +String = { + __index = { + split = function(self, delimiter) + local result = {} + for match in (self..delimiter):gmatch("(.-)"..delimiter) do + table.insert(result, match) + end + return result + end + } +} +string = setmetatable(string, String) +string.__index = string + +local systemOnUpdate = { + function () + Nav:update() + end +} + +local systemOnFlush = { + function() + local yawSpeedFactor = 1.5 + local yawAccelerationFactor = 3 + local lateralAntiDriftFactor = 1 + local lateralStrafeFactor = 5 + local brakeSpeedFactor = 1 + local brakeFlatFactor = 4 + local autoBrakeSpeed = 15 + -- validate params + brakeSpeedFactor = math.max(brakeSpeedFactor, 0.01) + brakeFlatFactor = math.max(brakeFlatFactor, 0.01) + yawSpeedFactor = math.max(yawSpeedFactor, 0.01) + yawAccelerationFactor = math.max(yawAccelerationFactor, 0.01) + --init all the PIDs as global if first flush + if (rollPID == nil) then rollPID = pid.new(0.2, 0, 10) end + if (pitchPID == nil) then pitchPID = pid.new(0.2, 0, 10) end + if (yawPID == nil) then yawPID = pid.new(0.2, 0, 10) end + if (lateralPID == nil) then lateralPID = pid.new(0.2, 0, 10) end + if (longitudinalPID == nil) then longitudinalPID = pid.new(0.2, 0, 10) end + if (distancePID == nil) then distancePID = pid.new(0.2, 0, 10) end + + -- final inputs + if unit.isMouseDirectControlActivated() then + -- in direct control, we tweak the pitch to behave inbetween virtual joystick and direct control + -- this helps a lot for ground construct control + pitchInputFromDevice = utils.clamp(pitchInputFromDevice + system.getControlDeviceForwardInput() * system.getActionUpdateDeltaTime(), -1.0, 1.0) + else + pitchInputFromDevice = system.getControlDeviceForwardInput() + end + local finalPitchInput = pitchInput + pitchInputFromDevice + local finalRollInput = rollInput + system.getControlDeviceYawInput() + local finalYawInput = yawInput - system.getControlDeviceLeftRightInput() + local combinedRollYawInput = utils.clamp(finalRollInput - finalYawInput, -1.0, 1.0); + local finalVerticalStrafeInput = verticalStrafeInput + local finalLateralStrafeInput = lateralStrafeInput; + local finalBrakeInput = brakeInput + + -- Axis + local worldVertical = vec3(core.getWorldVertical()) + local constructUp = vec3(construct.getWorldOrientationUp()) + local constructForward = vec3(construct.getWorldOrientationForward()) + local constructRight = vec3(construct.getWorldOrientationRight()) + local constructVelocity = vec3(construct.getWorldVelocity()) + local constructVelocityDir = vec3(construct.getWorldVelocity()):normalize() + local constructAngularVelocity = vec3(construct.getWorldAngularVelocity()) + local constructYawVelocity = constructAngularVelocity:dot(constructUp) + local constructWorldPosition = vec3(construct.getWorldPosition()) + local constructTargetPosition = vec3(ConstructInitPos) + + -- Engine commands + local keepCollinearity = 0 -- for easier reading + local dontKeepCollinearity = 1 -- for easier reading + local tolerancePercentToSkipOtherPriorities = 1 -- if we are within this tolerance (in%), we don't go to the next priorities + + -- keeping the start position alignement + local StrafeSpeedFactor = 50 --export: useg to increase the force of the alignement, decrease the value if the alignement is too strong or increase it if it's too slow + local positionDifference = constructTargetPosition - constructWorldPosition + local lateralOffset = positionDifference:project_on(constructRight):len() * utils.sign(positionDifference:dot(constructRight)) + local longitudinalOffset = positionDifference:project_on(constructForward):len() * utils.sign(positionDifference:dot(constructForward)) + lateralPID:inject(lateralOffset) + Nav.axisCommandManager:setThrottleCommand(axisCommandId.lateral, lateralPID:get() * StrafeSpeedFactor) + longitudinalPID:inject(longitudinalOffset) + Nav.axisCommandManager:setThrottleCommand(axisCommandId.longitudinal, longitudinalPID:get() * StrafeSpeedFactor) + + -- Rotation + local currentRollDeg = getRoll(worldVertical, constructForward, constructRight) + local currentPitchDeg = -math.asin(constructForward:dot(worldVertical)) * constants.rad2deg + local targetRollDeg = 0 + local targetPitchDeg = 0 + local targetYawDeg = signedAngleBetween(BaseForward,constructForward,constructUp)*180/math.pi + rollPID:inject(targetRollDeg - currentRollDeg) + pitchPID:inject(targetPitchDeg - currentPitchDeg) + yawPID:inject(-targetYawDeg*yawSpeedFactor) + + local constructYawTargetVelocity = -combinedRollYawInput * yawSpeedFactor + local constructYawTargetAcceleration = yawAccelerationFactor * (constructYawTargetVelocity - constructYawVelocity) + local constructTargetAngularVelocity = rollPID:get() * constructForward + pitchPID:get() * constructRight + constructYawTargetAcceleration * constructUp + + Nav:setEngineTorqueCommand('torque', constructTargetAngularVelocity, keepCollinearity, 'airfoil', '', '', tolerancePercentToSkipOtherPriorities) + + -- moving up or down from TargetAltitude + local verticalSpeed = constructVelocity:project_on(worldVertical):len() + local verticalSpeedSigned = verticalSpeed * -utils.sign(constructVelocity:dot(worldVertical)) + local brakeDistance = 0 + local maxBrake = construct.getMaxBrake() + if maxBrake ~= nil then + brakeDistance, _ = computeDistanceAndTime(verticalSpeed, 0, construct.getInertialMass(), 0, 0, maxBrake - (core.getGravityIntensity() * construct.getInertialMass()) * utils.sign(verticalSpeedSigned)) + end + local coreAltitude = core.getAltitude() + local distance = TargetAltitude - coreAltitude + local targetDistance = utils.sign(distance) * (math.abs(distance)-brakeDistance) + distancePID:inject(targetDistance) + if distancePID:get() > 0.5 or verticalSpeedSigned < -MaxSpeed then --using a 0.5 meter deadband for stabilizing + Nav.axisCommandManager:setThrottleCommand(axisCommandId.vertical, 1) + elseif distancePID:get() < -0.5 or verticalSpeedSigned > MaxSpeed then + Nav.axisCommandManager:setThrottleCommand(axisCommandId.vertical, -1) + else + Nav.axisCommandManager:resetCommand(axisCommandId.vertical) + end + + --Brakes + if + (math.abs(distance) < verticalSpeed) + or verticalSpeed > MaxSpeed + or (brakeDistance > math.abs(distance)) + or (finalBrakeInput == 0 and autoBrakeSpeed > 0 and Nav.axisCommandManager.throttle == 0 and constructVelocity:len() < autoBrakeSpeed) + then + finalBrakeInput = 1 + end + local brakeAcceleration = -finalBrakeInput * (brakeSpeedFactor * constructVelocity + brakeFlatFactor * constructVelocityDir) + + Nav:setEngineForceCommand('brake', brakeAcceleration) + + -- AutoNavigation regroups all the axis command by 'TargetSpeed' + local autoNavigationEngineTags = '' + local autoNavigationAcceleration = vec3() + local autoNavigationUseBrake = false + + -- Longitudinal Translation + local longitudinalEngineTags = 'thrust analog longitudinal' + local longitudinalCommandType = Nav.axisCommandManager:getAxisCommandType(axisCommandId.longitudinal) + if (longitudinalCommandType == axisCommandType.byThrottle) then + local longitudinalAcceleration = Nav.axisCommandManager:composeAxisAccelerationFromThrottle(longitudinalEngineTags,axisCommandId.longitudinal) + Nav:setEngineForceCommand(longitudinalEngineTags, longitudinalAcceleration, keepCollinearity) + elseif (longitudinalCommandType == axisCommandType.byTargetSpeed) then + local longitudinalAcceleration = Nav.axisCommandManager:composeAxisAccelerationFromTargetSpeed(axisCommandId.longitudinal) + autoNavigationEngineTags = autoNavigationEngineTags .. ' , ' .. longitudinalEngineTags + autoNavigationAcceleration = autoNavigationAcceleration + longitudinalAcceleration + if (Nav.axisCommandManager:getTargetSpeed(axisCommandId.longitudinal) == 0 or -- we want to stop + Nav.axisCommandManager:getCurrentToTargetDeltaSpeed(axisCommandId.longitudinal) < - Nav.axisCommandManager:getTargetSpeedCurrentStep(axisCommandId.longitudinal) * 0.5) -- if the longitudinal velocity would need some braking + then + autoNavigationUseBrake = true + end + end + + -- Lateral Translation + local lateralStrafeEngineTags = 'thrust analog lateral' + local lateralCommandType = Nav.axisCommandManager:getAxisCommandType(axisCommandId.lateral) + if (lateralCommandType == axisCommandType.byThrottle) then + local lateralStrafeAcceleration = Nav.axisCommandManager:composeAxisAccelerationFromThrottle(lateralStrafeEngineTags,axisCommandId.lateral) + Nav:setEngineForceCommand(lateralStrafeEngineTags, lateralStrafeAcceleration, keepCollinearity) + elseif (lateralCommandType == axisCommandType.byTargetSpeed) then + local lateralAcceleration = Nav.axisCommandManager:composeAxisAccelerationFromTargetSpeed(axisCommandId.lateral) + autoNavigationEngineTags = autoNavigationEngineTags .. ' , ' .. lateralStrafeEngineTags + autoNavigationAcceleration = autoNavigationAcceleration + lateralAcceleration + end + + -- Vertical Translation + local verticalStrafeEngineTags = 'thrust analog vertical' + local verticalCommandType = Nav.axisCommandManager:getAxisCommandType(axisCommandId.vertical) + if (verticalCommandType == axisCommandType.byThrottle) then + local verticalStrafeAcceleration = Nav.axisCommandManager:composeAxisAccelerationFromThrottle(verticalStrafeEngineTags,axisCommandId.vertical) + Nav:setEngineForceCommand(verticalStrafeEngineTags, verticalStrafeAcceleration, keepCollinearity, 'airfoil', 'ground', '', tolerancePercentToSkipOtherPriorities) + elseif (verticalCommandType == axisCommandType.byTargetSpeed) then + local verticalAcceleration = Nav.axisCommandManager:composeAxisAccelerationFromTargetSpeed(axisCommandId.vertical) + autoNavigationEngineTags = autoNavigationEngineTags .. ' , ' .. verticalStrafeEngineTags + autoNavigationAcceleration = autoNavigationAcceleration + verticalAcceleration + end + + -- Auto Navigation (Cruise Control) + if (autoNavigationAcceleration:len() > constants.epsilon) then + if (brakeInput ~= 0 or autoNavigationUseBrake or math.abs(constructVelocityDir:dot(constructForward)) < 0.95) -- if the velocity is not properly aligned with the forward + then + autoNavigationEngineTags = autoNavigationEngineTags .. ', brake' + end + Nav:setEngineForceCommand(autoNavigationEngineTags, autoNavigationAcceleration, dontKeepCollinearity, '', '', '', tolerancePercentToSkipOtherPriorities) + end + + -- Rockets + Nav:setBoosterCommand('rocket_engine') + end +} + + +Script.system:onUpdate(systemOnUpdate) +Script.system:onFlush(systemOnFlush) + +--[[ + Chat Commands +]] + +Script.system:onInputText(function (text) + if text:lower():find('goto:') then + TargetAltitude = tonumber(text:split(':')[2]) or BaseAltitute + brakeInput = 0 + system.print('Target Altitude set to ' .. TargetAltitude .. 'm') + else + system.print('Unknown command') + end +end) \ No newline at end of file diff --git a/Source/Unit/OnStop.lua b/Source/Unit/OnStop.lua new file mode 100644 index 0000000..e5ab2df --- /dev/null +++ b/Source/Unit/OnStop.lua @@ -0,0 +1 @@ +Script.unit:stop() \ No newline at end of file diff --git a/Source/Unit/OnTimer.Lua b/Source/Unit/OnTimer.Lua new file mode 100644 index 0000000..e22cc5b --- /dev/null +++ b/Source/Unit/OnTimer.Lua @@ -0,0 +1 @@ +Script.unit:timer(tag) \ No newline at end of file diff --git a/config.json b/config.json new file mode 100644 index 0000000..211853c --- /dev/null +++ b/config.json @@ -0,0 +1 @@ +{"events":[],"handlers":[{"code":"Script.system:update()","filter":{"args":[],"signature":"onUpdate()","slotKey":"-4"},"key":"9"},{"code":"Script.system:inputText(text)","filter":{"args":[{"variable":"*"}],"signature":"onInputText(text)","slotKey":"-4"},"key":"10"},{"code":"Script.system:flush()","filter":{"args":[],"signature":"onFlush()","slotKey":"-4"},"key":"11"},{"code":"Script.system:actionStop(action)","filter":{"args":[{"variable":"*"}],"signature":"onActionStop(action)","slotKey":"-4"},"key":"12"},{"code":"Script.system:actionStart(action)","filter":{"args":[{"variable":"*"}],"signature":"onActionStart(action)","slotKey":"-4"},"key":"13"},{"code":"Script.system:actionLoop(action)","filter":{"args":[{"variable":"*"}],"signature":"onActionLoop(action)","slotKey":"-4"},"key":"14"},{"code":"Script.player:parentChanged(oldId, newId)","filter":{"args":[{"variable":"*"},{"variable":"*"}],"signature":"onParentChanged(oldId,newId)","slotKey":"-3"},"key":"3"},{"code":"Script.construct:VRStationEntered(id)","filter":{"args":[{"variable":"*"}],"signature":"onVRStationEntered(id)","slotKey":"-2"},"key":"4"},{"code":"Script.construct:undocked(id)","filter":{"args":[{"variable":"*"}],"signature":"onUndocked(id)","slotKey":"-2"},"key":"5"},{"code":"Script.construct:PvPTimer(active)","filter":{"args":[{"variable":"*"}],"signature":"onPvPTimer(active)","slotKey":"-2"},"key":"6"},{"code":"Script.construct:playerBoarded(id)","filter":{"args":[{"variable":"*"}],"signature":"onPlayerBoarded(id)","slotKey":"-2"},"key":"7"},{"code":"Script.construct:constructDocked(id)","filter":{"args":[{"variable":"*"}],"signature":"onConstructDocked(id)","slotKey":"-2"},"key":"8"},{"code":"Script.unit:timer(tag)","filter":{"args":[{"variable":"*"}],"signature":"onTimer(tag)","slotKey":"-1"},"key":"0"},{"code":"Script.unit:stop()","filter":{"args":[],"signature":"onStop()","slotKey":"-1"},"key":"1"},{"code":"--[[\r\n DU-ELEVATOR by Jericho\r\n]]\r\n\r\n__DEBUG = false --export: Debug mode, will print more information in the console\r\n\r\n--[[\r\n Version Management\r\n]]\r\n\r\nlocal version = \"V 1.0.0\"\r\nlocal log_split = \"=================================================\"\r\n--printing version in lua chat\r\nsystem.print(log_split)local a=\"\"local b=math.ceil((50-#version-2)/2)for c=1,b,1 do a=a..'='end;a=a..\" \"..version..\" \"for c=1,b,1 do a=a..'='end;system.print(a)system.print(log_split)\r\n\r\n--[[\r\n Detecting elements linked\r\n]]\r\ncore = nil\r\nfuelTanks = {}\r\n\r\nfor slot_name, slot in pairs(unit) do\r\n if\r\n type(slot) == \"table\"\r\n and type(slot.export) == \"table\"\r\n and slot.getClass\r\n then\r\n local class = slot.getClass():lower()\r\n if class:find(\"coreunit\") then\r\n core = slot\r\n elseif class:find(\"fuelcontainer\") then\r\n table.insert(fuelTanks, slot)\r\n end\r\n end\r\nend\r\n\r\n--[[\r\n stopping the script if required elements are not linked\r\n]]\r\nif core == nil then\r\n system.print('Core unit is not linked, exiting the script')\r\n unit.exit()\r\nend\r\n\r\n--[[\r\n Default Unit Start Mechanics\r\n]]\r\npitchInput = 0\r\npitchInputFromDevice = 0\r\nrollInput = 0\r\nyawInput = 0\r\nverticalStrafeInput = 0\r\nlateralStrafeInput = 0\r\nbrakeInput = 1 --braking by default\r\ngoingBack = false\r\ngoingForward = false\r\nshiftPressed = false\r\njumpDelta = 0\r\nbaseAcceleration = 0.8\r\n\r\nNav = Navigator.new(system, core, unit)\r\nNav.axisCommandManager:setupCustomTargetSpeedRanges(axisCommandId.longitudinal, {100, 500, 1000, 2000,3000, 5000})\r\nNav.axisCommandManager:setTargetGroundAltitude(0)\r\nunit.deactivateGroundEngineAltitudeStabilization()\r\n\r\n-- Parenting widget\r\nparentingPanelId = system.createWidgetPanel(\"Docking\")\r\nparentingWidgetId = system.createWidget(parentingPanelId,\"parenting\")\r\nsystem.addDataToWidget(unit.getWidgetDataId(),parentingWidgetId)\r\n\r\n-- Fuel widget generation (Updated code By Jericho)\r\n--TODO: replace by custom HUD\r\nif (#fuelTanks > 0) then\r\n fuelTankPanelId = system.createWidgetPanel(\"Fuel Tanks\")\r\n fuelTankWidgetId = system.createWidget(fuelTankPanelId,\"fuel_container\")\r\n for _,tank in pairs(fuelTanks) do\r\n system.addDataToWidget(tank.getWidgetDataId(),fuelTankWidgetId)\r\n end\r\nend\r\n\r\n--[[\r\n Storing base position and orientation of the elevator\r\n]]\r\nConstructInitPos = construct.getWorldPosition()\r\n--replace that pos by a hand written value to be sure the construct will always realign the same position\r\n--ConstructInitPos = {-1231538.185042, 1201297.6879598, -2617220.2766464}\r\nif __DEBUG then system.print('ConstructInitPos: ' .. json.encode(ConstructInitPos)) end\r\nBaseForward = vec3(construct.getWorldForward())\r\nif __DEBUG then system.print('BaseForward: ' .. json.encode(BaseForward)) end\r\nBaseAltitute = 285 --export: the start altitude of the elevator (lower position altitude)\r\n\r\n--TODO: to replace with a computing in flush from the current acceleration and the friction acceleration (construct.getWorldAirFrictionAcceleration)\r\nMaxSpeed = construct.getFrictionBurnSpeed() -- for security to avoid burning if going too fast\r\nif __DEBUG then system.print('MaxSpeed: ' .. MaxSpeed) end\r\n\r\n--init a value to store the target altitude\r\nTargetAltitude = core.getAltitude() --by default to the start altitude to avoid falling down if in the air\r\n\r\n--[[\r\n Kinematics functions by Jaylebreak\r\n Source available at https://gitlab.com/JayleBreak/dualuniverse/-/blob/master/DUflightfiles/autoconf/custom/kinematics.lua\r\n]] \r\nfunction computeAccelerationTime(initial, acceleration, final) return (final - initial)/acceleration end\r\nfunction computeDistanceAndTime(initial, final, mass, thrust, t50, brakeThrust)\r\n t50 = t50 or 0\r\n brakeThrust = brakeThrust or 0\r\n local speedUp = initial < final\r\n local a0 = thrust / (speedUp and mass or -mass)\r\n local b0 = -brakeThrust/mass\r\n local totA = a0+b0\r\n if initial == final then\r\n return 0, 0\r\n elseif speedUp and totA <= 0 or not speedUp and totA >= 0 then\r\n return -1, -1\r\n end\r\n local distanceToMax, timeToMax = 0, 0\r\n if a0 ~= 0 and t50 > 0 then\r\n local c1 = math.pi/t50/2\r\n local v = function(t)\r\n return a0*(t/2 - t50*math.sin(c1*t)/math.pi) + b0*t + initial\r\n end\r\n local speedchk = speedUp and function(s) return s >= final end or function(s) return s <= final end\r\n timeToMax = 2*t50\r\n if speedchk(v(timeToMax)) then\r\n local lasttime = 0\r\n while math.abs(timeToMax - lasttime) > 0.25 do\r\n local t = (timeToMax + lasttime)/2\r\n if speedchk(v(t)) then\r\n timeToMax = t \r\n else\r\n lasttime = t\r\n end\r\n end\r\n end\r\n local K = 2*a0*t50^2/math.pi^2\r\n distanceToMax = K*(math.cos(c1*timeToMax) - 1) + (a0+2*b0)*timeToMax^2/4 + initial*timeToMax\r\n if timeToMax < 2*t50 then\r\n return distanceToMax, timeToMax\r\n end\r\n initial = v(timeToMax)\r\n end\r\n local a = a0+b0\r\n local t = computeAccelerationTime(initial, a, final)\r\n local d = initial*t + a*t*t/2\r\n return distanceToMax+d, timeToMax+t\r\nend\r\n\r\n--[[\r\n Commpute angle betwwen vectors by Jericho\r\n]]\r\nfunction signedAngleBetween(vec1, vec2, planeNormal)\r\n local normVec1 = vec1:project_on_plane(planeNormal):normalize()\r\n local normVec2 = vec2:normalize()\r\n local v1v2dot = normVec1:dot(normVec2)\r\n local angle = math.acos(utils.clamp(v1v2dot,-1,1))\r\n local crossProduct = vec1:cross(vec2)\r\n if crossProduct:dot(planeNormal) < 0 then\r\n return -angle\r\n end\r\n return angle\r\nend\r\n\r\n--[[\r\n DU-LUA-Framework by Jericho\r\n Permit to code easier by grouping most of the code in a single event Unit > Start\r\n Unminified Source available here: https://github.com/Jericho1060/du-lua-framework\r\n]]--\r\nlocal a=system.print;local b=error;local c=pcall;local d=assert;local e=coroutine;local f=e.create;local g=e.status;local h=e.resume;local i=\"dead\"local j=\"suspended\"function runFunction(k,l,...)local m,n=c(k,...)if not m then b(l..n)end end;local o={__index={cos={update={},flush={}},fns={update={},flush={},action={start={},stop={},loop={}},inputText=nil,start=nil,stop=nil},ACTIONS={FORWARD=\"forward\",BACKWARD=\"backward\",YAW_LEFT=\"yawleft\",YAW_RIGHT=\"yawright\",STRAFE_LEFT=\"strafeleft\",STRAFE_RIGHT=\"straferight\",LEFT=\"left\",RIGHT=\"right\",UP=\"up\",DOWN=\"down\",GROUND_ALTITUDE_UP=\"groundaltitudeup\",GROUND_ALTITUDE_DOWN=\"groundaltitudedown\",LEFT_ALT=\"lalt\",LEFT_SHIFT=\"lshift\",GEAR=\"gear\",LIGHT=\"light\",BRAKE=\"brake\",OPTION_1=\"option1\",OPTION_2=\"option2\",OPTION_3=\"option3\",OPTION_4=\"option4\",OPTION_5=\"option5\",OPTION_6=\"option6\",OPTION_7=\"option7\",OPTION_8=\"option8\",OPTION_9=\"option9\",OPTION_10=\"option10\",OPTION_11=\"option11\",OPTION_12=\"option12\",OPTION_13=\"option13\",OPTION_14=\"option14\",OPTION_15=\"option15\",OPTION_16=\"option16\",OPTION_17=\"option17\",OPTION_18=\"option18\",OPTION_19=\"option19\",OPTION_20=\"option20\",OPTION_21=\"option21\",OPTION_22=\"option22\",OPTION_23=\"option23\",OPTION_24=\"option24\",OPTION_25=\"option25\",OPTION_26=\"option26\",OPTION_27=\"option27\",OPTION_28=\"option28\",OPTION_29=\"option29\",LEFT_MOUSE=\"leftmouse\",STOP_ENGINES=\"stopengines\",SPEED_UP=\"speedup\",SPEED_DOWN=\"speeddown\",ANTIGRAVITY=\"antigravity\",BOOSTER=\"booster\"},main={update=f(function()end),flush=f(function()end)},update=function(self)local p=g(self.main.update)if p==i then self.main.update=f(function()self:runUpdate()end)elseif p==j then d(h(self.main.update))end end,flush=function(self)local p=g(self.main.flush)if p==i then self.main.flush=f(function()self:runFlush()end)elseif p==j then d(h(self.main.flush))end end,action=function(self,q,r)if self.fns.action[q][r]then runFunction(self.fns.action[q][r],\"System Action \"..q..\" Error: \")end end,actionStart=function(self,r)self:action('start',r)end,actionStop=function(self,r)self:action('stop',r)end,actionLoop=function(self,r)self:action('loop',r)end,inputText=function(self,s)if self.fns.inputText then runFunction(self.fns.inputText,\"System Input Text Error: \",s)end end,runUpdate=function(self)for t,u in pairs(self.cos.update)do local m=g(u)if m==i then self.cos.update[t]=f(self.fns.update[t])elseif m==j then d(h(u))end end end,runFlush=function(self)for t,u in pairs(self.cos.flush)do local m=g(u)if m==i then self.cos.flush[t]=f(self.fns.flush[t])elseif m==j then d(h(u))end end end,onUpdate=function(self,v)for t,w in pairs(v)do self.fns.update[t]=w;self.cos.update[t]=f(w)end end,onFlush=function(self,v)for t,w in pairs(v)do self.fns.flush[t]=w;self.cos.flush[t]=f(w)end end,onAction=function(self,q,v)for t,w in pairs(v)do self.fns.action[q][t]=w end end,onActionStart=function(self,v)self:onAction(\"start\",v)end,onActionStop=function(self,v)self:onAction(\"stop\",v)end,onActionLoop=function(self,v)self:onAction(\"loop\",v)end,onInputText=function(self,k)self.fns.inputText=k end}}local x={__index={timers={},stopFn=function()end,timer=function(self,y)if self.timers[y]then runFunction(self.timers[y],\"Unit Timer \"..y..\" Error: \")end end,setTimer=function(self,y,z,k)self.timers[y]=k;unit.setTimer(y,z)end,stopTimer=function(self,y)unit.stopTimer(y)self.timers[y]=nil end,onStop=function(self,k)self.stopFn=k end,stop=function(self)if self.stopFn then runFunction(self.stopFn,\"Unit Stop Error: \")end end}}local A={__index={parentChangedFn=function(B,C)end,onParentChange=function(self,k)self.parentChangedFn=k end,parentChanged=function(self,B,C)if self.parentChangedFn then runFunction(self.parentChangedFn,\"Player Parent Changed Error: \",B,C)end end}}local D={__index={dockedFn=function(E)end,onDocked=function(self,k)self.dockedFn=k end,docked=function(self,E)if self.dockedFn then runFunction(self.dockedFn,\"Construct Docked Error: \",E)end end,undockedFn=function(E)end,onUndocked=function(self,k)self.undockedFn=k end,undocked=function(self,E)if self.undockedFn then runFunction(self.undockedFn,\"Construct Undocked Error: \",E)end end,playerBoardedFn=function(E)end,onPlayerBoarded=function(self,k)self.playerBoardedFn=k end,playerBoarded=function(self,E)if self.playerBoardedFn then runFunction(self.playerBoardedFn,\"Construct Player Boarded Error: \",E)end end,VRStationEnteredFn=function(E)end,onVRStationEntered=function(self,k)self.VRStationEnteredFn=k end,VRStationEntered=function(self,E)if self.VRStationEnteredFn then runFunction(self.VRStationEnteredFn,\"Construct VR Station Entered Error: \",E)end end,constructDockedFn=function(E)end,onConstructDocked=function(self,k)self.constructDockedFn=k end,constructDocked=function(self,E)if self.constructDockedFn then runFunction(self.constructDockedFn,\"Construct Construct Docked Error: \",E)end end,PvPTimerFn=function(F)end,onPvPTimer=function(self,k)self.PvPTimerFn=k end,PvPTimer=function(self,F)if self.PvPTimerFn then runFunction(self.PvPTimerFn,\"Construct PvP Timer Error: \",F)end end}}DU_Framework={__index={system=setmetatable({},o),unit=setmetatable({},x),player=setmetatable({},A),construct=setmetatable({},D)}}\r\n\r\nScript = {}\r\nsetmetatable(Script, DU_Framework)\r\n\r\n--[[\r\n String Helpers For Lua By Jericho\r\n]]\r\nString = {\r\n __index = {\r\n split = function(self, delimiter)\r\n local result = {}\r\n for match in (self..delimiter):gmatch(\"(.-)\"..delimiter) do\r\n table.insert(result, match)\r\n end\r\n return result\r\n end\r\n }\r\n}\r\nstring = setmetatable(string, String)\r\nstring.__index = string\r\n\r\nlocal systemOnUpdate = {\r\n function ()\r\n Nav:update()\r\n end\r\n}\r\n\r\nlocal systemOnFlush = {\r\n function()\r\n local yawSpeedFactor = 1.5\r\n local yawAccelerationFactor = 3\r\n local lateralAntiDriftFactor = 1\r\n local lateralStrafeFactor = 5\r\n local brakeSpeedFactor = 1\r\n local brakeFlatFactor = 4 \r\n local autoBrakeSpeed = 15\r\n -- validate params\r\n brakeSpeedFactor = math.max(brakeSpeedFactor, 0.01)\r\n brakeFlatFactor = math.max(brakeFlatFactor, 0.01)\r\n yawSpeedFactor = math.max(yawSpeedFactor, 0.01)\r\n yawAccelerationFactor = math.max(yawAccelerationFactor, 0.01)\r\n --init all the PIDs as global if first flush\r\n if (rollPID == nil) then rollPID = pid.new(0.2, 0, 10) end\r\n if (pitchPID == nil) then pitchPID = pid.new(0.2, 0, 10) end\r\n if (yawPID == nil) then yawPID = pid.new(0.2, 0, 10) end\r\n if (lateralPID == nil) then lateralPID = pid.new(0.2, 0, 10) end\r\n if (longitudinalPID == nil) then longitudinalPID = pid.new(0.2, 0, 10) end\r\n if (distancePID == nil) then distancePID = pid.new(0.2, 0, 10) end\r\n\r\n -- final inputs\r\n if unit.isMouseDirectControlActivated() then\r\n -- in direct control, we tweak the pitch to behave inbetween virtual joystick and direct control\r\n -- this helps a lot for ground construct control\r\n pitchInputFromDevice = utils.clamp(pitchInputFromDevice + system.getControlDeviceForwardInput() * system.getActionUpdateDeltaTime(), -1.0, 1.0)\r\n else\r\n pitchInputFromDevice = system.getControlDeviceForwardInput()\r\n end\r\n local finalPitchInput = pitchInput + pitchInputFromDevice\r\n local finalRollInput = rollInput + system.getControlDeviceYawInput()\r\n local finalYawInput = yawInput - system.getControlDeviceLeftRightInput()\r\n local combinedRollYawInput = utils.clamp(finalRollInput - finalYawInput, -1.0, 1.0);\r\n local finalVerticalStrafeInput = verticalStrafeInput\r\n local finalLateralStrafeInput = lateralStrafeInput;\r\n local finalBrakeInput = brakeInput\r\n\r\n -- Axis\r\n local worldVertical = vec3(core.getWorldVertical())\r\n local constructUp = vec3(construct.getWorldOrientationUp())\r\n local constructForward = vec3(construct.getWorldOrientationForward())\r\n local constructRight = vec3(construct.getWorldOrientationRight())\r\n local constructVelocity = vec3(construct.getWorldVelocity())\r\n local constructVelocityDir = vec3(construct.getWorldVelocity()):normalize()\r\n local constructAngularVelocity = vec3(construct.getWorldAngularVelocity())\r\n local constructYawVelocity = constructAngularVelocity:dot(constructUp)\r\n local constructWorldPosition = vec3(construct.getWorldPosition())\r\n local constructTargetPosition = vec3(ConstructInitPos)\r\n\r\n -- Engine commands\r\n local keepCollinearity = 0 -- for easier reading\r\n local dontKeepCollinearity = 1 -- for easier reading\r\n local tolerancePercentToSkipOtherPriorities = 1 -- if we are within this tolerance (in%), we don't go to the next priorities\r\n\r\n -- keeping the start position alignement\r\n local StrafeSpeedFactor = 50 --export: useg to increase the force of the alignement, decrease the value if the alignement is too strong or increase it if it's too slow\r\n local positionDifference = constructTargetPosition - constructWorldPosition\r\n local lateralOffset = positionDifference:project_on(constructRight):len() * utils.sign(positionDifference:dot(constructRight))\r\n local longitudinalOffset = positionDifference:project_on(constructForward):len() * utils.sign(positionDifference:dot(constructForward))\r\n lateralPID:inject(lateralOffset)\r\n Nav.axisCommandManager:setThrottleCommand(axisCommandId.lateral, lateralPID:get() * StrafeSpeedFactor)\r\n longitudinalPID:inject(longitudinalOffset)\r\n Nav.axisCommandManager:setThrottleCommand(axisCommandId.longitudinal, longitudinalPID:get() * StrafeSpeedFactor)\r\n\r\n -- Rotation\r\n local currentRollDeg = getRoll(worldVertical, constructForward, constructRight)\r\n local currentPitchDeg = -math.asin(constructForward:dot(worldVertical)) * constants.rad2deg\r\n local targetRollDeg = 0\r\n local targetPitchDeg = 0\r\n local targetYawDeg = signedAngleBetween(BaseForward,constructForward,constructUp)*180/math.pi\r\n rollPID:inject(targetRollDeg - currentRollDeg)\r\n pitchPID:inject(targetPitchDeg - currentPitchDeg)\r\n yawPID:inject(-targetYawDeg*yawSpeedFactor)\r\n\r\n local constructYawTargetVelocity = -combinedRollYawInput * yawSpeedFactor\r\n local constructYawTargetAcceleration = yawAccelerationFactor * (constructYawTargetVelocity - constructYawVelocity)\r\n local constructTargetAngularVelocity = rollPID:get() * constructForward + pitchPID:get() * constructRight + constructYawTargetAcceleration * constructUp\r\n\r\n Nav:setEngineTorqueCommand('torque', constructTargetAngularVelocity, keepCollinearity, 'airfoil', '', '', tolerancePercentToSkipOtherPriorities)\r\n\r\n -- moving up or down from TargetAltitude\r\n local verticalSpeed = constructVelocity:project_on(worldVertical):len()\r\n local verticalSpeedSigned = verticalSpeed * -utils.sign(constructVelocity:dot(worldVertical))\r\n local brakeDistance = 0\r\n local maxBrake = construct.getMaxBrake()\r\n if maxBrake ~= nil then\r\n brakeDistance, _ = computeDistanceAndTime(verticalSpeed, 0, construct.getInertialMass(), 0, 0, maxBrake - (core.getGravityIntensity() * construct.getInertialMass()) * utils.sign(verticalSpeedSigned))\r\n end\r\n local coreAltitude = core.getAltitude()\r\n local distance = TargetAltitude - coreAltitude\r\n local targetDistance = utils.sign(distance) * (math.abs(distance)-brakeDistance)\r\n distancePID:inject(targetDistance)\r\n if distancePID:get() > 0.5 or verticalSpeedSigned < -MaxSpeed then --using a 0.5 meter deadband for stabilizing\r\n Nav.axisCommandManager:setThrottleCommand(axisCommandId.vertical, 1)\r\n elseif distancePID:get() < -0.5 or verticalSpeedSigned > MaxSpeed then\r\n Nav.axisCommandManager:setThrottleCommand(axisCommandId.vertical, -1)\r\n else\r\n Nav.axisCommandManager:resetCommand(axisCommandId.vertical)\r\n end\r\n\r\n --Brakes\r\n if\r\n (math.abs(distance) < verticalSpeed)\r\n or verticalSpeed > MaxSpeed\r\n or (brakeDistance > math.abs(distance))\r\n or (finalBrakeInput == 0 and autoBrakeSpeed > 0 and Nav.axisCommandManager.throttle == 0 and constructVelocity:len() < autoBrakeSpeed)\r\n then\r\n finalBrakeInput = 1\r\n end\r\n local brakeAcceleration = -finalBrakeInput * (brakeSpeedFactor * constructVelocity + brakeFlatFactor * constructVelocityDir)\r\n \r\n Nav:setEngineForceCommand('brake', brakeAcceleration)\r\n\r\n -- AutoNavigation regroups all the axis command by 'TargetSpeed'\r\n local autoNavigationEngineTags = ''\r\n local autoNavigationAcceleration = vec3()\r\n local autoNavigationUseBrake = false\r\n\r\n -- Longitudinal Translation\r\n local longitudinalEngineTags = 'thrust analog longitudinal'\r\n local longitudinalCommandType = Nav.axisCommandManager:getAxisCommandType(axisCommandId.longitudinal)\r\n if (longitudinalCommandType == axisCommandType.byThrottle) then\r\n local longitudinalAcceleration = Nav.axisCommandManager:composeAxisAccelerationFromThrottle(longitudinalEngineTags,axisCommandId.longitudinal)\r\n Nav:setEngineForceCommand(longitudinalEngineTags, longitudinalAcceleration, keepCollinearity)\r\n elseif (longitudinalCommandType == axisCommandType.byTargetSpeed) then\r\n local longitudinalAcceleration = Nav.axisCommandManager:composeAxisAccelerationFromTargetSpeed(axisCommandId.longitudinal)\r\n autoNavigationEngineTags = autoNavigationEngineTags .. ' , ' .. longitudinalEngineTags\r\n autoNavigationAcceleration = autoNavigationAcceleration + longitudinalAcceleration\r\n if (Nav.axisCommandManager:getTargetSpeed(axisCommandId.longitudinal) == 0 or -- we want to stop\r\n Nav.axisCommandManager:getCurrentToTargetDeltaSpeed(axisCommandId.longitudinal) < - Nav.axisCommandManager:getTargetSpeedCurrentStep(axisCommandId.longitudinal) * 0.5) -- if the longitudinal velocity would need some braking\r\n then\r\n autoNavigationUseBrake = true\r\n end\r\n end\r\n\r\n -- Lateral Translation\r\n local lateralStrafeEngineTags = 'thrust analog lateral'\r\n local lateralCommandType = Nav.axisCommandManager:getAxisCommandType(axisCommandId.lateral)\r\n if (lateralCommandType == axisCommandType.byThrottle) then\r\n local lateralStrafeAcceleration = Nav.axisCommandManager:composeAxisAccelerationFromThrottle(lateralStrafeEngineTags,axisCommandId.lateral)\r\n Nav:setEngineForceCommand(lateralStrafeEngineTags, lateralStrafeAcceleration, keepCollinearity)\r\n elseif (lateralCommandType == axisCommandType.byTargetSpeed) then\r\n local lateralAcceleration = Nav.axisCommandManager:composeAxisAccelerationFromTargetSpeed(axisCommandId.lateral)\r\n autoNavigationEngineTags = autoNavigationEngineTags .. ' , ' .. lateralStrafeEngineTags\r\n autoNavigationAcceleration = autoNavigationAcceleration + lateralAcceleration\r\n end\r\n\r\n -- Vertical Translation\r\n local verticalStrafeEngineTags = 'thrust analog vertical'\r\n local verticalCommandType = Nav.axisCommandManager:getAxisCommandType(axisCommandId.vertical)\r\n if (verticalCommandType == axisCommandType.byThrottle) then\r\n local verticalStrafeAcceleration = Nav.axisCommandManager:composeAxisAccelerationFromThrottle(verticalStrafeEngineTags,axisCommandId.vertical)\r\n Nav:setEngineForceCommand(verticalStrafeEngineTags, verticalStrafeAcceleration, keepCollinearity, 'airfoil', 'ground', '', tolerancePercentToSkipOtherPriorities)\r\n elseif (verticalCommandType == axisCommandType.byTargetSpeed) then\r\n local verticalAcceleration = Nav.axisCommandManager:composeAxisAccelerationFromTargetSpeed(axisCommandId.vertical)\r\n autoNavigationEngineTags = autoNavigationEngineTags .. ' , ' .. verticalStrafeEngineTags\r\n autoNavigationAcceleration = autoNavigationAcceleration + verticalAcceleration\r\n end\r\n\r\n -- Auto Navigation (Cruise Control)\r\n if (autoNavigationAcceleration:len() > constants.epsilon) then\r\n if (brakeInput ~= 0 or autoNavigationUseBrake or math.abs(constructVelocityDir:dot(constructForward)) < 0.95) -- if the velocity is not properly aligned with the forward\r\n then\r\n autoNavigationEngineTags = autoNavigationEngineTags .. ', brake'\r\n end\r\n Nav:setEngineForceCommand(autoNavigationEngineTags, autoNavigationAcceleration, dontKeepCollinearity, '', '', '', tolerancePercentToSkipOtherPriorities)\r\n end\r\n\r\n -- Rockets\r\n Nav:setBoosterCommand('rocket_engine')\r\n end\r\n}\r\n\r\n\r\nScript.system:onUpdate(systemOnUpdate)\r\nScript.system:onFlush(systemOnFlush)\r\n\r\n--[[\r\n Chat Commands\r\n]]\r\n\r\nScript.system:onInputText(function (text)\r\n if text:lower():find('goto:') then\r\n TargetAltitude = tonumber(text:split(':')[2]) or BaseAltitute\r\n brakeInput = 0\r\n system.print('Target Altitude set to ' .. TargetAltitude .. 'm')\r\n else\r\n system.print('Unknown command')\r\n end\r\nend)","filter":{"args":[],"signature":"onStart()","slotKey":"-1"},"key":"2"}],"methods":[],"slots":{"0":{"name":"slot1","type":{"events":[],"methods":[]}},"1":{"name":"slot2","type":{"events":[],"methods":[]}},"2":{"name":"slot3","type":{"events":[],"methods":[]}},"3":{"name":"slot4","type":{"events":[],"methods":[]}},"4":{"name":"slot5","type":{"events":[],"methods":[]}},"5":{"name":"slot6","type":{"events":[],"methods":[]}},"6":{"name":"slot7","type":{"events":[],"methods":[]}},"7":{"name":"slot8","type":{"events":[],"methods":[]}},"8":{"name":"slot9","type":{"events":[],"methods":[]}},"9":{"name":"slot10","type":{"events":[],"methods":[]}},"-5":{"name":"library","type":{"events":[],"methods":[]}},"-4":{"name":"system","type":{"events":[],"methods":[]}},"-3":{"name":"player","type":{"events":[],"methods":[]}},"-2":{"name":"construct","type":{"events":[],"methods":[]}},"-1":{"name":"unit","type":{"events":[],"methods":[]}}}} \ No newline at end of file diff --git a/images/adjustors.png b/images/adjustors.png new file mode 100644 index 0000000000000000000000000000000000000000..9bfc08a171cedd14cd0c1f8cd9036dcd5087e708 GIT binary patch literal 101866 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�!B^6y+vuquG#X-EKpWqzLh7(w1IoY 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≫A`)1&FE(@4V1HpWwZB(ysnx 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�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 PU|{fc^>bP0l+XkKsVaBS literal 0 HcmV?d00001