66-- v2.0.0.0 - 2018-12-03 - FS19
77-- v2.1.0.0 - 2019-04-01 - Support all enterable vehicles, create modSettings folder
88-- v3.0.0.0 - 2021-11-19 - FS22
9+ -- v3.1.0.0 - 2022-04-23 - Add possibiltiy to unpark all, fix issue with registration in loader
910-- @Descripion: Allows temporary disabling of the tab function
1011-- @web: https://grisu118.ch or https://vertexdezign.net
1112-- Copyright (C) Grisu118, All Rights Reserved.
1213
14+ --- @class ParkVehicle
1315ParkVehicle = {}
1416ParkVehicle .inputName = " parkVehicle"
15- ParkVehicle .modDir = g_currentModDirectory
17+ ParkVehicle .modDir = g_parkVehicleSystem . modDir
1618
1719function ParkVehicle .prerequisitesPresent (specializations )
1820 return SpecializationUtil .hasSpecialization (Enterable , specializations )
1921end
2022
23+ function ParkVehicle .registerFunctions (vehicleType )
24+ SpecializationUtil .registerFunction (vehicleType , " getParkVehicleState" , ParkVehicle .getParkVehicleState )
25+ SpecializationUtil .registerFunction (vehicleType , " setParkVehicleState" , ParkVehicle .setParkVehicleState )
26+ end
27+
2128function ParkVehicle .registerEventListeners (vehicleType )
2229 SpecializationUtil .registerEventListener (vehicleType , " onLoad" , ParkVehicle )
2330 SpecializationUtil .registerEventListener (vehicleType , " onUpdate" , ParkVehicle )
@@ -27,6 +34,7 @@ function ParkVehicle.registerEventListeners(vehicleType)
2734 SpecializationUtil .registerEventListener (vehicleType , " onWriteUpdateStream" , ParkVehicle )
2835 SpecializationUtil .registerEventListener (vehicleType , " onReadUpdateStream" , ParkVehicle )
2936 SpecializationUtil .registerEventListener (vehicleType , " onRegisterActionEvents" , ParkVehicle )
37+ SpecializationUtil .registerEventListener (vehicleType , " onDelete" , ParkVehicle )
3038end
3139
3240function ParkVehicle :onLoad (savegame )
@@ -55,6 +63,7 @@ function ParkVehicle:onLoad(savegame)
5563 end
5664
5765 spec .inputPressed = false
66+ spec .registrationKey = nil
5867 spec .actionEvents = {}
5968 spec .icon = createImageOverlay (ParkVehicle .modDir .. " icon.png" )
6069 spec .overlay = createImageOverlay (ParkVehicle .modDir .. " overlay.png" )
@@ -66,7 +75,12 @@ function ParkVehicle:onLoad(savegame)
6675 if savegame ~= nil then
6776 local i = 0
6877 while true do
69- local key = string.format (" %s.ParkVehicle.player(%d)" , savegame .key , i )
78+
79+ local legacykey = string.format (" %s.ParkVehicle.player(%d)" , savegame .key , i ) -- TODO Remove with next release
80+ local key = string.format (" %s.%s.ParkVehicle.player(%d)" , savegame .key , g_parkVehicleSystem .modName , i )
81+ if not hasXMLProperty (savegame .xmlFile .handle , key ) then
82+ key = legacykey
83+ end
7084 if not hasXMLProperty (savegame .xmlFile .handle , key ) then
7185 break
7286 end
@@ -85,21 +99,34 @@ function ParkVehicle:onLoad(savegame)
8599 end
86100
87101 self .spec_enterable :setIsTabbable (not spec .state [spec .uniqueUserId ])
102+ spec .registrationKey = g_parkVehicleSystem :registerInstance (self )
88103end
89104
90105function ParkVehicle :onUpdate (dt , isActiveForInput , isSelected )
91106 if self .isClient then
92107 local spec = self .spec_parkvehicle
93108 if spec .inputPressed then
94- local newValue = not spec .state [spec .uniqueUserId ]
95- self .spec_enterable :setIsTabbable (not newValue )
96- spec .state [spec .uniqueUserId ] = newValue
97- self :raiseDirtyFlags (spec .dirtyFlag )
109+ local newValue = not self :getParkVehicleState ()
110+ self :setParkVehicleState (newValue )
98111 spec .inputPressed = false
99112 end
100113 end
101114end
102115
116+ --- @param newValue boolean
117+ function ParkVehicle :setParkVehicleState (newValue )
118+ local spec = self .spec_parkvehicle
119+ self .spec_enterable :setIsTabbable (not newValue )
120+ spec .state [spec .uniqueUserId ] = newValue
121+ self :raiseDirtyFlags (spec .dirtyFlag )
122+ end
123+
124+ --- @return boolean
125+ function ParkVehicle :getParkVehicleState ()
126+ local spec = self .spec_parkvehicle
127+ return spec .state [spec .uniqueUserId ]
128+ end
129+
103130function ParkVehicle :onDraw ()
104131 if self .isClient and self :getIsActive () then
105132 local spec = self .spec_parkvehicle
@@ -116,6 +143,12 @@ function ParkVehicle:onDraw()
116143 end
117144end
118145
146+ function ParkVehicle :onDelete ()
147+ local spec = self .spec_parkvehicle
148+ print (" onDelete" )
149+ g_parkVehicleSystem :unregisterInstance (spec .registrationKey )
150+ end
151+
119152-- Called on server side on join
120153-- @param integer streamId streamId
121154-- @param integer connection connection
@@ -234,5 +267,6 @@ function ParkVehicle.randomString(length)
234267 math.randomseed (getDate (" %d%m%y%H%M%S" ))
235268 return randomString (length - 1 ) .. charset [math.random (1 , # charset )]
236269 end
270+
237271 return randomString (length )
238272end
0 commit comments