@@ -102,6 +102,8 @@ function OnEntityRemoved(event)
102
102
end
103
103
104
104
105
+ -- grouped stepping by Optera
106
+ -- 91307.27ms on 100k ticks
105
107
function OnTick (event )
106
108
global .tickCount = global .tickCount or 1
107
109
global .SensorIndex = global .SensorIndex or 1
@@ -135,17 +137,17 @@ function OnTick(event)
135
137
end
136
138
end
137
139
140
+ -- stepping from tick modulo with stride by eradicator
141
+ -- 93048.58ms on 100k ticks: 1.9% slower than grouped stepping
138
142
-- function OnTick(event)
139
- -- local tick = game.tick
140
- -- for i=1, #global.ItemSensors do
141
- -- local itemSensor = global.ItemSensors[i]
142
- -- if not itemSensor.SkipEntityScanning and (i + tick) % ScanInterval == 0 then
143
- -- SetConnectedEntity(itemSensor)
144
- -- end
145
- -- if (i + tick) % UpdateInterval == 0 then
146
- -- UpdateSensor(itemSensor)
147
- -- end
148
- -- end
143
+ -- local offset = event.tick % UpdateInterval
144
+ -- for i=#global.ItemSensors - offset, 1, -1 * UpdateInterval do
145
+ -- local itemSensor = global.ItemSensors[i]
146
+ -- if not itemSensor.SkipEntityScanning and (event.tick - itemSensor.LastScanned) >= ScanInterval then
147
+ -- SetConnectedEntity(itemSensor)
148
+ -- end
149
+ -- UpdateSensor(itemSensor)
150
+ -- end
149
151
-- end
150
152
151
153
---- LOGIC ----
@@ -204,14 +206,22 @@ function SetConnectedEntity(itemSensor)
204
206
if connectedEntities then
205
207
for i = 1 , # connectedEntities do
206
208
local entity = connectedEntities [i ]
207
- if entity .valid and SupportedTypes [entity .type ] ~= nil and itemSensor .ConnectedEntity ~= entity then
209
+ if entity .valid and SupportedTypes [entity .type ] ~= nil then
210
+ -- log("[IS] Sensor "..itemSensor.Sensor.unit_number.." found entity "..tostring(entity.type))
208
211
itemSensor .ConnectedEntity = entity
209
212
itemSensor .SkipEntityScanning = SupportedTypes [entity .type ]
210
- SetInventories (itemSensor , entity )
213
+ if itemSensor .ConnectedEntity ~= entity then
214
+ SetInventories (itemSensor , entity )
215
+ end
211
216
return
212
217
end
213
218
end
214
- end
219
+ end
220
+ -- if no entity was found remove stored data
221
+ -- log("[IS] Sensor "..itemSensor.Sensor.unit_number.." no entity found")
222
+ itemSensor .ConnectedEntity = nil
223
+ itemSensor .SkipEntityScanning = false
224
+ itemSensor .Inventory = {}
215
225
end
216
226
217
227
function UpdateSensor (itemSensor )
0 commit comments