60 | function AnimalLoadingTrigger:load(node, husbandry) |
61 | self.husbandry = husbandry |
62 | self.isDealer = Utils.getNoNil(getUserAttribute(node, "isDealer"), false) |
63 | |
64 | if self.isDealer then |
65 | local animalTypesString = getUserAttribute(node, "animalTypes") |
66 | if animalTypesString ~= nil then |
67 | local animalTypes = StringUtil.splitString(" ", animalTypesString) |
68 | for _, animalTypeStr in pairs(animalTypes) do |
69 | local animalType = g_animalManager:getAnimalsByType(animalTypeStr) |
70 | if animalType ~= nil then |
71 | if self.animalTypes == nil then |
72 | self.animalTypes = {} |
73 | end |
74 | |
75 | table.insert(self.animalTypes, animalType) |
76 | else |
77 | g_logManager:warning("Invalid animal type '%s' for animalLoadingTrigger '%s'!", animalTypeStr, getName(node)) |
78 | end |
79 | end |
80 | end |
81 | end |
82 | |
83 | self.triggerNode = node |
84 | addTrigger(self.triggerNode, "triggerCallback", self) |
85 | |
86 | self.appearsOnPDA = Utils.getNoNil(getUserAttribute(node, "appearsOnPDA"), self.isDealer) |
87 | self.title = g_i18n:getText(Utils.getNoNil(getUserAttribute(node, "title"), "ui_farm"), self.customEnvironment) |
88 | self.isEnabled = not g_isPresentationVersion or g_isPresentationVersionShopEnabled |
89 | |
90 | if self.appearsOnPDA then |
91 | local mapPosition = node |
92 | local mapPositionIndex = getUserAttribute(node, "mapPositionIndex") |
93 | |
94 | if mapPositionIndex ~= nil then |
95 | mapPosition = I3DUtil.indexToObject(node, mapPositionIndex) |
96 | if mapPosition == nil then |
97 | mapPosition = node |
98 | end |
99 | end |
100 | |
101 | local x, _, z = getWorldTranslation(mapPosition) |
102 | |
103 | local fullViewName = Utils.getNoNil(getUserAttribute(node, "stationName"), "animals_dealer") |
104 | if g_i18n:hasText(fullViewName) then |
105 | fullViewName = g_i18n:getText(fullViewName, self.customEnvironment) |
106 | end |
107 | |
108 | self.mapHotspot = MapHotspot:new("livestockDealer", MapHotspot.CATEGORY_DEFAULT) |
109 | self.mapHotspot:setText(fullViewName) |
110 | self.mapHotspot:setBorderedImage(nil, getNormalizedUVs(MapHotspot.UV.ANIMAL_VENDOR)) |
111 | self.mapHotspot:setWorldPosition(x, z) |
112 | |
113 | g_currentMission:addMapHotspot(self.mapHotspot) |
114 | end |
115 | |
116 | return self |
117 | end |
33 | function AnimalLoadingTrigger:new(isServer, isClient) |
34 | local self = Object:new(isServer, isClient, AnimalLoadingTrigger_mt) |
35 | |
36 | self.customEnvironment = g_currentMission.loadingMapModName |
37 | self.isDealer = false |
38 | self.triggerNode = nil |
39 | self.appearsOnPDA = true |
40 | self.title = g_i18n:getText("ui_farm") |
41 | |
42 | self.animals = nil |
43 | |
44 | self.activateText = g_i18n:getText("animals_openAnimalScreen", self.customEnvironment) |
45 | self.isActivatableAdded = false |
46 | self.isPlayerInRange = false |
47 | |
48 | self.isEnabled = false |
49 | |
50 | self.loadingVehicle = nil |
51 | self.activatedTarget = nil |
52 | self.objectActivated = false |
53 | |
54 | return self |
55 | end |
225 | function AnimalLoadingTrigger:onActivateObject() |
226 | g_currentMission:removeActivatableObject(self) |
227 | self.isActivatableAdded = false |
228 | |
229 | self.objectActivated = true |
230 | self.activatedTarget = self.loadingVehicle |
231 | |
232 | local husbandry = self.husbandry |
233 | |
234 | if self.isDealer and self.loadingVehicle == nil then |
235 | local husbandries = g_currentMission:getHusbandries() |
236 | if #husbandries > 1 then |
237 | g_gui:showAnimalDialog({title=g_i18n:getText("category_animalpens"), husbandries=husbandries, callback=self.onSelectedHusbandry, target=self}) |
238 | return |
239 | elseif #husbandries == 1 then |
240 | husbandry = husbandries[1] |
241 | end |
242 | end |
243 | |
244 | self:showAnimalScreen(husbandry) |
245 | end |
142 | function AnimalLoadingTrigger:triggerCallback(triggerId, otherId, onEnter, onLeave, onStay) |
143 | if self.isEnabled and (onEnter or onLeave) then |
144 | local vehicle = g_currentMission.nodeToObject[otherId] |
145 | if vehicle ~= nil and vehicle.getSupportsAnimalType ~= nil then |
146 | if onEnter then |
147 | self:setLoadingTrailer(vehicle) |
148 | elseif onLeave then |
149 | if vehicle == self.loadingVehicle then |
150 | self:setLoadingTrailer(nil) |
151 | end |
152 | if vehicle == self.activatedTarget then |
153 | -- close dialog! |
154 | g_animalScreen:onVehicleLeftTrigger() |
155 | self.objectActivated = false |
156 | end |
157 | end |
158 | elseif g_currentMission.player ~= nil and otherId == g_currentMission.player.rootNode then |
159 | if onEnter then |
160 | self.isPlayerInRange = true |
161 | else |
162 | self.isPlayerInRange = false |
163 | end |
164 | self:updateActivatableObject() |
165 | end |
166 | end |
167 | end |
171 | function AnimalLoadingTrigger:updateActivatableObject() |
172 | if self.loadingVehicle ~= nil or self.isPlayerInRange then |
173 | if not self.isActivatableAdded then |
174 | self.isActivatableAdded = true |
175 | g_currentMission:addActivatableObject(self) |
176 | end |
177 | else |
178 | if self.isActivatableAdded and self.loadingVehicle == nil and not self.isPlayerInRange then |
179 | g_currentMission:removeActivatableObject(self) |
180 | self.isActivatableAdded = false |
181 | self.objectActivated = false |
182 | end |
183 | end |
184 | end |