update exports.checkStructureAgainstController to use less CPU
-
I was talking with NhanHo inside the chat today and he was hit by bad CPU due to the poor implementation of
exports.checkStructureAgainstController
I just realized that this method should return true anyway if a room is level 8. All buildings should be available once your room level has reached 8.
This way we could avoid the expensive check:
var objects = _.filter(roomObjects, {type: object.type, user: object.user});
<span class="token keyword">if</span><span class="token punctuation">(</span>objects<span class="token punctuation">.</span>length <span class="token operator">></span> C<span class="token punctuation">.</span>CONTROLLER_STRUCTURES<span class="token punctuation">[</span>object<span class="token punctuation">.</span>type<span class="token punctuation">]</span><span class="token punctuation">[</span>roomController<span class="token punctuation">.</span>level<span class="token punctuation">]</span><span class="token punctuation">)</span> <span class="token punctuation">{</span> objects<span class="token punctuation">.</span><span class="token function">sort<span class="token punctuation">(</span></span>exports<span class="token punctuation">.</span><span class="token function">comparatorDistance<span class="token punctuation">(</span></span>roomController<span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span> objects <span class="token operator">=</span> _<span class="token punctuation">.</span><span class="token function">take<span class="token punctuation">(</span></span>objects<span class="token punctuation">,</span> C<span class="token punctuation">.</span>CONTROLLER_STRUCTURES<span class="token punctuation">[</span>object<span class="token punctuation">.</span>type<span class="token punctuation">]</span><span class="token punctuation">[</span>roomController<span class="token punctuation">.</span>level<span class="token punctuation">]</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token keyword">if</span><span class="token punctuation">(</span><span class="token operator">!</span>_<span class="token punctuation">.</span><span class="token function">contains<span class="token punctuation">(</span></span>objects<span class="token punctuation">,</span> object<span class="token punctuation">)</span><span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token keyword">return</span> <span class="token keyword">false</span><span class="token punctuation">;</span> <span class="token punctuation">}</span> <span class="token punctuation">}</span></code></pre>
-
Not really. If it always returns true, then you can place and build any amount of construction sites of any structures. This method is used in many places, it's complicated.