Script v1_7_1_0
- AI
- Animals
- Collections
- Contracts
- Debug
- Economy
- Elements
- EnvironmentalScore
- Errors
- Events
- GUI
- Handtools
- Hud
- I3d
- Input
- Jobs
- Maps
- Materials
- Misc
- Objects
- Parameters
- Placeables
- Placement
- Player
- Shop
- Sounds
- Specialization
- Specializations
- AIConveyorBelt
- AIDrivable
- AIFieldWorker
- AIImplement
- AIJobVehicle
- AIVehicle
- AIVehicleObstacle
- AnimatedVehicle
- ArticulatedAxis
- Attachable
- AttacherJointControl
- AttacherJoints
- AutoLoader
- BaleGrab
- BaleLoader
- Baler
- BaleWrapper
- BaseMaterial
- BigBag
- BunkerSiloCompacter
- BunkerSiloInteractor
- CCTDrivable
- Combine
- ConnectionHoses
- ConveyorBelt
- Cover
- CrabSteering
- Crawlers
- CropSensor
- Cultivator
- Cutter
- Cylindered
- CylinderedFoldable
- Dashboard
- Dischargeable
- Drivable
- DynamicallyLoadedParts
- DynamicMountAttacher
- Enterable
- ExtendedAIVehicle
- ExtendedCombine
- ExtendedMotorized
- ExtendedMower
- ExtendedSowingMachine
- ExtendedSprayer
- ExtendedWearable
- FertilizingCultivator
- FertilizingSowingMachine
- FillTriggerVehicle
- FillUnit
- FillVolume
- Foldable
- FoliageBending
- ForageWagon
- FrontloaderAttacher
- FruitPreparer
- GroundAdjustedNodes
- GroundReference
- HeadlandAnimation
- Honk
- HookLiftContainer
- HookLiftTrailer
- IKChains
- InlineWrapper
- JigglingParts
- Leveler
- LicensePlates
- Lights
- LivestockTrailer
- Locomotive
- LogGrab
- ManureBarrel
- ManureSensor
- MixerWagon
- Motorized
- Mountable
- Mower
- Mulcher
- MultipleItemPurchase
- Pallet
- Pickup
- Pipe
- PlaceableAI
- PlaceableAnimatedObjects
- PlaceableBeehive
- PlaceableBeehivePalletSpa...
- PlaceableBunkerSilo
- PlaceableBuyingStation
- PlaceableCartridgePlayer
- PlaceableChargingStation
- PlaceableClearAreas
- PlaceableColorable
- PlaceableDeletedNodes
- PlaceableDoghouse
- PlaceableDynamicallyLoade...
- PlaceableFarmhouse
- PlaceableFence
- PlaceableFoliageAreas
- PlaceableGreenhouse
- PlaceableHighPressureWash...
- PlaceableHotspots
- PlaceableHusbandry
- PlaceableHusbandryAnimals
- PlaceableHusbandryFeeding...
- PlaceableHusbandryFence
- PlaceableHusbandryFood
- PlaceableHusbandryLiquidM...
- PlaceableHusbandryMilk
- PlaceableHusbandryPallets
- PlaceableHusbandryStraw
- PlaceableHusbandryWater
- PlaceableIncomePerHour
- PlaceableIndoorAreas
- PlaceableInfoTrigger
- PlaceableLeveling
- PlaceableLights
- PlaceableManureHeap
- PlaceablePlacement
- PlaceableProductionPoint
- PlaceableSellingStation
- PlaceableSilo
- PlaceableSiloExtension
- PlaceableSolarPanels
- PlaceableTipOcclusionArea...
- PlaceableTrainSystem
- PlaceableTriggerMarkers
- PlaceableVine
- PlaceableWardrobe
- PlaceableWeatherStation
- PlaceableWeighingStation
- PlaceableWindTurbine
- PlaceableWorkshop
- Plow
- PlowPacker
- PowerConsumer
- PowerTakeOffs
- PrecisionFarmingStatistic
- PushHandTool
- RandomlyMovingParts
- ReceivingHopper
- ReverseDriving
- Rideable
- RidgeMarker
- Roller
- Ropes
- RTKStation
- SaltSpreader
- SemiTrailerFront
- Shovel
- SlopeCompensation
- SmartAttach
- SoilSampler
- SowingMachine
- SpeedRotatingParts
- SplineVehicle
- Sprayer
- StonePicker
- StrawBlower
- StumpCutter
- SupportVehicle
- Suspensions
- Tedder
- TensionBeltObject
- TensionBelts
- TestAreas
- TipOccluder
- Trailer
- TreePlanter
- TreeSaplingPallet
- TreeSaw
- TurnOnVehicle
- VariableWorkWidth
- VehicleSettings
- VineCutter
- VineDetector
- VinePrepruner
- Washable
- WaterTrailer
- Wearable
- Weeder
- WeedSpotSpray
- Wheels
- WindBending
- Windrower
- Wipers
- WoodCrusher
- WoodHarvester
- WorkArea
- WorkMode
- WorkParticles
- StateMachine
- Statistics
- Tasks
- Triggers
- Utils
- Vehicles
Engine v1_7_1_0
- AI
- Animation
- Camera
- Entity
- Fillplanes
- general
- General
- I3D
- Input
- Lighting
- Math
- Network
- Node
- NoteNode
- Overlays
- Particle System
- Physics
- Rendering
- Scenegraph
- Shape
- Sound
- Spline
- String
- Terrain Detail
- Text Rendering
- Tire Track
- VoiceChat
- XML
Foundation Reference
TurnOnVehicle
DescriptionSpecialization for vehicles which can be switched on and offFunctions
- actionControllerTurnOnEvent
- actionEventTurnOn
- actionEventTurnOnAll
- dashboardRpmAttributes
- dashboardRpmValue
- getAIRequiresTurnOffOnHeadland
- getAIRequiresTurnOn
- getAlarmTriggerIsActive
- getBunkerSiloCompacterScale
- getCanAIImplementContinueWork
- getCanBeSelected
- getCanBeTurnedOn
- getCanBeTurnedOnAll
- getCanToggleTurnedOn
- getIsDischargeNodeActive
- getIsFillUnitActive
- getIsOperating
- getIsPowerTakeOffActive
- getIsSeedChangeAllowed
- getIsTurnedOn
- getIsTurnedOnAnimationActive
- getIsWorkAreaActive
- getIsWorkModeChangeAllowed
- getRequiresTurnOn
- getShovelNodeIsActive
- getTurnedOnNotAllowedWarning
- getTurnedOnSpeedFactor
- getUseTurnedOnSchema
- initSpecialization
- loadAlarmTrigger
- loadBunkerSiloCompactorFromXML
- loadDischargeNode
- loadInputAttacherJoint
- loadShovelNode
- loadTurnedOnAnimationFromXML
- loadWorkAreaFromXML
- onAlarmTriggerChanged
- onDeactivate
- onDelete
- onLoad
- onPostAttach
- onPreDetach
- onReadStream
- onRegisterActionEvents
- onRootVehicleChanged
- onSetBroken
- onStateChange
- onTurnedOff
- onTurnedOn
- onUpdate
- onUpdateTick
- onWriteStream
- prerequisitesPresent
- registerEventListeners
- registerEvents
- registerFunctions
- registerOverwrittenFunctions
- setIsTurnedOn
- updateActionEvents
actionControllerTurnOnEvent
DescriptionDefinitionactionControllerTurnOnEvent()Code
926 | function TurnOnVehicle.actionControllerTurnOnEvent(self, direction) |
927 | if direction > 0 then |
928 | if self:getIsAIActive() then |
929 | local rootVehicle = self.rootVehicle |
930 | if rootVehicle.getAIFieldWorkerIsTurning ~= nil and rootVehicle:getAIFieldWorkerIsTurning() then |
931 | return false |
932 | end |
933 | end |
934 | |
935 | if self:getCanBeTurnedOn() then |
936 | self:setIsTurnedOn(true) |
937 | return true |
938 | else |
939 | return false |
940 | end |
941 | else |
942 | self:setIsTurnedOn(false) |
943 | return not self:getIsTurnedOn() |
944 | end |
945 | end |
actionEventTurnOn
DescriptionDefinitionactionEventTurnOn()Code
949 | function TurnOnVehicle.actionEventTurnOn(self, actionName, inputValue, callbackState, isAnalog) |
950 | if self:getCanToggleTurnedOn() and self:getCanBeTurnedOn() then |
951 | self:setIsTurnedOn(not self:getIsTurnedOn()) |
952 | else |
953 | if not self:getIsTurnedOn() then |
954 | local warning = self:getTurnedOnNotAllowedWarning() |
955 | if warning ~= nil then |
956 | g_currentMission:showBlinkingWarning(warning, 2000) |
957 | end |
958 | end |
959 | end |
960 | end |
actionEventTurnOnAll
DescriptionDefinitionactionEventTurnOnAll()Code
964 | function TurnOnVehicle.actionEventTurnOnAll(self, actionName, inputValue, callbackState, isAnalog) |
965 | if self:getCanToggleTurnedOn() then |
966 | local canBeTurnedOn, warning = self:getCanBeTurnedOnAll() |
967 | if canBeTurnedOn then |
968 | local vehicles = self.rootVehicle:getChildVehicles() |
969 | for i=1, #vehicles do |
970 | local vehicle = vehicles[i] |
971 | if vehicle.setIsTurnedOn ~= nil then |
972 | vehicle:setIsTurnedOn(not vehicle:getIsTurnedOn()) |
973 | end |
974 | end |
975 | else |
976 | if not self:getIsTurnedOn() then |
977 | if warning ~= nil then |
978 | g_currentMission:showBlinkingWarning(warning, 2000) |
979 | end |
980 | end |
981 | end |
982 | end |
983 | end |
dashboardRpmAttributes
DescriptionDefinitiondashboardRpmAttributes()Code
1019 | function TurnOnVehicle.dashboardRpmAttributes(self, xmlFile, key, dashboard, isActive) |
1020 | dashboard.minRpm = xmlFile:getValue(key .. "#minRpm", 0) |
1021 | dashboard.maxRpm = xmlFile:getValue(key .. "#maxRpm", 1000) |
1022 | |
1023 | return true |
1024 | end |
dashboardRpmValue
DescriptionDefinitiondashboardRpmValue()Code
1028 | function TurnOnVehicle.dashboardRpmValue(self, dashboard) |
1029 | return dashboard.minRpm + (dashboard.maxRpm - dashboard.minRpm) * self.spec_turnOnVehicle.turnedOnSpeed.alpha |
1030 | end |
getAIRequiresTurnOffOnHeadland
DescriptionDefinitiongetAIRequiresTurnOffOnHeadland()Code
554 | function TurnOnVehicle:getAIRequiresTurnOffOnHeadland() |
555 | return false |
556 | end |
getAIRequiresTurnOn
DescriptionDefinitiongetAIRequiresTurnOn()Code
542 | function TurnOnVehicle:getAIRequiresTurnOn() |
543 | return self.spec_turnOnVehicle.aiRequiresTurnOn |
544 | end |
getAlarmTriggerIsActive
DescriptionDefinitiongetAlarmTriggerIsActive()Code
674 | function TurnOnVehicle:getAlarmTriggerIsActive(superFunc, alarmTrigger) |
675 | local ret = superFunc(self, alarmTrigger) |
676 | |
677 | if alarmTrigger.needsTurnOn then |
678 | if not self:getIsTurnedOn() then |
679 | ret = false |
680 | end |
681 | end |
682 | |
683 | return ret |
684 | end |
getBunkerSiloCompacterScale
DescriptionDefinitiongetBunkerSiloCompacterScale()Code
789 | function TurnOnVehicle:getBunkerSiloCompacterScale(superFunc) |
790 | local spec = self.spec_bunkerSiloCompacter |
791 | if spec.turnedOnCompactingScale ~= nil then |
792 | if self:getIsTurnedOn() then |
793 | return spec.turnedOnCompactingScale |
794 | end |
795 | end |
796 | |
797 | return superFunc(self) |
798 | end |
getCanAIImplementContinueWork
DescriptionReturns true if vehicle is ready for ai workDefinition
getCanAIImplementContinueWork()Return Values
boolean | isReady | is ready for ai work |
636 | function TurnOnVehicle:getCanAIImplementContinueWork(superFunc) |
637 | local canContinue, stopAI, stopReason = superFunc(self) |
638 | if not canContinue then |
639 | return false, stopAI, stopReason |
640 | end |
641 | |
642 | local ret = false |
643 | if self:getCanBeTurnedOn() then |
644 | if self:getIsTurnedOn() then |
645 | ret = true |
646 | end |
647 | end |
648 | |
649 | if not self:getAIRequiresTurnOn() then |
650 | ret = true |
651 | end |
652 | |
653 | -- on headland the tool can be turned off |
654 | if not self:getIsAIImplementInLine() then |
655 | ret = true |
656 | end |
657 | |
658 | return ret |
659 | end |
getCanBeSelected
DescriptionDefinitiongetCanBeSelected()Code
739 | function TurnOnVehicle:getCanBeSelected(superFunc) |
740 | return true |
741 | end |
getCanBeTurnedOn
DescriptionReturns if vehicle can be turned onDefinition
getCanBeTurnedOn()Return Values
boolean | canBeTurnedOn | vehicle can be turned on |
477 | function TurnOnVehicle:getCanBeTurnedOn() |
478 | local spec = self.spec_turnOnVehicle |
479 | |
480 | if spec.isAlwaysTurnedOn then |
481 | return false |
482 | end |
483 | |
484 | if self.getInputAttacherJoint ~= nil then |
485 | local inputAttacherJoint = self:getInputAttacherJoint() |
486 | |
487 | if inputAttacherJoint ~= nil and inputAttacherJoint.canBeTurnedOn ~= nil and not inputAttacherJoint.canBeTurnedOn then |
488 | return false |
489 | end |
490 | end |
491 | |
492 | if not self:getIsPowered() then |
493 | return false |
494 | end |
495 | |
496 | return true |
497 | end |
getCanBeTurnedOnAll
DescriptionReturns if all vehicles can be turned onDefinition
getCanBeTurnedOnAll()Return Values
boolean | canBeTurnedOn | all vehicles can be turned on |
502 | function TurnOnVehicle:getCanBeTurnedOnAll() |
503 | local vehicles = self.rootVehicle:getChildVehicles() |
504 | for i=1, #vehicles do |
505 | local vehicle = vehicles[i] |
506 | if vehicle.getCanBeTurnedOn ~= nil then |
507 | if not vehicle:getCanBeTurnedOn() then |
508 | return false |
509 | end |
510 | end |
511 | end |
512 | |
513 | return true |
514 | end |
getCanToggleTurnedOn
DescriptionReturns if user is allowed to turn on the vehicleDefinition
getCanToggleTurnedOn()Return Values
boolean | allow | allow turn on |
519 | function TurnOnVehicle:getCanToggleTurnedOn() |
520 | local spec = self.spec_turnOnVehicle |
521 | |
522 | if spec.isAlwaysTurnedOn then |
523 | return false |
524 | end |
525 | |
526 | if spec.turnedOnByAttacherVehicle then |
527 | return false |
528 | end |
529 | |
530 | return true |
531 | end |
getIsDischargeNodeActive
DescriptionDefinitiongetIsDischargeNodeActive()Code
768 | function TurnOnVehicle:getIsDischargeNodeActive(superFunc, dischargeNode) |
769 | if dischargeNode.needsSetIsTurnedOn then |
770 | if not self:getIsTurnedOn() then |
771 | return false |
772 | end |
773 | end |
774 | |
775 | return superFunc(self, dischargeNode) |
776 | end |
getIsFillUnitActive
DescriptionDefinitiongetIsFillUnitActive()Code
698 | function TurnOnVehicle:getIsFillUnitActive(superFunc, fillUnitIndex) |
699 | local spec = self.spec_turnOnVehicle |
700 | if spec.activatableFillUnits[fillUnitIndex] == true then |
701 | if not self:getIsTurnedOn() then |
702 | return false |
703 | end |
704 | end |
705 | |
706 | return superFunc(self, fillUnitIndex) |
707 | end |
getIsOperating
DescriptionReturns if vehicle is operatingDefinition
getIsOperating()Return Values
boolean | isOperating | is operating |
664 | function TurnOnVehicle:getIsOperating(superFunc) |
665 | if self:getIsTurnedOn() then |
666 | return true |
667 | end |
668 | |
669 | return superFunc(self) |
670 | end |
getIsPowerTakeOffActive
DescriptionDefinitiongetIsPowerTakeOffActive()Code
745 | function TurnOnVehicle:getIsPowerTakeOffActive(superFunc) |
746 | return self:getIsTurnedOn() or superFunc(self) |
747 | end |
getIsSeedChangeAllowed
DescriptionDefinitiongetIsSeedChangeAllowed()Code
733 | function TurnOnVehicle:getIsSeedChangeAllowed(superFunc) |
734 | return superFunc(self) and not self:getIsTurnedOn() |
735 | end |
getIsTurnedOn
DescriptionReturns if vehicle is turned onDefinition
getIsTurnedOn()Return Values
boolean | isTurnedOn | vehicle is turned on |
468 | function TurnOnVehicle:getIsTurnedOn() |
469 | local spec = self.spec_turnOnVehicle |
470 | |
471 | return spec.isAlwaysTurnedOn or spec.isTurnedOn |
472 | end |
getIsTurnedOnAnimationActive
DescriptionDefinitiongetIsTurnedOnAnimationActive()Code
581 | function TurnOnVehicle:getIsTurnedOnAnimationActive(turnedOnAnimation) |
582 | if not self:getIsTurnedOn() then |
583 | return false |
584 | end |
585 | |
586 | return true |
587 | end |
getIsWorkAreaActive
DescriptionReturns true if work area is activeDefinition
getIsWorkAreaActive(table workArea)Arguments
table | workArea | workArea |
boolean | isActive | work area is active |
625 | function TurnOnVehicle:getIsWorkAreaActive(superFunc, workArea) |
626 | if not self:getIsTurnedOn() and workArea.needsSetIsTurnedOn then |
627 | return false |
628 | end |
629 | |
630 | return superFunc(self, workArea) |
631 | end |
getIsWorkModeChangeAllowed
DescriptionDefinitiongetIsWorkModeChangeAllowed()Code
802 | function TurnOnVehicle:getIsWorkModeChangeAllowed(superFunc) |
803 | local spec = self.spec_workMode |
804 | if spec.allowChangeWhileTurnedOn ~= nil then |
805 | if self:getIsTurnedOn() then |
806 | return false |
807 | end |
808 | end |
809 | |
810 | return superFunc(self) |
811 | end |
getRequiresTurnOn
DescriptionDefinitiongetRequiresTurnOn()Code
548 | function TurnOnVehicle:getRequiresTurnOn() |
549 | return self.spec_turnOnVehicle.requiresTurnOn |
550 | end |
getShovelNodeIsActive
DescriptionDefinitiongetShovelNodeIsActive()Code
721 | function TurnOnVehicle:getShovelNodeIsActive(superFunc, shovelNode) |
722 | if shovelNode.needsActiveVehicle then |
723 | if not self:getIsTurnedOn() then |
724 | return false |
725 | end |
726 | end |
727 | |
728 | return superFunc(self, shovelNode) |
729 | end |
getTurnedOnNotAllowedWarning
DescriptionReturns turn on not allowed warning textDefinition
getTurnedOnNotAllowedWarning()Return Values
string | warningText | turn on not allowed warning text |
536 | function TurnOnVehicle:getTurnedOnNotAllowedWarning() |
537 | return nil |
538 | end |
getTurnedOnSpeedFactor
DescriptionDefinitiongetTurnedOnSpeedFactor()Code
1011 | function TurnOnVehicle:getTurnedOnSpeedFactor() |
1012 | return self.spec_turnOnVehicle.turnedOnSpeed.alpha |
1013 | end |
getUseTurnedOnSchema
DescriptionDefinitiongetUseTurnedOnSchema()Code
591 | function TurnOnVehicle:getUseTurnedOnSchema(superFunc) |
592 | return superFunc(self) or self:getIsTurnedOn() |
593 | end |
initSpecialization
DescriptionDefinitioninitSpecialization()Code
25 | function TurnOnVehicle.initSpecialization() |
26 | Vehicle.registerStateChange("TURN_ON") |
27 | Vehicle.registerStateChange("TURN_OFF") |
28 | |
29 | local schema = Vehicle.xmlSchema |
30 | schema:setXMLSpecializationType("TurnOnVehicle") |
31 | |
32 | schema:register(XMLValueType.STRING, "vehicle.turnOnVehicle#toggleButton", "Input action name", "IMPLEMENT_EXTRA") |
33 | schema:register(XMLValueType.L10N_STRING, "vehicle.turnOnVehicle#turnOffText", "Turn off text", "action_turnOffOBJECT") |
34 | schema:register(XMLValueType.L10N_STRING, "vehicle.turnOnVehicle#turnOnText", "Turn on text", "action_turnOnOBJECT") |
35 | schema:register(XMLValueType.BOOL, "vehicle.turnOnVehicle#isAlwaysTurnedOn", "Always turned on", false) |
36 | schema:register(XMLValueType.BOOL, "vehicle.turnOnVehicle#turnedOnByAttacherVehicle", "Turned on by attacher vehicle", false) |
37 | schema:register(XMLValueType.BOOL, "vehicle.turnOnVehicle#turnOffIfNotAllowed", "Turn off if not allowed", false) |
38 | schema:register(XMLValueType.BOOL, "vehicle.turnOnVehicle#turnOffOnDeactivate", "Turn off if the vehicle is deactivated", true) |
39 | |
40 | schema:register(XMLValueType.BOOL, "vehicle.turnOnVehicle#aiRequiresTurnOn", "AI requires turned on vehicle", true) |
41 | schema:register(XMLValueType.BOOL, "vehicle.turnOnVehicle#requiresTurnOn", "(Mobile only) Vehicle requires turn on", true) |
42 | |
43 | AnimationManager.registerAnimationNodesXMLPaths(schema, "vehicle.turnOnVehicle.animationNodes") |
44 | |
45 | SoundManager.registerSampleXMLPaths(schema, "vehicle.turnOnVehicle.sounds", "start(?)") |
46 | SoundManager.registerSampleXMLPaths(schema, "vehicle.turnOnVehicle.sounds", "stop(?)") |
47 | SoundManager.registerSampleXMLPaths(schema, "vehicle.turnOnVehicle.sounds", "work(?)") |
48 | |
49 | schema:register(XMLValueType.STRING, "vehicle.turnOnVehicle.turnedAnimation#name", "Turned animation name (Animation played while activating and deactivating)") |
50 | schema:register(XMLValueType.FLOAT, "vehicle.turnOnVehicle.turnedAnimation#turnOnSpeedScale", "Turn on speed scale", 1) |
51 | schema:register(XMLValueType.FLOAT, "vehicle.turnOnVehicle.turnedAnimation#turnOffSpeedScale", "Turn off speed scale", "Inversed turnOnSpeedScale") |
52 | |
53 | schema:register(XMLValueType.STRING, TurnOnVehicle.TURNED_ON_ANIMATION_XML_PATH .. "#name", "Turned on animation name (Animation played while turn on)") |
54 | schema:register(XMLValueType.FLOAT, TurnOnVehicle.TURNED_ON_ANIMATION_XML_PATH .. "#turnOnFadeTime", "Turn on fade time", 1) |
55 | schema:register(XMLValueType.FLOAT, TurnOnVehicle.TURNED_ON_ANIMATION_XML_PATH .. "#turnOffFadeTime", "Turn off fade time", 1) |
56 | schema:register(XMLValueType.FLOAT, TurnOnVehicle.TURNED_ON_ANIMATION_XML_PATH .. "#speedScale", "Speed scale", 1) |
57 | |
58 | schema:register(XMLValueType.INT, "vehicle.turnOnVehicle.activatableFillUnits.activatableFillUnit(?)#index", "Activateable fill unit index") |
59 | |
60 | |
61 | schema:register(XMLValueType.BOOL, Attachable.INPUT_ATTACHERJOINT_XML_KEY .. "#canBeTurnedOn", "Attacher joint can turn on implement", true) |
62 | schema:register(XMLValueType.BOOL, Attachable.INPUT_ATTACHERJOINT_CONFIG_XML_KEY .. "#canBeTurnedOn", "Attacher joint can turn on implement", true) |
63 | |
64 | schema:register(XMLValueType.BOOL, WorkArea.WORK_AREA_XML_KEY .. "#needsSetIsTurnedOn", "Work area needs turned on vehicle to work", true) |
65 | schema:register(XMLValueType.BOOL, WorkArea.WORK_AREA_XML_CONFIG_KEY .. "#needsSetIsTurnedOn", "Work area needs turned on vehicle to work", true) |
66 | |
67 | schema:register(XMLValueType.BOOL, FillUnit.ALARM_TRIGGER_XML_KEY .. "#needsTurnOn", "Needs turned on vehicle", false) |
68 | schema:register(XMLValueType.BOOL, FillUnit.ALARM_TRIGGER_XML_KEY .. "#turnOffInTrigger", "Turn vehicle off when triggered", false) |
69 | |
70 | schema:register(XMLValueType.BOOL, Shovel.SHOVEL_NODE_XML_KEY .. "#needsActivation", "Needs activation", false) |
71 | |
72 | schema:register(XMLValueType.BOOL, Dischargeable.DISCHARGE_NODE_XML_PATH .. "#needsSetIsTurnedOn", "Vehicle needs to be turned on to activate discharge node", false) |
73 | schema:register(XMLValueType.BOOL, Dischargeable.DISCHARGE_NODE_XML_PATH .. "#turnOnActivateNode", "Discharge node is set active when vehicle is turned on", false) |
74 | |
75 | schema:register(XMLValueType.BOOL, Dischargeable.DISCHARGE_NODE_CONFIG_XML_PATH .. "#needsSetIsTurnedOn", "Vehicle needs to be turned on to activate discharge node", false) |
76 | schema:register(XMLValueType.BOOL, Dischargeable.DISCHARGE_NODE_CONFIG_XML_PATH .. "#turnOnActivateNode", "Discharge node is set active when vehicle is turned on", false) |
77 | |
78 | schema:register(XMLValueType.FLOAT, BunkerSiloCompacter.XML_PATH .. "#turnedOnCompactingScale", "Compacting scale which is used while vehicle is turned on", "normal scale") |
79 | |
80 | schema:register(XMLValueType.TIME, "vehicle.turnOnVehicle.turnedOnSpeed#fadeInTime", "(Turned on speed simulation - used as sound modifer and for rpm dashboards) Time to reach max. turned on speed", 1) |
81 | schema:register(XMLValueType.TIME, "vehicle.turnOnVehicle.turnedOnSpeed#fadeOutTime", "(Turned on speed simulation - used as sound modifer and for rpm dashboards) Time to reach the turned off speed again", 1) |
82 | schema:register(XMLValueType.FLOAT, "vehicle.turnOnVehicle.turnedOnSpeed#variance", "Variation value at max. speed", 0.02) |
83 | schema:register(XMLValueType.FLOAT, "vehicle.turnOnVehicle.turnedOnSpeed#varianceSpeed", "Speed factor of variance change", 1) |
84 | |
85 | Dashboard.registerDashboardXMLPaths(schema, "vehicle.turnOnVehicle.dashboards", "turnedOn | rpm") |
86 | schema:register(XMLValueType.FLOAT, "vehicle.turnOnVehicle.dashboards.dashboard(?)#minRpm", "Rpm value if vehicle is turned off", 0) |
87 | schema:register(XMLValueType.FLOAT, "vehicle.turnOnVehicle.dashboards.dashboard(?)#maxRpm", "Rpm value if vehicle is turned on", 1000) |
88 | |
89 | schema:setXMLSpecializationType() |
90 | end |
loadAlarmTrigger
DescriptionDefinitionloadAlarmTrigger()Code
688 | function TurnOnVehicle:loadAlarmTrigger(superFunc, xmlFile, key, alarmTrigger, fillUnit) |
689 | local ret = superFunc(self, xmlFile, key, alarmTrigger, fillUnit) |
690 | alarmTrigger.needsTurnOn = xmlFile:getValue(key .. "#needsTurnOn", false) |
691 | alarmTrigger.turnOffInTrigger = xmlFile:getValue(key .. "#turnOffInTrigger", false) |
692 | |
693 | return ret |
694 | end |
loadBunkerSiloCompactorFromXML
DescriptionDefinitionloadBunkerSiloCompactorFromXML()Code
780 | function TurnOnVehicle:loadBunkerSiloCompactorFromXML(superFunc, xmlFile, key) |
781 | superFunc(self, xmlFile, key) |
782 | |
783 | local spec = self.spec_bunkerSiloCompacter |
784 | spec.turnedOnCompactingScale = xmlFile:getValue(key .. "#turnedOnCompactingScale") |
785 | end |
loadDischargeNode
DescriptionDefinitionloadDischargeNode()Code
751 | function TurnOnVehicle:loadDischargeNode(superFunc, xmlFile, key, entry) |
752 | if not superFunc(self, xmlFile, key, entry) then |
753 | return false |
754 | end |
755 | |
756 | entry.needsSetIsTurnedOn = xmlFile:getValue(key.."#needsSetIsTurnedOn", false) |
757 | entry.turnOnActivateNode = xmlFile:getValue(key.."#turnOnActivateNode", false) |
758 | if entry.turnOnActivateNode then |
759 | local spec = self.spec_turnOnVehicle |
760 | spec.activateableDischargeNode = entry |
761 | end |
762 | |
763 | return true |
764 | end |
loadInputAttacherJoint
DescriptionCalled on loadingDefinition
loadInputAttacherJoint(table savegame)Arguments
table | savegame | savegame |
598 | function TurnOnVehicle:loadInputAttacherJoint(superFunc, xmlFile, key, inputAttacherJoint, i) |
599 | if not superFunc(self, xmlFile, key, inputAttacherJoint, i) then |
600 | return false |
601 | end |
602 | |
603 | inputAttacherJoint.canBeTurnedOn = xmlFile:getValue(key.. "#canBeTurnedOn", true) |
604 | |
605 | return true |
606 | end |
loadShovelNode
DescriptionDefinitionloadShovelNode()Code
711 | function TurnOnVehicle:loadShovelNode(superFunc, xmlFile, key, shovelNode) |
712 | superFunc(self, xmlFile, key, shovelNode) |
713 | |
714 | shovelNode.needsActiveVehicle = xmlFile:getValue(key .. "#needsActivation", false) |
715 | |
716 | return true |
717 | end |
loadTurnedOnAnimationFromXML
DescriptionDefinitionloadTurnedOnAnimationFromXML()Code
560 | function TurnOnVehicle:loadTurnedOnAnimationFromXML(xmlFile, key, turnedOnAnimation) |
561 | local name = self.xmlFile:getValue(key.."#name") |
562 | if name == nil then |
563 | Logging.xmlWarning(xmlFile, "Missing animation name in '%s'", key) |
564 | return false |
565 | end |
566 | |
567 | turnedOnAnimation.name = name |
568 | turnedOnAnimation.turnOnFadeTime = self.xmlFile:getValue(key.."#turnOnFadeTime", 1) * 1000 |
569 | turnedOnAnimation.turnOffFadeTime = self.xmlFile:getValue(key.."#turnOffFadeTime", 1) * 1000 |
570 | turnedOnAnimation.speedScale = self.xmlFile:getValue(key.."#speedScale", 1) |
571 | turnedOnAnimation.speedDirection = 0 |
572 | turnedOnAnimation.currentSpeed = 0 |
573 | turnedOnAnimation.isTurnedOn = false |
574 | |
575 | return true |
576 | end |
loadWorkAreaFromXML
DescriptionLoads work areas from xmlDefinition
loadWorkAreaFromXML(table workArea, integer xmlFile, string key)Arguments
table | workArea | workArea |
integer | xmlFile | id of xml object |
string | key | key |
613 | function TurnOnVehicle:loadWorkAreaFromXML(superFunc, workArea, xmlFile, key) |
614 | local retValue = superFunc(self, workArea, xmlFile, key) |
615 | |
616 | workArea.needsSetIsTurnedOn = xmlFile:getValue(key.."#needsSetIsTurnedOn", true) |
617 | |
618 | return retValue |
619 | end |
onAlarmTriggerChanged
DescriptionDefinitiononAlarmTriggerChanged()Code
833 | function TurnOnVehicle:onAlarmTriggerChanged(alarmTrigger, state) |
834 | if state then |
835 | if alarmTrigger.turnOffInTrigger then |
836 | self:setIsTurnedOn(false, true) |
837 | end |
838 | end |
839 | end |
onDeactivate
DescriptionCalled on deactivateDefinition
onDeactivate()Code
859 | function TurnOnVehicle:onDeactivate() |
860 | local spec = self.spec_turnOnVehicle |
861 | if spec.turnOffOnDeactivate then |
862 | self:setIsTurnedOn(false, true) |
863 | end |
864 | end |
onDelete
DescriptionCalled on deletingDefinition
onDelete()Code
269 | function TurnOnVehicle:onDelete() |
270 | local spec = self.spec_turnOnVehicle |
271 | if spec.samples ~= nil then |
272 | g_soundManager:deleteSamples(spec.samples.start) |
273 | g_soundManager:deleteSamples(spec.samples.stop) |
274 | g_soundManager:deleteSamples(spec.samples.work) |
275 | end |
276 | g_animationManager:deleteAnimations(spec.animationNodes) |
277 | end |
onLoad
DescriptionCalled on loadingDefinition
onLoad(table savegame)Arguments
table | savegame | savegame |
164 | function TurnOnVehicle:onLoad(savegame) |
165 | |
166 | XMLUtil.checkDeprecatedXMLElements(self.xmlFile, "vehicle.turnOnSettings#turnOffText", "vehicle.turnOnVehicle#turnOffText") --FS15 to FS17 |
167 | XMLUtil.checkDeprecatedXMLElements(self.xmlFile, "vehicle.turnOnSettings#turnOnText", "vehicle.turnOnVehicle#turnOnText") --FS15 to FS17 |
168 | XMLUtil.checkDeprecatedXMLElements(self.xmlFile, "vehicle.turnOnSettings#needsSelection") --FS15 to FS17 |
169 | XMLUtil.checkDeprecatedXMLElements(self.xmlFile, "vehicle.turnOnSettings#isAlwaysTurnedOn", "vehicle.turnOnVehicle#isAlwaysTurnedOn") --FS15 to FS17 |
170 | XMLUtil.checkDeprecatedXMLElements(self.xmlFile, "vehicle.turnOnSettings#toggleButton", "vehicle.turnOnVehicle#toggleButton") --FS15 to FS17 |
171 | XMLUtil.checkDeprecatedXMLElements(self.xmlFile, "vehicle.turnOnSettings#animationName", "vehicle.turnOnVehicle.turnedAnimation#name") --FS15 to FS17 |
172 | XMLUtil.checkDeprecatedXMLElements(self.xmlFile, "vehicle.turnOnSettings#turnOnSpeedScale", "vehicle.turnOnVehicle.turnedAnimation#turnOnSpeedScale") --FS15 to FS17 |
173 | XMLUtil.checkDeprecatedXMLElements(self.xmlFile, "vehicle.turnOnSettings#turnOffSpeedScale", "vehicle.turnOnVehicle.turnedAnimation#turnOffSpeedScale") --FS15 to FS17 |
174 | XMLUtil.checkDeprecatedXMLElements(self.xmlFile, "vehicle.turnedOnRotationNodes.turnedOnRotationNode#type", "vehicle.turnOnVehicle.animationNodes.animationNode", "turnOn") --FS17 to FS19 |
175 | XMLUtil.checkDeprecatedXMLElements(self.xmlFile, "vehicle.foldable.foldingParts#turnOffOnFold", "vehicle.turnOnVehicle#turnOffIfNotAllowed") --FS17 to FS19 |
176 | |
177 | local spec = self.spec_turnOnVehicle |
178 | |
179 | local turnOnButtonStr = self.xmlFile:getValue("vehicle.turnOnVehicle#toggleButton") |
180 | if turnOnButtonStr ~= nil then |
181 | spec.toggleTurnOnInputBinding = InputAction[turnOnButtonStr] |
182 | end |
183 | spec.toggleTurnOnInputBinding = Utils.getNoNil(spec.toggleTurnOnInputBinding, InputAction.IMPLEMENT_EXTRA) |
184 | |
185 | spec.turnOffText = string.format(self.xmlFile:getValue("vehicle.turnOnVehicle#turnOffText", "action_turnOffOBJECT", self.customEnvironment), self.typeDesc) |
186 | spec.turnOnText = string.format(self.xmlFile:getValue("vehicle.turnOnVehicle#turnOnText", "action_turnOnOBJECT", self.customEnvironment), self.typeDesc) |
187 | spec.isTurnedOn = false |
188 | spec.isAlwaysTurnedOn = self.xmlFile:getValue("vehicle.turnOnVehicle#isAlwaysTurnedOn", false) |
189 | spec.turnedOnByAttacherVehicle = self.xmlFile:getValue("vehicle.turnOnVehicle#turnedOnByAttacherVehicle", false) |
190 | spec.turnOffIfNotAllowed = self.xmlFile:getValue("vehicle.turnOnVehicle#turnOffIfNotAllowed", true) |
191 | spec.turnOffOnDeactivate = self.xmlFile:getValue("vehicle.turnOnVehicle#turnOffOnDeactivate", not GS_IS_MOBILE_VERSION) |
192 | |
193 | spec.aiRequiresTurnOn = self.xmlFile:getValue("vehicle.turnOnVehicle#aiRequiresTurnOn", true) |
194 | spec.requiresTurnOn = self.xmlFile:getValue("vehicle.turnOnVehicle#requiresTurnOn", true) |
195 | |
196 | if self.isClient then |
197 | spec.animationNodes = g_animationManager:loadAnimations(self.xmlFile, "vehicle.turnOnVehicle.animationNodes", self.components, self, self.i3dMappings) |
198 | |
199 | local allowsAnimations = SpecializationUtil.hasSpecialization(AnimatedVehicle, self.specializations) |
200 | if allowsAnimations then |
201 | local turnOnAnimation = self.xmlFile:getValue("vehicle.turnOnVehicle.turnedAnimation#name") |
202 | if turnOnAnimation ~= nil then |
203 | spec.turnOnAnimation = {} |
204 | spec.turnOnAnimation.name = turnOnAnimation |
205 | spec.turnOnAnimation.turnOnSpeedScale = self.xmlFile:getValue("vehicle.turnOnVehicle.turnedAnimation#turnOnSpeedScale", 1) |
206 | spec.turnOnAnimation.turnOffSpeedScale = self.xmlFile:getValue("vehicle.turnOnVehicle.turnedAnimation#turnOffSpeedScale", -spec.turnOnAnimation.turnOnSpeedScale) |
207 | end |
208 | end |
209 | |
210 | spec.turnedOnAnimations = {} |
211 | if allowsAnimations then |
212 | self.xmlFile:iterate("vehicle.turnOnVehicle.turnedOnAnimation", function(index, key) |
213 | local entry = {} |
214 | if self:loadTurnedOnAnimationFromXML(self.xmlFile, key, entry) then |
215 | table.insert(spec.turnedOnAnimations, entry) |
216 | end |
217 | end) |
218 | end |
219 | |
220 | spec.activatableFillUnits = {} |
221 | local i = 0 |
222 | while true do |
223 | local key = string.format("vehicle.turnOnVehicle.activatableFillUnits.activatableFillUnit(%d)", i) |
224 | if not self.xmlFile:hasProperty(key) then |
225 | break |
226 | end |
227 | |
228 | local fillUnitIndex = self.xmlFile:getValue(key.."#index") |
229 | if fillUnitIndex ~= nil then |
230 | spec.activatableFillUnits[fillUnitIndex] = true |
231 | end |
232 | |
233 | i = i + 1 |
234 | end |
235 | |
236 | spec.samples = {} |
237 | spec.samples.start = g_soundManager:loadSamplesFromXML(self.xmlFile, "vehicle.turnOnVehicle.sounds", "start", self.baseDirectory, self.components, 1, AudioGroup.VEHICLE, self.i3dMappings, self) |
238 | spec.samples.stop = g_soundManager:loadSamplesFromXML(self.xmlFile, "vehicle.turnOnVehicle.sounds", "stop", self.baseDirectory, self.components, 1, AudioGroup.VEHICLE, self.i3dMappings, self) |
239 | spec.samples.work = g_soundManager:loadSamplesFromXML(self.xmlFile, "vehicle.turnOnVehicle.sounds", "work", self.baseDirectory, self.components, 0, AudioGroup.VEHICLE, self.i3dMappings, self) |
240 | |
241 | -- simple turned on speed simulation - can be used as sound modifier or turned on rpm dashboard |
242 | spec.turnedOnSpeed = {} |
243 | spec.turnedOnSpeed.isActive = self.xmlFile:hasProperty("vehicle.turnOnVehicle.turnedOnSpeed") |
244 | spec.turnedOnSpeed.alpha = 0 |
245 | spec.turnedOnSpeed.fadeInTime = self.xmlFile:getValue("vehicle.turnOnVehicle.turnedOnSpeed#fadeInTime", 1) |
246 | spec.turnedOnSpeed.fadeOutTime = self.xmlFile:getValue("vehicle.turnOnVehicle.turnedOnSpeed#fadeOutTime", 1) |
247 | spec.turnedOnSpeed.variance = self.xmlFile:getValue("vehicle.turnOnVehicle.turnedOnSpeed#variance", 0.02) |
248 | spec.turnedOnSpeed.varianceSpeed = self.xmlFile:getValue("vehicle.turnOnVehicle.turnedOnSpeed#varianceSpeed", 0.01) |
249 | |
250 | if self.loadDashboardsFromXML ~= nil then |
251 | self:loadDashboardsFromXML(self.xmlFile, "vehicle.turnOnVehicle.dashboards", {valueTypeToLoad = "turnedon", |
252 | valueObject = spec, |
253 | valueFunc = "isTurnedOn"}) |
254 | self:loadDashboardsFromXML(self.xmlFile, "vehicle.turnOnVehicle.dashboards", {valueTypeToLoad = "rpm", |
255 | valueObject = self, |
256 | valueFunc = TurnOnVehicle.dashboardRpmValue, |
257 | additionalAttributesFunc = TurnOnVehicle.dashboardRpmAttributes}) |
258 | end |
259 | end |
260 | |
261 | if not self.isClient then |
262 | SpecializationUtil.removeEventListener(self, "onDelete", TurnOnVehicle) |
263 | SpecializationUtil.removeEventListener(self, "onUpdate", TurnOnVehicle) |
264 | end |
265 | end |
onPostAttach
DescriptionDefinitiononPostAttach()Code
868 | function TurnOnVehicle:onPostAttach(attacherVehicle, inputJointDescIndex, jointDescIndex) |
869 | local spec = self.spec_turnOnVehicle |
870 | if spec.turnedOnByAttacherVehicle then |
871 | if attacherVehicle.getIsTurnedOn ~= nil then |
872 | self:setIsTurnedOn(attacherVehicle:getIsTurnedOn(), true) |
873 | end |
874 | end |
875 | end |
onPreDetach
DescriptionCalled if vehicle gets detachedDefinition
onPreDetach(table attacherVehicle, table implement)Arguments
table | attacherVehicle | attacher vehicle |
table | implement | implement |
881 | function TurnOnVehicle:onPreDetach(attacherVehicle, implement) |
882 | self:setIsTurnedOn(false, true) |
883 | end |
onReadStream
DescriptionCalled on client side on joinDefinition
onReadStream(integer streamId, integer connection)Arguments
integer | streamId | streamId |
integer | connection | connection |
283 | function TurnOnVehicle:onReadStream(streamId, connection) |
284 | local turnedOn = streamReadBool(streamId) |
285 | self:setIsTurnedOn(turnedOn, true) |
286 | end |
onRegisterActionEvents
DescriptionDefinitiononRegisterActionEvents()Code
815 | function TurnOnVehicle:onRegisterActionEvents(isActiveForInput, isActiveForInputIgnoreSelection) |
816 | if self.isClient then |
817 | local spec = self.spec_turnOnVehicle |
818 | self:clearActionEventsTable(spec.actionEvents) |
819 | if isActiveForInputIgnoreSelection and self:getCanToggleTurnedOn() then |
820 | local _, actionEventId = self:addPoweredActionEvent(spec.actionEvents, spec.toggleTurnOnInputBinding, self, TurnOnVehicle.actionEventTurnOn, false, true, false, true, nil) |
821 | g_inputBinding:setActionEventTextPriority(actionEventId, GS_PRIO_HIGH) |
822 | |
823 | TurnOnVehicle.updateActionEvents(self) |
824 | |
825 | _, actionEventId = self:addPoweredActionEvent(spec.actionEvents, InputAction.TURN_ON_ALL_IMPLEMENTS, self, TurnOnVehicle.actionEventTurnOnAll, false, true, false, true, nil) |
826 | g_inputBinding:setActionEventTextVisibility(actionEventId, false) |
827 | end |
828 | end |
829 | end |
onRootVehicleChanged
DescriptionCalled if root vehicle changesDefinition
onRootVehicleChanged(table rootVehicle)Arguments
table | rootVehicle | root vehicle |
888 | function TurnOnVehicle:onRootVehicleChanged(rootVehicle) |
889 | local spec = self.spec_turnOnVehicle |
890 | local actionController = rootVehicle.actionController |
891 | if actionController ~= nil then |
892 | if spec.controlledAction ~= nil then |
893 | spec.controlledAction:updateParent(actionController) |
894 | return |
895 | end |
896 | |
897 | spec.controlledAction = actionController:registerAction("turnOn", spec.toggleTurnOnInputBinding, 1) |
898 | spec.controlledAction:setCallback(self, TurnOnVehicle.actionControllerTurnOnEvent) |
899 | spec.controlledAction:setFinishedFunctions(self, self.getIsTurnedOn, true, false) |
900 | if self:getRequiresTurnOn() then |
901 | spec.controlledAction:setDeactivateFunction(self, self.getCanBeTurnedOn, true) |
902 | end |
903 | spec.controlledAction:setIsSaved(true) |
904 | if self:getAIRequiresTurnOn() then |
905 | spec.controlledAction:addAIEventListener(self, "onAIFieldWorkerStart", 1, true) |
906 | spec.controlledAction:addAIEventListener(self, "onAIImplementStart", 1, true) |
907 | spec.controlledAction:addAIEventListener(self, "onAIImplementStartLine", 1, true) |
908 | spec.controlledAction:addAIEventListener(self, "onAIImplementContinue", 1) |
909 | spec.controlledAction:addAIEventListener(self, "onAIImplementEnd", -1) |
910 | spec.controlledAction:addAIEventListener(self, "onAIFieldWorkerEnd", -1) |
911 | if self:getAIRequiresTurnOffOnHeadland() then |
912 | spec.controlledAction:addAIEventListener(self, "onAIImplementEndLine", -1) |
913 | end |
914 | spec.controlledAction:addAIEventListener(self, "onAIImplementBlock", -1) |
915 | spec.controlledAction:addAIEventListener(self, "onAIImplementPrepare", -1) |
916 | end |
917 | else |
918 | if spec.controlledAction ~= nil then |
919 | spec.controlledAction:remove() |
920 | end |
921 | end |
922 | end |
onSetBroken
DescriptionDefinitiononSetBroken()Code
843 | function TurnOnVehicle:onSetBroken() |
844 | self:setIsTurnedOn(false, true) |
845 | end |
onStateChange
DescriptionDefinitiononStateChange()Code
849 | function TurnOnVehicle:onStateChange(state, data) |
850 | if state == Vehicle.STATE_CHANGE_MOTOR_TURN_OFF then |
851 | if not self:getCanBeTurnedOn() then |
852 | self:setIsTurnedOn(false, true) |
853 | end |
854 | end |
855 | end |
onTurnedOff
DescriptionDefinitiononTurnedOff()Code
442 | function TurnOnVehicle:onTurnedOff() |
443 | local spec = self.spec_turnOnVehicle |
444 | if self.isClient then |
445 | if spec.turnOnAnimation ~= nil then |
446 | self:playAnimation(spec.turnOnAnimation.name, spec.turnOnAnimation.turnOffSpeedScale, self:getAnimationTime(spec.turnOnAnimation.name), true) |
447 | end |
448 | |
449 | g_soundManager:stopSamples(spec.samples.start) |
450 | g_soundManager:stopSamples(spec.samples.work) |
451 | g_soundManager:stopSamples(spec.samples.stop) |
452 | |
453 | g_soundManager:playSamples(spec.samples.stop) |
454 | g_animationManager:stopAnimations(spec.animationNodes) |
455 | end |
456 | |
457 | if spec.activateableDischargeNodePrev ~= nil then |
458 | if spec.activateableDischargeNodePrev.index ~= nil then |
459 | self:setCurrentDischargeNodeIndex(spec.activateableDischargeNodePrev.index) |
460 | spec.activateableDischargeNodePrev = nil |
461 | end |
462 | end |
463 | end |
onTurnedOn
DescriptionDefinitiononTurnedOn()Code
413 | function TurnOnVehicle:onTurnedOn() |
414 | local spec = self.spec_turnOnVehicle |
415 | if self.isClient then |
416 | if spec.turnOnAnimation ~= nil then |
417 | self:playAnimation(spec.turnOnAnimation.name, spec.turnOnAnimation.turnOnSpeedScale, self:getAnimationTime(spec.turnOnAnimation.name), true) |
418 | end |
419 | |
420 | g_soundManager:stopSamples(spec.samples.start) |
421 | g_soundManager:stopSamples(spec.samples.work) |
422 | g_soundManager:stopSamples(spec.samples.stop) |
423 | |
424 | g_soundManager:playSamples(spec.samples.start) |
425 | for i=1, #spec.samples.work do |
426 | g_soundManager:playSample(spec.samples.work[i], 0, spec.samples.start[i]) |
427 | end |
428 | |
429 | g_animationManager:startAnimations(spec.animationNodes) |
430 | end |
431 | |
432 | if spec.activateableDischargeNode ~= nil then |
433 | if spec.activateableDischargeNode.index ~= nil then |
434 | spec.activateableDischargeNodePrev = self:getCurrentDischargeNode() |
435 | self:setCurrentDischargeNodeIndex(spec.activateableDischargeNode.index) |
436 | end |
437 | end |
438 | end |
onUpdate
DescriptionCalled on updateDefinition
onUpdate(float dt, boolean isActiveForInput, boolean isSelected)Arguments
float | dt | time since last call in ms |
boolean | isActiveForInput | true if vehicle is active for input |
boolean | isSelected | true if vehicle is selected |
302 | function TurnOnVehicle:onUpdate(dt, isActiveForInput, isActiveForInputIgnoreSelection, isSelected) |
303 | local spec = self.spec_turnOnVehicle |
304 | |
305 | for i=1, #spec.turnedOnAnimations do |
306 | local turnedOnAnimation = spec.turnedOnAnimations[i] |
307 | local isTurnedOn = self:getIsTurnedOnAnimationActive(turnedOnAnimation) |
308 | if turnedOnAnimation.isTurnedOn ~= isTurnedOn then |
309 | if isTurnedOn then |
310 | turnedOnAnimation.speedDirection = 1 |
311 | self:playAnimation(turnedOnAnimation.name, math.max(turnedOnAnimation.currentSpeed*turnedOnAnimation.speedScale, 0.001), self:getAnimationTime(turnedOnAnimation.name), true) |
312 | else |
313 | turnedOnAnimation.speedDirection = -1 |
314 | end |
315 | |
316 | |
317 | turnedOnAnimation.isTurnedOn = isTurnedOn |
318 | end |
319 | |
320 | if turnedOnAnimation.speedDirection ~= 0 then |
321 | local duration = turnedOnAnimation.turnOnFadeTime |
322 | if turnedOnAnimation.speedDirection == -1 then |
323 | duration = turnedOnAnimation.turnOffFadeTime |
324 | end |
325 | turnedOnAnimation.currentSpeed = MathUtil.clamp(turnedOnAnimation.currentSpeed + turnedOnAnimation.speedDirection * dt/duration, 0, 1) |
326 | self:setAnimationSpeed(turnedOnAnimation.name, turnedOnAnimation.currentSpeed*turnedOnAnimation.speedScale) |
327 | if turnedOnAnimation.speedDirection == -1 and turnedOnAnimation.currentSpeed == 0 then |
328 | self:stopAnimation(turnedOnAnimation.name, true) |
329 | end |
330 | |
331 | if turnedOnAnimation.currentSpeed == 1 or turnedOnAnimation.currentSpeed == 0 then |
332 | turnedOnAnimation.speedDirection = 0 |
333 | end |
334 | end |
335 | end |
336 | |
337 | if self.isClient then |
338 | if spec.turnedOnSpeed.isActive then |
339 | local targetAlpha = 0 |
340 | if self:getIsTurnedOn() then |
341 | local time = g_time * spec.turnedOnSpeed.varianceSpeed * 0.05 |
342 | local modValue = math.sin(time) * math.sin((time + 2) * 0.3) * 0.8 + math.cos(time * 5) * 0.2 |
343 | targetAlpha = 1 + modValue * spec.turnedOnSpeed.variance |
344 | end |
345 | |
346 | if targetAlpha ~= spec.turnedOnSpeed.alpha then |
347 | local dir = MathUtil.sign(targetAlpha - spec.turnedOnSpeed.alpha) |
348 | local limitFunc = dir < 0 and math.max or math.min |
349 | local fadeTime = dir < 0 and spec.turnedOnSpeed.fadeOutTime or spec.turnedOnSpeed.fadeInTime |
350 | spec.turnedOnSpeed.alpha = limitFunc(spec.turnedOnSpeed.alpha + (1 / fadeTime) * dir * dt, targetAlpha) |
351 | end |
352 | end |
353 | end |
354 | end |
onUpdateTick
DescriptionCalled on update tickDefinition
onUpdateTick(float dt, boolean isActiveForInput, boolean isSelected)Arguments
float | dt | time since last call in ms |
boolean | isActiveForInput | true if vehicle is active for input |
boolean | isSelected | true if vehicle is selected |
361 | function TurnOnVehicle:onUpdateTick(dt, isActiveForInput, isActiveForInputIgnoreSelection, isSelected) |
362 | local spec = self.spec_turnOnVehicle |
363 | |
364 | if self.isClient then |
365 | if not spec.isAlwaysTurnedOn and not spec.turnedOnByAttacherVehicle then |
366 | TurnOnVehicle.updateActionEvents(self) |
367 | end |
368 | end |
369 | |
370 | if self.isServer then |
371 | if spec.turnOffIfNotAllowed then |
372 | if not self:getCanBeTurnedOn() then |
373 | if self:getIsTurnedOn() then |
374 | self:setIsTurnedOn(false) |
375 | else |
376 | if self.getAttacherVehicle ~= nil then |
377 | local attacherVehicle = self:getAttacherVehicle() |
378 | if attacherVehicle ~= nil then |
379 | if attacherVehicle.setIsTurnedOn ~= nil and attacherVehicle:getIsTurnedOn() then |
380 | attacherVehicle:setIsTurnedOn(false) |
381 | end |
382 | end |
383 | end |
384 | end |
385 | end |
386 | end |
387 | end |
388 | end |
onWriteStream
DescriptionCalled on server side on joinDefinition
onWriteStream(integer streamId, integer connection)Arguments
integer | streamId | streamId |
integer | connection | connection |
292 | function TurnOnVehicle:onWriteStream(streamId, connection) |
293 | local spec = self.spec_turnOnVehicle |
294 | streamWriteBool(streamId, spec.isTurnedOn) |
295 | end |
prerequisitesPresent
DescriptionDefinitionprerequisitesPresent()Code
19 | function TurnOnVehicle.prerequisitesPresent(specializations) |
20 | return true |
21 | end |
registerEventListeners
DescriptionDefinitionregisterEventListeners()Code
142 | function TurnOnVehicle.registerEventListeners(vehicleType) |
143 | SpecializationUtil.registerEventListener(vehicleType, "onLoad", TurnOnVehicle) |
144 | SpecializationUtil.registerEventListener(vehicleType, "onDelete", TurnOnVehicle) |
145 | SpecializationUtil.registerEventListener(vehicleType, "onReadStream", TurnOnVehicle) |
146 | SpecializationUtil.registerEventListener(vehicleType, "onWriteStream", TurnOnVehicle) |
147 | SpecializationUtil.registerEventListener(vehicleType, "onUpdate", TurnOnVehicle) |
148 | SpecializationUtil.registerEventListener(vehicleType, "onUpdateTick", TurnOnVehicle) |
149 | SpecializationUtil.registerEventListener(vehicleType, "onRegisterActionEvents", TurnOnVehicle) |
150 | SpecializationUtil.registerEventListener(vehicleType, "onDeactivate", TurnOnVehicle) |
151 | SpecializationUtil.registerEventListener(vehicleType, "onPostAttach", TurnOnVehicle) |
152 | SpecializationUtil.registerEventListener(vehicleType, "onPreDetach", TurnOnVehicle) |
153 | SpecializationUtil.registerEventListener(vehicleType, "onRootVehicleChanged", TurnOnVehicle) |
154 | SpecializationUtil.registerEventListener(vehicleType, "onTurnedOn", TurnOnVehicle) |
155 | SpecializationUtil.registerEventListener(vehicleType, "onTurnedOff", TurnOnVehicle) |
156 | SpecializationUtil.registerEventListener(vehicleType, "onAlarmTriggerChanged", TurnOnVehicle) |
157 | SpecializationUtil.registerEventListener(vehicleType, "onSetBroken", TurnOnVehicle) |
158 | SpecializationUtil.registerEventListener(vehicleType, "onStateChange", TurnOnVehicle) |
159 | end |
registerEvents
DescriptionDefinitionregisterEvents()Code
94 | function TurnOnVehicle.registerEvents(vehicleType) |
95 | SpecializationUtil.registerEvent(vehicleType, "onTurnedOn") |
96 | SpecializationUtil.registerEvent(vehicleType, "onTurnedOff") |
97 | end |
registerFunctions
DescriptionDefinitionregisterFunctions()Code
101 | function TurnOnVehicle.registerFunctions(vehicleType) |
102 | SpecializationUtil.registerFunction(vehicleType, "setIsTurnedOn", TurnOnVehicle.setIsTurnedOn) |
103 | SpecializationUtil.registerFunction(vehicleType, "getIsTurnedOn", TurnOnVehicle.getIsTurnedOn) |
104 | SpecializationUtil.registerFunction(vehicleType, "getCanBeTurnedOn", TurnOnVehicle.getCanBeTurnedOn) |
105 | SpecializationUtil.registerFunction(vehicleType, "getCanBeTurnedOnAll", TurnOnVehicle.getCanBeTurnedOnAll) |
106 | SpecializationUtil.registerFunction(vehicleType, "getCanToggleTurnedOn", TurnOnVehicle.getCanToggleTurnedOn) |
107 | SpecializationUtil.registerFunction(vehicleType, "getTurnedOnNotAllowedWarning", TurnOnVehicle.getTurnedOnNotAllowedWarning) |
108 | SpecializationUtil.registerFunction(vehicleType, "getAIRequiresTurnOn", TurnOnVehicle.getAIRequiresTurnOn) |
109 | SpecializationUtil.registerFunction(vehicleType, "getRequiresTurnOn", TurnOnVehicle.getRequiresTurnOn) |
110 | SpecializationUtil.registerFunction(vehicleType, "getAIRequiresTurnOffOnHeadland", TurnOnVehicle.getAIRequiresTurnOffOnHeadland) |
111 | SpecializationUtil.registerFunction(vehicleType, "loadTurnedOnAnimationFromXML", TurnOnVehicle.loadTurnedOnAnimationFromXML) |
112 | SpecializationUtil.registerFunction(vehicleType, "getIsTurnedOnAnimationActive", TurnOnVehicle.getIsTurnedOnAnimationActive) |
113 | SpecializationUtil.registerFunction(vehicleType, "getTurnedOnSpeedFactor", TurnOnVehicle.getTurnedOnSpeedFactor) |
114 | end |
registerOverwrittenFunctions
DescriptionDefinitionregisterOverwrittenFunctions()Code
118 | function TurnOnVehicle.registerOverwrittenFunctions(vehicleType) |
119 | SpecializationUtil.registerOverwrittenFunction(vehicleType, "getUseTurnedOnSchema", TurnOnVehicle.getUseTurnedOnSchema) |
120 | SpecializationUtil.registerOverwrittenFunction(vehicleType, "loadInputAttacherJoint", TurnOnVehicle.loadInputAttacherJoint) |
121 | SpecializationUtil.registerOverwrittenFunction(vehicleType, "loadWorkAreaFromXML", TurnOnVehicle.loadWorkAreaFromXML) |
122 | SpecializationUtil.registerOverwrittenFunction(vehicleType, "getIsWorkAreaActive", TurnOnVehicle.getIsWorkAreaActive) |
123 | SpecializationUtil.registerOverwrittenFunction(vehicleType, "getCanAIImplementContinueWork", TurnOnVehicle.getCanAIImplementContinueWork) |
124 | SpecializationUtil.registerOverwrittenFunction(vehicleType, "getIsOperating", TurnOnVehicle.getIsOperating) |
125 | SpecializationUtil.registerOverwrittenFunction(vehicleType, "getAlarmTriggerIsActive", TurnOnVehicle.getAlarmTriggerIsActive) |
126 | SpecializationUtil.registerOverwrittenFunction(vehicleType, "loadAlarmTrigger", TurnOnVehicle.loadAlarmTrigger) |
127 | SpecializationUtil.registerOverwrittenFunction(vehicleType, "getIsFillUnitActive", TurnOnVehicle.getIsFillUnitActive) |
128 | SpecializationUtil.registerOverwrittenFunction(vehicleType, "loadShovelNode", TurnOnVehicle.loadShovelNode) |
129 | SpecializationUtil.registerOverwrittenFunction(vehicleType, "getShovelNodeIsActive", TurnOnVehicle.getShovelNodeIsActive) |
130 | SpecializationUtil.registerOverwrittenFunction(vehicleType, "getIsSeedChangeAllowed", TurnOnVehicle.getIsSeedChangeAllowed) |
131 | SpecializationUtil.registerOverwrittenFunction(vehicleType, "getCanBeSelected", TurnOnVehicle.getCanBeSelected) |
132 | SpecializationUtil.registerOverwrittenFunction(vehicleType, "getIsPowerTakeOffActive", TurnOnVehicle.getIsPowerTakeOffActive) |
133 | SpecializationUtil.registerOverwrittenFunction(vehicleType, "loadDischargeNode", TurnOnVehicle.loadDischargeNode) |
134 | SpecializationUtil.registerOverwrittenFunction(vehicleType, "getIsDischargeNodeActive", TurnOnVehicle.getIsDischargeNodeActive) |
135 | SpecializationUtil.registerOverwrittenFunction(vehicleType, "loadBunkerSiloCompactorFromXML", TurnOnVehicle.loadBunkerSiloCompactorFromXML) |
136 | SpecializationUtil.registerOverwrittenFunction(vehicleType, "getBunkerSiloCompacterScale", TurnOnVehicle.getBunkerSiloCompacterScale) |
137 | SpecializationUtil.registerOverwrittenFunction(vehicleType, "getIsWorkModeChangeAllowed", TurnOnVehicle.getIsWorkModeChangeAllowed) |
138 | end |
setIsTurnedOn
DescriptionSet is turned on stateDefinition
setIsTurnedOn(boolean isTurnedOn, boolean noEventSend)Arguments
boolean | isTurnedOn | new is is turned on state |
boolean | noEventSend | no event send |
394 | function TurnOnVehicle:setIsTurnedOn(isTurnedOn, noEventSend) |
395 | local spec = self.spec_turnOnVehicle |
396 | |
397 | if isTurnedOn ~= spec.isTurnedOn then |
398 | SetTurnedOnEvent.sendEvent(self, isTurnedOn, noEventSend) |
399 | spec.isTurnedOn = isTurnedOn |
400 | |
401 | if spec.isTurnedOn then |
402 | SpecializationUtil.raiseEvent(self, "onTurnedOn") |
403 | self.rootVehicle:raiseStateChange(Vehicle.STATE_CHANGE_TURN_ON, self) |
404 | else |
405 | SpecializationUtil.raiseEvent(self, "onTurnedOff") |
406 | self.rootVehicle:raiseStateChange(Vehicle.STATE_CHANGE_TURN_OFF, self) |
407 | end |
408 | end |
409 | end |
updateActionEvents
DescriptionDefinitionupdateActionEvents()Code
987 | function TurnOnVehicle.updateActionEvents(self) |
988 | local spec = self.spec_turnOnVehicle |
989 | |
990 | -- update activity of actionEvent |
991 | local actionEvent = spec.actionEvents[spec.toggleTurnOnInputBinding] |
992 | if actionEvent ~= nil then |
993 | local state = self:getCanToggleTurnedOn() |
994 | |
995 | if state then |
996 | local text |
997 | if self:getIsTurnedOn() then |
998 | text = spec.turnOffText |
999 | else |
1000 | text = spec.turnOnText |
1001 | end |
1002 | g_inputBinding:setActionEventText(actionEvent.actionEventId, text) |
1003 | end |
1004 | |
1005 | g_inputBinding:setActionEventActive(actionEvent.actionEventId, state) |
1006 | end |
1007 | end |