Something went wrong. Try again.
[READ-ONLY] Mirror of https://github.com/thoda-dev/du-default-autoconf. default autoconfig files from Dual Universe
Something went wrong. Try again.
24 kB · 431 lines
at junie-init
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432# This is a file describing a standard autoconfiguration, do not edit.# See custom/sample.conf for a more generic template and explanation on the syntax.
name: ui_cu_autoconf_construct_flying
slots: core: class: CoreUnit antigrav: class: AntiGravityGeneratorUnit warpdrive: class: WarpDriveUnit atmofueltank: class: AtmoFuelContainer select: all spacefueltank: class: SpaceFuelContainer select: all rocketfueltank: class: RocketFuelContainer select: all gyro: class: GyroUnit shield: class: ShieldGeneratorUnit weapon: class: WeaponUnit select: manual radar: class: RadarPVPUnit select: manual
handlers: unit: onStart: lua: | pitchInput = 0 rollInput = 0 yawInput = 0 brakeInput = 0
Nav = Navigator.new(system, core, unit) Nav.axisCommandManager:setupCustomTargetSpeedRanges(axisCommandId.longitudinal, {1000, 5000, 10000, 20000, 30000}) Nav.axisCommandManager:setTargetGroundAltitude(4)
-- Parenting widget parentingPanelId = system.createWidgetPanel("Docking") parentingWidgetId = system.createWidget(parentingPanelId,"parenting") system.addDataToWidget(unit.getDataId(),parentingWidgetId)
-- Combat stress widget coreCombatStressPanelId = system.createWidgetPanel("Core combat stress") coreCombatStressgWidgetId = system.createWidget(coreCombatStressPanelId,"core_stress") system.addDataToWidget(core.getDataId(),coreCombatStressgWidgetId)
-- element widgets -- For now we have to alternate between PVP and non-PVP widgets to have them on the same side. _autoconf.displayCategoryPanel(weapon, weapon_size, L_TEXT("ui_lua_widget_weapon", "Weapons"), "weapon", true) core.show() _autoconf.displayCategoryPanel(radar, radar_size, L_TEXT("ui_lua_widget_periscope", "Periscope"), "periscope") placeRadar = true if atmofueltank_size > 0 then _autoconf.displayCategoryPanel(atmofueltank, atmofueltank_size, L_TEXT("ui_lua_widget_atmofuel", "Atmo Fuel"), "fuel_container") if placeRadar then _autoconf.displayCategoryPanel(radar, radar_size, L_TEXT("ui_lua_widget_radar", "Radar"), "radar") placeRadar = false end end if spacefueltank_size > 0 then _autoconf.displayCategoryPanel(spacefueltank, spacefueltank_size, L_TEXT("ui_lua_widget_spacefuel", "Space Fuel"), "fuel_container") if placeRadar then _autoconf.displayCategoryPanel(radar, radar_size, L_TEXT("ui_lua_widget_radar", "Radar"), "radar") placeRadar = false end end _autoconf.displayCategoryPanel(rocketfueltank, rocketfueltank_size, L_TEXT("ui_lua_widget_rocketfuel", "Rocket Fuel"), "fuel_container") if placeRadar then -- We either have only rockets or no fuel tanks at all, uncommon for usual vessels _autoconf.displayCategoryPanel(radar, radar_size, L_TEXT("ui_lua_widget_radar", "Radar"), "radar") placeRadar = false end if antigrav ~= nil then antigrav.show() end if warpdrive ~= nil then warpdrive.show() end if gyro ~= nil then gyro.show() end if shield ~= nil then shield.show() end
-- freeze the player in he is remote controlling the construct if Nav.control.isRemoteControlled() == 1 then system.freeze(1) end
-- landing gear -- make sure every gears are synchonized with the first gearExtended = (Nav.control.isAnyLandingGearExtended() == 1) -- make sure it's a lua boolean if gearExtended then Nav.control.extendLandingGears() else Nav.control.retractLandingGears() end onStop: lua: | _autoconf.hideCategoryPanels() if antigrav ~= nil then antigrav.hide() end if warpdrive ~= nil then warpdrive.hide() end if gyro ~= nil then gyro.hide() end core.hide() Nav.control.switchOffHeadlights()
system: onFlush: lua: | -- constants: use 'myvar = defaultValue --export: description' to expose the variable in context menu
local pitchSpeedFactor = 0.8 --export: This factor will increase/decrease the player input along the pitch axis<br>(higher value may be unstable)<br>Valid values: Superior or equal to 0.01 local yawSpeedFactor = 1 --export: This factor will increase/decrease the player input along the yaw axis<br>(higher value may be unstable)<br>Valid values: Superior or equal to 0.01 local rollSpeedFactor = 1.5 --export: This factor will increase/decrease the player input along the roll axis<br>(higher value may be unstable)<br>Valid values: Superior or equal to 0.01
local brakeSpeedFactor = 3 --export: When braking, this factor will increase the brake force by brakeSpeedFactor * velocity<br>Valid values: Superior or equal to 0.01 local brakeFlatFactor = 1 --export: When braking, this factor will increase the brake force by a flat brakeFlatFactor * velocity direction><br>(higher value may be unstable)<br>Valid values: Superior or equal to 0.01
local autoRoll = false --export: [Only in atmosphere]<br>When the pilot stops rolling, flight model will try to get back to horizontal (no roll) local autoRollFactor = 2 --export: [Only in atmosphere]<br>When autoRoll is engaged, this factor will increase to strength of the roll back to 0<br>Valid values: Superior or equal to 0.01
local turnAssist = true --export: [Only in atmosphere]<br>When the pilot is rolling, the flight model will try to add yaw and pitch to make the construct turn better<br>The flight model will start by adding more yaw the more horizontal the construct is and more pitch the more vertical it is local turnAssistFactor = 2 --export: [Only in atmosphere]<br>This factor will increase/decrease the turnAssist effect<br>(higher value may be unstable)<br>Valid values: Superior or equal to 0.01
local torqueFactor = 2 -- Force factor applied to reach rotationSpeed<br>(higher value may be unstable)<br>Valid values: Superior or equal to 0.01
-- validate params pitchSpeedFactor = math.max(pitchSpeedFactor, 0.01) yawSpeedFactor = math.max(yawSpeedFactor, 0.01) rollSpeedFactor = math.max(rollSpeedFactor, 0.01) torqueFactor = math.max(torqueFactor, 0.01) brakeSpeedFactor = math.max(brakeSpeedFactor, 0.01) brakeFlatFactor = math.max(brakeFlatFactor, 0.01) autoRollFactor = math.max(autoRollFactor, 0.01) turnAssistFactor = math.max(turnAssistFactor, 0.01)
-- final inputs local finalPitchInput = pitchInput + system.getControlDeviceForwardInput() local finalRollInput = rollInput + system.getControlDeviceYawInput() local finalYawInput = yawInput - system.getControlDeviceLeftRightInput() local finalBrakeInput = brakeInput
-- Axis local worldVertical = vec3(core.getWorldVertical()) -- along gravity local constructUp = vec3(core.getConstructWorldOrientationUp()) local constructForward = vec3(core.getConstructWorldOrientationForward()) local constructRight = vec3(core.getConstructWorldOrientationRight()) local constructVelocity = vec3(core.getWorldVelocity()) local constructVelocityDir = vec3(core.getWorldVelocity()):normalize() local currentRollDeg = getRoll(worldVertical, constructForward, constructRight) local currentRollDegAbs = math.abs(currentRollDeg) local currentRollDegSign = utils.sign(currentRollDeg)
-- Rotation local constructAngularVelocity = vec3(core.getWorldAngularVelocity()) local targetAngularVelocity = finalPitchInput * pitchSpeedFactor * constructRight + finalRollInput * rollSpeedFactor * constructForward + finalYawInput * yawSpeedFactor * constructUp
-- In atmosphere? if worldVertical:len() > 0.01 and unit.getAtmosphereDensity() > 0.0 then local autoRollRollThreshold = 1.0 -- autoRoll on AND currentRollDeg is big enough AND player is not rolling if autoRoll == true and currentRollDegAbs > autoRollRollThreshold and finalRollInput == 0 then local targetRollDeg = utils.clamp(0,currentRollDegAbs-30, currentRollDegAbs+30); -- we go back to 0 within a certain limit if (rollPID == nil) then rollPID = pid.new(autoRollFactor * 0.01, 0, autoRollFactor * 0.1) -- magic number tweaked to have a default factor in the 1-10 range end rollPID:inject(targetRollDeg - currentRollDeg) local autoRollInput = rollPID:get()
targetAngularVelocity = targetAngularVelocity + autoRollInput * constructForward end local turnAssistRollThreshold = 20.0 -- turnAssist AND currentRollDeg is big enough AND player is not pitching or yawing if turnAssist == true and currentRollDegAbs > turnAssistRollThreshold and finalPitchInput == 0 and finalYawInput == 0 then local rollToPitchFactor = turnAssistFactor * 0.1 -- magic number tweaked to have a default factor in the 1-10 range local rollToYawFactor = turnAssistFactor * 0.025 -- magic number tweaked to have a default factor in the 1-10 range
-- rescale (turnAssistRollThreshold -> 180) to (0 -> 180) local rescaleRollDegAbs = ((currentRollDegAbs - turnAssistRollThreshold) / (180 - turnAssistRollThreshold)) * 180 local rollVerticalRatio = 0 if rescaleRollDegAbs < 90 then rollVerticalRatio = rescaleRollDegAbs / 90 elseif rescaleRollDegAbs < 180 then rollVerticalRatio = (180 - rescaleRollDegAbs) / 90 end
rollVerticalRatio = rollVerticalRatio * rollVerticalRatio
local turnAssistYawInput = - currentRollDegSign * rollToYawFactor * (1.0 - rollVerticalRatio) local turnAssistPitchInput = rollToPitchFactor * rollVerticalRatio
targetAngularVelocity = targetAngularVelocity + turnAssistPitchInput * constructRight + turnAssistYawInput * constructUp end end
-- Engine commands local keepCollinearity = 1 -- for easier reading local dontKeepCollinearity = 0 -- for easier reading local tolerancePercentToSkipOtherPriorities = 1 -- if we are within this tolerance (in%), we don't go to the next priorities
-- Rotation local angularAcceleration = torqueFactor * (targetAngularVelocity - constructAngularVelocity) local airAcceleration = vec3(core.getWorldAirFrictionAngularAcceleration()) angularAcceleration = angularAcceleration - airAcceleration -- Try to compensate air friction Nav:setEngineTorqueCommand('torque', angularAcceleration, keepCollinearity, 'airfoil', '', '', tolerancePercentToSkipOtherPriorities)
-- Brakes 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')
onUpdate: lua: Nav:update()
onActionStart: args: [gear] lua: | gearExtended = not gearExtended if gearExtended then Nav.control.extendLandingGears() else Nav.control.retractLandingGears() end
onActionStart: args: [light] lua: | if Nav.control.isAnyHeadlightSwitchedOn() == 1 then Nav.control.switchOffHeadlights() else Nav.control.switchOnHeadlights() end
onActionStart: args: [forward] lua: pitchInput = pitchInput - 1 onActionStop: args: [forward] lua: pitchInput = pitchInput + 1 onActionStart: args: [backward] lua: pitchInput = pitchInput + 1 onActionStop: args: [backward] lua: pitchInput = pitchInput - 1 onActionStart: args: [left] lua: rollInput = rollInput - 1 onActionStop: args: [left] lua: rollInput = rollInput + 1 onActionStart: args: [right] lua: rollInput = rollInput + 1 onActionStop: args: [right] lua: rollInput = rollInput - 1
onActionStart: args: [straferight] lua: Nav.axisCommandManager:updateCommandFromActionStart(axisCommandId.lateral, 1.0) onActionStop: args: [straferight] lua: Nav.axisCommandManager:updateCommandFromActionStop(axisCommandId.lateral, -1.0)
onActionStart: args: [strafeleft] lua: Nav.axisCommandManager:updateCommandFromActionStart(axisCommandId.lateral, -1.0) onActionStop: args: [strafeleft] lua: Nav.axisCommandManager:updateCommandFromActionStop(axisCommandId.lateral, 1.0)
onActionStart: args: [up] lua: | Nav.axisCommandManager:deactivateGroundEngineAltitudeStabilization() Nav.axisCommandManager:updateCommandFromActionStart(axisCommandId.vertical, 1.0) onActionStop: args: [up] lua: | Nav.axisCommandManager:updateCommandFromActionStop(axisCommandId.vertical, -1.0) Nav.axisCommandManager:activateGroundEngineAltitudeStabilization(currentGroundAltitudeStabilization) onActionStart: args: [down] lua: | Nav.axisCommandManager:deactivateGroundEngineAltitudeStabilization() Nav.axisCommandManager:updateCommandFromActionStart(axisCommandId.vertical, -1.0) onActionStop: args: [down] lua: | Nav.axisCommandManager:updateCommandFromActionStop(axisCommandId.vertical, 1.0) Nav.axisCommandManager:activateGroundEngineAltitudeStabilization(currentGroundAltitudeStabilization)
onActionStart: args: [groundaltitudeup] lua: Nav.axisCommandManager:updateTargetGroundAltitudeFromActionStart(1.0)
onActionLoop: args: [groundaltitudeup] lua: Nav.axisCommandManager:updateTargetGroundAltitudeFromActionLoop(1.0)
onActionStart: args: [groundaltitudedown] lua: Nav.axisCommandManager:updateTargetGroundAltitudeFromActionStart(-1.0)
onActionLoop: args: [groundaltitudedown] lua: Nav.axisCommandManager:updateTargetGroundAltitudeFromActionLoop(-1.0)
onActionStart: args: [yawright] lua: yawInput = yawInput - 1 onActionStop: args: [yawright] lua: yawInput = yawInput + 1 onActionStart: args: [yawleft] lua: yawInput = yawInput + 1 onActionStop: args: [yawleft] lua: yawInput = yawInput - 1 onActionStart: args: [brake] lua: | brakeInput = brakeInput + 1 local longitudinalCommandType = Nav.axisCommandManager:getAxisCommandType(axisCommandId.longitudinal) if (longitudinalCommandType == axisCommandType.byTargetSpeed) then local targetSpeed = Nav.axisCommandManager:getTargetSpeed(axisCommandId.longitudinal) if (math.abs(targetSpeed) > constants.epsilon) then Nav.axisCommandManager:updateCommandFromActionStart(axisCommandId.longitudinal, - utils.sign(targetSpeed)) end end onActionStop: args: [brake] lua: brakeInput = brakeInput - 1
onActionLoop: args: [brake] lua: | local longitudinalCommandType = Nav.axisCommandManager:getAxisCommandType(axisCommandId.longitudinal) if (longitudinalCommandType == axisCommandType.byTargetSpeed) then local targetSpeed = Nav.axisCommandManager:getTargetSpeed(axisCommandId.longitudinal) if (math.abs(targetSpeed) > constants.epsilon) then Nav.axisCommandManager:updateCommandFromActionLoop(axisCommandId.longitudinal, - utils.sign(targetSpeed)) end end onActionStart: args: [booster] lua: Nav:toggleBoosters() onActionStart: args: [stopengines] lua: Nav.axisCommandManager:resetCommand(axisCommandId.longitudinal) onActionStart: args: [speedup] lua: Nav.axisCommandManager:updateCommandFromActionStart(axisCommandId.longitudinal, 5.0) onActionLoop: args: [speedup] lua: Nav.axisCommandManager:updateCommandFromActionLoop(axisCommandId.longitudinal, 1.0) onActionStart: args: [speeddown] lua: Nav.axisCommandManager:updateCommandFromActionStart(axisCommandId.longitudinal, -5.0) onActionLoop: args: [speeddown] lua: Nav.axisCommandManager:updateCommandFromActionLoop(axisCommandId.longitudinal, -1.0) onActionStart: args: [antigravity] lua: if antigrav ~= nil then antigrav.toggle() end