Copyright (c) 2008-2015 GIANTS Software GmbH, Confidential, All Rights Reserved.
This document is to be published solely by ls-mods.de
1 | -- FieldDefinition class |
2 | -- |
3 | -- Copyright (C) GIANTS Software GmbH, Confidential, All Rights Reserved. |
4 | |
5 | FieldDefinition = {} |
6 | |
7 | local FieldDefinition_mt = Class(FieldDefinition); |
8 | |
9 | function FieldDefinition:onCreate(id) |
10 | local fieldDefinition = FieldDefinition:new(id); |
11 | g_currentMission:addNonUpdateable(fieldDefinition); |
12 | g_currentMission.fieldDefinitionBase = fieldDefinition; |
13 | -- print("Created FieldDefinition, id: ", id); |
14 | end; |
15 | |
16 | function FieldDefinition:new(name) |
17 | local self = {}; |
18 | setmetatable(self, FieldDefinition_mt); |
19 | |
20 | self.isInit = false; |
21 | self.numberOfFields = getNumOfChildren(name); |
22 | self.fieldDefs = {}; |
23 | self.fieldDefsByFieldNumber = {}; |
24 | self.unownedFields = {}; |
25 | |
26 | for i = 1, self.numberOfFields do |
27 | local currentFieldDef = getChildAt(name, i - 1); |
28 | local fieldDef = {}; |
29 | fieldDef.rootNode = currentFieldDef; |
30 | fieldDef.fieldNumber = i; |
31 | fieldDef.fieldName = Utils.getNoNil(getUserAttribute(currentFieldDef, "fieldName"), ""); |
32 | fieldDef.fieldArea = Utils.getNoNil(getUserAttribute(currentFieldDef, "fieldArea"), 2.5); |
33 | fieldDef.fieldPrice = Utils.getNoNil(getUserAttribute(currentFieldDef, "fieldPrice"), 50000); |
34 | fieldDef.fieldStartBid = Utils.getNoNil(getUserAttribute(currentFieldDef, "fieldStartBid"), fieldDef.fieldPrice / 2); |
35 | fieldDef.fieldBidStep = Utils.getNoNil(getUserAttribute(currentFieldDef, "fieldBidStep"), 1000); |
36 | fieldDef.fieldCurrentBid = fieldDef.fieldStartBid; |
37 | fieldDef.fieldHighestBidder = "nobody"; |
38 | -- fieldDef.fieldAuctionActive = false; |
39 | fieldDef.fieldBuyTrigger = getChildAt(currentFieldDef, 0); |
40 | fieldDef.fieldBuySymbol = getChildAt(fieldDef.fieldBuyTrigger, 0); |
41 | fieldDef.fieldDimensions = getChildAt(currentFieldDef, 1); -- this transformgroup's children define the field's location and dimensions |
42 | fieldDef.fieldMapIndicator = getChildAt(currentFieldDef, 2); -- this is where the field number appears on the PDA |
43 | |
44 | -- add field number to PDA map |
45 | local x, _, z = getWorldTranslation(fieldDef.fieldMapIndicator); |
46 | fieldDef.fieldMapHotspot = g_currentMission.ingameMap:createMapHotspot(tostring(fieldDef.fieldNumber), "dataS2/menu/blank.png", x, z, 0, 0, false, false, true, 0); |
47 | |
48 | -- field name overrides field number as the hotspot's displayed name |
49 | if fieldDef.fieldName ~= "" then |
50 | -- if field name is not in i18n, just take the name given via user attribute |
51 | local fieldName = fieldDef.fieldName; |
52 | local i18n = g_i18n; |
53 | if g_currentMission.missionInfo.customEnvironment ~= nil then |
54 | i18n = _G[g_currentMission.missionInfo.customEnvironment].g_i18n; |
55 | end |
56 | if i18n:hasText(fieldName) then |
57 | fieldName = i18n:getText(fieldName) |
58 | end; |
59 | fieldDef.fieldMapHotspot.name = fieldName; |
60 | end; |
61 | |
62 | -- commented out: displaying field areas makes map too crowded |
63 | -- fieldDef.fieldMapHotspot.fullViewName = string.format("%d\n(%1.2f " .. g_i18n:getText("area_unit_short") .. ")", fieldDef.fieldNumber, fieldDef.fieldArea); |
64 | |
65 | table.insert(self.fieldDefs, fieldDef); |
66 | self.fieldDefsByFieldNumber[i] = fieldDef; -- for convenience |
67 | |
68 | fieldDef.ownedByPlayer = nil; |
69 | local isOwned = g_currentMission:getIsServer() and Utils.getNoNil(getUserAttribute(currentFieldDef, "ownedByPlayer"), false); |
70 | self:setFieldOwnedByPlayer(fieldDef, isOwned); |
71 | end; |
72 | |
73 | self.currentField = nil; -- this points to the field def whose trigger the player is currently standing in |
74 | |
75 | self.activateText = g_i18n:getText("PurchaseField"); |
76 | |
77 | self.isEnabled = true; |
78 | self.objectActivated = false; |
79 | |
80 | return self; |
81 | end; |
82 | |
83 | function FieldDefinition:delete() |
84 | if g_currentMission:getIsClient() then |
85 | for _, fieldDef in pairs(self.fieldDefs) do |
86 | removeTrigger(fieldDef.fieldBuyTrigger); |
87 | end; |
88 | end; |
89 | g_currentMission:removeActivatableObject(self); |
90 | end; |
91 | |
92 | function FieldDefinition:init() |
93 | self.isInit = true; |
94 | for _, fieldDef in pairs(self.fieldDefs) do |
95 | if not fieldDef.ownedByPlayer then |
96 | self:updateFieldOwnedData(fieldDef); |
97 | end |
98 | end |
99 | end |
100 | |
101 | function FieldDefinition:setFieldOwnedByPlayer(fieldDef, isOwned) |
102 | if fieldDef.ownedByPlayer ~= isOwned then |
103 | fieldDef.ownedByPlayer = isOwned; |
104 | |
105 | if isOwned then |
106 | for i,unownedField in ipairs(self.unownedFields) do |
107 | if unownedField == fieldDef then |
108 | table.remove(self.unownedFields, i); |
109 | break; |
110 | end |
111 | end |
112 | |
113 | setVisibility(fieldDef.fieldBuySymbol, false); |
114 | removeTrigger(fieldDef.fieldBuyTrigger); |
115 | |
116 | if self.objectActivated and self.currentField == fieldDef then |
117 | self.objectActivated = false; |
118 | g_currentMission:removeActivatableObject(self); |
119 | end |
120 | |
121 | fieldDef.fieldMapHotspot.baseColor = {0.25, 1, 0.25, 1}; |
122 | |
123 | -- throw player out of field dialog if he's currently got it open |
124 | if g_gui.currentGui ~= nil and g_gui.currentGuiName == "FieldDialog" and g_gui.currentGui.target.currentField == fieldDef then |
125 | g_gui.currentGui.target:onBackClick(); |
126 | end; |
127 | else |
128 | setVisibility(fieldDef.fieldBuySymbol, true); |
129 | addTrigger(fieldDef.fieldBuyTrigger, "triggerCallback", self); |
130 | table.insert(self.unownedFields, fieldDef); |
131 | fieldDef.fieldMapHotspot.baseColor = {1, 1, 1, 1}; |
132 | end |
133 | |
134 | self:updateFieldOwnedData(fieldDef); |
135 | end |
136 | end |
137 | |
138 | function FieldDefinition:updateFieldOwnedData(fieldDef) |
139 | if self.isInit then |
140 | local numDimensions = getNumOfChildren(fieldDef.fieldDimensions); |
141 | for i=1,numDimensions do |
142 | local dimWidth = getChildAt(fieldDef.fieldDimensions, i-1); |
143 | local dimStart = getChildAt(dimWidth, 0); |
144 | local dimHeight = getChildAt(dimWidth, 1); |
145 | |
146 | local x,_,z = getWorldTranslation(dimStart); |
147 | local x1,_,z1 = getWorldTranslation(dimWidth); |
148 | local x2,_,z2 = getWorldTranslation(dimHeight); |
149 | g_currentMission:setIsFieldOwnedAtWorldParallelogram(x,z,x1,z1,x2,z2, fieldDef.ownedByPlayer); |
150 | end |
151 | end |
152 | end |
153 | |
154 | function FieldDefinition:getIsActivatable() |
155 | return self.isEnabled and g_currentMission.controlPlayer; |
156 | end; |
157 | |
158 | function FieldDefinition:drawActivate() |
159 | return; |
160 | end; |
161 | |
162 | function FieldDefinition:onActivateObject() |
163 | |
164 | if g_isDemo then |
165 | local infoDialog = g_gui:showGui("InfoDialog"); |
166 | infoDialog.target:setText(g_i18n:getText("NotPossibleInDemo")); |
167 | infoDialog.target:setCallbacks(nil, nil, true); |
168 | else |
169 | if self.currentField ~= nil then |
170 | g_fieldDialog:setReturnScreen(""); |
171 | g_gui:showGui("FieldDialog"); |
172 | else |
173 | print("ERROR: current field def is nil"); |
174 | end; |
175 | end; |
176 | self.objectActivated = true; |
177 | g_currentMission:addActivatableObject(self); |
178 | end; |
179 | |
180 | function FieldDefinition:triggerCallback(triggerId, otherId, onEnter, onLeave, onStay) |
181 | if self.isEnabled then |
182 | if g_currentMission.player ~= nil and otherId == g_currentMission.player.rootNode then |
183 | if onEnter then |
184 | if not self.objectActivated then |
185 | for _, fieldDef in ipairs(self.fieldDefs) do |
186 | if fieldDef.fieldBuyTrigger == triggerId then |
187 | self.currentField = fieldDef; |
188 | |
189 | g_currentMission:addActivatableObject(self); |
190 | self.objectActivated = true; |
191 | break; |
192 | end; |
193 | end; |
194 | end |
195 | elseif onLeave then |
196 | if self.objectActivated then |
197 | g_currentMission:removeActivatableObject(self); |
198 | self.objectActivated = false; |
199 | self.currentField = nil; |
200 | end |
201 | end; |
202 | end; |
203 | end; |
204 | end;
|
Copyright (c) 2008-2015 GIANTS Software GmbH, Confidential, All Rights Reserved.
This document is to be published solely by ls-mods.de