update exports.checkStructureAgainstController to use less CPU


  • Culture

    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">&gt;</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>
    

     

     

     

     


  • Dev Team

    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.