Page MenuHomeWildfire Games

Adds snapping to edges for buildings
Needs ReviewPublic

Authored by vladislavbelov on Jul 15 2019, 12:20 AM.
Tags
None
Tokens
"Orange Medal" token, awarded by Krinkle."Party Time" token, awarded by asterix."Party Time" token, awarded by nani."Orange Medal" token, awarded by elexis.

Details

Reviewers
wraitii
Group Reviewers
Restricted Owners Package(Owns No Changed Paths)
Summary

The patch allows place buildings faster and more perfect aligned. Also it might help to find nearest placeable position in some cases (for ex on the GIF you might see when a preview is inside CC the snapping tries to place it outside without collision).

How it works (GIF, ~10MB):

Test Plan
  1. Apply the patch
  2. Run the game
  3. Make sure that snapping works with Shift key pressed

Diff Detail

Unit TestsFailed

TimeTest
0 msJenkins > TestComponentScripts::test_scripts
Test failed: L"Running script simulation/components/tests/test_GuiInterface.js" Assertion failed: scriptInterface.LoadScript(pathname, content)
0 msJenkins > cxxtest-debug-gcc6.xml::[failed-to-read]
Failed to read test report file /zpool0/trunk/cxxtest-debug-gcc6.xml org.dom4j.DocumentException: Error on line 1 of document : Content is not allowed in prolog. Nested exception: Content is not allowed in prolog. at org.dom4j.io.SAXReader.read(SAXReader.java:482)
0 msJenkins > TestAllocators::test_da
0 msJenkins > TestBase32::test_base32
0 msJenkins > TestBase32::test_base32_lengths
View Full Test Results (2 Failed · 319 Passed)

Event Timeline

There are a very large number of changes, so older changes are hidden. Show Older Changes

Very nice feature! From testing, feels perfect!

(12:37:10 AM) Vladislav: Also a question: should it be on the JS side or on the C++ side?

The rationale is to have things in C++ that are ncessary for performance, and the rest in JS for convenience.
One can do some worst case measurements to decide.

Either way I suggest to minimize JS object creation, it can add up when done inside of loops. If you read the words "new Vector2D" it should be considered something similar to an error, because in most cases one can get away with modiying an iterator,.
(Perhaps it's possible here as well to only operate on found edges, rather than discovering all edges, then sorting them, I didn't check, just brainstorm)

binaries/data/mods/public/gui/session/input.js
1082

let where possible

binaries/data/mods/public/simulation/components/GuiInterface.js
1669–1676

This function is already way too large, move it into a separate function. (Perhaps it would be better in a different file as well, since GUIInterface is getting cramped a bit. I understand there is already related code here.)

1676

0.0 -> 0
new Vector2D(data.x, data.z) -> Vector2D.from3D
data.angle || 0

1681
1694

clone and new Vector2D call can be at least moved out of the loop to avoid re-creation of objects.
let iterator = new Vector2D(); outside of the loop, and iterator.setTo(someVector) inside the loop.

1773

(perhaps an early return once this hunk is in a function, or moving this into a new function as well)

binaries/data/mods/public/simulation/helpers/Placement.js
37 ↗(On Diff #8905)

(In theory this could be cached until PositionChanged, which should only happen on destruction or for mods, didn't check if reasonable)

elexis added inline comments.Jul 15 2019, 12:57 AM
binaries/data/config/default.cfg
316

Intro.txt

binaries/data/mods/public/gui/session/input.js
1089

(there is also a method for screen slices, perhaps the area can be reduced, maybe not, it doesnt account for the footprint of buildings as you mentioned on irc)

binaries/data/mods/public/simulation/helpers/Placement.js
1 ↗(On Diff #8905)

(some overlap with getObstructionSize from library.js and EntitiesObstructionPlacer.js, but too little to demand deduplication)

nani awarded a token.Jul 15 2019, 12:59 AM
Krinkle added inline comments.
binaries/data/mods/public/simulation/components/GuiInterface.js
1681

In either case, would recommend going for push() instead of concat() so as to not create and discard many intermediate array objects.

I assume the reason one would pick concat() here is because one needs to push several at once. There's ways to do that:

ES5 JavaScript
allEdges.push.apply(allEdges, GetObstructionEdges())
ES2015 JavaScript (ES6)
allEdges.push(...GetObstructionEdges())
Krinkle added inline comments.Jul 15 2019, 1:07 AM
binaries/data/mods/public/simulation/components/GuiInterface.js
1728

Unless type coercion is expected/desired, should probably use !== instead.

Why put this behind a hotkey? This seems to me like desirable default placement behavior.

wraitii added a subscriber: wraitii.EditedJul 15 2019, 8:42 AM

Feature looks pretty good from the gif and making it optional is good imo (I like leaving "natural" placement as default behaviour because the engine can handle it and it's beautiful)

Have to say from looking at the code that this feels like a c++ feature - there's not only the matter of speed vs convenience but also correctness and modulability - I'm not sure mods would ever want to change this (perhaps some constants?), and correctness would be easier to assert in a typed system.
Given that it's driven by user-input, I guess lag is less of a concern, but what if you have hundreds of player entities on screen? Definitely needs to be profiled with profiler2 calls imo (I'll do it unless someone else does it first)

This seems to me like desirable default placement behavior.

Being able to opt out with a hotkey?

On performance, there are some low hanging fruit optimizations, secondly some functions or loops may be particularly slower than the rest (so perhaps it could be half cpp half js), thirdly one can measure the performance with Engine.GetMicroseconds()` and a loop over some functions to get accurate numbers (ingame or offgrid in a JS testfile). In case it turns out that it should be in C++, it's quicker to implement if one has the blueprint in JS.

nani added a subscriber: nani.Jul 15 2019, 1:45 PM
nani added inline comments.
binaries/data/mods/public/gui/session/input.js
1089

IMO Engine.PickPlayerEntitiesOnScreen(g_ViewedPlayer) will be the decisive factor to make this feature fast.
Given the snapping placing constrains, an object should (at worse case) have 15~20 other buildings near it that affect this tool behavior.

As elexis said, something like screen slices would help.
I think a screen slice is not what it really needs but instead a radius nearness (taking into account the footprint) from the current mouse position in global space coordinates would be helpful.

This would make the others possible optimizations marginal given that the possible snapping candidates should be minimal.

Nescio added a subscriber: Nescio.Jul 15 2019, 8:10 PM
Nescio added inline comments.
binaries/data/config/default.cfg
316

Shift is already used for many things (see above), so it might be a good idea to select a different key.
How about CapsLock?

There's some oddities to the snapping

.

However after testing it feels really natural and the fact that you still free-place when not near buildings is very nice - I would agree with Josh above that this might be made the default case and a hotkey to opt out, rather than the current situation.

I would agree with committing this in JS anyways - just saying it might be worth rewriting in C++ at some point anyways. Also agreed that picking entities to compare to will be key.

Nescio removed a subscriber: Nescio.Jul 15 2019, 8:23 PM

Thank you for working on this @vladislavbelov .

Why put this behind a hotkey?

Because it's new behaviour and it has own restrictions.

This seems to me like desirable default placement behavior.

However after testing it feels really natural and the fact that you still free-place when not near buildings is very nice - I would agree with Josh above that this might be made the default case and a hotkey to opt out, rather than the current situation.
I would agree with committing this in JS anyways - just saying it might be worth rewriting in C++ at some point anyways. Also agreed that picking entities to compare to will be key.

I'd prefer to add it as option and test on a meaningful number of matches, including community players.

As far as I can see it has a bit different idea: remove free placement completely.

binaries/data/config/default.cfg
316

Number of actions is much more than number of available handy keys. So that situation is expected. All these keys are context-sensitive. CapsLock changes a context, it means you won't be able to start typing immediately, you need to remember/see and disable it.

binaries/data/mods/public/gui/session/input.js
1089

Currently we don't have a correct implementation of such methods, we don't account obstructions. I may suggest to add it as optional and test it within a bunch of matches.

binaries/data/mods/public/simulation/components/GuiInterface.js
1728

Why? We compare two bools.

elexis added inline comments.Jul 17 2019, 5:53 PM
binaries/data/mods/public/gui/session/input.js
1089

Should this only pick the players entities or also the ones of allies?
I wonder about the worst case performance - what about skipping units (non-static obstructions)? Order of magnitude of units to consider would be 1000+ units in a 4v4 fight, but the function returns all of them, even copied to the GUIInterface. If done correctly, it will contribute to the true 0ad experience.

Some profiling (on Kushites sandbox) showed GetObstructionEdges to be the slowest part of the function, taking around 60% of the runtime.
Maybe move that to c++ ?

Stan added a subscriber: Stan.Sep 23 2019, 12:42 PM
Stan added inline comments.
binaries/data/mods/public/simulation/helpers/Placement.js
1 ↗(On Diff #8905)

Shouldn't that be in foundation or something ?

vladislavbelov added inline comments.Sep 23 2019, 1:15 PM
binaries/data/mods/public/simulation/helpers/Placement.js
1 ↗(On Diff #8905)

We don't use any foundation in the code. We work only with the obstruction component.

Stan added inline comments.Oct 9 2019, 4:05 PM
binaries/data/mods/public/gui/session/input.js
725

let

1051

let maybe reduce the duplication wile at it

Added C++ function to get edges.

Successful build - Chance fights ever on the side of the prudent.

Linter detected issues:
Executing section Source...

source/simulation2/components/ICmpObstruction.h
|  29| class·ICmpObstruction·:·public·IComponent
|    | [MAJOR] CPPCheckBear (syntaxError):
|    | Code 'classICmpObstruction:' is invalid C code. Use --std or --language to configure the language.

source/simulation2/scripting/JSInterface_Simulation.h
|  24| namespace·JSI_Simulation
|    | [MAJOR] CPPCheckBear (syntaxError):
|    | Code 'namespaceJSI_Simulation{' is invalid C code. Use --std or --language to configure the language.

source/simulation2/components/tests/test_ObstructionManager.h
|  23| class·MockObstruction·:·public·ICmpObstruction
|    | [MAJOR] CPPCheckBear (syntaxError):
|    | Code 'classMockObstruction:' is invalid C code. Use --std or --language to configure the language.
Executing section JS...
|    | [NORMAL] ESLintBear (spaced-comment):
|    | Expected space or tab after '//' in comment.
|----|    | /zpool0/trunk/binaries/data/mods/public/globalscripts/vector.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/globalscripts/vector.js
|   1|    |-/////////////////////////////////////////////////////////////////////
|    |   1|+// ///////////////////////////////////////////////////////////////////
|   2|   2| //	Vector2D
|   3|   3| //
|   4|   4| //	Class for representing and manipulating 2D vectors
|    | [NORMAL] ESLintBear (spaced-comment):
|    | Expected space or tab after '//' in comment.
|----|    | /zpool0/trunk/binaries/data/mods/public/globalscripts/vector.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/globalscripts/vector.js
|   3|   3| //
|   4|   4| //	Class for representing and manipulating 2D vectors
|   5|   5| //
|   6|    |-/////////////////////////////////////////////////////////////////////
|    |   6|+// ///////////////////////////////////////////////////////////////////
|   7|   7| 
|   8|   8| // TODO: Type errors if v not instanceof Vector classes
|   9|   9| // TODO: Possibly implement in C++
|    | [NORMAL] ESLintBear (spaced-comment):
|    | Expected space or tab after '//' in comment.
|----|    | /zpool0/trunk/binaries/data/mods/public/globalscripts/vector.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/globalscripts/vector.js
| 245| 245| 	return v1.x * v2.x + v1.y * v2.y;
| 246| 246| };
| 247| 247| 
| 248|    |-/////////////////////////////////////////////////////////////////////
|    | 248|+// ///////////////////////////////////////////////////////////////////
| 249| 249| //	Vector3D
| 250| 250| //
| 251| 251| //	Class for representing and manipulating 3D vectors
|    | [NORMAL] ESLintBear (spaced-comment):
|    | Expected space or tab after '//' in comment.
|----|    | /zpool0/trunk/binaries/data/mods/public/globalscripts/vector.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/globalscripts/vector.js
| 250| 250| //
| 251| 251| //	Class for representing and manipulating 3D vectors
| 252| 252| //
| 253|    |-/////////////////////////////////////////////////////////////////////
|    | 253|+// ///////////////////////////////////////////////////////////////////
| 254| 254| 
| 255| 255| function Vector3D(x = 0, y = 0, z = 0)
| 256| 256| {
|    | [NORMAL] ESLintBear (space-unary-ops):
|    | Unary word operator 'typeof' must be followed by whitespace.
|----|    | /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
| 329| 329| 	}
| 330| 330| 
| 331| 331| 	var wallPlacementInfo = updateBuildingPlacementPreview(); // entities making up the wall (wall segments, towers, ...)
| 332|    |-	if (!(wallPlacementInfo === false || typeof(wallPlacementInfo) === "object"))
|    | 332|+	if (!(wallPlacementInfo === false || typeof (wallPlacementInfo) === "object"))
| 333| 333| 	{
| 334| 334| 		error("Invalid updateBuildingPlacementPreview return value: " + uneval(wallPlacementInfo));
| 335| 335| 		return false;
|    | [NORMAL] ESLintBear (operator-linebreak):
|    | '&&' should be placed at the end of the line.
|----|    | /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
| 479| 479| 	mouseIsOverObject = (hoveredObject != null);
| 480| 480| 
| 481| 481| 	// Close the menu when interacting with the game world
| 482|    |-	if (!mouseIsOverObject && (ev.type =="mousebuttonup" || ev.type == "mousebuttondown")
| 483|    |-		&& (ev.button == SDL_BUTTON_LEFT || ev.button == SDL_BUTTON_RIGHT))
|    | 482|+	if (!mouseIsOverObject && (ev.type =="mousebuttonup" || ev.type == "mousebuttondown") &&
|    | 483|+		(ev.button == SDL_BUTTON_LEFT || ev.button == SDL_BUTTON_RIGHT))
| 484| 484| 		g_Menu.close();
| 485| 485| 
| 486| 486| 	// State-machine processing:
|    | [NORMAL] ESLintBear (indent):
|    | Expected indentation of 2 tabs but found 3.
|----|    | /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
| 640| 640| 		// user to continue building walls.
| 641| 641| 		switch (ev.type)
| 642| 642| 		{
| 643|    |-			case "mousemotion":
|    | 643|+		case "mousemotion":
| 644| 644| 				placementSupport.wallEndPosition = Engine.GetTerrainAtScreenPoint(ev.x, ev.y);
| 645| 645| 
| 646| 646| 				// Update the building placement preview, and by extension, the list of snapping candidate entities for both (!)
|    | [NORMAL] ESLintBear (indent):
|    | Expected indentation of 3 tabs but found 4.
|----|    | /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
| 641| 641| 		switch (ev.type)
| 642| 642| 		{
| 643| 643| 			case "mousemotion":
| 644|    |-				placementSupport.wallEndPosition = Engine.GetTerrainAtScreenPoint(ev.x, ev.y);
|    | 644|+			placementSupport.wallEndPosition = Engine.GetTerrainAtScreenPoint(ev.x, ev.y);
| 645| 645| 
| 646| 646| 				// Update the building placement preview, and by extension, the list of snapping candidate entities for both (!)
| 647| 647| 				// the ending point and the starting point to snap to.
|    | [NORMAL] ESLintBear (indent):
|    | Expected indentation of 3 tabs but found 4.
|----|    | /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
| 643| 643| 			case "mousemotion":
| 644| 644| 				placementSupport.wallEndPosition = Engine.GetTerrainAtScreenPoint(ev.x, ev.y);
| 645| 645| 
| 646|    |-				// Update the building placement preview, and by extension, the list of snapping candidate entities for both (!)
|    | 646|+			// Update the building placement preview, and by extension, the list of snapping candidate entities for both (!)
| 647| 647| 				// the ending point and the starting point to snap to.
| 648| 648| 				//
| 649| 649| 				// TODO: Note that here, we need to fetch all similar entities, including any offscreen ones, to support the case
|    | [NORMAL] ESLintBear (indent):
|    | Expected indentation of 3 tabs but found 4.
|----|    | /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
| 644| 644| 				placementSupport.wallEndPosition = Engine.GetTerrainAtScreenPoint(ev.x, ev.y);
| 645| 645| 
| 646| 646| 				// Update the building placement preview, and by extension, the list of snapping candidate entities for both (!)
| 647|    |-				// the ending point and the starting point to snap to.
|    | 647|+			// the ending point and the starting point to snap to.
| 648| 648| 				//
| 649| 649| 				// TODO: Note that here, we need to fetch all similar entities, including any offscreen ones, to support the case
| 650| 650| 				// where the snap entity for the starting point has moved offscreen, or has been deleted/destroyed, or was a
|    | [NORMAL] ESLintBear (indent):
|    | Expected indentation of 3 tabs but found 4.
|----|    | /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
| 645| 645| 
| 646| 646| 				// Update the building placement preview, and by extension, the list of snapping candidate entities for both (!)
| 647| 647| 				// the ending point and the starting point to snap to.
| 648|    |-				//
|    | 648|+			//
| 649| 649| 				// TODO: Note that here, we need to fetch all similar entities, including any offscreen ones, to support the case
| 650| 650| 				// where the snap entity for the starting point has moved offscreen, or has been deleted/destroyed, or was a
| 651| 651| 				// foundation and has been replaced with a completed entity since the user first chose it. Fetching all towers on
|    | [NORMAL] ESLintBear (indent):
|    | Expected indentation of 3 tabs but found 4.
|----|    | /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
| 646| 646| 				// Update the building placement preview, and by extension, the list of snapping candidate entities for both (!)
| 647| 647| 				// the ending point and the starting point to snap to.
| 648| 648| 				//
| 649|    |-				// TODO: Note that here, we need to fetch all similar entities, including any offscreen ones, to support the case
|    | 649|+			// TODO: Note that here, we need to fetch all similar entities, including any offscreen ones, to support the case
| 650| 650| 				// where the snap entity for the starting point has moved offscreen, or has been deleted/destroyed, or was a
| 651| 651| 				// foundation and has been replaced with a completed entity since the user first chose it. Fetching all towers on
| 652| 652| 				// the entire map instead of only the current screen might get expensive fast since walls all have a ton of towers
|    | [NORMAL] ESLintBear (indent):
|    | Expected indentation of 3 tabs but found 4.
|----|    | /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
| 647| 647| 				// the ending point and the starting point to snap to.
| 648| 648| 				//
| 649| 649| 				// TODO: Note that here, we need to fetch all similar entities, including any offscreen ones, to support the case
| 650|    |-				// where the snap entity for the starting point has moved offscreen, or has been deleted/destroyed, or was a
|    | 650|+			// where the snap entity for the starting point has moved offscreen, or has been deleted/destroyed, or was a
| 651| 651| 				// foundation and has been replaced with a completed entity since the user first chose it. Fetching all towers on
| 652| 652| 				// the entire map instead of only the current screen might get expensive fast since walls all have a ton of towers
| 653| 653| 				// in them. Might be useful to query only for entities within a certain range around the starting point and ending
|    | [NORMAL] ESLintBear (indent):
|    | Expected indentation of 3 tabs but found 4.
|----|    | /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
| 648| 648| 				//
| 649| 649| 				// TODO: Note that here, we need to fetch all similar entities, including any offscreen ones, to support the case
| 650| 650| 				// where the snap entity for the starting point has moved offscreen, or has been deleted/destroyed, or was a
| 651|    |-				// foundation and has been replaced with a completed entity since the user first chose it. Fetching all towers on
|    | 651|+			// foundation and has been replaced with a completed entity since the user first chose it. Fetching all towers on
| 652| 652| 				// the entire map instead of only the current screen might get expensive fast since walls all have a ton of towers
| 653| 653| 				// in them. Might be useful to query only for entities within a certain range around the starting point and ending
| 654| 654| 				// points.
|    | [NORMAL] ESLintBear (indent):
|    | Expected indentation of 3 tabs but found 4.
|----|    | /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
| 649| 649| 				// TODO: Note that here, we need to fetch all similar entities, including any offscreen ones, to support the case
| 650| 650| 				// where the snap entity for the starting point has moved offscreen, or has been deleted/destroyed, or was a
| 651| 651| 				// foundation and has been replaced with a completed entity since the user first chose it. Fetching all towers on
| 652|    |-				// the entire map instead of only the current screen might get expensive fast since walls all have a ton of towers
|    | 652|+			// the entire map instead of only the current screen might get expensive fast since walls all have a ton of towers
| 653| 653| 				// in them. Might be useful to query only for entities within a certain range around the starting point and ending
| 654| 654| 				// points.
| 655| 655| 
|    | [NORMAL] ESLintBear (indent):
|    | Expected indentation of 3 tabs but found 4.
|----|    | /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
| 650| 650| 				// where the snap entity for the starting point has moved offscreen, or has been deleted/destroyed, or was a
| 651| 651| 				// foundation and has been replaced with a completed entity since the user first chose it. Fetching all towers on
| 652| 652| 				// the entire map instead of only the current screen might get expensive fast since walls all have a ton of towers
| 653|    |-				// in them. Might be useful to query only for entities within a certain range around the starting point and ending
|    | 653|+			// in them. Might be useful to query only for entities within a certain range around the starting point and ending
| 654| 654| 				// points.
| 655| 655| 
| 656| 656| 				placementSupport.wallSnapEntitiesIncludeOffscreen = true;
|    | [NORMAL] ESLintBear (indent):
|    | Expected indentation of 3 tabs but found 4.
|----|    | /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
| 651| 651| 				// foundation and has been replaced with a completed entity since the user first chose it. Fetching all towers on
| 652| 652| 				// the entire map instead of only the current screen might get expensive fast since walls all have a ton of towers
| 653| 653| 				// in them. Might be useful to query only for entities within a certain range around the starting point and ending
| 654|    |-				// points.
|    | 654|+			// points.
| 655| 655| 
| 656| 656| 				placementSupport.wallSnapEntitiesIncludeOffscreen = true;
| 657| 657| 				var result = updateBuildingPlacementPreview(); // includes an update of the snap entity candidates
|    | [NORMAL] ESLintBear (indent):
|    | Expected indentation of 3 tabs but found 4.
|----|    | /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
| 653| 653| 				// in them. Might be useful to query only for entities within a certain range around the starting point and ending
| 654| 654| 				// points.
| 655| 655| 
| 656|    |-				placementSupport.wallSnapEntitiesIncludeOffscreen = true;
|    | 656|+			placementSupport.wallSnapEntitiesIncludeOffscreen = true;
| 657| 657| 				var result = updateBuildingPlacementPreview(); // includes an update of the snap entity candidates
| 658| 658| 
| 659| 659| 				if (result && result.cost)
|    | [NORMAL] ESLintBear (indent):
|    | Expected indentation of 3 tabs but found 4.
|----|    | /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
| 654| 654| 				// points.
| 655| 655| 
| 656| 656| 				placementSupport.wallSnapEntitiesIncludeOffscreen = true;
| 657|    |-				var result = updateBuildingPlacementPreview(); // includes an update of the snap entity candidates
|    | 657|+			var result = updateBuildingPlacementPreview(); // includes an update of the snap entity candidates
| 658| 658| 
| 659| 659| 				if (result && result.cost)
| 660| 660| 				{
|    | [NORMAL] ESLintBear (indent):
|    | Expected indentation of 3 tabs but found 4.
|----|    | /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
| 656| 656| 				placementSupport.wallSnapEntitiesIncludeOffscreen = true;
| 657| 657| 				var result = updateBuildingPlacementPreview(); // includes an update of the snap entity candidates
| 658| 658| 
| 659|    |-				if (result && result.cost)
|    | 659|+			if (result && result.cost)
| 660| 660| 				{
| 661| 661| 					var neededResources = Engine.GuiInterfaceCall("GetNeededResources", { "cost": result.cost });
| 662| 662| 					placementSupport.tooltipMessage = [
|    | [NORMAL] ESLintBear (indent):
|    | Expected indentation of 3 tabs but found 4.
|----|    | /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
| 657| 657| 				var result = updateBuildingPlacementPreview(); // includes an update of the snap entity candidates
| 658| 658| 
| 659| 659| 				if (result && result.cost)
| 660|    |-				{
|    | 660|+			{
| 661| 661| 					var neededResources = Engine.GuiInterfaceCall("GetNeededResources", { "cost": result.cost });
| 662| 662| 					placementSupport.tooltipMessage = [
| 663| 663| 						getEntityCostTooltip(result),
|    | [NORMAL] ESLintBear (indent):
|    | Expected indentation of 4 tabs but found 5.
|----|    | /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
| 658| 658| 
| 659| 659| 				if (result && result.cost)
| 660| 660| 				{
| 661|    |-					var neededResources = Engine.GuiInterfaceCall("GetNeededResources", { "cost": result.cost });
|    | 661|+				var neededResources = Engine.GuiInterfaceCall("GetNeededResources", { "cost": result.cost });
| 662| 662| 					placementSupport.tooltipMessage = [
| 663| 663| 						getEntityCostTooltip(result),
| 664| 664| 						getNeededResourcesTooltip(neededResources)
|    | [NORMAL] ESLintBear (indent):
|    | Expected indentation of 4 tabs but found 5.
|----|    | /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
| 659| 659| 				if (result && result.cost)
| 660| 660| 				{
| 661| 661| 					var neededResources = Engine.GuiInterfaceCall("GetNeededResources", { "cost": result.cost });
| 662|    |-					placementSupport.tooltipMessage = [
|    | 662|+				placementSupport.tooltipMessage = [
| 663| 663| 						getEntityCostTooltip(result),
| 664| 664| 						getNeededResourcesTooltip(neededResources)
| 665| 665| 					].filter(tip => tip).join("\n");
|    | [NORMAL] ESLintBear (indent):
|    | Expected indentation of 5 tabs but found 6.
|----|    | /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
| 660| 660| 				{
| 661| 661| 					var neededResources = Engine.GuiInterfaceCall("GetNeededResources", { "cost": result.cost });
| 662| 662| 					placementSupport.tooltipMessage = [
| 663|    |-						getEntityCostTooltip(result),
|    | 663|+					getEntityCostTooltip(result),
| 664| 664| 						getNeededResourcesTooltip(neededResources)
| 665| 665| 					].filter(tip => tip).join("\n");
| 666| 666| 				}
|    | [NORMAL] ESLintBear (indent):
|    | Expected indentation of 5 tabs but found 6.
|----|    | /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
| 661| 661| 					var neededResources = Engine.GuiInterfaceCall("GetNeededResources", { "cost": result.cost });
| 662| 662| 					placementSupport.tooltipMessage = [
| 663| 663| 						getEntityCostTooltip(result),
| 664|    |-						getNeededResourcesTooltip(neededResources)
|    | 664|+					getNeededResourcesTooltip(neededResources)
| 665| 665| 					].filter(tip => tip).join("\n");
| 666| 666| 				}
| 667| 667| 
|    | [NORMAL] ESLintBear (indent):
|    | Expected indentation of 4 tabs but found 5.
|----|    | /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
| 662| 662| 					placementSupport.tooltipMessage = [
| 663| 663| 						getEntityCostTooltip(result),
| 664| 664| 						getNeededResourcesTooltip(neededResources)
| 665|    |-					].filter(tip => tip).join("\n");
|    | 665|+				].filter(tip => tip).join("\n");
| 666| 666| 				}
| 667| 667| 
| 668| 668| 				break;
|    | [NORMAL] ESLintBear (indent):
|    | Expected indentation of 3 tabs but found 4.
|----|    | /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
| 663| 663| 						getEntityCostTooltip(result),
| 664| 664| 						getNeededResourcesTooltip(neededResources)
| 665| 665| 					].filter(tip => tip).join("\n");
| 666|    |-				}
|    | 666|+			}
| 667| 667| 
| 668| 668| 				break;
| 669| 669| 
|    | [NORMAL] ESLintBear (indent):
|    | Expected indentation of 3 tabs but found 4.
|----|    | /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
| 665| 665| 					].filter(tip => tip).join("\n");
| 666| 666| 				}
| 667| 667| 
| 668|    |-				break;
|    | 668|+			break;
| 669| 669| 
| 670| 670| 			case "mousebuttondown":
| 671| 671| 				if (ev.button == SDL_BUTTON_LEFT)
|    | [NORMAL] ESLintBear (indent):
|    | Expected indentation of 2 tabs but found 3.
|----|    | /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
| 667| 667| 
| 668| 668| 				break;
| 669| 669| 
| 670|    |-			case "mousebuttondown":
|    | 670|+		case "mousebuttondown":
| 671| 671| 				if (ev.button == SDL_BUTTON_LEFT)
| 672| 672| 				{
| 673| 673| 					var queued = Engine.HotkeyIsPressed("session.queue");
|    | [NORMAL] ESLintBear (indent):
|    | Expected indentation of 3 tabs but found 4.
|----|    | /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
| 668| 668| 				break;
| 669| 669| 
| 670| 670| 			case "mousebuttondown":
| 671|    |-				if (ev.button == SDL_BUTTON_LEFT)
|    | 671|+			if (ev.button == SDL_BUTTON_LEFT)
| 672| 672| 				{
| 673| 673| 					var queued = Engine.HotkeyIsPressed("session.queue");
| 674| 674| 					if (tryPlaceWall(queued))
|    | [NORMAL] ESLintBear (indent):
|    | Expected indentation of 3 tabs but found 4.
|----|    | /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
| 669| 669| 
| 670| 670| 			case "mousebuttondown":
| 671| 671| 				if (ev.button == SDL_BUTTON_LEFT)
| 672|    |-				{
|    | 672|+			{
| 673| 673| 					var queued = Engine.HotkeyIsPressed("session.queue");
| 674| 674| 					if (tryPlaceWall(queued))
| 675| 675| 					{
|    | [NORMAL] ESLintBear (indent):
|    | Expected indentation of 4 tabs but found 5.
|----|    | /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
| 670| 670| 			case "mousebuttondown":
| 671| 671| 				if (ev.button == SDL_BUTTON_LEFT)
| 672| 672| 				{
| 673|    |-					var queued = Engine.HotkeyIsPressed("session.queue");
|    | 673|+				var queued = Engine.HotkeyIsPressed("session.queue");
| 674| 674| 					if (tryPlaceWall(queued))
| 675| 675| 					{
| 676| 676| 						if (queued)
|    | [NORMAL] ESLintBear (indent):
|    | Expected indentation of 4 tabs but found 5.
|----|    | /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
| 671| 671| 				if (ev.button == SDL_BUTTON_LEFT)
| 672| 672| 				{
| 673| 673| 					var queued = Engine.HotkeyIsPressed("session.queue");
| 674|    |-					if (tryPlaceWall(queued))
|    | 674|+				if (tryPlaceWall(queued))
| 675| 675| 					{
| 676| 676| 						if (queued)
| 677| 677| 						{
|    | [NORMAL] ESLintBear (indent):
|    | Expected indentation of 4 tabs but found 5.
|----|    | /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
| 672| 672| 				{
| 673| 673| 					var queued = Engine.HotkeyIsPressed("session.queue");
| 674| 674| 					if (tryPlaceWall(queued))
| 675|    |-					{
|    | 675|+				{
| 676| 676| 						if (queued)
| 677| 677| 						{
| 678| 678| 							// continue building, just set a new starting position where we left off
|    | [NORMAL] ESLintBear (indent):
|    | Expected indentation of 5 tabs but found 6.
|----|    | /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
| 673| 673| 					var queued = Engine.HotkeyIsPressed("session.queue");
| 674| 674| 					if (tryPlaceWall(queued))
| 675| 675| 					{
| 676|    |-						if (queued)
|    | 676|+					if (queued)
| 677| 677| 						{
| 678| 678| 							// continue building, just set a new starting position where we left off
| 679| 679| 							placementSupport.position = placementSupport.wallEndPosition;
|    | [NORMAL] ESLintBear (indent):
|    | Expected indentation of 5 tabs but found 6.
|----|    | /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
| 674| 674| 					if (tryPlaceWall(queued))
| 675| 675| 					{
| 676| 676| 						if (queued)
| 677|    |-						{
|    | 677|+					{
| 678| 678| 							// continue building, just set a new starting position where we left off
| 679| 679| 							placementSupport.position = placementSupport.wallEndPosition;
| 680| 680| 							placementSupport.wallEndPosition = undefined;
|    | [NORMAL] ESLintBear (indent):
|    | Expected indentation of 6 tabs but found 7.
|----|    | /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
| 675| 675| 					{
| 676| 676| 						if (queued)
| 677| 677| 						{
| 678|    |-							// continue building, just set a new starting position where we left off
|    | 678|+						// continue building, just set a new starting position where we left off
| 679| 679| 							placementSupport.position = placementSupport.wallEndPosition;
| 680| 680| 							placementSupport.wallEndPosition = undefined;
| 681| 681| 
|    | [NORMAL] ESLintBear (indent):
|    | Expected indentation of 6 tabs but found 7.
|----|    | /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
| 676| 676| 						if (queued)
| 677| 677| 						{
| 678| 678| 							// continue building, just set a new starting position where we left off
| 679|    |-							placementSupport.position = placementSupport.wallEndPosition;
|    | 679|+						placementSupport.position = placementSupport.wallEndPosition;
| 680| 680| 							placementSupport.wallEndPosition = undefined;
| 681| 681| 
| 682| 682| 							inputState = INPUT_BUILDING_WALL_CLICK;
|    | [NORMAL] ESLintBear (indent):
|    | Expected indentation of 6 tabs but found 7.
|----|    | /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
| 677| 677| 						{
| 678| 678| 							// continue building, just set a new starting position where we left off
| 679| 679| 							placementSupport.position = placementSupport.wallEndPosition;
| 680|    |-							placementSupport.wallEndPosition = undefined;
|    | 680|+						placementSupport.wallEndPosition = undefined;
| 681| 681| 
| 682| 682| 							inputState = INPUT_BUILDING_WALL_CLICK;
| 683| 683| 						}
|    | [NORMAL] ESLintBear (indent):
|    | Expected indentation of 6 tabs but found 7.
|----|    | /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
| 679| 679| 							placementSupport.position = placementSupport.wallEndPosition;
| 680| 680| 							placementSupport.wallEndPosition = undefined;
| 681| 681| 
| 682|    |-							inputState = INPUT_BUILDING_WALL_CLICK;
|    | 682|+						inputState = INPUT_BUILDING_WALL_CLICK;
| 683| 683| 						}
| 684| 684| 						else
| 685| 685| 						{
|    | [NORMAL] ESLintBear (indent):
|    | Expected indentation of 5 tabs but found 6.
|----|    | /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
| 680| 680| 							placementSupport.wallEndPosition = undefined;
| 681| 681| 
| 682| 682| 							inputState = INPUT_BUILDING_WALL_CLICK;
| 683|    |-						}
|    | 683|+					}
| 684| 684| 						else
| 685| 685| 						{
| 686| 686| 							placementSupport.Reset();
|    | [NORMAL] ESLintBear (indent):
|    | Expected indentation of 5 tabs but found 6.
|----|    | /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
| 681| 681| 
| 682| 682| 							inputState = INPUT_BUILDING_WALL_CLICK;
| 683| 683| 						}
| 684|    |-						else
|    | 684|+					else
| 685| 685| 						{
| 686| 686| 							placementSupport.Reset();
| 687| 687| 							inputState = INPUT_NORMAL;
|    | [NORMAL] ESLintBear (indent):
|    | Expected indentation of 5 tabs but found 6.
|----|    | /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
| 682| 682| 							inputState = INPUT_BUILDING_WALL_CLICK;
| 683| 683| 						}
| 684| 684| 						else
| 685|    |-						{
|    | 685|+					{
| 686| 686| 							placementSupport.Reset();
| 687| 687| 							inputState = INPUT_NORMAL;
| 688| 688| 						}
|    | [NORMAL] ESLintBear (indent):
|    | Expected indentation of 6 tabs but found 7.
|----|    | /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
| 683| 683| 						}
| 684| 684| 						else
| 685| 685| 						{
| 686|    |-							placementSupport.Reset();
|    | 686|+						placementSupport.Reset();
| 687| 687| 							inputState = INPUT_NORMAL;
| 688| 688| 						}
| 689| 689| 					}
|    | [NORMAL] ESLintBear (indent):
|    | Expected indentation of 6 tabs but found 7.
|----|    | /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
| 684| 684| 						else
| 685| 685| 						{
| 686| 686| 							placementSupport.Reset();
| 687|    |-							inputState = INPUT_NORMAL;
|    | 687|+						inputState = INPUT_NORMAL;
| 688| 688| 						}
| 689| 689| 					}
| 690| 690| 					else
|    | [NORMAL] ESLintBear (indent):
|    | Expected indentation of 5 tabs but found 6.
|----|    | /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
| 685| 685| 						{
| 686| 686| 							placementSupport.Reset();
| 687| 687| 							inputState = INPUT_NORMAL;
| 688|    |-						}
|    | 688|+					}
| 689| 689| 					}
| 690| 690| 					else
| 691| 691| 						placementSupport.tooltipMessage = translate("Cannot build wall here!");
|    | [NORMAL] ESLintBear (indent):
|    | Expected indentation of 4 tabs but found 5.
|----|    | /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
| 686| 686| 							placementSupport.Reset();
| 687| 687| 							inputState = INPUT_NORMAL;
| 688| 688| 						}
| 689|    |-					}
|    | 689|+				}
| 690| 690| 					else
| 691| 691| 						placementSupport.tooltipMessage = translate("Cannot build wall here!");
| 692| 692| 
|    | [NORMAL] ESLintBear (indent):
|    | Expected indentation of 4 tabs but found 5.
|----|    | /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
| 687| 687| 							inputState = INPUT_NORMAL;
| 688| 688| 						}
| 689| 689| 					}
| 690|    |-					else
|    | 690|+				else
| 691| 691| 						placementSupport.tooltipMessage = translate("Cannot build wall here!");
| 692| 692| 
| 693| 693| 					updateBuildingPlacementPreview();
|    | [NORMAL] ESLintBear (indent):
|    | Expected indentation of 5 tabs but found 6.
|----|    | /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
| 688| 688| 						}
| 689| 689| 					}
| 690| 690| 					else
| 691|    |-						placementSupport.tooltipMessage = translate("Cannot build wall here!");
|    | 691|+					placementSupport.tooltipMessage = translate("Cannot build wall here!");
| 692| 692| 
| 693| 693| 					updateBuildingPlacementPreview();
| 694| 694| 					return true;
|    | [NORMAL] ESLintBear (indent):
|    | Expected indentation of 4 tabs but found 5.
|----|    | /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
| 690| 690| 					else
| 691| 691| 						placementSupport.tooltipMessage = translate("Cannot build wall here!");
| 692| 692| 
| 693|    |-					updateBuildingPlacementPreview();
|    | 693|+				updateBuildingPlacementPreview();
| 694| 694| 					return true;
| 695| 695| 				}
| 696| 696| 				else if (ev.button == SDL_BUTTON_RIGHT)
|    | [NORMAL] ESLintBear (indent):
|    | Expected indentation of 4 tabs but found 5.
|----|    | /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
| 691| 691| 						placementSupport.tooltipMessage = translate("Cannot build wall here!");
| 692| 692| 
| 693| 693| 					updateBuildingPlacementPreview();
| 694|    |-					return true;
|    | 694|+				return true;
| 695| 695| 				}
| 696| 696| 				else if (ev.button == SDL_BUTTON_RIGHT)
| 697| 697| 				{
|    | [NORMAL] ESLintBear (indent):
|    | Expected indentation of 3 tabs but found 4.
|----|    | /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
| 692| 692| 
| 693| 693| 					updateBuildingPlacementPreview();
| 694| 694| 					return true;
| 695|    |-				}
|    | 695|+			}
| 696| 696| 				else if (ev.button == SDL_BUTTON_RIGHT)
| 697| 697| 				{
| 698| 698| 					// reset to normal input mode
|    | [NORMAL] ESLintBear (indent):
|    | Expected indentation of 3 tabs but found 4.
|----|    | /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
| 693| 693| 					updateBuildingPlacementPreview();
| 694| 694| 					return true;
| 695| 695| 				}
| 696|    |-				else if (ev.button == SDL_BUTTON_RIGHT)
|    | 696|+			else if (ev.button == SDL_BUTTON_RIGHT)
| 697| 697| 				{
| 698| 698| 					// reset to normal input mode
| 699| 699| 					placementSupport.Reset();
|    | [NORMAL] ESLintBear (indent):
|    | Expected indentation of 3 tabs but found 4.
|----|    | /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
| 694| 694| 					return true;
| 695| 695| 				}
| 696| 696| 				else if (ev.button == SDL_BUTTON_RIGHT)
| 697|    |-				{
|    | 697|+			{
| 698| 698| 					// reset to normal input mode
| 699| 699| 					placementSupport.Reset();
| 700| 700| 					updateBuildingPlacementPreview();
|    | [NORMAL] ESLintBear (indent):
|    | Expected indentation of 4 tabs but found 5.
|----|    | /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
| 695| 695| 				}
| 696| 696| 				else if (ev.button == SDL_BUTTON_RIGHT)
| 697| 697| 				{
| 698|    |-					// reset to normal input mode
|    | 698|+				// reset to normal input mode
| 699| 699| 					placementSupport.Reset();
| 700| 700| 					updateBuildingPlacementPreview();
| 701| 701| 
|    | [NORMAL] ESLintBear (indent):
|    | Expected indentation of 4 tabs but found 5.
|----|    | /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
| 696| 696| 				else if (ev.button == SDL_BUTTON_RIGHT)
| 697| 697| 				{
| 698| 698| 					// reset to normal input mode
| 699|    |-					placementSupport.Reset();
|    | 699|+				placementSupport.Reset();
| 700| 700| 					updateBuildingPlacementPreview();
| 701| 701| 
| 702| 702| 					inputState = INPUT_NORMAL;
|    | [NORMAL] ESLintBear (indent):
|    | Expected indentation of 4 tabs but found 5.
|----|    | /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
| 697| 697| 				{
| 698| 698| 					// reset to normal input mode
| 699| 699| 					placementSupport.Reset();
| 700|    |-					updateBuildingPlacementPreview();
|    | 700|+				updateBuildingPlacementPreview();
| 701| 701| 
| 702| 702| 					inputState = INPUT_NORMAL;
| 703| 703| 					return true;
|    | [NORMAL] ESLintBear (indent):
|    | Expected indentation of 4 tabs but found 5.
|----|    | /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
| 699| 699| 					placementSupport.Reset();
| 700| 700| 					updateBuildingPlacementPreview();
| 701| 701| 
| 702|    |-					inputState = INPUT_NORMAL;
|    | 702|+				inputState = INPUT_NORMAL;
| 703| 703| 					return true;
| 704| 704| 				}
| 705| 705| 				break;
|    | [NORMAL] ESLintBear (indent):
|    | Expected indentation of 4 tabs but found 5.
|----|    | /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
| 700| 700| 					updateBuildingPlacementPreview();
| 701| 701| 
| 702| 702| 					inputState = INPUT_NORMAL;
| 703|    |-					return true;
|    | 703|+				return true;
| 704| 704| 				}
| 705| 705| 				break;
| 706| 706| 		}
|    | [NORMAL] ESLintBear (indent):
|    | Expected indentation of 3 tabs but found 4.
|----|    | /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
| 701| 701| 
| 702| 702| 					inputState = INPUT_NORMAL;
| 703| 703| 					return true;
| 704|    |-				}
|    | 704|+			}
| 705| 705| 				break;
| 706| 706| 		}
| 707| 707| 		break;
|    | [NORMAL] ESLintBear (indent):
|    | Expected indentation of 3 tabs but found 4.
|----|    | /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
| 702| 702| 					inputState = INPUT_NORMAL;
| 703| 703| 					return true;
| 704| 704| 				}
| 705|    |-				break;
|    | 705|+			break;
| 706| 706| 		}
| 707| 707| 		break;
| 708| 708| 
|    | [NORMAL] ESLintBear (indent):
|    | Expected indentation of 3 tabs but found 4.
|----|    | /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
| 844| 844| 			break;
| 845| 845| 
| 846| 846| 		case "hotkeydown":
| 847|    |-				if (ev.hotkey.indexOf("selection.group.") == 0)
|    | 847|+			if (ev.hotkey.indexOf("selection.group.") == 0)
| 848| 848| 				{
| 849| 849| 					let now = Date.now();
| 850| 850| 					if (now - doublePressTimer < doublePressTime && ev.hotkey == prevHotkey)
|    | [NORMAL] ESLintBear (indent):
|    | Expected indentation of 3 tabs but found 4.
|----|    | /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
| 845| 845| 
| 846| 846| 		case "hotkeydown":
| 847| 847| 				if (ev.hotkey.indexOf("selection.group.") == 0)
| 848|    |-				{
|    | 848|+			{
| 849| 849| 					let now = Date.now();
| 850| 850| 					if (now - doublePressTimer < doublePressTime && ev.hotkey == prevHotkey)
| 851| 851| 					{
|    | [NORMAL] ESLintBear (indent):
|    | Expected indentation of 4 tabs but found 5.
|----|    | /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
| 846| 846| 		case "hotkeydown":
| 847| 847| 				if (ev.hotkey.indexOf("selection.group.") == 0)
| 848| 848| 				{
| 849|    |-					let now = Date.now();
|    | 849|+				let now = Date.now();
| 850| 850| 					if (now - doublePressTimer < doublePressTime && ev.hotkey == prevHotkey)
| 851| 851| 					{
| 852| 852| 						if (ev.hotkey.indexOf("selection.group.select.") == 0)
|    | [NORMAL] ESLintBear (indent):
|    | Expected indentation of 4 tabs but found 5.
|----|    | /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
| 847| 847| 				if (ev.hotkey.indexOf("selection.group.") == 0)
| 848| 848| 				{
| 849| 849| 					let now = Date.now();
| 850|    |-					if (now - doublePressTimer < doublePressTime && ev.hotkey == prevHotkey)
|    | 850|+				if (now - doublePressTimer < doublePressTime && ev.hotkey == prevHotkey)
| 851| 851| 					{
| 852| 852| 						if (ev.hotkey.indexOf("selection.group.select.") == 0)
| 853| 853| 						{
|    | [NORMAL] ESLintBear (indent):
|    | Expected indentation of 4 tabs but found 5.
|----|    | /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
| 848| 848| 				{
| 849| 849| 					let now = Date.now();
| 850| 850| 					if (now - doublePressTimer < doublePressTime && ev.hotkey == prevHotkey)
| 851|    |-					{
|    | 851|+				{
| 852| 852| 						if (ev.hotkey.indexOf("selection.group.select.") == 0)
| 853| 853| 						{
| 854| 854| 							var sptr = ev.hotkey.split(".");
|    | [NORMAL] ESLintBear (indent):
|    | Expected indentation of 5 tabs but found 6.
|----|    | /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
| 849| 849| 					let now = Date.now();
| 850| 850| 					if (now - doublePressTimer < doublePressTime && ev.hotkey == prevHotkey)
| 851| 851| 					{
| 852|    |-						if (ev.hotkey.indexOf("selection.group.select.") == 0)
|    | 852|+					if (ev.hotkey.indexOf("selection.group.select.") == 0)
| 853| 853| 						{
| 854| 854| 							var sptr = ev.hotkey.split(".");
| 855| 855| 							performGroup("snap", sptr[3]);
|    | [NORMAL] ESLintBear (indent):
|    | Expected indentation of 5 tabs but found 6.
|----|    | /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
| 850| 850| 					if (now - doublePressTimer < doublePressTime && ev.hotkey == prevHotkey)
| 851| 851| 					{
| 852| 852| 						if (ev.hotkey.indexOf("selection.group.select.") == 0)
| 853|    |-						{
|    | 853|+					{
| 854| 854| 							var sptr = ev.hotkey.split(".");
| 855| 855| 							performGroup("snap", sptr[3]);
| 856| 856| 						}
|    | [NORMAL] ESLintBear (indent):
|    | Expected indentation of 6 tabs but found 7.
|----|    | /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
| 851| 851| 					{
| 852| 852| 						if (ev.hotkey.indexOf("selection.group.select.") == 0)
| 853| 853| 						{
| 854|    |-							var sptr = ev.hotkey.split(".");
|    | 854|+						var sptr = ev.hotkey.split(".");
| 855| 855| 							performGroup("snap", sptr[3]);
| 856| 856| 						}
| 857| 857| 					}
|    | [NORMAL] ESLintBear (indent):
|    | Expected indentation of 6 tabs but found 7.
|----|    | /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
| 852| 852| 						if (ev.hotkey.indexOf("selection.group.select.") == 0)
| 853| 853| 						{
| 854| 854| 							var sptr = ev.hotkey.split(".");
| 855|    |-							performGroup("snap", sptr[3]);
|    | 855|+						performGroup("snap", sptr[3]);
| 856| 856| 						}
| 857| 857| 					}
| 858| 858| 					else
|    | [NORMAL] ESLintBear (indent):
|    | Expected indentation of 5 tabs but found 6.
|----|    | /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
| 853| 853| 						{
| 854| 854| 							var sptr = ev.hotkey.split(".");
| 855| 855| 							performGroup("snap", sptr[3]);
| 856|    |-						}
|    | 856|+					}
| 857| 857| 					}
| 858| 858| 					else
| 859| 859| 					{
|    | [NORMAL] ESLintBear (indent):
|    | Expected indentation of 4 tabs but found 5.
|----|    | /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
| 854| 854| 							var sptr = ev.hotkey.split(".");
| 855| 855| 							performGroup("snap", sptr[3]);
| 856| 856| 						}
| 857|    |-					}
|    | 857|+				}
| 858| 858| 					else
| 859| 859| 					{
| 860| 860| 						var sptr = ev.hotkey.split(".");
|    | [NORMAL] ESLintBear (indent):
|    | Expected indentation of 4 tabs but found 5.
|----|    | /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
| 855| 855| 							performGroup("snap", sptr[3]);
| 856| 856| 						}
| 857| 857| 					}
| 858|    |-					else
|    | 858|+				else
| 859| 859| 					{
| 860| 860| 						var sptr = ev.hotkey.split(".");
| 861| 861| 						performGroup(sptr[2], sptr[3]);
|    | [NORMAL] ESLintBear (indent):
|    | Expected indentation of 4 tabs but found 5.
|----|    | /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
| 856| 856| 						}
| 857| 857| 					}
| 858| 858| 					else
| 859|    |-					{
|    | 859|+				{
| 860| 860| 						var sptr = ev.hotkey.split(".");
| 861| 861| 						performGroup(sptr[2], sptr[3]);
| 862| 862| 
|    | [NORMAL] ESLintBear (indent):
|    | Expected indentation of 5 tabs but found 6.
|----|    | /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
| 857| 857| 					}
| 858| 858| 					else
| 859| 859| 					{
| 860|    |-						var sptr = ev.hotkey.split(".");
|    | 860|+					var sptr = ev.hotkey.split(".");
| 861| 861| 						performGroup(sptr[2], sptr[3]);
| 862| 862| 
| 863| 863| 						doublePressTimer = now;
|    | [NORMAL] ESLintBear (indent):
|    | Expected indentation of 5 tabs but found 6.
|----|    | /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
| 858| 858| 					else
| 859| 859| 					{
| 860| 860| 						var sptr = ev.hotkey.split(".");
| 861|    |-						performGroup(sptr[2], sptr[3]);
|    | 861|+					performGroup(sptr[2], sptr[3]);
| 862| 862| 
| 863| 863| 						doublePressTimer = now;
| 864| 864| 						prevHotkey = ev.hotkey;
|    | [NORMAL] ESLintBear (indent):
|    | Expected indentation of 5 tabs but found 6.
|----|    | /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
| 860| 860| 						var sptr = ev.hotkey.split(".");
| 861| 861| 						performGroup(sptr[2], sptr[3]);
| 862| 862| 
| 863|    |-						doublePressTimer = now;
|    | 863|+					doublePressTimer = now;
| 864| 864| 						prevHotkey = ev.hotkey;
| 865| 865| 					}
| 866| 866| 				}
|    | [NORMAL] ESLintBear (indent):
|    | Expected indentation of 5 tabs but found 6.
|----|    | /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
| 861| 861| 						performGroup(sptr[2], sptr[3]);
| 862| 862| 
| 863| 863| 						doublePressTimer = now;
| 864|    |-						prevHotkey = ev.hotkey;
|    | 864|+					prevHotkey = ev.hotkey;
| 865| 865| 					}
| 866| 866| 				}
| 867| 867| 				break;
|    | [NORMAL] ESLintBear (indent):
|    | Expected indentation of 4 tabs but found 5.
|----|    | /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
| 862| 862| 
| 863| 863| 						doublePressTimer = now;
| 864| 864| 						prevHotkey = ev.hotkey;
| 865|    |-					}
|    | 865|+				}
| 866| 866| 				}
| 867| 867| 				break;
| 868| 868| 		}
|    | [NORMAL] ESLintBear (indent):
|    | Expected indentation of 3 tabs but found 4.
|----|    | /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
| 863| 863| 						doublePressTimer = now;
| 864| 864| 						prevHotkey = ev.hotkey;
| 865| 865| 					}
| 866|    |-				}
|    | 866|+			}
| 867| 867| 				break;
| 868| 868| 		}
| 869| 869| 		break;
|    | [NORMAL] ESLintBear (indent):
|    | Expected indentation of 3 tabs but found 4.
|----|    | /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
| 864| 864| 						prevHotkey = ev.hotkey;
| 865| 865| 					}
| 866| 866| 				}
| 867|    |-				break;
|    | 867|+			break;
| 868| 868| 		}
| 869| 869| 		break;
| 870| 870| 
|    | [NORMAL] ESLintBear (space-in-parens):
|    | There should be no spaces inside this paren.
|----|    | /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
|1515|1515| 		g_BatchTrainingEntityAllowedCount < batchedSize * appropriateBuildings.length)
|1516|1516| 	{
|1517|1517| 		// Train as many full batches as we can
|1518|    |-		let buildingsCountToTrainFullBatch = Math.floor( g_BatchTrainingEntityAllowedCount / batchedSize);
|    |1518|+		let buildingsCountToTrainFullBatch = Math.floor(g_BatchTrainingEntityAllowedCount / batchedSize);
|1519|1519| 		Engine.PostNetworkCommand({
|1520|1520| 			"type": "train",
|1521|1521| 			"entities": appropriateBuildings.slice(0, buildingsCountToTrainFullBatch),
|    | [NORMAL] ESLintBear (comma-spacing):
|    | A space is required after ','.
|----|    | /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
|1594|1594| 	var selectall = Engine.HotkeyIsPressed("selection.offscreen");
|1595|1595| 
|1596|1596| 	// Reset the last idle unit, etc., if the selection type has changed.
|1597|    |-	if (selectall || classes.length != lastIdleClasses.length || !classes.every((v,i) => v === lastIdleClasses[i]))
|    |1597|+	if (selectall || classes.length != lastIdleClasses.length || !classes.every((v, i) => v === lastIdleClasses[i]))
|1598|1598| 		resetIdleUnit();
|1599|1599| 	lastIdleClasses = classes;
|1600|1600| 

binaries/data/mods/public/gui/session/input.js
| 231| »   var·target·=·undefined;
|    | [NORMAL] ESLintBear (no-undef-init):
|    | It's not necessary to initialize 'target' to undefined.

binaries/data/mods/public/gui/session/input.js
| 245| »   var·actionInfo·=·undefined;
|    | [NORMAL] ESLintBear (no-undef-init):
|    | It's not necessary to initialize 'actionInfo' to undefined.

binaries/data/mods/public/gui/session/input.js
| 468| »   switch·(ev.type)
|    | [NORMAL] ESLintBear (default-case):
|    | Expected a default case.

binaries/data/mods/public/gui/session/input.js
| 495| »   switch·(inputState)
|    | [NORMAL] ESLintBear (default-case):
|    | Expected a default case.

binaries/data/mods/public/gui/session/input.js
| 499| »   »   switch·(ev.type)
|    | [NORMAL] ESLintBear (default-case):
|    | Expected a default case.

binaries/data/mods/public/gui/session/input.js
| 554| »   »   switch·(ev.type)
|    | [NORMAL] ESLintBear (default-case):
|    | Expected a default case.

binaries/data/mods/public/gui/session/input.js
| 564| »   »   switch·(ev.type)
|    | [NORMAL] ESLintBear (default-case):
|    | Expected a default case.

binaries/data/mods/public/gui/session/input.js
| 612| »   »   switch·(ev.type)
|    | [NORMAL] ESLintBear (default-case):
|    | Expected a default case.

binaries/data/mods/public/gui/session/input.js
| 641| »   »   switch·(ev.type)
|    | [NORMAL] ESLintBear (default-case):
|    | Expected a default case.

binaries/data/mods/public/gui/session/input.js
| 710| »   »   switch·(ev.type)
|    | [NORMAL] ESLintBear (default-case):
|    | Expected a default case.

binaries/data/mods/public/gui/session/input.js
| 811| »   switch·(inputState)
|    | [NORMAL] ESLintBear (default-case):
|    | Expected a default case.

binaries/data/mods/public/gui/session/input.js
| 814| »   »   switch·(ev.type)
|    | [NORMAL] ESLintBear (default-case):
|    | Expected a default case.

binaries/data/mods/public/gui/session/input.js
| 916| »   »   switch·(ev.type)
|    | [NORMAL] ESLintBear (default-case):
|    | Expected a default case.

binaries/data/mods/public/gui/session/input.js
|1005| »   »   switch·(ev.type)
|    | [NORMAL] ESLintBear (default-case):
|    | Expected a default case.

binaries/data/mods/public/gui/session/input.js
|1019| »   »   »   »   let·action·=·determineAction(ev.x,·ev.y);
|    | [NORMAL] ESLintBear (no-shadow):
|    | 'action' is already declared in the upper scope.

binaries/data/mods/public/gui/session/input.js
|1028| »   »   switch·(ev.type)
|    | [NORMAL] ESLintBear (default-case):
|    | Expected a default case.

binaries/data/mods/public/gui/session/input.js
|1117| »   »   »   switch·(ev.hotkey)
|    | [NORMAL] ESLintBear (default-case):
|    | Expected a default case.

binaries/data/mods/public/gui/session/input.js
|1545| »   switch·(action)
|    | [NORMAL] ESLintBear (default-case):
|    | Expected a default case.

binaries/data/mods/public/gui/session/input.js
| 231| »   var·target·=·undefined;
|    | [NORMAL] JSHintBear:
|    | It's not necessary to initialize 'target' to 'undefined'.

binaries/data/mods/public/gui/session/input.js
| 245| »   var·actionInfo·=·undefined;
|    | [NORMAL] JSHintBear:
|    | It's not necessary to initialize 'actionInfo' to 'undefined'.

binaries/data/mods/public/gui/session/input.js
| 259| »   for·(var·action·of·actions)
|    | [NORMAL] JSHintBear:
|    | 'action' is already defined.

binaries/data/mods/public/gui/session/input.js
| 262| »   »   »   var·r·=·g_UnitActions[action].hotkeyActionCheck(target,·selection);
|    | [NORMAL] JSHintBear:
|    | 'r' is already defined.

binaries/data/mods/public/gui/session/input.js
| 267| »   for·(var·action·of·actions)
|    | [NORMAL] JSHintBear:
|    | 'action' is already defined.

binaries/data/mods/public/gui/session/input.js
| 270| »   »   »   var·r·=·g_UnitActions[action].actionCheck(target,·selection);
|    | [NORMAL] JSHintBear:
|    | 'r' is already defined.

binaries/data/mods/public/gui/session/input.js
| 483| »   »   &&·(ev.button·==·SDL_BUTTON_LEFT·||·ev.button·==·SDL_BUTTON_RIGHT))
|    | [NORMAL] JSHintBear:
|    | Misleading line break before '&&'; readers may interpret this as an expression boundary.

binaries/data/mods/public/gui/session/input.js
| 513| »   »   »   »   var·rect·=·updateBandbox(bandbox,·ev,·true);
|    | [NORMAL] JSHintBear:
|    | 'rect' is already defined.

binaries/data/mods/public/gui/session/input.js
| 516| »   »   »   »   var·ents·=·getPreferredEntities(Engine.PickPlayerEntitiesInRect(rect[0],·rect[1],·rect[2],·rect[3],·g_ViewedPlayer));
|    | [NORMAL] JSHintBear:
|    | 'ents' is already defined.

binaries/data/mods/public/gui/session/input.js
| 673| »   »   »   »   »   var·queued·=·Engine.HotkeyIsPressed("session.queue");
|    | [NORMAL] JSHintBear:
|    | 'queued' is already defined.

binaries/data/mods/public/gui/session/input.js
| 747| »   »   »   »   var·queued·=·Engine.HotkeyIsPressed("session.queue");
|    | [NORMAL] JSHintBear:
|    | 'queued' is already defined.

binaries/data/mods/public/gui/session/input.js
| 860| »   »   »   »   »   »   var·sptr·=·ev.hotkey.split(".");
|    | [NORMAL] JSHintBear:
|    | 'sptr' is already defined.

binaries/data/mods/public/gui/session/input.js
| 876| »   »   »   var·ent·=·Engine.PickEntityAtPoint(ev.x,·ev.y);
|    | [NORMAL] JSHintBear:
|    | 'ent' is already defined.

binaries/data/mods/public/gui/session/input.js
| 902| »   »   »   }
|    | [NORMAL] JSHintBear:
|    | Expected a 'break' statement before 'default'.

binaries/data/mods/public/gui/session/input.js
| 926| »   »   »   var·ent·=·Engine.PickEntityAtPoint(ev.x,·ev.y);
|    | [NORMAL] JSHintBear:
|    | 'ent' is already defined.

binaries/data/mods/public/gui/session/input.js
|1082| »   »   »   »   »   var·snapToEdge·=·Engine.HotkeyIsPressed("session.snaptoedge");
|    | [NORMAL] JSHintBear:
|    | 'snapToEdge' is already defined.

binaries/data/mods/public/gui/session/input.js
|1085| »   »   »   »   »   »   var·snapData·=·Engine.GuiInterfaceCall("GetFoundationSnapData",·{
|    | [NORMAL] JSHintBear:
|    | 'snapData' is already defined.
|    | [NORMAL] ESLintBear (indent):
|    | Expected indentation of 2 tabs but found 3.
|----|    | /zpool0/trunk/binaries/data/mods/public/simulation/components/GuiInterface.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/simulation/components/GuiInterface.js
| 821| 821| 		updateEntityColor(data.showAllStatusBars && (i == player || player == -1) ?
| 822| 822| 			[IID_Minimap, IID_RangeOverlayRenderer, IID_RallyPointRenderer, IID_StatusBars] :
| 823| 823| 			[IID_Minimap, IID_RangeOverlayRenderer, IID_RallyPointRenderer],
| 824|    |-			cmpRangeManager.GetEntitiesByPlayer(i));
|    | 824|+		cmpRangeManager.GetEntitiesByPlayer(i));
| 825| 825| 	}
| 826| 826| 	updateEntityColor([IID_Selectable, IID_StatusBars], data.selected);
| 827| 827| 	Engine.QueryInterface(SYSTEM_ENTITY, IID_TerritoryManager).UpdateColors();
|    | [NORMAL] ESLintBear (indent):
|    | Expected indentation of 5 tabs but found 6.
|----|    | /zpool0/trunk/binaries/data/mods/public/simulation/components/GuiInterface.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/simulation/components/GuiInterface.js
|1654|1654| 			{
|1655|1655| 				minDist2 = dist2;
|1656|1656| 				minDistEntitySnapData = {
|1657|    |-						"x": pos.x,
|    |1657|+					"x": pos.x,
|1658|1658| 						"z": pos.z,
|1659|1659| 						"angle": cmpPosition.GetRotation().y,
|1660|1660| 						"ent": ent
|    | [NORMAL] ESLintBear (indent):
|    | Expected indentation of 5 tabs but found 6.
|----|    | /zpool0/trunk/binaries/data/mods/public/simulation/components/GuiInterface.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/simulation/components/GuiInterface.js
|1655|1655| 				minDist2 = dist2;
|1656|1656| 				minDistEntitySnapData = {
|1657|1657| 						"x": pos.x,
|1658|    |-						"z": pos.z,
|    |1658|+					"z": pos.z,
|1659|1659| 						"angle": cmpPosition.GetRotation().y,
|1660|1660| 						"ent": ent
|1661|1661| 				};
|    | [NORMAL] ESLintBear (indent):
|    | Expected indentation of 5 tabs but found 6.
|----|    | /zpool0/trunk/binaries/data/mods/public/simulation/components/GuiInterface.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/simulation/components/GuiInterface.js
|1656|1656| 				minDistEntitySnapData = {
|1657|1657| 						"x": pos.x,
|1658|1658| 						"z": pos.z,
|1659|    |-						"angle": cmpPosition.GetRotation().y,
|    |1659|+					"angle": cmpPosition.GetRotation().y,
|1660|1660| 						"ent": ent
|1661|1661| 				};
|1662|1662| 			}
|    | [NORMAL] ESLintBear (indent):
|    | Expected indentation of 5 tabs but found 6.
|----|    | /zpool0/trunk/binaries/data/mods/public/simulation/components/GuiInterface.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/simulation/components/GuiInterface.js
|1657|1657| 						"x": pos.x,
|1658|1658| 						"z": pos.z,
|1659|1659| 						"angle": cmpPosition.GetRotation().y,
|1660|    |-						"ent": ent
|    |1660|+					"ent": ent
|1661|1661| 				};
|1662|1662| 			}
|1663|1663| 		}
|    | [NORMAL] ESLintBear (semi):
|    | Missing semicolon.
|----|    | /zpool0/trunk/binaries/data/mods/public/simulation/components/GuiInterface.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/simulation/components/GuiInterface.js
|1711|1711| 				edges.push(edge);
|1712|1712| 			}
|1713|1713| 			return edges;
|1714|    |-		}
|    |1714|+		};
|1715|1715| 
|1716|1716| 		let edges = getValidEdges(allEdges, templatePos);
|1717|1717| 		if (edges.length)
|    | [NORMAL] ESLintBear (no-else-return):
|    | Unnecessary 'else' after 'return'.
|----|    | /zpool0/trunk/binaries/data/mods/public/simulation/components/GuiInterface.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/simulation/components/GuiInterface.js
|1732|1732| 						return behindA - behindB;
|1733|1733| 					if (!behindA)
|1734|1734| 						return a.offsetDistance - b.offsetDistance;
|1735|    |-					else
|1736|    |-						return -a.signedDistance - -b.signedDistance;
|    |1735|+					return -a.signedDistance - -b.signedDistance;
|1737|1736| 				}
|1738|1737| 				return scoreA - scoreB;
|1739|1738| 			};

binaries/data/mods/public/simulation/components/GuiInterface.js
|1686| »   »   const·getValidEdges·=·(allEdges,·position)·=>·{
|    | [NORMAL] ESLintBear (no-shadow):
|    | 'allEdges' is already declared in the upper scope.

binaries/data/mods/public/simulation/components/GuiInterface.js
|1804| »   »   »   »   »   let·distance·=·Vector2D.dot(secondEdge.normal,·templatePos)·-·Vector2D.dot(secondEdge.normal,·secondEdge.begin);
|    | [NORMAL] ESLintBear (no-shadow):
|    | 'distance' is already declared in the upper scope.

binaries/data/mods/public/simulation/components/GuiInterface.js
|1714| »   »   }
|    | [NORMAL] JSHintBear:
|    | Missing semicolon.

binaries/data/mods/public/simulation/components/GuiInterface.js
|1736| »   »   »   »   »   »   return·-a.signedDistance·-·-b.signedDistance;
|    | [NORMAL] JSHintBear:
|    | Confusing minuses.
Executing section cli...

Link to build: https://jenkins.wildfiregames.com/job/docker-differential/1064/display/redirect

Successful build - Chance fights ever on the side of the prudent.

Linter detected issues:
Executing section Source...

source/simulation2/components/tests/test_ObstructionManager.h
|  23| class·MockObstruction·:·public·ICmpObstruction
|    | [MAJOR] CPPCheckBear (syntaxError):
|    | Code 'classMockObstruction:' is invalid C code. Use --std or --language to configure the language.

source/simulation2/scripting/JSInterface_Simulation.h
|  24| namespace·JSI_Simulation
|    | [MAJOR] CPPCheckBear (syntaxError):
|    | Code 'namespaceJSI_Simulation{' is invalid C code. Use --std or --language to configure the language.

source/simulation2/components/ICmpObstruction.h
|  29| class·ICmpObstruction·:·public·IComponent
|    | [MAJOR] CPPCheckBear (syntaxError):
|    | Code 'classICmpObstruction:' is invalid C code. Use --std or --language to configure the language.
Executing section JS...
|    | [NORMAL] ESLintBear (spaced-comment):
|    | Expected space or tab after '//' in comment.
|----|    | /zpool0/trunk/binaries/data/mods/public/globalscripts/vector.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/globalscripts/vector.js
|   1|    |-/////////////////////////////////////////////////////////////////////
|    |   1|+// ///////////////////////////////////////////////////////////////////
|   2|   2| //	Vector2D
|   3|   3| //
|   4|   4| //	Class for representing and manipulating 2D vectors
|    | [NORMAL] ESLintBear (spaced-comment):
|    | Expected space or tab after '//' in comment.
|----|    | /zpool0/trunk/binaries/data/mods/public/globalscripts/vector.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/globalscripts/vector.js
|   3|   3| //
|   4|   4| //	Class for representing and manipulating 2D vectors
|   5|   5| //
|   6|    |-/////////////////////////////////////////////////////////////////////
|    |   6|+// ///////////////////////////////////////////////////////////////////
|   7|   7| 
|   8|   8| // TODO: Type errors if v not instanceof Vector classes
|   9|   9| // TODO: Possibly implement in C++
|    | [NORMAL] ESLintBear (spaced-comment):
|    | Expected space or tab after '//' in comment.
|----|    | /zpool0/trunk/binaries/data/mods/public/globalscripts/vector.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/globalscripts/vector.js
| 245| 245| 	return v1.x * v2.x + v1.y * v2.y;
| 246| 246| };
| 247| 247| 
| 248|    |-/////////////////////////////////////////////////////////////////////
|    | 248|+// ///////////////////////////////////////////////////////////////////
| 249| 249| //	Vector3D
| 250| 250| //
| 251| 251| //	Class for representing and manipulating 3D vectors
|    | [NORMAL] ESLintBear (spaced-comment):
|    | Expected space or tab after '//' in comment.
|----|    | /zpool0/trunk/binaries/data/mods/public/globalscripts/vector.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/globalscripts/vector.js
| 250| 250| //
| 251| 251| //	Class for representing and manipulating 3D vectors
| 252| 252| //
| 253|    |-/////////////////////////////////////////////////////////////////////
|    | 253|+// ///////////////////////////////////////////////////////////////////
| 254| 254| 
| 255| 255| function Vector3D(x = 0, y = 0, z = 0)
| 256| 256| {
|    | [NORMAL] ESLintBear (indent):
|    | Expected indentation of 2 tabs but found 3.
|----|    | /zpool0/trunk/binaries/data/mods/public/simulation/components/GuiInterface.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/simulation/components/GuiInterface.js
| 821| 821| 		updateEntityColor(data.showAllStatusBars && (i == player || player == -1) ?
| 822| 822| 			[IID_Minimap, IID_RangeOverlayRenderer, IID_RallyPointRenderer, IID_StatusBars] :
| 823| 823| 			[IID_Minimap, IID_RangeOverlayRenderer, IID_RallyPointRenderer],
| 824|    |-			cmpRangeManager.GetEntitiesByPlayer(i));
|    | 824|+		cmpRangeManager.GetEntitiesByPlayer(i));
| 825| 825| 	}
| 826| 826| 	updateEntityColor([IID_Selectable, IID_StatusBars], data.selected);
| 827| 827| 	Engine.QueryInterface(SYSTEM_ENTITY, IID_TerritoryManager).UpdateColors();
|    | [NORMAL] ESLintBear (indent):
|    | Expected indentation of 5 tabs but found 6.
|----|    | /zpool0/trunk/binaries/data/mods/public/simulation/components/GuiInterface.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/simulation/components/GuiInterface.js
|1654|1654| 			{
|1655|1655| 				minDist2 = dist2;
|1656|1656| 				minDistEntitySnapData = {
|1657|    |-						"x": pos.x,
|    |1657|+					"x": pos.x,
|1658|1658| 						"z": pos.z,
|1659|1659| 						"angle": cmpPosition.GetRotation().y,
|1660|1660| 						"ent": ent
|    | [NORMAL] ESLintBear (indent):
|    | Expected indentation of 5 tabs but found 6.
|----|    | /zpool0/trunk/binaries/data/mods/public/simulation/components/GuiInterface.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/simulation/components/GuiInterface.js
|1655|1655| 				minDist2 = dist2;
|1656|1656| 				minDistEntitySnapData = {
|1657|1657| 						"x": pos.x,
|1658|    |-						"z": pos.z,
|    |1658|+					"z": pos.z,
|1659|1659| 						"angle": cmpPosition.GetRotation().y,
|1660|1660| 						"ent": ent
|1661|1661| 				};
|    | [NORMAL] ESLintBear (indent):
|    | Expected indentation of 5 tabs but found 6.
|----|    | /zpool0/trunk/binaries/data/mods/public/simulation/components/GuiInterface.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/simulation/components/GuiInterface.js
|1656|1656| 				minDistEntitySnapData = {
|1657|1657| 						"x": pos.x,
|1658|1658| 						"z": pos.z,
|1659|    |-						"angle": cmpPosition.GetRotation().y,
|    |1659|+					"angle": cmpPosition.GetRotation().y,
|1660|1660| 						"ent": ent
|1661|1661| 				};
|1662|1662| 			}
|    | [NORMAL] ESLintBear (indent):
|    | Expected indentation of 5 tabs but found 6.
|----|    | /zpool0/trunk/binaries/data/mods/public/simulation/components/GuiInterface.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/simulation/components/GuiInterface.js
|1657|1657| 						"x": pos.x,
|1658|1658| 						"z": pos.z,
|1659|1659| 						"angle": cmpPosition.GetRotation().y,
|1660|    |-						"ent": ent
|    |1660|+					"ent": ent
|1661|1661| 				};
|1662|1662| 			}
|1663|1663| 		}
|    | [NORMAL] ESLintBear (semi):
|    | Missing semicolon.
|----|    | /zpool0/trunk/binaries/data/mods/public/simulation/components/GuiInterface.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/simulation/components/GuiInterface.js
|1703|1703| 				edges.push(edge);
|1704|1704| 			}
|1705|1705| 			return edges;
|1706|    |-		}
|    |1706|+		};
|1707|1707| 
|1708|1708| 		let edges = getValidEdges(data.snapToEdges, templatePos);
|1709|1709| 		if (edges.length)
|    | [NORMAL] ESLintBear (no-else-return):
|    | Unnecessary 'else' after 'return'.
|----|    | /zpool0/trunk/binaries/data/mods/public/simulation/components/GuiInterface.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/simulation/components/GuiInterface.js
|1724|1724| 						return behindA - behindB;
|1725|1725| 					if (!behindA)
|1726|1726| 						return a.offsetDistance - b.offsetDistance;
|1727|    |-					else
|1728|    |-						return -a.signedDistance - -b.signedDistance;
|    |1727|+					return -a.signedDistance - -b.signedDistance;
|1729|1728| 				}
|1730|1729| 				return scoreA - scoreB;
|1731|1730| 			};

binaries/data/mods/public/simulation/components/GuiInterface.js
|1796| »   »   »   »   »   let·distance·=·Vector2D.dot(secondEdge.normal,·templatePos)·-·Vector2D.dot(secondEdge.normal,·secondEdge.begin);
|    | [NORMAL] ESLintBear (no-shadow):
|    | 'distance' is already declared in the upper scope.

binaries/data/mods/public/simulation/components/GuiInterface.js
|1706| »   »   }
|    | [NORMAL] JSHintBear:
|    | Missing semicolon.

binaries/data/mods/public/simulation/components/GuiInterface.js
|1728| »   »   »   »   »   »   return·-a.signedDistance·-·-b.signedDistance;
|    | [NORMAL] JSHintBear:
|    | Confusing minuses.
|    | [NORMAL] ESLintBear (space-unary-ops):
|    | Unary word operator 'typeof' must be followed by whitespace.
|----|    | /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
| 329| 329| 	}
| 330| 330| 
| 331| 331| 	var wallPlacementInfo = updateBuildingPlacementPreview(); // entities making up the wall (wall segments, towers, ...)
| 332|    |-	if (!(wallPlacementInfo === false || typeof(wallPlacementInfo) === "object"))
|    | 332|+	if (!(wallPlacementInfo === false || typeof (wallPlacementInfo) === "object"))
| 333| 333| 	{
| 334| 334| 		error("Invalid updateBuildingPlacementPreview return value: " + uneval(wallPlacementInfo));
| 335| 335| 		return false;
|    | [NORMAL] ESLintBear (operator-linebreak):
|    | '&&' should be placed at the end of the line.
|----|    | /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
| 479| 479| 	mouseIsOverObject = (hoveredObject != null);
| 480| 480| 
| 481| 481| 	// Close the menu when interacting with the game world
| 482|    |-	if (!mouseIsOverObject && (ev.type =="mousebuttonup" || ev.type == "mousebuttondown")
| 483|    |-		&& (ev.button == SDL_BUTTON_LEFT || ev.button == SDL_BUTTON_RIGHT))
|    | 482|+	if (!mouseIsOverObject && (ev.type =="mousebuttonup" || ev.type == "mousebuttondown") &&
|    | 483|+		(ev.button == SDL_BUTTON_LEFT || ev.button == SDL_BUTTON_RIGHT))
| 484| 484| 		g_Menu.close();
| 485| 485| 
| 486| 486| 	// State-machine processing:
|    | [NORMAL] ESLintBear (indent):
|    | Expected indentation of 2 tabs but found 3.
|----|    | /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
| 640| 640| 		// user to continue building walls.
| 641| 641| 		switch (ev.type)
| 642| 642| 		{
| 643|    |-			case "mousemotion":
|    | 643|+		case "mousemotion":
| 644| 644| 				placementSupport.wallEndPosition = Engine.GetTerrainAtScreenPoint(ev.x, ev.y);
| 645| 645| 
| 646| 646| 				// Update the building placement preview, and by extension, the list of snapping candidate entities for both (!)
|    | [NORMAL] ESLintBear (indent):
|    | Expected indentation of 3 tabs but found 4.
|----|    | /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
| 641| 641| 		switch (ev.type)
| 642| 642| 		{
| 643| 643| 			case "mousemotion":
| 644|    |-				placementSupport.wallEndPosition = Engine.GetTerrainAtScreenPoint(ev.x, ev.y);
|    | 644|+			placementSupport.wallEndPosition = Engine.GetTerrainAtScreenPoint(ev.x, ev.y);
| 645| 645| 
| 646| 646| 				// Update the building placement preview, and by extension, the list of snapping candidate entities for both (!)
| 647| 647| 				// the ending point and the starting point to snap to.
|    | [NORMAL] ESLintBear (indent):
|    | Expected indentation of 3 tabs but found 4.
|----|    | /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
| 643| 643| 			case "mousemotion":
| 644| 644| 				placementSupport.wallEndPosition = Engine.GetTerrainAtScreenPoint(ev.x, ev.y);
| 645| 645| 
| 646|    |-				// Update the building placement preview, and by extension, the list of snapping candidate entities for both (!)
|    | 646|+			// Update the building placement preview, and by extension, the list of snapping candidate entities for both (!)
| 647| 647| 				// the ending point and the starting point to snap to.
| 648| 648| 				//
| 649| 649| 				// TODO: Note that here, we need to fetch all similar entities, including any offscreen ones, to support the case
|    | [NORMAL] ESLintBear (indent):
|    | Expected indentation of 3 tabs but found 4.
|----|    | /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
| 644| 644| 				placementSupport.wallEndPosition = Engine.GetTerrainAtScreenPoint(ev.x, ev.y);
| 645| 645| 
| 646| 646| 				// Update the building placement preview, and by extension, the list of snapping candidate entities for both (!)
| 647|    |-				// the ending point and the starting point to snap to.
|    | 647|+			// the ending point and the starting point to snap to.
| 648| 648| 				//
| 649| 649| 				// TODO: Note that here, we need to fetch all similar entities, including any offscreen ones, to support the case
| 650| 650| 				// where the snap entity for the starting point has moved offscreen, or has been deleted/destroyed, or was a
|    | [NORMAL] ESLintBear (indent):
|    | Expected indentation of 3 tabs but found 4.
|----|    | /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
| 645| 645| 
| 646| 646| 				// Update the building placement preview, and by extension, the list of snapping candidate entities for both (!)
| 647| 647| 				// the ending point and the starting point to snap to.
| 648|    |-				//
|    | 648|+			//
| 649| 649| 				// TODO: Note that here, we need to fetch all similar entities, including any offscreen ones, to support the case
| 650| 650| 				// where the snap entity for the starting point has moved offscreen, or has been deleted/destroyed, or was a
| 651| 651| 				// foundation and has been replaced with a completed entity since the user first chose it. Fetching all towers on
|    | [NORMAL] ESLintBear (indent):
|    | Expected indentation of 3 tabs but found 4.
|----|    | /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
| 646| 646| 				// Update the building placement preview, and by extension, the list of snapping candidate entities for both (!)
| 647| 647| 				// the ending point and the starting point to snap to.
| 648| 648| 				//
| 649|    |-				// TODO: Note that here, we need to fetch all similar entities, including any offscreen ones, to support the case
|    | 649|+			// TODO: Note that here, we need to fetch all similar entities, including any offscreen ones, to support the case
| 650| 650| 				// where the snap entity for the starting point has moved offscreen, or has been deleted/destroyed, or was a
| 651| 651| 				// foundation and has been replaced with a completed entity since the user first chose it. Fetching all towers on
| 652| 652| 				// the entire map instead of only the current screen might get expensive fast since walls all have a ton of towers
|    | [NORMAL] ESLintBear (indent):
|    | Expected indentation of 3 tabs but found 4.
|----|    | /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
| 647| 647| 				// the ending point and the starting point to snap to.
| 648| 648| 				//
| 649| 649| 				// TODO: Note that here, we need to fetch all similar entities, including any offscreen ones, to support the case
| 650|    |-				// where the snap entity for the starting point has moved offscreen, or has been deleted/destroyed, or was a
|    | 650|+			// where the snap entity for the starting point has moved offscreen, or has been deleted/destroyed, or was a
| 651| 651| 				// foundation and has been replaced with a completed entity since the user first chose it. Fetching all towers on
| 652| 652| 				// the entire map instead of only the current screen might get expensive fast since walls all have a ton of towers
| 653| 653| 				// in them. Might be useful to query only for entities within a certain range around the starting point and ending
|    | [NORMAL] ESLintBear (indent):
|    | Expected indentation of 3 tabs but found 4.
|----|    | /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
| 648| 648| 				//
| 649| 649| 				// TODO: Note that here, we need to fetch all similar entities, including any offscreen ones, to support the case
| 650| 650| 				// where the snap entity for the starting point has moved offscreen, or has been deleted/destroyed, or was a
| 651|    |-				// foundation and has been replaced with a completed entity since the user first chose it. Fetching all towers on
|    | 651|+			// foundation and has been replaced with a completed entity since the user first chose it. Fetching all towers on
| 652| 652| 				// the entire map instead of only the current screen might get expensive fast since walls all have a ton of towers
| 653| 653| 				// in them. Might be useful to query only for entities within a certain range around the starting point and ending
| 654| 654| 				// points.
|    | [NORMAL] ESLintBear (indent):
|    | Expected indentation of 3 tabs but found 4.
|----|    | /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
| 649| 649| 				// TODO: Note that here, we need to fetch all similar entities, including any offscreen ones, to support the case
| 650| 650| 				// where the snap entity for the starting point has moved offscreen, or has been deleted/destroyed, or was a
| 651| 651| 				// foundation and has been replaced with a completed entity since the user first chose it. Fetching all towers on
| 652|    |-				// the entire map instead of only the current screen might get expensive fast since walls all have a ton of towers
|    | 652|+			// the entire map instead of only the current screen might get expensive fast since walls all have a ton of towers
| 653| 653| 				// in them. Might be useful to query only for entities within a certain range around the starting point and ending
| 654| 654| 				// points.
| 655| 655| 
|    | [NORMAL] ESLintBear (indent):
|    | Expected indentation of 3 tabs but found 4.
|----|    | /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
| 650| 650| 				// where the snap entity for the starting point has moved offscreen, or has been deleted/destroyed, or was a
| 651| 651| 				// foundation and has been replaced with a completed entity since the user first chose it. Fetching all towers on
| 652| 652| 				// the entire map instead of only the current screen might get expensive fast since walls all have a ton of towers
| 653|    |-				// in them. Might be useful to query only for entities within a certain range around the starting point and ending
|    | 653|+			// in them. Might be useful to query only for entities within a certain range around the starting point and ending
| 654| 654| 				// points.
| 655| 655| 
| 656| 656| 				placementSupport.wallSnapEntitiesIncludeOffscreen = true;
|    | [NORMAL] ESLintBear (indent):
|    | Expected indentation of 3 tabs but found 4.
|----|    | /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
| 651| 651| 				// foundation and has been replaced with a completed entity since the user first chose it. Fetching all towers on
| 652| 652| 				// the entire map instead of only the current screen might get expensive fast since walls all have a ton of towers
| 653| 653| 				// in them. Might be useful to query only for entities within a certain range around the starting point and ending
| 654|    |-				// points.
|    | 654|+			// points.
| 655| 655| 
| 656| 656| 				placementSupport.wallSnapEntitiesIncludeOffscreen = true;
| 657| 657| 				var result = updateBuildingPlacementPreview(); // includes an update of the snap entity candidates
|    | [NORMAL] ESLintBear (indent):
|    | Expected indentation of 3 tabs but found 4.
|----|    | /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
| 653| 653| 				// in them. Might be useful to query only for entities within a certain range around the starting point and ending
| 654| 654| 				// points.
| 655| 655| 
| 656|    |-				placementSupport.wallSnapEntitiesIncludeOffscreen = true;
|    | 656|+			placementSupport.wallSnapEntitiesIncludeOffscreen = true;
| 657| 657| 				var result = updateBuildingPlacementPreview(); // includes an update of the snap entity candidates
| 658| 658| 
| 659| 659| 				if (result && result.cost)
|    | [NORMAL] ESLintBear (indent):
|    | Expected indentation of 3 tabs but found 4.
|----|    | /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
| 654| 654| 				// points.
| 655| 655| 
| 656| 656| 				placementSupport.wallSnapEntitiesIncludeOffscreen = true;
| 657|    |-				var result = updateBuildingPlacementPreview(); // includes an update of the snap entity candidates
|    | 657|+			var result = updateBuildingPlacementPreview(); // includes an update of the snap entity candidates
| 658| 658| 
| 659| 659| 				if (result && result.cost)
| 660| 660| 				{
|    | [NORMAL] ESLintBear (indent):
|    | Expected indentation of 3 tabs but found 4.
|----|    | /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
| 656| 656| 				placementSupport.wallSnapEntitiesIncludeOffscreen = true;
| 657| 657| 				var result = updateBuildingPlacementPreview(); // includes an update of the snap entity candidates
| 658| 658| 
| 659|    |-				if (result && result.cost)
|    | 659|+			if (result && result.cost)
| 660| 660| 				{
| 661| 661| 					var neededResources = Engine.GuiInterfaceCall("GetNeededResources", { "cost": result.cost });
| 662| 662| 					placementSupport.tooltipMessage = [
|    | [NORMAL] ESLintBear (indent):
|    | Expected indentation of 3 tabs but found 4.
|----|    | /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
| 657| 657| 				var result = updateBuildingPlacementPreview(); // includes an update of the snap entity candidates
| 658| 658| 
| 659| 659| 				if (result && result.cost)
| 660|    |-				{
|    | 660|+			{
| 661| 661| 					var neededResources = Engine.GuiInterfaceCall("GetNeededResources", { "cost": result.cost });
| 662| 662| 					placementSupport.tooltipMessage = [
| 663| 663| 						getEntityCostTooltip(result),
|    | [NORMAL] ESLintBear (indent):
|    | Expected indentation of 4 tabs but found 5.
|----|    | /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
| 658| 658| 
| 659| 659| 				if (result && result.cost)
| 660| 660| 				{
| 661|    |-					var neededResources = Engine.GuiInterfaceCall("GetNeededResources", { "cost": result.cost });
|    | 661|+				var neededResources = Engine.GuiInterfaceCall("GetNeededResources", { "cost": result.cost });
| 662| 662| 					placementSupport.tooltipMessage = [
| 663| 663| 						getEntityCostTooltip(result),
| 664| 664| 						getNeededResourcesTooltip(neededResources)
|    | [NORMAL] ESLintBear (indent):
|    | Expected indentation of 4 tabs but found 5.
|----|    | /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
| 659| 659| 				if (result && result.cost)
| 660| 660| 				{
| 661| 661| 					var neededResources = Engine.GuiInterfaceCall("GetNeededResources", { "cost": result.cost });
| 662|    |-					placementSupport.tooltipMessage = [
|    | 662|+				placementSupport.tooltipMessage = [
| 663| 663| 						getEntityCostTooltip(result),
| 664| 664| 						getNeededResourcesTooltip(neededResources)
| 665| 665| 					].filter(tip => tip).join("\n");
|    | [NORMAL] ESLintBear (indent):
|    | Expected indentation of 5 tabs but found 6.
|----|    | /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
| 660| 660| 				{
| 661| 661| 					var neededResources = Engine.GuiInterfaceCall("GetNeededResources", { "cost": result.cost });
| 662| 662| 					placementSupport.tooltipMessage = [
| 663|    |-						getEntityCostTooltip(result),
|    | 663|+					getEntityCostTooltip(result),
| 664| 664| 						getNeededResourcesTooltip(neededResources)
| 665| 665| 					].filter(tip => tip).join("\n");
| 666| 666| 				}
|    | [NORMAL] ESLintBear (indent):
|    | Expected indentation of 5 tabs but found 6.
|----|    | /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
| 661| 661| 					var neededResources = Engine.GuiInterfaceCall("GetNeededResources", { "cost": result.cost });
| 662| 662| 					placementSupport.tooltipMessage = [
| 663| 663| 						getEntityCostTooltip(result),
| 664|    |-						getNeededResourcesTooltip(neededResources)
|    | 664|+					getNeededResourcesTooltip(neededResources)
| 665| 665| 					].filter(tip => tip).join("\n");
| 666| 666| 				}
| 667| 667| 
|    | [NORMAL] ESLintBear (indent):
|    | Expected indentation of 4 tabs but found 5.
|----|    | /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
| 662| 662| 					placementSupport.tooltipMessage = [
| 663| 663| 						getEntityCostTooltip(result),
| 664| 664| 						getNeededResourcesTooltip(neededResources)
| 665|    |-					].filter(tip => tip).join("\n");
|    | 665|+				].filter(tip => tip).join("\n");
| 666| 666| 				}
| 667| 667| 
| 668| 668| 				break;
|    | [NORMAL] ESLintBear (indent):
|    | Expected indentation of 3 tabs but found 4.
|----|    | /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
| 663| 663| 						getEntityCostTooltip(result),
| 664| 664| 						getNeededResourcesTooltip(neededResources)
| 665| 665| 					].filter(tip => tip).join("\n");
| 666|    |-				}
|    | 666|+			}
| 667| 667| 
| 668| 668| 				break;
| 669| 669| 
|    | [NORMAL] ESLintBear (indent):
|    | Expected indentation of 3 tabs but found 4.
|----|    | /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
| 665| 665| 					].filter(tip => tip).join("\n");
| 666| 666| 				}
| 667| 667| 
| 668|    |-				break;
|    | 668|+			break;
| 669| 669| 
| 670| 670| 			case "mousebuttondown":
| 671| 671| 				if (ev.button == SDL_BUTTON_LEFT)
|    | [NORMAL] ESLintBear (indent):
|    | Expected indentation of 2 tabs but found 3.
|----|    | /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
| 667| 667| 
| 668| 668| 				break;
| 669| 669| 
| 670|    |-			case "mousebuttondown":
|    | 670|+		case "mousebuttondown":
| 671| 671| 				if (ev.button == SDL_BUTTON_LEFT)
| 672| 672| 				{
| 673| 673| 					var queued = Engine.HotkeyIsPressed("session.queue");
|    | [NORMAL] ESLintBear (indent):
|    | Expected indentation of 3 tabs but found 4.
|----|    | /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
| 668| 668| 				break;
| 669| 669| 
| 670| 670| 			case "mousebuttondown":
| 671|    |-				if (ev.button == SDL_BUTTON_LEFT)
|    | 671|+			if (ev.button == SDL_BUTTON_LEFT)
| 672| 672| 				{
| 673| 673| 					var queued = Engine.HotkeyIsPressed("session.queue");
| 674| 674| 					if (tryPlaceWall(queued))
|    | [NORMAL] ESLintBear (indent):
|    | Expected indentation of 3 tabs but found 4.
|----|    | /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
| 669| 669| 
| 670| 670| 			case "mousebuttondown":
| 671| 671| 				if (ev.button == SDL_BUTTON_LEFT)
| 672|    |-				{
|    | 672|+			{
| 673| 673| 					var queued = Engine.HotkeyIsPressed("session.queue");
| 674| 674| 					if (tryPlaceWall(queued))
| 675| 675| 					{
|    | [NORMAL] ESLintBear (indent):
|    | Expected indentation of 4 tabs but found 5.
|----|    | /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
| 670| 670| 			case "mousebuttondown":
| 671| 671| 				if (ev.button == SDL_BUTTON_LEFT)
| 672| 672| 				{
| 673|    |-					var queued = Engine.HotkeyIsPressed("session.queue");
|    | 673|+				var queued = Engine.HotkeyIsPressed("session.queue");
| 674| 674| 					if (tryPlaceWall(queued))
| 675| 675| 					{
| 676| 676| 						if (queued)
|    | [NORMAL] ESLintBear (indent):
|    | Expected indentation of 4 tabs but found 5.
|----|    | /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
| 671| 671| 				if (ev.button == SDL_BUTTON_LEFT)
| 672| 672| 				{
| 673| 673| 					var queued = Engine.HotkeyIsPressed("session.queue");
| 674|    |-					if (tryPlaceWall(queued))
|    | 674|+				if (tryPlaceWall(queued))
| 675| 675| 					{
| 676| 676| 						if (queued)
| 677| 677| 						{
|    | [NORMAL] ESLintBear (indent):
|    | Expected indentation of 4 tabs but found 5.
|----|    | /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
| 672| 672| 				{
| 673| 673| 					var queued = Engine.HotkeyIsPressed("session.queue");
| 674| 674| 					if (tryPlaceWall(queued))
| 675|    |-					{
|    | 675|+				{
| 676| 676| 						if (queued)
| 677| 677| 						{
| 678| 678| 							// continue building, just set a new starting position where we left off
|    | [NORMAL] ESLintBear (indent):
|    | Expected indentation of 5 tabs but found 6.
|----|    | /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
| 673| 673| 					var queued = Engine.HotkeyIsPressed("session.queue");
| 674| 674| 					if (tryPlaceWall(queued))
| 675| 675| 					{
| 676|    |-						if (queued)
|    | 676|+					if (queued)
| 677| 677| 						{
| 678| 678| 							// continue building, just set a new starting position where we left off
| 679| 679| 							placementSupport.position = placementSupport.wallEndPosition;
|    | [NORMAL] ESLintBear (indent):
|    | Expected indentation of 5 tabs but found 6.
|----|    | /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
| 674| 674| 					if (tryPlaceWall(queued))
| 675| 675| 					{
| 676| 676| 						if (queued)
| 677|    |-						{
|    | 677|+					{
| 678| 678| 							// continue building, just set a new starting position where we left off
| 679| 679| 							placementSupport.position = placementSupport.wallEndPosition;
| 680| 680| 							placementSupport.wallEndPosition = undefined;
|    | [NORMAL] ESLintBear (indent):
|    | Expected indentation of 6 tabs but found 7.
|----|    | /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
| 675| 675| 					{
| 676| 676| 						if (queued)
| 677| 677| 						{
| 678|    |-							// continue building, just set a new starting position where we left off
|    | 678|+						// continue building, just set a new starting position where we left off
| 679| 679| 							placementSupport.position = placementSupport.wallEndPosition;
| 680| 680| 							placementSupport.wallEndPosition = undefined;
| 681| 681| 
|    | [NORMAL] ESLintBear (indent):
|    | Expected indentation of 6 tabs but found 7.
|----|    | /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
| 676| 676| 						if (queued)
| 677| 677| 						{
| 678| 678| 							// continue building, just set a new starting position where we left off
| 679|    |-							placementSupport.position = placementSupport.wallEndPosition;
|    | 679|+						placementSupport.position = placementSupport.wallEndPosition;
| 680| 680| 							placementSupport.wallEndPosition = undefined;
| 681| 681| 
| 682| 682| 							inputState = INPUT_BUILDING_WALL_CLICK;
|    | [NORMAL] ESLintBear (indent):
|    | Expected indentation of 6 tabs but found 7.
|----|    | /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
| 677| 677| 						{
| 678| 678| 							// continue building, just set a new starting position where we left off
| 679| 679| 							placementSupport.position = placementSupport.wallEndPosition;
| 680|    |-							placementSupport.wallEndPosition = undefined;
|    | 680|+						placementSupport.wallEndPosition = undefined;
| 681| 681| 
| 682| 682| 							inputState = INPUT_BUILDING_WALL_CLICK;
| 683| 683| 						}
|    | [NORMAL] ESLintBear (indent):
|    | Expected indentation of 6 tabs but found 7.
|----|    | /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
| 679| 679| 							placementSupport.position = placementSupport.wallEndPosition;
| 680| 680| 							placementSupport.wallEndPosition = undefined;
| 681| 681| 
| 682|    |-							inputState = INPUT_BUILDING_WALL_CLICK;
|    | 682|+						inputState = INPUT_BUILDING_WALL_CLICK;
| 683| 683| 						}
| 684| 684| 						else
| 685| 685| 						{
|    | [NORMAL] ESLintBear (indent):
|    | Expected indentation of 5 tabs but found 6.
|----|    | /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
| 680| 680| 							placementSupport.wallEndPosition = undefined;
| 681| 681| 
| 682| 682| 							inputState = INPUT_BUILDING_WALL_CLICK;
| 683|    |-						}
|    | 683|+					}
| 684| 684| 						else
| 685| 685| 						{
| 686| 686| 							placementSupport.Reset();
|    | [NORMAL] ESLintBear (indent):
|    | Expected indentation of 5 tabs but found 6.
|----|    | /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
| 681| 681| 
| 682| 682| 							inputState = INPUT_BUILDING_WALL_CLICK;
| 683| 683| 						}
| 684|    |-						else
|    | 684|+					else
| 685| 685| 						{
| 686| 686| 							placementSupport.Reset();
| 687| 687| 							inputState = INPUT_NORMAL;
|    | [NORMAL] ESLintBear (indent):
|    | Expected indentation of 5 tabs but found 6.
|----|    | /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
| 682| 682| 							inputState = INPUT_BUILDING_WALL_CLICK;
| 683| 683| 						}
| 684| 684| 						else
| 685|    |-						{
|    | 685|+					{
| 686| 686| 							placementSupport.Reset();
| 687| 687| 							inputState = INPUT_NORMAL;
| 688| 688| 						}
|    | [NORMAL] ESLintBear (indent):
|    | Expected indentation of 6 tabs but found 7.
|----|    | /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
| 683| 683| 						}
| 684| 684| 						else
| 685| 685| 						{
| 686|    |-							placementSupport.Reset();
|    | 686|+						placementSupport.Reset();
| 687| 687| 							inputState = INPUT_NORMAL;
| 688| 688| 						}
| 689| 689| 					}
|    | [NORMAL] ESLintBear (indent):
|    | Expected indentation of 6 tabs but found 7.
|----|    | /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
| 684| 684| 						else
| 685| 685| 						{
| 686| 686| 							placementSupport.Reset();
| 687|    |-							inputState = INPUT_NORMAL;
|    | 687|+						inputState = INPUT_NORMAL;
| 688| 688| 						}
| 689| 689| 					}
| 690| 690| 					else
|    | [NORMAL] ESLintBear (indent):
|    | Expected indentation of 5 tabs but found 6.
|----|    | /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
| 685| 685| 						{
| 686| 686| 							placementSupport.Reset();
| 687| 687| 							inputState = INPUT_NORMAL;
| 688|    |-						}
|    | 688|+					}
| 689| 689| 					}
| 690| 690| 					else
| 691| 691| 						placementSupport.tooltipMessage = translate("Cannot build wall here!");
|    | [NORMAL] ESLintBear (indent):
|    | Expected indentation of 4 tabs but found 5.
|----|    | /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
| 686| 686| 							placementSupport.Reset();
| 687| 687| 							inputState = INPUT_NORMAL;
| 688| 688| 						}
| 689|    |-					}
|    | 689|+				}
| 690| 690| 					else
| 691| 691| 						placementSupport.tooltipMessage = translate("Cannot build wall here!");
| 692| 692| 
|    | [NORMAL] ESLintBear (indent):
|    | Expected indentation of 4 tabs but found 5.
|----|    | /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
| 687| 687| 							inputState = INPUT_NORMAL;
| 688| 688| 						}
| 689| 689| 					}
| 690|    |-					else
|    | 690|+				else
| 691| 691| 						placementSupport.tooltipMessage = translate("Cannot build wall here!");
| 692| 692| 
| 693| 693| 					updateBuildingPlacementPreview();
|    | [NORMAL] ESLintBear (indent):
|    | Expected indentation of 5 tabs but found 6.
|----|    | /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
| 688| 688| 						}
| 689| 689| 					}
| 690| 690| 					else
| 691|    |-						placementSupport.tooltipMessage = translate("Cannot build wall here!");
|    | 691|+					placementSupport.tooltipMessage = translate("Cannot build wall here!");
| 692| 692| 
| 693| 693| 					updateBuildingPlacementPreview();
| 694| 694| 					return true;
|    | [NORMAL] ESLintBear (indent):
|    | Expected indentation of 4 tabs but found 5.
|----|    | /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
| 690| 690| 					else
| 691| 691| 						placementSupport.tooltipMessage = translate("Cannot build wall here!");
| 692| 692| 
| 693|    |-					updateBuildingPlacementPreview();
|    | 693|+				updateBuildingPlacementPreview();
| 694| 694| 					return true;
| 695| 695| 				}
| 696| 696| 				else if (ev.button == SDL_BUTTON_RIGHT)
|    | [NORMAL] ESLintBear (indent):
|    | Expected indentation of 4 tabs but found 5.
|----|    | /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
| 691| 691| 						placementSupport.tooltipMessage = translate("Cannot build wall here!");
| 692| 692| 
| 693| 693| 					updateBuildingPlacementPreview();
| 694|    |-					return true;
|    | 694|+				return true;
| 695| 695| 				}
| 696| 696| 				else if (ev.button == SDL_BUTTON_RIGHT)
| 697| 697| 				{
|    | [NORMAL] ESLintBear (indent):
|    | Expected indentation of 3 tabs but found 4.
|----|    | /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
| 692| 692| 
| 693| 693| 					updateBuildingPlacementPreview();
| 694| 694| 					return true;
| 695|    |-				}
|    | 695|+			}
| 696| 696| 				else if (ev.button == SDL_BUTTON_RIGHT)
| 697| 697| 				{
| 698| 698| 					// reset to normal input mode
|    | [NORMAL] ESLintBear (indent):
|    | Expected indentation of 3 tabs but found 4.
|----|    | /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
| 693| 693| 					updateBuildingPlacementPreview();
| 694| 694| 					return true;
| 695| 695| 				}
| 696|    |-				else if (ev.button == SDL_BUTTON_RIGHT)
|    | 696|+			else if (ev.button == SDL_BUTTON_RIGHT)
| 697| 697| 				{
| 698| 698| 					// reset to normal input mode
| 699| 699| 					placementSupport.Reset();
|    | [NORMAL] ESLintBear (indent):
|    | Expected indentation of 3 tabs but found 4.
|----|    | /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
| 694| 694| 					return true;
| 695| 695| 				}
| 696| 696| 				else if (ev.button == SDL_BUTTON_RIGHT)
| 697|    |-				{
|    | 697|+			{
| 698| 698| 					// reset to normal input mode
| 699| 699| 					placementSupport.Reset();
| 700| 700| 					updateBuildingPlacementPreview();
|    | [NORMAL] ESLintBear (indent):
|    | Expected indentation of 4 tabs but found 5.
|----|    | /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
| 695| 695| 				}
| 696| 696| 				else if (ev.button == SDL_BUTTON_RIGHT)
| 697| 697| 				{
| 698|    |-					// reset to normal input mode
|    | 698|+				// reset to normal input mode
| 699| 699| 					placementSupport.Reset();
| 700| 700| 					updateBuildingPlacementPreview();
| 701| 701| 
|    | [NORMAL] ESLintBear (indent):
|    | Expected indentation of 4 tabs but found 5.
|----|    | /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
| 696| 696| 				else if (ev.button == SDL_BUTTON_RIGHT)
| 697| 697| 				{
| 698| 698| 					// reset to normal input mode
| 699|    |-					placementSupport.Reset();
|    | 699|+				placementSupport.Reset();
| 700| 700| 					updateBuildingPlacementPreview();
| 701| 701| 
| 702| 702| 					inputState = INPUT_NORMAL;
|    | [NORMAL] ESLintBear (indent):
|    | Expected indentation of 4 tabs but found 5.
|----|    | /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
| 697| 697| 				{
| 698| 698| 					// reset to normal input mode
| 699| 699| 					placementSupport.Reset();
| 700|    |-					updateBuildingPlacementPreview();
|    | 700|+				updateBuildingPlacementPreview();
| 701| 701| 
| 702| 702| 					inputState = INPUT_NORMAL;
| 703| 703| 					return true;
|    | [NORMAL] ESLintBear (indent):
|    | Expected indentation of 4 tabs but found 5.
|----|    | /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
| 699| 699| 					placementSupport.Reset();
| 700| 700| 					updateBuildingPlacementPreview();
| 701| 701| 
| 702|    |-					inputState = INPUT_NORMAL;
|    | 702|+				inputState = INPUT_NORMAL;
| 703| 703| 					return true;
| 704| 704| 				}
| 705| 705| 				break;
|    | [NORMAL] ESLintBear (indent):
|    | Expected indentation of 4 tabs but found 5.
|----|    | /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
| 700| 700| 					updateBuildingPlacementPreview();
| 701| 701| 
| 702| 702| 					inputState = INPUT_NORMAL;
| 703|    |-					return true;
|    | 703|+				return true;
| 704| 704| 				}
| 705| 705| 				break;
| 706| 706| 		}
|    | [NORMAL] ESLintBear (indent):
|    | Expected indentation of 3 tabs but found 4.
|----|    | /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
| 701| 701| 
| 702| 702| 					inputState = INPUT_NORMAL;
| 703| 703| 					return true;
| 704|    |-				}
|    | 704|+			}
| 705| 705| 				break;
| 706| 706| 		}
| 707| 707| 		break;
|    | [NORMAL] ESLintBear (indent):
|    | Expected indentation of 3 tabs but found 4.
|----|    | /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
| 702| 702| 					inputState = INPUT_NORMAL;
| 703| 703| 					return true;
| 704| 704| 				}
| 705|    |-				break;
|    | 705|+			break;
| 706| 706| 		}
| 707| 707| 		break;
| 708| 708| 
|    | [NORMAL] ESLintBear (indent):
|    | Expected indentation of 3 tabs but found 4.
|----|    | /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
| 844| 844| 			break;
| 845| 845| 
| 846| 846| 		case "hotkeydown":
| 847|    |-				if (ev.hotkey.indexOf("selection.group.") == 0)
|    | 847|+			if (ev.hotkey.indexOf("selection.group.") == 0)
| 848| 848| 				{
| 849| 849| 					let now = Date.now();
| 850| 850| 					if (now - doublePressTimer < doublePressTime && ev.hotkey == prevHotkey)
|    | [NORMAL] ESLintBear (indent):
|    | Expected indentation of 3 tabs but found 4.
|----|    | /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
| 845| 845| 
| 846| 846| 		case "hotkeydown":
| 847| 847| 				if (ev.hotkey.indexOf("selection.group.") == 0)
| 848|    |-				{
|    | 848|+			{
| 849| 849| 					let now = Date.now();
| 850| 850| 					if (now - doublePressTimer < doublePressTime && ev.hotkey == prevHotkey)
| 851| 851| 					{
|    | [NORMAL] ESLintBear (indent):
|    | Expected indentation of 4 tabs but found 5.
|----|    | /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
| 846| 846| 		case "hotkeydown":
| 847| 847| 				if (ev.hotkey.indexOf("selection.group.") == 0)
| 848| 848| 				{
| 849|    |-					let now = Date.now();
|    | 849|+				let now = Date.now();
| 850| 850| 					if (now - doublePressTimer < doublePressTime && ev.hotkey == prevHotkey)
| 851| 851| 					{
| 852| 852| 						if (ev.hotkey.indexOf("selection.group.select.") == 0)
|    | [NORMAL] ESLintBear (indent):
|    | Expected indentation of 4 tabs but found 5.
|----|    | /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
| 847| 847| 				if (ev.hotkey.indexOf("selection.group.") == 0)
| 848| 848| 				{
| 849| 849| 					let now = Date.now();
| 850|    |-					if (now - doublePressTimer < doublePressTime && ev.hotkey == prevHotkey)
|    | 850|+				if (now - doublePressTimer < doublePressTime && ev.hotkey == prevHotkey)
| 851| 851| 					{
| 852| 852| 						if (ev.hotkey.indexOf("selection.group.select.") == 0)
| 853| 853| 						{
|    | [NORMAL] ESLintBear (indent):
|    | Expected indentation of 4 tabs but found 5.
|----|    | /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
| 848| 848| 				{
| 849| 849| 					let now = Date.now();
| 850| 850| 					if (now - doublePressTimer < doublePressTime && ev.hotkey == prevHotkey)
| 851|    |-					{
|    | 851|+				{
| 852| 852| 						if (ev.hotkey.indexOf("selection.group.select.") == 0)
| 853| 853| 						{
| 854| 854| 							var sptr = ev.hotkey.split(".");
|    | [NORMAL] ESLintBear (indent):
|    | Expected indentation of 5 tabs but found 6.
|----|    | /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
| 849| 849| 					let now = Date.now();
| 850| 850| 					if (now - doublePressTimer < doublePressTime && ev.hotkey == prevHotkey)
| 851| 851| 					{
| 852|    |-						if (ev.hotkey.indexOf("selection.group.select.") == 0)
|    | 852|+					if (ev.hotkey.indexOf("selection.group.select.") == 0)
| 853| 853| 						{
| 854| 854| 							var sptr = ev.hotkey.split(".");
| 855| 855| 							performGroup("snap", sptr[3]);
|    | [NORMAL] ESLintBear (indent):
|    | Expected indentation of 5 tabs but found 6.
|----|    | /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
| 850| 850| 					if (now - doublePressTimer < doublePressTime && ev.hotkey == prevHotkey)
| 851| 851| 					{
| 852| 852| 						if (ev.hotkey.indexOf("selection.group.select.") == 0)
| 853|    |-						{
|    | 853|+					{
| 854| 854| 							var sptr = ev.hotkey.split(".");
| 855| 855| 							performGroup("snap", sptr[3]);
| 856| 856| 						}
|    | [NORMAL] ESLintBear (indent):
|    | Expected indentation of 6 tabs but found 7.
|----|    | /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
| 851| 851| 					{
| 852| 852| 						if (ev.hotkey.indexOf("selection.group.select.") == 0)
| 853| 853| 						{
| 854|    |-							var sptr = ev.hotkey.split(".");
|    | 854|+						var sptr = ev.hotkey.split(".");
| 855| 855| 							performGroup("snap", sptr[3]);
| 856| 856| 						}
| 857| 857| 					}
|    | [NORMAL] ESLintBear (indent):
|    | Expected indentation of 6 tabs but found 7.
|----|    | /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
| 852| 852| 						if (ev.hotkey.indexOf("selection.group.select.") == 0)
| 853| 853| 						{
| 854| 854| 							var sptr = ev.hotkey.split(".");
| 855|    |-							performGroup("snap", sptr[3]);
|    | 855|+						performGroup("snap", sptr[3]);
| 856| 856| 						}
| 857| 857| 					}
| 858| 858| 					else
|    | [NORMAL] ESLintBear (indent):
|    | Expected indentation of 5 tabs but found 6.
|----|    | /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
| 853| 853| 						{
| 854| 854| 							var sptr = ev.hotkey.split(".");
| 855| 855| 							performGroup("snap", sptr[3]);
| 856|    |-						}
|    | 856|+					}
| 857| 857| 					}
| 858| 858| 					else
| 859| 859| 					{
|    | [NORMAL] ESLintBear (indent):
|    | Expected indentation of 4 tabs but found 5.
|----|    | /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
| 854| 854| 							var sptr = ev.hotkey.split(".");
| 855| 855| 							performGroup("snap", sptr[3]);
| 856| 856| 						}
| 857|    |-					}
|    | 857|+				}
| 858| 858| 					else
| 859| 859| 					{
| 860| 860| 						var sptr = ev.hotkey.split(".");
|    | [NORMAL] ESLintBear (indent):
|    | Expected indentation of 4 tabs but found 5.
|----|    | /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
| 855| 855| 							performGroup("snap", sptr[3]);
| 856| 856| 						}
| 857| 857| 					}
| 858|    |-					else
|    | 858|+				else
| 859| 859| 					{
| 860| 860| 						var sptr = ev.hotkey.split(".");
| 861| 861| 						performGroup(sptr[2], sptr[3]);
|    | [NORMAL] ESLintBear (indent):
|    | Expected indentation of 4 tabs but found 5.
|----|    | /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
| 856| 856| 						}
| 857| 857| 					}
| 858| 858| 					else
| 859|    |-					{
|    | 859|+				{
| 860| 860| 						var sptr = ev.hotkey.split(".");
| 861| 861| 						performGroup(sptr[2], sptr[3]);
| 862| 862| 
|    | [NORMAL] ESLintBear (indent):
|    | Expected indentation of 5 tabs but found 6.
|----|    | /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
| 857| 857| 					}
| 858| 858| 					else
| 859| 859| 					{
| 860|    |-						var sptr = ev.hotkey.split(".");
|    | 860|+					var sptr = ev.hotkey.split(".");
| 861| 861| 						performGroup(sptr[2], sptr[3]);
| 862| 862| 
| 863| 863| 						doublePressTimer = now;
|    | [NORMAL] ESLintBear (indent):
|    | Expected indentation of 5 tabs but found 6.
|----|    | /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
| 858| 858| 					else
| 859| 859| 					{
| 860| 860| 						var sptr = ev.hotkey.split(".");
| 861|    |-						performGroup(sptr[2], sptr[3]);
|    | 861|+					performGroup(sptr[2], sptr[3]);
| 862| 862| 
| 863| 863| 						doublePressTimer = now;
| 864| 864| 						prevHotkey = ev.hotkey;
|    | [NORMAL] ESLintBear (indent):
|    | Expected indentation of 5 tabs but found 6.
|----|    | /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
| 860| 860| 						var sptr = ev.hotkey.split(".");
| 861| 861| 						performGroup(sptr[2], sptr[3]);
| 862| 862| 
| 863|    |-						doublePressTimer = now;
|    | 863|+					doublePressTimer = now;
| 864| 864| 						prevHotkey = ev.hotkey;
| 865| 865| 					}
| 866| 866| 				}
|    | [NORMAL] ESLintBear (indent):
|    | Expected indentation of 5 tabs but found 6.
|----|    | /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
| 861| 861| 						performGroup(sptr[2], sptr[3]);
| 862| 862| 
| 863| 863| 						doublePressTimer = now;
| 864|    |-						prevHotkey = ev.hotkey;
|    | 864|+					prevHotkey = ev.hotkey;
| 865| 865| 					}
| 866| 866| 				}
| 867| 867| 				break;
|    | [NORMAL] ESLintBear (indent):
|    | Expected indentation of 4 tabs but found 5.
|----|    | /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
| 862| 862| 
| 863| 863| 						doublePressTimer = now;
| 864| 864| 						prevHotkey = ev.hotkey;
| 865|    |-					}
|    | 865|+				}
| 866| 866| 				}
| 867| 867| 				break;
| 868| 868| 		}
|    | [NORMAL] ESLintBear (indent):
|    | Expected indentation of 3 tabs but found 4.
|----|    | /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
| 863| 863| 						doublePressTimer = now;
| 864| 864| 						prevHotkey = ev.hotkey;
| 865| 865| 					}
| 866|    |-				}
|    | 866|+			}
| 867| 867| 				break;
| 868| 868| 		}
| 869| 869| 		break;
|    | [NORMAL] ESLintBear (indent):
|    | Expected indentation of 3 tabs but found 4.
|----|    | /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
| 864| 864| 						prevHotkey = ev.hotkey;
| 865| 865| 					}
| 866| 866| 				}
| 867|    |-				break;
|    | 867|+			break;
| 868| 868| 		}
| 869| 869| 		break;
| 870| 870| 
|    | [NORMAL] ESLintBear (space-in-parens):
|    | There should be no spaces inside this paren.
|----|    | /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
|1515|1515| 		g_BatchTrainingEntityAllowedCount < batchedSize * appropriateBuildings.length)
|1516|1516| 	{
|1517|1517| 		// Train as many full batches as we can
|1518|    |-		let buildingsCountToTrainFullBatch = Math.floor( g_BatchTrainingEntityAllowedCount / batchedSize);
|    |1518|+		let buildingsCountToTrainFullBatch = Math.floor(g_BatchTrainingEntityAllowedCount / batchedSize);
|1519|1519| 		Engine.PostNetworkCommand({
|1520|1520| 			"type": "train",
|1521|1521| 			"entities": appropriateBuildings.slice(0, buildingsCountToTrainFullBatch),
|    | [NORMAL] ESLintBear (comma-spacing):
|    | A space is required after ','.
|----|    | /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
|1594|1594| 	var selectall = Engine.HotkeyIsPressed("selection.offscreen");
|1595|1595| 
|1596|1596| 	// Reset the last idle unit, etc., if the selection type has changed.
|1597|    |-	if (selectall || classes.length != lastIdleClasses.length || !classes.every((v,i) => v === lastIdleClasses[i]))
|    |1597|+	if (selectall || classes.length != lastIdleClasses.length || !classes.every((v, i) => v === lastIdleClasses[i]))
|1598|1598| 		resetIdleUnit();
|1599|1599| 	lastIdleClasses = classes;
|1600|1600| 

binaries/data/mods/public/gui/session/input.js
| 231| »   var·target·=·undefined;
|    | [NORMAL] ESLintBear (no-undef-init):
|    | It's not necessary to initialize 'target' to undefined.

binaries/data/mods/public/gui/session/input.js
| 245| »   var·actionInfo·=·undefined;
|    | [NORMAL] ESLintBear (no-undef-init):
|    | It's not necessary to initialize 'actionInfo' to undefined.

binaries/data/mods/public/gui/session/input.js
| 468| »   switch·(ev.type)
|    | [NORMAL] ESLintBear (default-case):
|    | Expected a default case.

binaries/data/mods/public/gui/session/input.js
| 495| »   switch·(inputState)
|    | [NORMAL] ESLintBear (default-case):
|    | Expected a default case.

binaries/data/mods/public/gui/session/input.js
| 499| »   »   switch·(ev.type)
|    | [NORMAL] ESLintBear (default-case):
|    | Expected a default case.

binaries/data/mods/public/gui/session/input.js
| 554| »   »   switch·(ev.type)
|    | [NORMAL] ESLintBear (default-case):
|    | Expected a default case.

binaries/data/mods/public/gui/session/input.js
| 564| »   »   switch·(ev.type)
|    | [NORMAL] ESLintBear (default-case):
|    | Expected a default case.

binaries/data/mods/public/gui/session/input.js
| 612| »   »   switch·(ev.type)
|    | [NORMAL] ESLintBear (default-case):
|    | Expected a default case.

binaries/data/mods/public/gui/session/input.js
| 641| »   »   switch·(ev.type)
|    | [NORMAL] ESLintBear (default-case):
|    | Expected a default case.

binaries/data/mods/public/gui/session/input.js
| 710| »   »   switch·(ev.type)
|    | [NORMAL] ESLintBear (default-case):
|    | Expected a default case.

binaries/data/mods/public/gui/session/input.js
| 811| »   switch·(inputState)
|    | [NORMAL] ESLintBear (default-case):
|    | Expected a default case.

binaries/data/mods/public/gui/session/input.js
| 814| »   »   switch·(ev.type)
|    | [NORMAL] ESLintBear (default-case):
|    | Expected a default case.

binaries/data/mods/public/gui/session/input.js
| 916| »   »   switch·(ev.type)
|    | [NORMAL] ESLintBear (default-case):
|    | Expected a default case.

binaries/data/mods/public/gui/session/input.js
|1005| »   »   switch·(ev.type)
|    | [NORMAL] ESLintBear (default-case):
|    | Expected a default case.

binaries/data/mods/public/gui/session/input.js
|1019| »   »   »   »   let·action·=·determineAction(ev.x,·ev.y);
|    | [NORMAL] ESLintBear (no-shadow):
|    | 'action' is already declared in the upper scope.

binaries/data/mods/public/gui/session/input.js
|1028| »   »   switch·(ev.type)
|    | [NORMAL] ESLintBear (default-case):
|    | Expected a default case.

binaries/data/mods/public/gui/session/input.js
|1117| »   »   »   switch·(ev.hotkey)
|    | [NORMAL] ESLintBear (default-case):
|    | Expected a default case.

binaries/data/mods/public/gui/session/input.js
|1545| »   switch·(action)
|    | [NORMAL] ESLintBear (default-case):
|    | Expected a default case.

binaries/data/mods/public/gui/session/input.js
| 231| »   var·target·=·undefined;
|    | [NORMAL] JSHintBear:
|    | It's not necessary to initialize 'target' to 'undefined'.

binaries/data/mods/public/gui/session/input.js
| 245| »   var·actionInfo·=·undefined;
|    | [NORMAL] JSHintBear:
|    | It's not necessary to initialize 'actionInfo' to 'undefined'.

binaries/data/mods/public/gui/session/input.js
| 259| »   for·(var·action·of·actions)
|    | [NORMAL] JSHintBear:
|    | 'action' is already defined.

binaries/data/mods/public/gui/session/input.js
| 262| »   »   »   var·r·=·g_UnitActions[action].hotkeyActionCheck(target,·selection);
|    | [NORMAL] JSHintBear:
|    | 'r' is already defined.

binaries/data/mods/public/gui/session/input.js
| 267| »   for·(var·action·of·actions)
|    | [NORMAL] JSHintBear:
|    | 'action' is already defined.

binaries/data/mods/public/gui/session/input.js
| 270| »   »   »   var·r·=·g_UnitActions[action].actionCheck(target,·selection);
|    | [NORMAL] JSHintBear:
|    | 'r' is already defined.

binaries/data/mods/public/gui/session/input.js
| 483| »   »   &&·(ev.button·==·SDL_BUTTON_LEFT·||·ev.button·==·SDL_BUTTON_RIGHT))
|    | [NORMAL] JSHintBear:
|    | Misleading line break before '&&'; readers may interpret this as an expression boundary.

binaries/data/mods/public/gui/session/input.js
| 513| »   »   »   »   var·rect·=·updateBandbox(bandbox,·ev,·true);
|    | [NORMAL] JSHintBear:
|    | 'rect' is already defined.

binaries/data/mods/public/gui/session/input.js
| 516| »   »   »   »   var·ents·=·getPreferredEntities(Engine.PickPlayerEntitiesInRect(rect[0],·rect[1],·rect[2],·rect[3],·g_ViewedPlayer));
|    | [NORMAL] JSHintBear:
|    | 'ents' is already defined.

binaries/data/mods/public/gui/session/input.js
| 673| »   »   »   »   »   var·queued·=·Engine.HotkeyIsPressed("session.queue");
|    | [NORMAL] JSHintBear:
|    | 'queued' is already defined.

binaries/data/mods/public/gui/session/input.js
| 747| »   »   »   »   var·queued·=·Engine.HotkeyIsPressed("session.queue");
|    | [NORMAL] JSHintBear:
|    | 'queued' is already defined.

binaries/data/mods/public/gui/session/input.js
| 860| »   »   »   »   »   »   var·sptr·=·ev.hotkey.split(".");
|    | [NORMAL] JSHintBear:
|    | 'sptr' is already defined.

binaries/data/mods/public/gui/session/input.js
| 876| »   »   »   var·ent·=·Engine.PickEntityAtPoint(ev.x,·ev.y);
|    | [NORMAL] JSHintBear:
|    | 'ent' is already defined.

binaries/data/mods/public/gui/session/input.js
| 902| »   »   »   }
|    | [NORMAL] JSHintBear:
|    | Expected a 'break' statement before 'default'.

binaries/data/mods/public/gui/session/input.js
| 926| »   »   »   var·ent·=·Engine.PickEntityAtPoint(ev.x,·ev.y);
|    | [NORMAL] JSHintBear:
|    | 'ent' is already defined.

binaries/data/mods/public/gui/session/input.js
|1082| »   »   »   »   »   var·snapToEdge·=·Engine.HotkeyIsPressed("session.snaptoedge");
|    | [NORMAL] JSHintBear:
|    | 'snapToEdge' is already defined.

binaries/data/mods/public/gui/session/input.js
|1085| »   »   »   »   »   »   var·snapData·=·Engine.GuiInterfaceCall("GetFoundationSnapData",·{
|    | [NORMAL] JSHintBear:
|    | 'snapData' is already defined.
Executing section cli...

Link to build: https://jenkins.wildfiregames.com/job/docker-differential/1065/display/redirect

Successful build - Chance fights ever on the side of the prudent.

Linter detected issues:
Executing section Source...

source/simulation2/scripting/JSInterface_Simulation.h
|  24| namespace·JSI_Simulation
|    | [MAJOR] CPPCheckBear (syntaxError):
|    | Code 'namespaceJSI_Simulation{' is invalid C code. Use --std or --language to configure the language.

source/simulation2/components/ICmpObstruction.h
|  29| class·ICmpObstruction·:·public·IComponent
|    | [MAJOR] CPPCheckBear (syntaxError):
|    | Code 'classICmpObstruction:' is invalid C code. Use --std or --language to configure the language.

source/simulation2/components/tests/test_ObstructionManager.h
|  23| class·MockObstruction·:·public·ICmpObstruction
|    | [MAJOR] CPPCheckBear (syntaxError):
|    | Code 'classMockObstruction:' is invalid C code. Use --std or --language to configure the language.
Executing section JS...
|    | [NORMAL] ESLintBear (spaced-comment):
|    | Expected space or tab after '//' in comment.
|----|    | /zpool0/trunk/binaries/data/mods/public/globalscripts/vector.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/globalscripts/vector.js
|   1|    |-/////////////////////////////////////////////////////////////////////
|    |   1|+// ///////////////////////////////////////////////////////////////////
|   2|   2| //	Vector2D
|   3|   3| //
|   4|   4| //	Class for representing and manipulating 2D vectors
|    | [NORMAL] ESLintBear (spaced-comment):
|    | Expected space or tab after '//' in comment.
|----|    | /zpool0/trunk/binaries/data/mods/public/globalscripts/vector.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/globalscripts/vector.js
|   3|   3| //
|   4|   4| //	Class for representing and manipulating 2D vectors
|   5|   5| //
|   6|    |-/////////////////////////////////////////////////////////////////////
|    |   6|+// ///////////////////////////////////////////////////////////////////
|   7|   7| 
|   8|   8| // TODO: Type errors if v not instanceof Vector classes
|   9|   9| // TODO: Possibly implement in C++
|    | [NORMAL] ESLintBear (spaced-comment):
|    | Expected space or tab after '//' in comment.
|----|    | /zpool0/trunk/binaries/data/mods/public/globalscripts/vector.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/globalscripts/vector.js
| 245| 245| 	return v1.x * v2.x + v1.y * v2.y;
| 246| 246| };
| 247| 247| 
| 248|    |-/////////////////////////////////////////////////////////////////////
|    | 248|+// ///////////////////////////////////////////////////////////////////
| 249| 249| //	Vector3D
| 250| 250| //
| 251| 251| //	Class for representing and manipulating 3D vectors
|    | [NORMAL] ESLintBear (spaced-comment):
|    | Expected space or tab after '//' in comment.
|----|    | /zpool0/trunk/binaries/data/mods/public/globalscripts/vector.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/globalscripts/vector.js
| 250| 250| //
| 251| 251| //	Class for representing and manipulating 3D vectors
| 252| 252| //
| 253|    |-/////////////////////////////////////////////////////////////////////
|    | 253|+// ///////////////////////////////////////////////////////////////////
| 254| 254| 
| 255| 255| function Vector3D(x = 0, y = 0, z = 0)
| 256| 256| {
|    | [NORMAL] ESLintBear (indent):
|    | Expected indentation of 2 tabs but found 3.
|----|    | /zpool0/trunk/binaries/data/mods/public/simulation/components/GuiInterface.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/simulation/components/GuiInterface.js
| 821| 821| 		updateEntityColor(data.showAllStatusBars && (i == player || player == -1) ?
| 822| 822| 			[IID_Minimap, IID_RangeOverlayRenderer, IID_RallyPointRenderer, IID_StatusBars] :
| 823| 823| 			[IID_Minimap, IID_RangeOverlayRenderer, IID_RallyPointRenderer],
| 824|    |-			cmpRangeManager.GetEntitiesByPlayer(i));
|    | 824|+		cmpRangeManager.GetEntitiesByPlayer(i));
| 825| 825| 	}
| 826| 826| 	updateEntityColor([IID_Selectable, IID_StatusBars], data.selected);
| 827| 827| 	Engine.QueryInterface(SYSTEM_ENTITY, IID_TerritoryManager).UpdateColors();
|    | [NORMAL] ESLintBear (indent):
|    | Expected indentation of 5 tabs but found 6.
|----|    | /zpool0/trunk/binaries/data/mods/public/simulation/components/GuiInterface.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/simulation/components/GuiInterface.js
|1654|1654| 			{
|1655|1655| 				minDist2 = dist2;
|1656|1656| 				minDistEntitySnapData = {
|1657|    |-						"x": pos.x,
|    |1657|+					"x": pos.x,
|1658|1658| 						"z": pos.z,
|1659|1659| 						"angle": cmpPosition.GetRotation().y,
|1660|1660| 						"ent": ent
|    | [NORMAL] ESLintBear (indent):
|    | Expected indentation of 5 tabs but found 6.
|----|    | /zpool0/trunk/binaries/data/mods/public/simulation/components/GuiInterface.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/simulation/components/GuiInterface.js
|1655|1655| 				minDist2 = dist2;
|1656|1656| 				minDistEntitySnapData = {
|1657|1657| 						"x": pos.x,
|1658|    |-						"z": pos.z,
|    |1658|+					"z": pos.z,
|1659|1659| 						"angle": cmpPosition.GetRotation().y,
|1660|1660| 						"ent": ent
|1661|1661| 				};
|    | [NORMAL] ESLintBear (indent):
|    | Expected indentation of 5 tabs but found 6.
|----|    | /zpool0/trunk/binaries/data/mods/public/simulation/components/GuiInterface.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/simulation/components/GuiInterface.js
|1656|1656| 				minDistEntitySnapData = {
|1657|1657| 						"x": pos.x,
|1658|1658| 						"z": pos.z,
|1659|    |-						"angle": cmpPosition.GetRotation().y,
|    |1659|+					"angle": cmpPosition.GetRotation().y,
|1660|1660| 						"ent": ent
|1661|1661| 				};
|1662|1662| 			}
|    | [NORMAL] ESLintBear (indent):
|    | Expected indentation of 5 tabs but found 6.
|----|    | /zpool0/trunk/binaries/data/mods/public/simulation/components/GuiInterface.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/simulation/components/GuiInterface.js
|1657|1657| 						"x": pos.x,
|1658|1658| 						"z": pos.z,
|1659|1659| 						"angle": cmpPosition.GetRotation().y,
|1660|    |-						"ent": ent
|    |1660|+					"ent": ent
|1661|1661| 				};
|1662|1662| 			}
|1663|1663| 		}
|    | [NORMAL] ESLintBear (semi):
|    | Missing semicolon.
|----|    | /zpool0/trunk/binaries/data/mods/public/simulation/components/GuiInterface.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/simulation/components/GuiInterface.js
|1703|1703| 				edges.push(edge);
|1704|1704| 			}
|1705|1705| 			return edges;
|1706|    |-		}
|    |1706|+		};
|1707|1707| 
|1708|1708| 		let edges = getValidEdges(data.snapToEdges, templatePos, maxSide);
|1709|1709| 		if (edges.length)

binaries/data/mods/public/simulation/components/GuiInterface.js
|1678| »   »   const·getValidEdges·=·(allEdges,·position,·maxSide)·=>·{
|    | [NORMAL] ESLintBear (no-shadow):
|    | 'maxSide' is already declared in the upper scope.

binaries/data/mods/public/simulation/components/GuiInterface.js
|1795| »   »   »   »   »   let·distance·=·Vector2D.dot(secondEdge.normal,·templatePos)·-·Vector2D.dot(secondEdge.normal,·secondEdge.begin);
|    | [NORMAL] ESLintBear (no-shadow):
|    | 'distance' is already declared in the upper scope.

binaries/data/mods/public/simulation/components/GuiInterface.js
|1706| »   »   }
|    | [NORMAL] JSHintBear:
|    | Missing semicolon.

binaries/data/mods/public/simulation/components/GuiInterface.js
|1727| »   »   »   »   »   return·-a.signedDistance·-·-b.signedDistance;
|    | [NORMAL] JSHintBear:
|    | Confusing minuses.
|    | [NORMAL] ESLintBear (space-unary-ops):
|    | Unary word operator 'typeof' must be followed by whitespace.
|----|    | /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
| 329| 329| 	}
| 330| 330| 
| 331| 331| 	var wallPlacementInfo = updateBuildingPlacementPreview(); // entities making up the wall (wall segments, towers, ...)
| 332|    |-	if (!(wallPlacementInfo === false || typeof(wallPlacementInfo) === "object"))
|    | 332|+	if (!(wallPlacementInfo === false || typeof (wallPlacementInfo) === "object"))
| 333| 333| 	{
| 334| 334| 		error("Invalid updateBuildingPlacementPreview return value: " + uneval(wallPlacementInfo));
| 335| 335| 		return false;
|    | [NORMAL] ESLintBear (operator-linebreak):
|    | '&&' should be placed at the end of the line.
|----|    | /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
| 479| 479| 	mouseIsOverObject = (hoveredObject != null);
| 480| 480| 
| 481| 481| 	// Close the menu when interacting with the game world
| 482|    |-	if (!mouseIsOverObject && (ev.type =="mousebuttonup" || ev.type == "mousebuttondown")
| 483|    |-		&& (ev.button == SDL_BUTTON_LEFT || ev.button == SDL_BUTTON_RIGHT))
|    | 482|+	if (!mouseIsOverObject && (ev.type =="mousebuttonup" || ev.type == "mousebuttondown") &&
|    | 483|+		(ev.button == SDL_BUTTON_LEFT || ev.button == SDL_BUTTON_RIGHT))
| 484| 484| 		g_Menu.close();
| 485| 485| 
| 486| 486| 	// State-machine processing:
|    | [NORMAL] ESLintBear (indent):
|    | Expected indentation of 2 tabs but found 3.
|----|    | /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
| 640| 640| 		// user to continue building walls.
| 641| 641| 		switch (ev.type)
| 642| 642| 		{
| 643|    |-			case "mousemotion":
|    | 643|+		case "mousemotion":
| 644| 644| 				placementSupport.wallEndPosition = Engine.GetTerrainAtScreenPoint(ev.x, ev.y);
| 645| 645| 
| 646| 646| 				// Update the building placement preview, and by extension, the list of snapping candidate entities for both (!)
|    | [NORMAL] ESLintBear (indent):
|    | Expected indentation of 3 tabs but found 4.
|----|    | /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
| 641| 641| 		switch (ev.type)
| 642| 642| 		{
| 643| 643| 			case "mousemotion":
| 644|    |-				placementSupport.wallEndPosition = Engine.GetTerrainAtScreenPoint(ev.x, ev.y);
|    | 644|+			placementSupport.wallEndPosition = Engine.GetTerrainAtScreenPoint(ev.x, ev.y);
| 645| 645| 
| 646| 646| 				// Update the building placement preview, and by extension, the list of snapping candidate entities for both (!)
| 647| 647| 				// the ending point and the starting point to snap to.
|    | [NORMAL] ESLintBear (indent):
|    | Expected indentation of 3 tabs but found 4.
|----|    | /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
| 643| 643| 			case "mousemotion":
| 644| 644| 				placementSupport.wallEndPosition = Engine.GetTerrainAtScreenPoint(ev.x, ev.y);
| 645| 645| 
| 646|    |-				// Update the building placement preview, and by extension, the list of snapping candidate entities for both (!)
|    | 646|+			// Update the building placement preview, and by extension, the list of snapping candidate entities for both (!)
| 647| 647| 				// the ending point and the starting point to snap to.
| 648| 648| 				//
| 649| 649| 				// TODO: Note that here, we need to fetch all similar entities, including any offscreen ones, to support the case
|    | [NORMAL] ESLintBear (indent):
|    | Expected indentation of 3 tabs but found 4.
|----|    | /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
| 644| 644| 				placementSupport.wallEndPosition = Engine.GetTerrainAtScreenPoint(ev.x, ev.y);
| 645| 645| 
| 646| 646| 				// Update the building placement preview, and by extension, the list of snapping candidate entities for both (!)
| 647|    |-				// the ending point and the starting point to snap to.
|    | 647|+			// the ending point and the starting point to snap to.
| 648| 648| 				//
| 649| 649| 				// TODO: Note that here, we need to fetch all similar entities, including any offscreen ones, to support the case
| 650| 650| 				// where the snap entity for the starting point has moved offscreen, or has been deleted/destroyed, or was a
|    | [NORMAL] ESLintBear (indent):
|    | Expected indentation of 3 tabs but found 4.
|----|    | /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
| 645| 645| 
| 646| 646| 				// Update the building placement preview, and by extension, the list of snapping candidate entities for both (!)
| 647| 647| 				// the ending point and the starting point to snap to.
| 648|    |-				//
|    | 648|+			//
| 649| 649| 				// TODO: Note that here, we need to fetch all similar entities, including any offscreen ones, to support the case
| 650| 650| 				// where the snap entity for the starting point has moved offscreen, or has been deleted/destroyed, or was a
| 651| 651| 				// foundation and has been replaced with a completed entity since the user first chose it. Fetching all towers on
|    | [NORMAL] ESLintBear (indent):
|    | Expected indentation of 3 tabs but found 4.
|----|    | /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
| 646| 646| 				// Update the building placement preview, and by extension, the list of snapping candidate entities for both (!)
| 647| 647| 				// the ending point and the starting point to snap to.
| 648| 648| 				//
| 649|    |-				// TODO: Note that here, we need to fetch all similar entities, including any offscreen ones, to support the case
|    | 649|+			// TODO: Note that here, we need to fetch all similar entities, including any offscreen ones, to support the case
| 650| 650| 				// where the snap entity for the starting point has moved offscreen, or has been deleted/destroyed, or was a
| 651| 651| 				// foundation and has been replaced with a completed entity since the user first chose it. Fetching all towers on
| 652| 652| 				// the entire map instead of only the current screen might get expensive fast since walls all have a ton of towers
|    | [NORMAL] ESLintBear (indent):
|    | Expected indentation of 3 tabs but found 4.
|----|    | /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
| 647| 647| 				// the ending point and the starting point to snap to.
| 648| 648| 				//
| 649| 649| 				// TODO: Note that here, we need to fetch all similar entities, including any offscreen ones, to support the case
| 650|    |-				// where the snap entity for the starting point has moved offscreen, or has been deleted/destroyed, or was a
|    | 650|+			// where the snap entity for the starting point has moved offscreen, or has been deleted/destroyed, or was a
| 651| 651| 				// foundation and has been replaced with a completed entity since the user first chose it. Fetching all towers on
| 652| 652| 				// the entire map instead of only the current screen might get expensive fast since walls all have a ton of towers
| 653| 653| 				// in them. Might be useful to query only for entities within a certain range around the starting point and ending
|    | [NORMAL] ESLintBear (indent):
|    | Expected indentation of 3 tabs but found 4.
|----|    | /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
| 648| 648| 				//
| 649| 649| 				// TODO: Note that here, we need to fetch all similar entities, including any offscreen ones, to support the case
| 650| 650| 				// where the snap entity for the starting point has moved offscreen, or has been deleted/destroyed, or was a
| 651|    |-				// foundation and has been replaced with a completed entity since the user first chose it. Fetching all towers on
|    | 651|+			// foundation and has been replaced with a completed entity since the user first chose it. Fetching all towers on
| 652| 652| 				// the entire map instead of only the current screen might get expensive fast since walls all have a ton of towers
| 653| 653| 				// in them. Might be useful to query only for entities within a certain range around the starting point and ending
| 654| 654| 				// points.
|    | [NORMAL] ESLintBear (indent):
|    | Expected indentation of 3 tabs but found 4.
|----|    | /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
| 649| 649| 				// TODO: Note that here, we need to fetch all similar entities, including any offscreen ones, to support the case
| 650| 650| 				// where the snap entity for the starting point has moved offscreen, or has been deleted/destroyed, or was a
| 651| 651| 				// foundation and has been replaced with a completed entity since the user first chose it. Fetching all towers on
| 652|    |-				// the entire map instead of only the current screen might get expensive fast since walls all have a ton of towers
|    | 652|+			// the entire map instead of only the current screen might get expensive fast since walls all have a ton of towers
| 653| 653| 				// in them. Might be useful to query only for entities within a certain range around the starting point and ending
| 654| 654| 				// points.
| 655| 655| 
|    | [NORMAL] ESLintBear (indent):
|    | Expected indentation of 3 tabs but found 4.
|----|    | /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
| 650| 650| 				// where the snap entity for the starting point has moved offscreen, or has been deleted/destroyed, or was a
| 651| 651| 				// foundation and has been replaced with a completed entity since the user first chose it. Fetching all towers on
| 652| 652| 				// the entire map instead of only the current screen might get expensive fast since walls all have a ton of towers
| 653|    |-				// in them. Might be useful to query only for entities within a certain range around the starting point and ending
|    | 653|+			// in them. Might be useful to query only for entities within a certain range around the starting point and ending
| 654| 654| 				// points.
| 655| 655| 
| 656| 656| 				placementSupport.wallSnapEntitiesIncludeOffscreen = true;
|    | [NORMAL] ESLintBear (indent):
|    | Expected indentation of 3 tabs but found 4.
|----|    | /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
| 651| 651| 				// foundation and has been replaced with a completed entity since the user first chose it. Fetching all towers on
| 652| 652| 				// the entire map instead of only the current screen might get expensive fast since walls all have a ton of towers
| 653| 653| 				// in them. Might be useful to query only for entities within a certain range around the starting point and ending
| 654|    |-				// points.
|    | 654|+			// points.
| 655| 655| 
| 656| 656| 				placementSupport.wallSnapEntitiesIncludeOffscreen = true;
| 657| 657| 				var result = updateBuildingPlacementPreview(); // includes an update of the snap entity candidates
|    | [NORMAL] ESLintBear (indent):
|    | Expected indentation of 3 tabs but found 4.
|----|    | /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
| 653| 653| 				// in them. Might be useful to query only for entities within a certain range around the starting point and ending
| 654| 654| 				// points.
| 655| 655| 
| 656|    |-				placementSupport.wallSnapEntitiesIncludeOffscreen = true;
|    | 656|+			placementSupport.wallSnapEntitiesIncludeOffscreen = true;
| 657| 657| 				var result = updateBuildingPlacementPreview(); // includes an update of the snap entity candidates
| 658| 658| 
| 659| 659| 				if (result && result.cost)
|    | [NORMAL] ESLintBear (indent):
|    | Expected indentation of 3 tabs but found 4.
|----|    | /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
| 654| 654| 				// points.
| 655| 655| 
| 656| 656| 				placementSupport.wallSnapEntitiesIncludeOffscreen = true;
| 657|    |-				var result = updateBuildingPlacementPreview(); // includes an update of the snap entity candidates
|    | 657|+			var result = updateBuildingPlacementPreview(); // includes an update of the snap entity candidates
| 658| 658| 
| 659| 659| 				if (result && result.cost)
| 660| 660| 				{
|    | [NORMAL] ESLintBear (indent):
|    | Expected indentation of 3 tabs but found 4.
|----|    | /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
| 656| 656| 				placementSupport.wallSnapEntitiesIncludeOffscreen = true;
| 657| 657| 				var result = updateBuildingPlacementPreview(); // includes an update of the snap entity candidates
| 658| 658| 
| 659|    |-				if (result && result.cost)
|    | 659|+			if (result && result.cost)
| 660| 660| 				{
| 661| 661| 					var neededResources = Engine.GuiInterfaceCall("GetNeededResources", { "cost": result.cost });
| 662| 662| 					placementSupport.tooltipMessage = [
|    | [NORMAL] ESLintBear (indent):
|    | Expected indentation of 3 tabs but found 4.
|----|    | /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
| 657| 657| 				var result = updateBuildingPlacementPreview(); // includes an update of the snap entity candidates
| 658| 658| 
| 659| 659| 				if (result && result.cost)
| 660|    |-				{
|    | 660|+			{
| 661| 661| 					var neededResources = Engine.GuiInterfaceCall("GetNeededResources", { "cost": result.cost });
| 662| 662| 					placementSupport.tooltipMessage = [
| 663| 663| 						getEntityCostTooltip(result),
|    | [NORMAL] ESLintBear (indent):
|    | Expected indentation of 4 tabs but found 5.
|----|    | /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
| 658| 658| 
| 659| 659| 				if (result && result.cost)
| 660| 660| 				{
| 661|    |-					var neededResources = Engine.GuiInterfaceCall("GetNeededResources", { "cost": result.cost });
|    | 661|+				var neededResources = Engine.GuiInterfaceCall("GetNeededResources", { "cost": result.cost });
| 662| 662| 					placementSupport.tooltipMessage = [
| 663| 663| 						getEntityCostTooltip(result),
| 664| 664| 						getNeededResourcesTooltip(neededResources)
|    | [NORMAL] ESLintBear (indent):
|    | Expected indentation of 4 tabs but found 5.
|----|    | /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
| 659| 659| 				if (result && result.cost)
| 660| 660| 				{
| 661| 661| 					var neededResources = Engine.GuiInterfaceCall("GetNeededResources", { "cost": result.cost });
| 662|    |-					placementSupport.tooltipMessage = [
|    | 662|+				placementSupport.tooltipMessage = [
| 663| 663| 						getEntityCostTooltip(result),
| 664| 664| 						getNeededResourcesTooltip(neededResources)
| 665| 665| 					].filter(tip => tip).join("\n");
|    | [NORMAL] ESLintBear (indent):
|    | Expected indentation of 5 tabs but found 6.
|----|    | /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
| 660| 660| 				{
| 661| 661| 					var neededResources = Engine.GuiInterfaceCall("GetNeededResources", { "cost": result.cost });
| 662| 662| 					placementSupport.tooltipMessage = [
| 663|    |-						getEntityCostTooltip(result),
|    | 663|+					getEntityCostTooltip(result),
| 664| 664| 						getNeededResourcesTooltip(neededResources)
| 665| 665| 					].filter(tip => tip).join("\n");
| 666| 666| 				}
|    | [NORMAL] ESLintBear (indent):
|    | Expected indentation of 5 tabs but found 6.
|----|    | /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
| 661| 661| 					var neededResources = Engine.GuiInterfaceCall("GetNeededResources", { "cost": result.cost });
| 662| 662| 					placementSupport.tooltipMessage = [
| 663| 663| 						getEntityCostTooltip(result),
| 664|    |-						getNeededResourcesTooltip(neededResources)
|    | 664|+					getNeededResourcesTooltip(neededResources)
| 665| 665| 					].filter(tip => tip).join("\n");
| 666| 666| 				}
| 667| 667| 
|    | [NORMAL] ESLintBear (indent):
|    | Expected indentation of 4 tabs but found 5.
|----|    | /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
| 662| 662| 					placementSupport.tooltipMessage = [
| 663| 663| 						getEntityCostTooltip(result),
| 664| 664| 						getNeededResourcesTooltip(neededResources)
| 665|    |-					].filter(tip => tip).join("\n");
|    | 665|+				].filter(tip => tip).join("\n");
| 666| 666| 				}
| 667| 667| 
| 668| 668| 				break;
|    | [NORMAL] ESLintBear (indent):
|    | Expected indentation of 3 tabs but found 4.
|----|    | /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
| 663| 663| 						getEntityCostTooltip(result),
| 664| 664| 						getNeededResourcesTooltip(neededResources)
| 665| 665| 					].filter(tip => tip).join("\n");
| 666|    |-				}
|    | 666|+			}
| 667| 667| 
| 668| 668| 				break;
| 669| 669| 
|    | [NORMAL] ESLintBear (indent):
|    | Expected indentation of 3 tabs but found 4.
|----|    | /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
| 665| 665| 					].filter(tip => tip).join("\n");
| 666| 666| 				}
| 667| 667| 
| 668|    |-				break;
|    | 668|+			break;
| 669| 669| 
| 670| 670| 			case "mousebuttondown":
| 671| 671| 				if (ev.button == SDL_BUTTON_LEFT)
|    | [NORMAL] ESLintBear (indent):
|    | Expected indentation of 2 tabs but found 3.
|----|    | /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
| 667| 667| 
| 668| 668| 				break;
| 669| 669| 
| 670|    |-			case "mousebuttondown":
|    | 670|+		case "mousebuttondown":
| 671| 671| 				if (ev.button == SDL_BUTTON_LEFT)
| 672| 672| 				{
| 673| 673| 					var queued = Engine.HotkeyIsPressed("session.queue");
|    | [NORMAL] ESLintBear (indent):
|    | Expected indentation of 3 tabs but found 4.
|----|    | /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
| 668| 668| 				break;
| 669| 669| 
| 670| 670| 			case "mousebuttondown":
| 671|    |-				if (ev.button == SDL_BUTTON_LEFT)
|    | 671|+			if (ev.button == SDL_BUTTON_LEFT)
| 672| 672| 				{
| 673| 673| 					var queued = Engine.HotkeyIsPressed("session.queue");
| 674| 674| 					if (tryPlaceWall(queued))
|    | [NORMAL] ESLintBear (indent):
|    | Expected indentation of 3 tabs but found 4.
|----|    | /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
| 669| 669| 
| 670| 670| 			case "mousebuttondown":
| 671| 671| 				if (ev.button == SDL_BUTTON_LEFT)
| 672|    |-				{
|    | 672|+			{
| 673| 673| 					var queued = Engine.HotkeyIsPressed("session.queue");
| 674| 674| 					if (tryPlaceWall(queued))
| 675| 675| 					{
|    | [NORMAL] ESLintBear (indent):
|    | Expected indentation of 4 tabs but found 5.
|----|    | /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
| 670| 670| 			case "mousebuttondown":
| 671| 671| 				if (ev.button == SDL_BUTTON_LEFT)
| 672| 672| 				{
| 673|    |-					var queued = Engine.HotkeyIsPressed("session.queue");
|    | 673|+				var queued = Engine.HotkeyIsPressed("session.queue");
| 674| 674| 					if (tryPlaceWall(queued))
| 675| 675| 					{
| 676| 676| 						if (queued)
|    | [NORMAL] ESLintBear (indent):
|    | Expected indentation of 4 tabs but found 5.
|----|    | /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
| 671| 671| 				if (ev.button == SDL_BUTTON_LEFT)
| 672| 672| 				{
| 673| 673| 					var queued = Engine.HotkeyIsPressed("session.queue");
| 674|    |-					if (tryPlaceWall(queued))
|    | 674|+				if (tryPlaceWall(queued))
| 675| 675| 					{
| 676| 676| 						if (queued)
| 677| 677| 						{
|    | [NORMAL] ESLintBear (indent):
|    | Expected indentation of 4 tabs but found 5.
|----|    | /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
| 672| 672| 				{
| 673| 673| 					var queued = Engine.HotkeyIsPressed("session.queue");
| 674| 674| 					if (tryPlaceWall(queued))
| 675|    |-					{
|    | 675|+				{
| 676| 676| 						if (queued)
| 677| 677| 						{
| 678| 678| 							// continue building, just set a new starting position where we left off
|    | [NORMAL] ESLintBear (indent):
|    | Expected indentation of 5 tabs but found 6.
|----|    | /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
| 673| 673| 					var queued = Engine.HotkeyIsPressed("session.queue");
| 674| 674| 					if (tryPlaceWall(queued))
| 675| 675| 					{
| 676|    |-						if (queued)
|    | 676|+					if (queued)
| 677| 677| 						{
| 678| 678| 							// continue building, just set a new starting position where we left off
| 679| 679| 							placementSupport.position = placementSupport.wallEndPosition;
|    | [NORMAL] ESLintBear (indent):
|    | Expected indentation of 5 tabs but found 6.
|----|    | /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
| 674| 674| 					if (tryPlaceWall(queued))
| 675| 675| 					{
| 676| 676| 						if (queued)
| 677|    |-						{
|    | 677|+					{
| 678| 678| 							// continue building, just set a new starting position where we left off
| 679| 679| 							placementSupport.position = placementSupport.wallEndPosition;
| 680| 680| 							placementSupport.wallEndPosition = undefined;
|    | [NORMAL] ESLintBear (indent):
|    | Expected indentation of 6 tabs but found 7.
|----|    | /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
| 675| 675| 					{
| 676| 676| 						if (queued)
| 677| 677| 						{
| 678|    |-							// continue building, just set a new starting position where we left off
|    | 678|+						// continue building, just set a new starting position where we left off
| 679| 679| 							placementSupport.position = placementSupport.wallEndPosition;
| 680| 680| 							placementSupport.wallEndPosition = undefined;
| 681| 681| 
|    | [NORMAL] ESLintBear (indent):
|    | Expected indentation of 6 tabs but found 7.
|----|    | /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
| 676| 676| 						if (queued)
| 677| 677| 						{
| 678| 678| 							// continue building, just set a new starting position where we left off
| 679|    |-							placementSupport.position = placementSupport.wallEndPosition;
|    | 679|+						placementSupport.position = placementSupport.wallEndPosition;
| 680| 680| 							placementSupport.wallEndPosition = undefined;
| 681| 681| 
| 682| 682| 							inputState = INPUT_BUILDING_WALL_CLICK;
|    | [NORMAL] ESLintBear (indent):
|    | Expected indentation of 6 tabs but found 7.
|----|    | /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
| 677| 677| 						{
| 678| 678| 							// continue building, just set a new starting position where we left off
| 679| 679| 							placementSupport.position = placementSupport.wallEndPosition;
| 680|    |-							placementSupport.wallEndPosition = undefined;
|    | 680|+						placementSupport.wallEndPosition = undefined;
| 681| 681| 
| 682| 682| 							inputState = INPUT_BUILDING_WALL_CLICK;
| 683| 683| 						}
|    | [NORMAL] ESLintBear (indent):
|    | Expected indentation of 6 tabs but found 7.
|----|    | /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
| 679| 679| 							placementSupport.position = placementSupport.wallEndPosition;
| 680| 680| 							placementSupport.wallEndPosition = undefined;
| 681| 681| 
| 682|    |-							inputState = INPUT_BUILDING_WALL_CLICK;
|    | 682|+						inputState = INPUT_BUILDING_WALL_CLICK;
| 683| 683| 						}
| 684| 684| 						else
| 685| 685| 						{
|    | [NORMAL] ESLintBear (indent):
|    | Expected indentation of 5 tabs but found 6.
|----|    | /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
| 680| 680| 							placementSupport.wallEndPosition = undefined;
| 681| 681| 
| 682| 682| 							inputState = INPUT_BUILDING_WALL_CLICK;
| 683|    |-						}
|    | 683|+					}
| 684| 684| 						else
| 685| 685| 						{
| 686| 686| 							placementSupport.Reset();
|    | [NORMAL] ESLintBear (indent):
|    | Expected indentation of 5 tabs but found 6.
|----|    | /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
| 681| 681| 
| 682| 682| 							inputState = INPUT_BUILDING_WALL_CLICK;
| 683| 683| 						}
| 684|    |-						else
|    | 684|+					else
| 685| 685| 						{
| 686| 686| 							placementSupport.Reset();
| 687| 687| 							inputState = INPUT_NORMAL;
|    | [NORMAL] ESLintBear (indent):
|    | Expected indentation of 5 tabs but found 6.
|----|    | /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
| 682| 682| 							inputState = INPUT_BUILDING_WALL_CLICK;
| 683| 683| 						}
| 684| 684| 						else
| 685|    |-						{
|    | 685|+					{
| 686| 686| 							placementSupport.Reset();
| 687| 687| 							inputState = INPUT_NORMAL;
| 688| 688| 						}
|    | [NORMAL] ESLintBear (indent):
|    | Expected indentation of 6 tabs but found 7.
|----|    | /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
| 683| 683| 						}
| 684| 684| 						else
| 685| 685| 						{
| 686|    |-							placementSupport.Reset();
|    | 686|+						placementSupport.Reset();
| 687| 687| 							inputState = INPUT_NORMAL;
| 688| 688| 						}
| 689| 689| 					}
|    | [NORMAL] ESLintBear (indent):
|    | Expected indentation of 6 tabs but found 7.
|----|    | /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
| 684| 684| 						else
| 685| 685| 						{
| 686| 686| 							placementSupport.Reset();
| 687|    |-							inputState = INPUT_NORMAL;
|    | 687|+						inputState = INPUT_NORMAL;
| 688| 688| 						}
| 689| 689| 					}
| 690| 690| 					else
|    | [NORMAL] ESLintBear (indent):
|    | Expected indentation of 5 tabs but found 6.
|----|    | /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
| 685| 685| 						{
| 686| 686| 							placementSupport.Reset();
| 687| 687| 							inputState = INPUT_NORMAL;
| 688|    |-						}
|    | 688|+					}
| 689| 689| 					}
| 690| 690| 					else
| 691| 691| 						placementSupport.tooltipMessage = translate("Cannot build wall here!");
|    | [NORMAL] ESLintBear (indent):
|    | Expected indentation of 4 tabs but found 5.
|----|    | /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
| 686| 686| 							placementSupport.Reset();
| 687| 687| 							inputState = INPUT_NORMAL;
| 688| 688| 						}
| 689|    |-					}
|    | 689|+				}
| 690| 690| 					else
| 691| 691| 						placementSupport.tooltipMessage = translate("Cannot build wall here!");
| 692| 692| 
|    | [NORMAL] ESLintBear (indent):
|    | Expected indentation of 4 tabs but found 5.
|----|    | /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
| 687| 687| 							inputState = INPUT_NORMAL;
| 688| 688| 						}
| 689| 689| 					}
| 690|    |-					else
|    | 690|+				else
| 691| 691| 						placementSupport.tooltipMessage = translate("Cannot build wall here!");
| 692| 692| 
| 693| 693| 					updateBuildingPlacementPreview();
|    | [NORMAL] ESLintBear (indent):
|    | Expected indentation of 5 tabs but found 6.
|----|    | /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
| 688| 688| 						}
| 689| 689| 					}
| 690| 690| 					else
| 691|    |-						placementSupport.tooltipMessage = translate("Cannot build wall here!");
|    | 691|+					placementSupport.tooltipMessage = translate("Cannot build wall here!");
| 692| 692| 
| 693| 693| 					updateBuildingPlacementPreview();
| 694| 694| 					return true;
|    | [NORMAL] ESLintBear (indent):
|    | Expected indentation of 4 tabs but found 5.
|----|    | /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
| 690| 690| 					else
| 691| 691| 						placementSupport.tooltipMessage = translate("Cannot build wall here!");
| 692| 692| 
| 693|    |-					updateBuildingPlacementPreview();
|    | 693|+				updateBuildingPlacementPreview();
| 694| 694| 					return true;
| 695| 695| 				}
| 696| 696| 				else if (ev.button == SDL_BUTTON_RIGHT)
|    | [NORMAL] ESLintBear (indent):
|    | Expected indentation of 4 tabs but found 5.
|----|    | /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
| 691| 691| 						placementSupport.tooltipMessage = translate("Cannot build wall here!");
| 692| 692| 
| 693| 693| 					updateBuildingPlacementPreview();
| 694|    |-					return true;
|    | 694|+				return true;
| 695| 695| 				}
| 696| 696| 				else if (ev.button == SDL_BUTTON_RIGHT)
| 697| 697| 				{
|    | [NORMAL] ESLintBear (indent):
|    | Expected indentation of 3 tabs but found 4.
|----|    | /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
| 692| 692| 
| 693| 693| 					updateBuildingPlacementPreview();
| 694| 694| 					return true;
| 695|    |-				}
|    | 695|+			}
| 696| 696| 				else if (ev.button == SDL_BUTTON_RIGHT)
| 697| 697| 				{
| 698| 698| 					// reset to normal input mode
|    | [NORMAL] ESLintBear (indent):
|    | Expected indentation of 3 tabs but found 4.
|----|    | /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
| 693| 693| 					updateBuildingPlacementPreview();
| 694| 694| 					return true;
| 695| 695| 				}
| 696|    |-				else if (ev.button == SDL_BUTTON_RIGHT)
|    | 696|+			else if (ev.button == SDL_BUTTON_RIGHT)
| 697| 697| 				{
| 698| 698| 					// reset to normal input mode
| 699| 699| 					placementSupport.Reset();
|    | [NORMAL] ESLintBear (indent):
|    | Expected indentation of 3 tabs but found 4.
|----|    | /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
| 694| 694| 					return true;
| 695| 695| 				}
| 696| 696| 				else if (ev.button == SDL_BUTTON_RIGHT)
| 697|    |-				{
|    | 697|+			{
| 698| 698| 					// reset to normal input mode
| 699| 699| 					placementSupport.Reset();
| 700| 700| 					updateBuildingPlacementPreview();
|    | [NORMAL] ESLintBear (indent):
|    | Expected indentation of 4 tabs but found 5.
|----|    | /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
| 695| 695| 				}
| 696| 696| 				else if (ev.button == SDL_BUTTON_RIGHT)
| 697| 697| 				{
| 698|    |-					// reset to normal input mode
|    | 698|+				// reset to normal input mode
| 699| 699| 					placementSupport.Reset();
| 700| 700| 					updateBuildingPlacementPreview();
| 701| 701| 
|    | [NORMAL] ESLintBear (indent):
|    | Expected indentation of 4 tabs but found 5.
|----|    | /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
| 696| 696| 				else if (ev.button == SDL_BUTTON_RIGHT)
| 697| 697| 				{
| 698| 698| 					// reset to normal input mode
| 699|    |-					placementSupport.Reset();
|    | 699|+				placementSupport.Reset();
| 700| 700| 					updateBuildingPlacementPreview();
| 701| 701| 
| 702| 702| 					inputState = INPUT_NORMAL;
|    | [NORMAL] ESLintBear (indent):
|    | Expected indentation of 4 tabs but found 5.
|----|    | /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
| 697| 697| 				{
| 698| 698| 					// reset to normal input mode
| 699| 699| 					placementSupport.Reset();
| 700|    |-					updateBuildingPlacementPreview();
|    | 700|+				updateBuildingPlacementPreview();
| 701| 701| 
| 702| 702| 					inputState = INPUT_NORMAL;
| 703| 703| 					return true;
|    | [NORMAL] ESLintBear (indent):
|    | Expected indentation of 4 tabs but found 5.
|----|    | /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
| 699| 699| 					placementSupport.Reset();
| 700| 700| 					updateBuildingPlacementPreview();
| 701| 701| 
| 702|    |-					inputState = INPUT_NORMAL;
|    | 702|+				inputState = INPUT_NORMAL;
| 703| 703| 					return true;
| 704| 704| 				}
| 705| 705| 				break;
|    | [NORMAL] ESLintBear (indent):
|    | Expected indentation of 4 tabs but found 5.
|----|    | /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
| 700| 700| 					updateBuildingPlacementPreview();
| 701| 701| 
| 702| 702| 					inputState = INPUT_NORMAL;
| 703|    |-					return true;
|    | 703|+				return true;
| 704| 704| 				}
| 705| 705| 				break;
| 706| 706| 		}
|    | [NORMAL] ESLintBear (indent):
|    | Expected indentation of 3 tabs but found 4.
|----|    | /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
| 701| 701| 
| 702| 702| 					inputState = INPUT_NORMAL;
| 703| 703| 					return true;
| 704|    |-				}
|    | 704|+			}
| 705| 705| 				break;
| 706| 706| 		}
| 707| 707| 		break;
|    | [NORMAL] ESLintBear (indent):
|    | Expected indentation of 3 tabs but found 4.
|----|    | /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
| 702| 702| 					inputState = INPUT_NORMAL;
| 703| 703| 					return true;
| 704| 704| 				}
| 705|    |-				break;
|    | 705|+			break;
| 706| 706| 		}
| 707| 707| 		break;
| 708| 708| 
|    | [NORMAL] ESLintBear (indent):
|    | Expected indentation of 3 tabs but found 4.
|----|    | /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
| 844| 844| 			break;
| 845| 845| 
| 846| 846| 		case "hotkeydown":
| 847|    |-				if (ev.hotkey.indexOf("selection.group.") == 0)
|    | 847|+			if (ev.hotkey.indexOf("selection.group.") == 0)
| 848| 848| 				{
| 849| 849| 					let now = Date.now();
| 850| 850| 					if (now - doublePressTimer < doublePressTime && ev.hotkey == prevHotkey)
|    | [NORMAL] ESLintBear (indent):
|    | Expected indentation of 3 tabs but found 4.
|----|    | /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
| 845| 845| 
| 846| 846| 		case "hotkeydown":
| 847| 847| 				if (ev.hotkey.indexOf("selection.group.") == 0)
| 848|    |-				{
|    | 848|+			{
| 849| 849| 					let now = Date.now();
| 850| 850| 					if (now - doublePressTimer < doublePressTime && ev.hotkey == prevHotkey)
| 851| 851| 					{
|    | [NORMAL] ESLintBear (indent):
|    | Expected indentation of 4 tabs but found 5.
|----|    | /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
| 846| 846| 		case "hotkeydown":
| 847| 847| 				if (ev.hotkey.indexOf("selection.group.") == 0)
| 848| 848| 				{
| 849|    |-					let now = Date.now();
|    | 849|+				let now = Date.now();
| 850| 850| 					if (now - doublePressTimer < doublePressTime && ev.hotkey == prevHotkey)
| 851| 851| 					{
| 852| 852| 						if (ev.hotkey.indexOf("selection.group.select.") == 0)
|    | [NORMAL] ESLintBear (indent):
|    | Expected indentation of 4 tabs but found 5.
|----|    | /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
| 847| 847| 				if (ev.hotkey.indexOf("selection.group.") == 0)
| 848| 848| 				{
| 849| 849| 					let now = Date.now();
| 850|    |-					if (now - doublePressTimer < doublePressTime && ev.hotkey == prevHotkey)
|    | 850|+				if (now - doublePressTimer < doublePressTime && ev.hotkey == prevHotkey)
| 851| 851| 					{
| 852| 852| 						if (ev.hotkey.indexOf("selection.group.select.") == 0)
| 853| 853| 						{
|    | [NORMAL] ESLintBear (indent):
|    | Expected indentation of 4 tabs but found 5.
|----|    | /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
| 848| 848| 				{
| 849| 849| 					let now = Date.now();
| 850| 850| 					if (now - doublePressTimer < doublePressTime && ev.hotkey == prevHotkey)
| 851|    |-					{
|    | 851|+				{
| 852| 852| 						if (ev.hotkey.indexOf("selection.group.select.") == 0)
| 853| 853| 						{
| 854| 854| 							var sptr = ev.hotkey.split(".");
|    | [NORMAL] ESLintBear (indent):
|    | Expected indentation of 5 tabs but found 6.
|----|    | /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
| 849| 849| 					let now = Date.now();
| 850| 850| 					if (now - doublePressTimer < doublePressTime && ev.hotkey == prevHotkey)
| 851| 851| 					{
| 852|    |-						if (ev.hotkey.indexOf("selection.group.select.") == 0)
|    | 852|+					if (ev.hotkey.indexOf("selection.group.select.") == 0)
| 853| 853| 						{
| 854| 854| 							var sptr = ev.hotkey.split(".");
| 855| 855| 							performGroup("snap", sptr[3]);
|    | [NORMAL] ESLintBear (indent):
|    | Expected indentation of 5 tabs but found 6.
|----|    | /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
| 850| 850| 					if (now - doublePressTimer < doublePressTime && ev.hotkey == prevHotkey)
| 851| 851| 					{
| 852| 852| 						if (ev.hotkey.indexOf("selection.group.select.") == 0)
| 853|    |-						{
|    | 853|+					{
| 854| 854| 							var sptr = ev.hotkey.split(".");
| 855| 855| 							performGroup("snap", sptr[3]);
| 856| 856| 						}
|    | [NORMAL] ESLintBear (indent):
|    | Expected indentation of 6 tabs but found 7.
|----|    | /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
| 851| 851| 					{
| 852| 852| 						if (ev.hotkey.indexOf("selection.group.select.") == 0)
| 853| 853| 						{
| 854|    |-							var sptr = ev.hotkey.split(".");
|    | 854|+						var sptr = ev.hotkey.split(".");
| 855| 855| 							performGroup("snap", sptr[3]);
| 856| 856| 						}
| 857| 857| 					}
|    | [NORMAL] ESLintBear (indent):
|    | Expected indentation of 6 tabs but found 7.
|----|    | /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
| 852| 852| 						if (ev.hotkey.indexOf("selection.group.select.") == 0)
| 853| 853| 						{
| 854| 854| 							var sptr = ev.hotkey.split(".");
| 855|    |-							performGroup("snap", sptr[3]);
|    | 855|+						performGroup("snap", sptr[3]);
| 856| 856| 						}
| 857| 857| 					}
| 858| 858| 					else
|    | [NORMAL] ESLintBear (indent):
|    | Expected indentation of 5 tabs but found 6.
|----|    | /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
| 853| 853| 						{
| 854| 854| 							var sptr = ev.hotkey.split(".");
| 855| 855| 							performGroup("snap", sptr[3]);
| 856|    |-						}
|    | 856|+					}
| 857| 857| 					}
| 858| 858| 					else
| 859| 859| 					{
|    | [NORMAL] ESLintBear (indent):
|    | Expected indentation of 4 tabs but found 5.
|----|    | /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
| 854| 854| 							var sptr = ev.hotkey.split(".");
| 855| 855| 							performGroup("snap", sptr[3]);
| 856| 856| 						}
| 857|    |-					}
|    | 857|+				}
| 858| 858| 					else
| 859| 859| 					{
| 860| 860| 						var sptr = ev.hotkey.split(".");
|    | [NORMAL] ESLintBear (indent):
|    | Expected indentation of 4 tabs but found 5.
|----|    | /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
| 855| 855| 							performGroup("snap", sptr[3]);
| 856| 856| 						}
| 857| 857| 					}
| 858|    |-					else
|    | 858|+				else
| 859| 859| 					{
| 860| 860| 						var sptr = ev.hotkey.split(".");
| 861| 861| 						performGroup(sptr[2], sptr[3]);
|    | [NORMAL] ESLintBear (indent):
|    | Expected indentation of 4 tabs but found 5.
|----|    | /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
| 856| 856| 						}
| 857| 857| 					}
| 858| 858| 					else
| 859|    |-					{
|    | 859|+				{
| 860| 860| 						var sptr = ev.hotkey.split(".");
| 861| 861| 						performGroup(sptr[2], sptr[3]);
| 862| 862| 
|    | [NORMAL] ESLintBear (indent):
|    | Expected indentation of 5 tabs but found 6.
|----|    | /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
| 857| 857| 					}
| 858| 858| 					else
| 859| 859| 					{
| 860|    |-						var sptr = ev.hotkey.split(".");
|    | 860|+					var sptr = ev.hotkey.split(".");
| 861| 861| 						performGroup(sptr[2], sptr[3]);
| 862| 862| 
| 863| 863| 						doublePressTimer = now;
|    | [NORMAL] ESLintBear (indent):
|    | Expected indentation of 5 tabs but found 6.
|----|    | /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
| 858| 858| 					else
| 859| 859| 					{
| 860| 860| 						var sptr = ev.hotkey.split(".");
| 861|    |-						performGroup(sptr[2], sptr[3]);
|    | 861|+					performGroup(sptr[2], sptr[3]);
| 862| 862| 
| 863| 863| 						doublePressTimer = now;
| 864| 864| 						prevHotkey = ev.hotkey;
|    | [NORMAL] ESLintBear (indent):
|    | Expected indentation of 5 tabs but found 6.
|----|    | /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
| 860| 860| 						var sptr = ev.hotkey.split(".");
| 861| 861| 						performGroup(sptr[2], sptr[3]);
| 862| 862| 
| 863|    |-						doublePressTimer = now;
|    | 863|+					doublePressTimer = now;
| 864| 864| 						prevHotkey = ev.hotkey;
| 865| 865| 					}
| 866| 866| 				}
|    | [NORMAL] ESLintBear (indent):
|    | Expected indentation of 5 tabs but found 6.
|----|    | /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
| 861| 861| 						performGroup(sptr[2], sptr[3]);
| 862| 862| 
| 863| 863| 						doublePressTimer = now;
| 864|    |-						prevHotkey = ev.hotkey;
|    | 864|+					prevHotkey = ev.hotkey;
| 865| 865| 					}
| 866| 866| 				}
| 867| 867| 				break;
|    | [NORMAL] ESLintBear (indent):
|    | Expected indentation of 4 tabs but found 5.
|----|    | /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
| 862| 862| 
| 863| 863| 						doublePressTimer = now;
| 864| 864| 						prevHotkey = ev.hotkey;
| 865|    |-					}
|    | 865|+				}
| 866| 866| 				}
| 867| 867| 				break;
| 868| 868| 		}
|    | [NORMAL] ESLintBear (indent):
|    | Expected indentation of 3 tabs but found 4.
|----|    | /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
| 863| 863| 						doublePressTimer = now;
| 864| 864| 						prevHotkey = ev.hotkey;
| 865| 865| 					}
| 866|    |-				}
|    | 866|+			}
| 867| 867| 				break;
| 868| 868| 		}
| 869| 869| 		break;
|    | [NORMAL] ESLintBear (indent):
|    | Expected indentation of 3 tabs but found 4.
|----|    | /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
| 864| 864| 						prevHotkey = ev.hotkey;
| 865| 865| 					}
| 866| 866| 				}
| 867|    |-				break;
|    | 867|+			break;
| 868| 868| 		}
| 869| 869| 		break;
| 870| 870| 
|    | [NORMAL] ESLintBear (space-in-parens):
|    | There should be no spaces inside this paren.
|----|    | /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
|1515|1515| 		g_BatchTrainingEntityAllowedCount < batchedSize * appropriateBuildings.length)
|1516|1516| 	{
|1517|1517| 		// Train as many full batches as we can
|1518|    |-		let buildingsCountToTrainFullBatch = Math.floor( g_BatchTrainingEntityAllowedCount / batchedSize);
|    |1518|+		let buildingsCountToTrainFullBatch = Math.floor(g_BatchTrainingEntityAllowedCount / batchedSize);
|1519|1519| 		Engine.PostNetworkCommand({
|1520|1520| 			"type": "train",
|1521|1521| 			"entities": appropriateBuildings.slice(0, buildingsCountToTrainFullBatch),
|    | [NORMAL] ESLintBear (comma-spacing):
|    | A space is required after ','.
|----|    | /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
|1594|1594| 	var selectall = Engine.HotkeyIsPressed("selection.offscreen");
|1595|1595| 
|1596|1596| 	// Reset the last idle unit, etc., if the selection type has changed.
|1597|    |-	if (selectall || classes.length != lastIdleClasses.length || !classes.every((v,i) => v === lastIdleClasses[i]))
|    |1597|+	if (selectall || classes.length != lastIdleClasses.length || !classes.every((v, i) => v === lastIdleClasses[i]))
|1598|1598| 		resetIdleUnit();
|1599|1599| 	lastIdleClasses = classes;
|1600|1600| 

binaries/data/mods/public/gui/session/input.js
| 231| »   var·target·=·undefined;
|    | [NORMAL] ESLintBear (no-undef-init):
|    | It's not necessary to initialize 'target' to undefined.

binaries/data/mods/public/gui/session/input.js
| 245| »   var·actionInfo·=·undefined;
|    | [NORMAL] ESLintBear (no-undef-init):
|    | It's not necessary to initialize 'actionInfo' to undefined.

binaries/data/mods/public/gui/session/input.js
| 468| »   switch·(ev.type)
|    | [NORMAL] ESLintBear (default-case):
|    | Expected a default case.

binaries/data/mods/public/gui/session/input.js
| 495| »   switch·(inputState)
|    | [NORMAL] ESLintBear (default-case):
|    | Expected a default case.

binaries/data/mods/public/gui/session/input.js
| 499| »   »   switch·(ev.type)
|    | [NORMAL] ESLintBear (default-case):
|    | Expected a default case.

binaries/data/mods/public/gui/session/input.js
| 554| »   »   switch·(ev.type)
|    | [NORMAL] ESLintBear (default-case):
|    | Expected a default case.

binaries/data/mods/public/gui/session/input.js
| 564| »   »   switch·(ev.type)
|    | [NORMAL] ESLintBear (default-case):
|    | Expected a default case.

binaries/data/mods/public/gui/session/input.js
| 612| »   »   switch·(ev.type)
|    | [NORMAL] ESLintBear (default-case):
|    | Expected a default case.

binaries/data/mods/public/gui/session/input.js
| 641| »   »   switch·(ev.type)
|    | [NORMAL] ESLintBear (default-case):
|    | Expected a default case.

binaries/data/mods/public/gui/session/input.js
| 710| »   »   switch·(ev.type)
|    | [NORMAL] ESLintBear (default-case):
|    | Expected a default case.

binaries/data/mods/public/gui/session/input.js
| 811| »   switch·(inputState)
|    | [NORMAL] ESLintBear (default-case):
|    | Expected a default case.

binaries/data/mods/public/gui/session/input.js
| 814| »   »   switch·(ev.type)
|    | [NORMAL] ESLintBear (default-case):
|    | Expected a default case.

binaries/data/mods/public/gui/session/input.js
| 916| »   »   switch·(ev.type)
|    | [NORMAL] ESLintBear (default-case):
|    | Expected a default case.

binaries/data/mods/public/gui/session/input.js
|1005| »   »   switch·(ev.type)
|    | [NORMAL] ESLintBear (default-case):
|    | Expected a default case.

binaries/data/mods/public/gui/session/input.js
|1019| »   »   »   »   let·action·=·determineAction(ev.x,·ev.y);
|    | [NORMAL] ESLintBear (no-shadow):
|    | 'action' is already declared in the upper scope.

binaries/data/mods/public/gui/session/input.js
|1028| »   »   switch·(ev.type)
|    | [NORMAL] ESLintBear (default-case):
|    | Expected a default case.

binaries/data/mods/public/gui/session/input.js
|1117| »   »   »   switch·(ev.hotkey)
|    | [NORMAL] ESLintBear (default-case):
|    | Expected a default case.

binaries/data/mods/public/gui/session/input.js
|1545| »   switch·(action)
|    | [NORMAL] ESLintBear (default-case):
|    | Expected a default case.

binaries/data/mods/public/gui/session/input.js
| 231| »   var·target·=·undefined;
|    | [NORMAL] JSHintBear:
|    | It's not necessary to initialize 'target' to 'undefined'.

binaries/data/mods/public/gui/session/input.js
| 245| »   var·actionInfo·=·undefined;
|    | [NORMAL] JSHintBear:
|    | It's not necessary to initialize 'actionInfo' to 'undefined'.

binaries/data/mods/public/gui/session/input.js
| 259| »   for·(var·action·of·actions)
|    | [NORMAL] JSHintBear:
|    | 'action' is already defined.

binaries/data/mods/public/gui/session/input.js
| 262| »   »   »   var·r·=·g_UnitActions[action].hotkeyActionCheck(target,·selection);
|    | [NORMAL] JSHintBear:
|    | 'r' is already defined.

binaries/data/mods/public/gui/session/input.js
| 267| »   for·(var·action·of·actions)
|    | [NORMAL] JSHintBear:
|    | 'action' is already defined.

binaries/data/mods/public/gui/session/input.js
| 270| »   »   »   var·r·=·g_UnitActions[action].actionCheck(target,·selection);
|    | [NORMAL] JSHintBear:
|    | 'r' is already defined.

binaries/data/mods/public/gui/session/input.js
| 483| »   »   &&·(ev.button·==·SDL_BUTTON_LEFT·||·ev.button·==·SDL_BUTTON_RIGHT))
|    | [NORMAL] JSHintBear:
|    | Misleading line break before '&&'; readers may interpret this as an expression boundary.

binaries/data/mods/public/gui/session/input.js
| 513| »   »   »   »   var·rect·=·updateBandbox(bandbox,·ev,·true);
|    | [NORMAL] JSHintBear:
|    | 'rect' is already defined.

binaries/data/mods/public/gui/session/input.js
| 516| »   »   »   »   var·ents·=·getPreferredEntities(Engine.PickPlayerEntitiesInRect(rect[0],·rect[1],·rect[2],·rect[3],·g_ViewedPlayer));
|    | [NORMAL] JSHintBear:
|    | 'ents' is already defined.

binaries/data/mods/public/gui/session/input.js
| 673| »   »   »   »   »   var·queued·=·Engine.HotkeyIsPressed("session.queue");
|    | [NORMAL] JSHintBear:
|    | 'queued' is already defined.

binaries/data/mods/public/gui/session/input.js
| 747| »   »   »   »   var·queued·=·Engine.HotkeyIsPressed("session.queue");
|    | [NORMAL] JSHintBear:
|    | 'queued' is already defined.

binaries/data/mods/public/gui/session/input.js
| 860| »   »   »   »   »   »   var·sptr·=·ev.hotkey.split(".");
|    | [NORMAL] JSHintBear:
|    | 'sptr' is already defined.

binaries/data/mods/public/gui/session/input.js
| 876| »   »   »   var·ent·=·Engine.PickEntityAtPoint(ev.x,·ev.y);
|    | [NORMAL] JSHintBear:
|    | 'ent' is already defined.

binaries/data/mods/public/gui/session/input.js
| 902| »   »   »   }
|    | [NORMAL] JSHintBear:
|    | Expected a 'break' statement before 'default'.

binaries/data/mods/public/gui/session/input.js
| 926| »   »   »   var·ent·=·Engine.PickEntityAtPoint(ev.x,·ev.y);
|    | [NORMAL] JSHintBear:
|    | 'ent' is already defined.

binaries/data/mods/public/gui/session/input.js
|1082| »   »   »   »   »   var·snapToEdge·=·Engine.HotkeyIsPressed("session.snaptoedge");
|    | [NORMAL] JSHintBear:
|    | 'snapToEdge' is already defined.

binaries/data/mods/public/gui/session/input.js
|1085| »   »   »   »   »   »   var·snapData·=·Engine.GuiInterfaceCall("GetFoundationSnapData",·{
|    | [NORMAL] JSHintBear:
|    | 'snapData' is already defined.
Executing section cli...

Link to build: https://jenkins.wildfiregames.com/job/docker-differential/1066/display/redirect

Stan added inline comments.Sun, Nov 10, 9:24 AM
binaries/data/mods/public/gui/session/input.js
725

Let.

1051

Let.

1082

Let.

1085

Let.

1093

Can't you assign the object directly ? Object.assign(secondObject, firstObject); or a = b ?

binaries/data/mods/public/simulation/components/GuiInterface.js
1734

I'm not sure how to write it but I believe you can use array.find() here.

1758

Maybe you could move the functions out ?

source/simulation2/components/CCmpObstruction.cpp
524

ternary ?

vladislavbelov marked 3 inline comments as done.

Successful build - Chance fights ever on the side of the prudent.

Link to build: https://jenkins.wildfiregames.com/job/vs2015-differential/555/display/redirect

vladislavbelov added inline comments.Sun, Nov 10, 2:18 PM
binaries/data/mods/public/gui/session/input.js
1093

No, different types.

binaries/data/mods/public/simulation/components/GuiInterface.js
1734

It's not a usual find.

1758

Yeah, that was in elexis`s comment.

Successful build - Chance fights ever on the side of the prudent.

Linter detected issues:
Executing section Source...

source/simulation2/components/ICmpObstruction.h
|  29| class·ICmpObstruction·:·public·IComponent
|    | [MAJOR] CPPCheckBear (syntaxError):
|    | Code 'classICmpObstruction:' is invalid C code. Use --std or --language to configure the language.

source/simulation2/components/tests/test_ObstructionManager.h
|  23| class·MockObstruction·:·public·ICmpObstruction
|    | [MAJOR] CPPCheckBear (syntaxError):
|    | Code 'classMockObstruction:' is invalid C code. Use --std or --language to configure the language.

source/simulation2/scripting/JSInterface_Simulation.h
|  24| namespace·JSI_Simulation
|    | [MAJOR] CPPCheckBear (syntaxError):
|    | Code 'namespaceJSI_Simulation{' is invalid C code. Use --std or --language to configure the language.
Executing section JS...
|    | [NORMAL] ESLintBear (spaced-comment):
|    | Expected space or tab after '//' in comment.
|----|    | /zpool0/trunk/binaries/data/mods/public/globalscripts/vector.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/globalscripts/vector.js
|   1|    |-/////////////////////////////////////////////////////////////////////
|    |   1|+// ///////////////////////////////////////////////////////////////////
|   2|   2| //	Vector2D
|   3|   3| //
|   4|   4| //	Class for representing and manipulating 2D vectors
|    | [NORMAL] ESLintBear (spaced-comment):
|    | Expected space or tab after '//' in comment.
|----|    | /zpool0/trunk/binaries/data/mods/public/globalscripts/vector.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/globalscripts/vector.js
|   3|   3| //
|   4|   4| //	Class for representing and manipulating 2D vectors
|   5|   5| //
|   6|    |-/////////////////////////////////////////////////////////////////////
|    |   6|+// ///////////////////////////////////////////////////////////////////
|   7|   7| 
|   8|   8| // TODO: Type errors if v not instanceof Vector classes
|   9|   9| // TODO: Possibly implement in C++
|    | [NORMAL] ESLintBear (spaced-comment):
|    | Expected space or tab after '//' in comment.
|----|    | /zpool0/trunk/binaries/data/mods/public/globalscripts/vector.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/globalscripts/vector.js
| 245| 245| 	return v1.x * v2.x + v1.y * v2.y;
| 246| 246| };
| 247| 247| 
| 248|    |-/////////////////////////////////////////////////////////////////////
|    | 248|+// ///////////////////////////////////////////////////////////////////
| 249| 249| //	Vector3D
| 250| 250| //
| 251| 251| //	Class for representing and manipulating 3D vectors
|    | [NORMAL] ESLintBear (spaced-comment):
|    | Expected space or tab after '//' in comment.
|----|    | /zpool0/trunk/binaries/data/mods/public/globalscripts/vector.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/globalscripts/vector.js
| 250| 250| //
| 251| 251| //	Class for representing and manipulating 3D vectors
| 252| 252| //
| 253|    |-/////////////////////////////////////////////////////////////////////
|    | 253|+// ///////////////////////////////////////////////////////////////////
| 254| 254| 
| 255| 255| function Vector3D(x = 0, y = 0, z = 0)
| 256| 256| {
|    | [NORMAL] ESLintBear (indent):
|    | Expected indentation of 2 tabs but found 3.
|----|    | /zpool0/trunk/binaries/data/mods/public/simulation/components/GuiInterface.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/simulation/components/GuiInterface.js
| 821| 821| 		updateEntityColor(data.showAllStatusBars && (i == player || player == -1) ?
| 822| 822| 			[IID_Minimap, IID_RangeOverlayRenderer, IID_RallyPointRenderer, IID_StatusBars] :
| 823| 823| 			[IID_Minimap, IID_RangeOverlayRenderer, IID_RallyPointRenderer],
| 824|    |-			cmpRangeManager.GetEntitiesByPlayer(i));
|    | 824|+		cmpRangeManager.GetEntitiesByPlayer(i));
| 825| 825| 	}
| 826| 826| 	updateEntityColor([IID_Selectable, IID_StatusBars], data.selected);
| 827| 827| 	Engine.QueryInterface(SYSTEM_ENTITY, IID_TerritoryManager).UpdateColors();
|    | [NORMAL] ESLintBear (indent):
|    | Expected indentation of 5 tabs but found 6.
|----|    | /zpool0/trunk/binaries/data/mods/public/simulation/components/GuiInterface.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/simulation/components/GuiInterface.js
|1654|1654| 			{
|1655|1655| 				minDist2 = dist2;
|1656|1656| 				minDistEntitySnapData = {
|1657|    |-						"x": pos.x,
|    |1657|+					"x": pos.x,
|1658|1658| 						"z": pos.z,
|1659|1659| 						"angle": cmpPosition.GetRotation().y,
|1660|1660| 						"ent": ent
|    | [NORMAL] ESLintBear (indent):
|    | Expected indentation of 5 tabs but found 6.
|----|    | /zpool0/trunk/binaries/data/mods/public/simulation/components/GuiInterface.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/simulation/components/GuiInterface.js
|1655|1655| 				minDist2 = dist2;
|1656|1656| 				minDistEntitySnapData = {
|1657|1657| 						"x": pos.x,
|1658|    |-						"z": pos.z,
|    |1658|+					"z": pos.z,
|1659|1659| 						"angle": cmpPosition.GetRotation().y,
|1660|1660| 						"ent": ent
|1661|1661| 				};
|    | [NORMAL] ESLintBear (indent):
|    | Expected indentation of 5 tabs but found 6.
|----|    | /zpool0/trunk/binaries/data/mods/public/simulation/components/GuiInterface.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/simulation/components/GuiInterface.js
|1656|1656| 				minDistEntitySnapData = {
|1657|1657| 						"x": pos.x,
|1658|1658| 						"z": pos.z,
|1659|    |-						"angle": cmpPosition.GetRotation().y,
|    |1659|+					"angle": cmpPosition.GetRotation().y,
|1660|1660| 						"ent": ent
|1661|1661| 				};
|1662|1662| 			}
|    | [NORMAL] ESLintBear (indent):
|    | Expected indentation of 5 tabs but found 6.
|----|    | /zpool0/trunk/binaries/data/mods/public/simulation/components/GuiInterface.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/simulation/components/GuiInterface.js
|1657|1657| 						"x": pos.x,
|1658|1658| 						"z": pos.z,
|1659|1659| 						"angle": cmpPosition.GetRotation().y,
|1660|    |-						"ent": ent
|    |1660|+					"ent": ent
|1661|1661| 				};
|1662|1662| 			}
|1663|1663| 		}
|    | [NORMAL] ESLintBear (semi):
|    | Missing semicolon.
|----|    | /zpool0/trunk/binaries/data/mods/public/simulation/components/GuiInterface.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/simulation/components/GuiInterface.js
|1703|1703| 				edges.push(edge);
|1704|1704| 			}
|1705|1705| 			return edges;
|1706|    |-		}
|    |1706|+		};
|1707|1707| 
|1708|1708| 		let edges = getValidEdges(data.snapToEdges, templatePos, maxSide);
|1709|1709| 		if (edges.length)

binaries/data/mods/public/simulation/components/GuiInterface.js
|1678| »   »   const·getValidEdges·=·(allEdges,·position,·maxSide)·=>·{
|    | [NORMAL] ESLintBear (no-shadow):
|    | 'maxSide' is already declared in the upper scope.

binaries/data/mods/public/simulation/components/GuiInterface.js
|1795| »   »   »   »   »   let·distance·=·Vector2D.dot(secondEdge.normal,·templatePos)·-·Vector2D.dot(secondEdge.normal,·secondEdge.begin);
|    | [NORMAL] ESLintBear (no-shadow):
|    | 'distance' is already declared in the upper scope.

binaries/data/mods/public/simulation/components/GuiInterface.js
|1706| »   »   }
|    | [NORMAL] JSHintBear:
|    | Missing semicolon.

binaries/data/mods/public/simulation/components/GuiInterface.js
|1727| »   »   »   »   »   return·-a.signedDistance·-·-b.signedDistance;
|    | [NORMAL] JSHintBear:
|    | Confusing minuses.
|    | [NORMAL] ESLintBear (space-unary-ops):
|    | Unary word operator 'typeof' must be followed by whitespace.
|----|    | /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
| 329| 329| 	}
| 330| 330| 
| 331| 331| 	var wallPlacementInfo = updateBuildingPlacementPreview(); // entities making up the wall (wall segments, towers, ...)
| 332|    |-	if (!(wallPlacementInfo === false || typeof(wallPlacementInfo) === "object"))
|    | 332|+	if (!(wallPlacementInfo === false || typeof (wallPlacementInfo) === "object"))
| 333| 333| 	{
| 334| 334| 		error("Invalid updateBuildingPlacementPreview return value: " + uneval(wallPlacementInfo));
| 335| 335| 		return false;
|    | [NORMAL] ESLintBear (operator-linebreak):
|    | '&&' should be placed at the end of the line.
|----|    | /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
| 479| 479| 	mouseIsOverObject = (hoveredObject != null);
| 480| 480| 
| 481| 481| 	// Close the menu when interacting with the game world
| 482|    |-	if (!mouseIsOverObject && (ev.type =="mousebuttonup" || ev.type == "mousebuttondown")
| 483|    |-		&& (ev.button == SDL_BUTTON_LEFT || ev.button == SDL_BUTTON_RIGHT))
|    | 482|+	if (!mouseIsOverObject && (ev.type =="mousebuttonup" || ev.type == "mousebuttondown") &&
|    | 483|+		(ev.button == SDL_BUTTON_LEFT || ev.button == SDL_BUTTON_RIGHT))
| 484| 484| 		g_Menu.close();
| 485| 485| 
| 486| 486| 	// State-machine processing:
|    | [NORMAL] ESLintBear (indent):
|    | Expected indentation of 2 tabs but found 3.
|----|    | /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
| 640| 640| 		// user to continue building walls.
| 641| 641| 		switch (ev.type)
| 642| 642| 		{
| 643|    |-			case "mousemotion":
|    | 643|+		case "mousemotion":
| 644| 644| 				placementSupport.wallEndPosition = Engine.GetTerrainAtScreenPoint(ev.x, ev.y);
| 645| 645| 
| 646| 646| 				// Update the building placement preview, and by extension, the list of snapping candidate entities for both (!)
|    | [NORMAL] ESLintBear (indent):
|    | Expected indentation of 3 tabs but found 4.
|----|    | /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
| 641| 641| 		switch (ev.type)
| 642| 642| 		{
| 643| 643| 			case "mousemotion":
| 644|    |-				placementSupport.wallEndPosition = Engine.GetTerrainAtScreenPoint(ev.x, ev.y);
|    | 644|+			placementSupport.wallEndPosition = Engine.GetTerrainAtScreenPoint(ev.x, ev.y);
| 645| 645| 
| 646| 646| 				// Update the building placement preview, and by extension, the list of snapping candidate entities for both (!)
| 647| 647| 				// the ending point and the starting point to snap to.
|    | [NORMAL] ESLintBear (indent):
|    | Expected indentation of 3 tabs but found 4.
|----|    | /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
| 643| 643| 			case "mousemotion":
| 644| 644| 				placementSupport.wallEndPosition = Engine.GetTerrainAtScreenPoint(ev.x, ev.y);
| 645| 645| 
| 646|    |-				// Update the building placement preview, and by extension, the list of snapping candidate entities for both (!)
|    | 646|+			// Update the building placement preview, and by extension, the list of snapping candidate entities for both (!)
| 647| 647| 				// the ending point and the starting point to snap to.
| 648| 648| 				//
| 649| 649| 				// TODO: Note that here, we need to fetch all similar entities, including any offscreen ones, to support the case
|    | [NORMAL] ESLintBear (indent):
|    | Expected indentation of 3 tabs but found 4.
|----|    | /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
| 644| 644| 				placementSupport.wallEndPosition = Engine.GetTerrainAtScreenPoint(ev.x, ev.y);
| 645| 645| 
| 646| 646| 				// Update the building placement preview, and by extension, the list of snapping candidate entities for both (!)
| 647|    |-				// the ending point and the starting point to snap to.
|    | 647|+			// the ending point and the starting point to snap to.
| 648| 648| 				//
| 649| 649| 				// TODO: Note that here, we need to fetch all similar entities, including any offscreen ones, to support the case
| 650| 650| 				// where the snap entity for the starting point has moved offscreen, or has been deleted/destroyed, or was a
|    | [NORMAL] ESLintBear (indent):
|    | Expected indentation of 3 tabs but found 4.
|----|    | /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
| 645| 645| 
| 646| 646| 				// Update the building placement preview, and by extension, the list of snapping candidate entities for both (!)
| 647| 647| 				// the ending point and the starting point to snap to.
| 648|    |-				//
|    | 648|+			//
| 649| 649| 				// TODO: Note that here, we need to fetch all similar entities, including any offscreen ones, to support the case
| 650| 650| 				// where the snap entity for the starting point has moved offscreen, or has been deleted/destroyed, or was a
| 651| 651| 				// foundation and has been replaced with a completed entity since the user first chose it. Fetching all towers on
|    | [NORMAL] ESLintBear (indent):
|    | Expected indentation of 3 tabs but found 4.
|----|    | /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
| 646| 646| 				// Update the building placement preview, and by extension, the list of snapping candidate entities for both (!)
| 647| 647| 				// the ending point and the starting point to snap to.
| 648| 648| 				//
| 649|    |-				// TODO: Note that here, we need to fetch all similar entities, including any offscreen ones, to support the case
|    | 649|+			// TODO: Note that here, we need to fetch all similar entities, including any offscreen ones, to support the case
| 650| 650| 				// where the snap entity for the starting point has moved offscreen, or has been deleted/destroyed, or was a
| 651| 651| 				// foundation and has been replaced with a completed entity since the user first chose it. Fetching all towers on
| 652| 652| 				// the entire map instead of only the current screen might get expensive fast since walls all have a ton of towers
|    | [NORMAL] ESLintBear (indent):
|    | Expected indentation of 3 tabs but found 4.
|----|    | /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
| 647| 647| 				// the ending point and the starting point to snap to.
| 648| 648| 				//
| 649| 649| 				// TODO: Note that here, we need to fetch all similar entities, including any offscreen ones, to support the case
| 650|    |-				// where the snap entity for the starting point has moved offscreen, or has been deleted/destroyed, or was a
|    | 650|+			// where the snap entity for the starting point has moved offscreen, or has been deleted/destroyed, or was a
| 651| 651| 				// foundation and has been replaced with a completed entity since the user first chose it. Fetching all towers on
| 652| 652| 				// the entire map instead of only the current screen might get expensive fast since walls all have a ton of towers
| 653| 653| 				// in them. Might be useful to query only for entities within a certain range around the starting point and ending
|    | [NORMAL] ESLintBear (indent):
|    | Expected indentation of 3 tabs but found 4.
|----|    | /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
| 648| 648| 				//
| 649| 649| 				// TODO: Note that here, we need to fetch all similar entities, including any offscreen ones, to support the case
| 650| 650| 				// where the snap entity for the starting point has moved offscreen, or has been deleted/destroyed, or was a
| 651|    |-				// foundation and has been replaced with a completed entity since the user first chose it. Fetching all towers on
|    | 651|+			// foundation and has been replaced with a completed entity since the user first chose it. Fetching all towers on
| 652| 652| 				// the entire map instead of only the current screen might get expensive fast since walls all have a ton of towers
| 653| 653| 				// in them. Might be useful to query only for entities within a certain range around the starting point and ending
| 654| 654| 				// points.
|    | [NORMAL] ESLintBear (indent):
|    | Expected indentation of 3 tabs but found 4.
|----|    | /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
| 649| 649| 				// TODO: Note that here, we need to fetch all similar entities, including any offscreen ones, to support the case
| 650| 650| 				// where the snap entity for the starting point has moved offscreen, or has been deleted/destroyed, or was a
| 651| 651| 				// foundation and has been replaced with a completed entity since the user first chose it. Fetching all towers on
| 652|    |-				// the entire map instead of only the current screen might get expensive fast since walls all have a ton of towers
|    | 652|+			// the entire map instead of only the current screen might get expensive fast since walls all have a ton of towers
| 653| 653| 				// in them. Might be useful to query only for entities within a certain range around the starting point and ending
| 654| 654| 				// points.
| 655| 655| 
|    | [NORMAL] ESLintBear (indent):
|    | Expected indentation of 3 tabs but found 4.
|----|    | /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
| 650| 650| 				// where the snap entity for the starting point has moved offscreen, or has been deleted/destroyed, or was a
| 651| 651| 				// foundation and has been replaced with a completed entity since the user first chose it. Fetching all towers on
| 652| 652| 				// the entire map instead of only the current screen might get expensive fast since walls all have a ton of towers
| 653|    |-				// in them. Might be useful to query only for entities within a certain range around the starting point and ending
|    | 653|+			// in them. Might be useful to query only for entities within a certain range around the starting point and ending
| 654| 654| 				// points.
| 655| 655| 
| 656| 656| 				placementSupport.wallSnapEntitiesIncludeOffscreen = true;
|    | [NORMAL] ESLintBear (indent):
|    | Expected indentation of 3 tabs but found 4.
|----|    | /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
| 651| 651| 				// foundation and has been replaced with a completed entity since the user first chose it. Fetching all towers on
| 652| 652| 				// the entire map instead of only the current screen might get expensive fast since walls all have a ton of towers
| 653| 653| 				// in them. Might be useful to query only for entities within a certain range around the starting point and ending
| 654|    |-				// points.
|    | 654|+			// points.
| 655| 655| 
| 656| 656| 				placementSupport.wallSnapEntitiesIncludeOffscreen = true;
| 657| 657| 				var result = updateBuildingPlacementPreview(); // includes an update of the snap entity candidates
|    | [NORMAL] ESLintBear (indent):
|    | Expected indentation of 3 tabs but found 4.
|----|    | /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
| 653| 653| 				// in them. Might be useful to query only for entities within a certain range around the starting point and ending
| 654| 654| 				// points.
| 655| 655| 
| 656|    |-				placementSupport.wallSnapEntitiesIncludeOffscreen = true;
|    | 656|+			placementSupport.wallSnapEntitiesIncludeOffscreen = true;
| 657| 657| 				var result = updateBuildingPlacementPreview(); // includes an update of the snap entity candidates
| 658| 658| 
| 659| 659| 				if (result && result.cost)
|    | [NORMAL] ESLintBear (indent):
|    | Expected indentation of 3 tabs but found 4.
|----|    | /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
| 654| 654| 				// points.
| 655| 655| 
| 656| 656| 				placementSupport.wallSnapEntitiesIncludeOffscreen = true;
| 657|    |-				var result = updateBuildingPlacementPreview(); // includes an update of the snap entity candidates
|    | 657|+			var result = updateBuildingPlacementPreview(); // includes an update of the snap entity candidates
| 658| 658| 
| 659| 659| 				if (result && result.cost)
| 660| 660| 				{
|    | [NORMAL] ESLintBear (indent):
|    | Expected indentation of 3 tabs but found 4.
|----|    | /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
| 656| 656| 				placementSupport.wallSnapEntitiesIncludeOffscreen = true;
| 657| 657| 				var result = updateBuildingPlacementPreview(); // includes an update of the snap entity candidates
| 658| 658| 
| 659|    |-				if (result && result.cost)
|    | 659|+			if (result && result.cost)
| 660| 660| 				{
| 661| 661| 					var neededResources = Engine.GuiInterfaceCall("GetNeededResources", { "cost": result.cost });
| 662| 662| 					placementSupport.tooltipMessage = [
|    | [NORMAL] ESLintBear (indent):
|    | Expected indentation of 3 tabs but found 4.
|----|    | /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
| 657| 657| 				var result = updateBuildingPlacementPreview(); // includes an update of the snap entity candidates
| 658| 658| 
| 659| 659| 				if (result && result.cost)
| 660|    |-				{
|    | 660|+			{
| 661| 661| 					var neededResources = Engine.GuiInterfaceCall("GetNeededResources", { "cost": result.cost });
| 662| 662| 					placementSupport.tooltipMessage = [
| 663| 663| 						getEntityCostTooltip(result),
|    | [NORMAL] ESLintBear (indent):
|    | Expected indentation of 4 tabs but found 5.
|----|    | /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
| 658| 658| 
| 659| 659| 				if (result && result.cost)
| 660| 660| 				{
| 661|    |-					var neededResources = Engine.GuiInterfaceCall("GetNeededResources", { "cost": result.cost });
|    | 661|+				var neededResources = Engine.GuiInterfaceCall("GetNeededResources", { "cost": result.cost });
| 662| 662| 					placementSupport.tooltipMessage = [
| 663| 663| 						getEntityCostTooltip(result),
| 664| 664| 						getNeededResourcesTooltip(neededResources)
|    | [NORMAL] ESLintBear (indent):
|    | Expected indentation of 4 tabs but found 5.
|----|    | /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
| 659| 659| 				if (result && result.cost)
| 660| 660| 				{
| 661| 661| 					var neededResources = Engine.GuiInterfaceCall("GetNeededResources", { "cost": result.cost });
| 662|    |-					placementSupport.tooltipMessage = [
|    | 662|+				placementSupport.tooltipMessage = [
| 663| 663| 						getEntityCostTooltip(result),
| 664| 664| 						getNeededResourcesTooltip(neededResources)
| 665| 665| 					].filter(tip => tip).join("\n");
|    | [NORMAL] ESLintBear (indent):
|    | Expected indentation of 5 tabs but found 6.
|----|    | /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
| 660| 660| 				{
| 661| 661| 					var neededResources = Engine.GuiInterfaceCall("GetNeededResources", { "cost": result.cost });
| 662| 662| 					placementSupport.tooltipMessage = [
| 663|    |-						getEntityCostTooltip(result),
|    | 663|+					getEntityCostTooltip(result),
| 664| 664| 						getNeededResourcesTooltip(neededResources)
| 665| 665| 					].filter(tip => tip).join("\n");
| 666| 666| 				}
|    | [NORMAL] ESLintBear (indent):
|    | Expected indentation of 5 tabs but found 6.
|----|    | /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
| 661| 661| 					var neededResources = Engine.GuiInterfaceCall("GetNeededResources", { "cost": result.cost });
| 662| 662| 					placementSupport.tooltipMessage = [
| 663| 663| 						getEntityCostTooltip(result),
| 664|    |-						getNeededResourcesTooltip(neededResources)
|    | 664|+					getNeededResourcesTooltip(neededResources)
| 665| 665| 					].filter(tip => tip).join("\n");
| 666| 666| 				}
| 667| 667| 
|    | [NORMAL] ESLintBear (indent):
|    | Expected indentation of 4 tabs but found 5.
|----|    | /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
| 662| 662| 					placementSupport.tooltipMessage = [
| 663| 663| 						getEntityCostTooltip(result),
| 664| 664| 						getNeededResourcesTooltip(neededResources)
| 665|    |-					].filter(tip => tip).join("\n");
|    | 665|+				].filter(tip => tip).join("\n");
| 666| 666| 				}
| 667| 667| 
| 668| 668| 				break;
|    | [NORMAL] ESLintBear (indent):
|    | Expected indentation of 3 tabs but found 4.
|----|    | /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
| 663| 663| 						getEntityCostTooltip(result),
| 664| 664| 						getNeededResourcesTooltip(neededResources)
| 665| 665| 					].filter(tip => tip).join("\n");
| 666|    |-				}
|    | 666|+			}
| 667| 667| 
| 668| 668| 				break;
| 669| 669| 
|    | [NORMAL] ESLintBear (indent):
|    | Expected indentation of 3 tabs but found 4.
|----|    | /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
| 665| 665| 					].filter(tip => tip).join("\n");
| 666| 666| 				}
| 667| 667| 
| 668|    |-				break;
|    | 668|+			break;
| 669| 669| 
| 670| 670| 			case "mousebuttondown":
| 671| 671| 				if (ev.button == SDL_BUTTON_LEFT)
|    | [NORMAL] ESLintBear (indent):
|    | Expected indentation of 2 tabs but found 3.
|----|    | /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
| 667| 667| 
| 668| 668| 				break;
| 669| 669| 
| 670|    |-			case "mousebuttondown":
|    | 670|+		case "mousebuttondown":
| 671| 671| 				if (ev.button == SDL_BUTTON_LEFT)
| 672| 672| 				{
| 673| 673| 					var queued = Engine.HotkeyIsPressed("session.queue");
|    | [NORMAL] ESLintBear (indent):
|    | Expected indentation of 3 tabs but found 4.
|----|    | /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
| 668| 668| 				break;
| 669| 669| 
| 670| 670| 			case "mousebuttondown":
| 671|    |-				if (ev.button == SDL_BUTTON_LEFT)
|    | 671|+			if (ev.button == SDL_BUTTON_LEFT)
| 672| 672| 				{
| 673| 673| 					var queued = Engine.HotkeyIsPressed("session.queue");
| 674| 674| 					if (tryPlaceWall(queued))
|    | [NORMAL] ESLintBear (indent):
|    | Expected indentation of 3 tabs but found 4.
|----|    | /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
| 669| 669| 
| 670| 670| 			case "mousebuttondown":
| 671| 671| 				if (ev.button == SDL_BUTTON_LEFT)
| 672|    |-				{
|    | 672|+			{
| 673| 673| 					var queued = Engine.HotkeyIsPressed("session.queue");
| 674| 674| 					if (tryPlaceWall(queued))
| 675| 675| 					{
|    | [NORMAL] ESLintBear (indent):
|    | Expected indentation of 4 tabs but found 5.
|----|    | /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
| 670| 670| 			case "mousebuttondown":
| 671| 671| 				if (ev.button == SDL_BUTTON_LEFT)
| 672| 672| 				{
| 673|    |-					var queued = Engine.HotkeyIsPressed("session.queue");
|    | 673|+				var queued = Engine.HotkeyIsPressed("session.queue");
| 674| 674| 					if (tryPlaceWall(queued))
| 675| 675| 					{
| 676| 676| 						if (queued)
|    | [NORMAL] ESLintBear (indent):
|    | Expected indentation of 4 tabs but found 5.
|----|    | /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
| 671| 671| 				if (ev.button == SDL_BUTTON_LEFT)
| 672| 672| 				{
| 673| 673| 					var queued = Engine.HotkeyIsPressed("session.queue");
| 674|    |-					if (tryPlaceWall(queued))
|    | 674|+				if (tryPlaceWall(queued))
| 675| 675| 					{
| 676| 676| 						if (queued)
| 677| 677| 						{
|    | [NORMAL] ESLintBear (indent):
|    | Expected indentation of 4 tabs but found 5.
|----|    | /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
| 672| 672| 				{
| 673| 673| 					var queued = Engine.HotkeyIsPressed("session.queue");
| 674| 674| 					if (tryPlaceWall(queued))
| 675|    |-					{
|    | 675|+				{
| 676| 676| 						if (queued)
| 677| 677| 						{
| 678| 678| 							// continue building, just set a new starting position where we left off
|    | [NORMAL] ESLintBear (indent):
|    | Expected indentation of 5 tabs but found 6.
|----|    | /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
| 673| 673| 					var queued = Engine.HotkeyIsPressed("session.queue");
| 674| 674| 					if (tryPlaceWall(queued))
| 675| 675| 					{
| 676|    |-						if (queued)
|    | 676|+					if (queued)
| 677| 677| 						{
| 678| 678| 							// continue building, just set a new starting position where we left off
| 679| 679| 							placementSupport.position = placementSupport.wallEndPosition;
|    | [NORMAL] ESLintBear (indent):
|    | Expected indentation of 5 tabs but found 6.
|----|    | /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
| 674| 674| 					if (tryPlaceWall(queued))
| 675| 675| 					{
| 676| 676| 						if (queued)
| 677|    |-						{
|    | 677|+					{
| 678| 678| 							// continue building, just set a new starting position where we left off
| 679| 679| 							placementSupport.position = placementSupport.wallEndPosition;
| 680| 680| 							placementSupport.wallEndPosition = undefined;
|    | [NORMAL] ESLintBear (indent):
|    | Expected indentation of 6 tabs but found 7.
|----|    | /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
| 675| 675| 					{
| 676| 676| 						if (queued)
| 677| 677| 						{
| 678|    |-							// continue building, just set a new starting position where we left off
|    | 678|+						// continue building, just set a new starting position where we left off
| 679| 679| 							placementSupport.position = placementSupport.wallEndPosition;
| 680| 680| 							placementSupport.wallEndPosition = undefined;
| 681| 681| 
|    | [NORMAL] ESLintBear (indent):
|    | Expected indentation of 6 tabs but found 7.
|----|    | /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
| 676| 676| 						if (queued)
| 677| 677| 						{
| 678| 678| 							// continue building, just set a new starting position where we left off
| 679|    |-							placementSupport.position = placementSupport.wallEndPosition;
|    | 679|+						placementSupport.position = placementSupport.wallEndPosition;
| 680| 680| 							placementSupport.wallEndPosition = undefined;
| 681| 681| 
| 682| 682| 							inputState = INPUT_BUILDING_WALL_CLICK;
|    | [NORMAL] ESLintBear (indent):
|    | Expected indentation of 6 tabs but found 7.
|----|    | /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
| 677| 677| 						{
| 678| 678| 							// continue building, just set a new starting position where we left off
| 679| 679| 							placementSupport.position = placementSupport.wallEndPosition;
| 680|    |-							placementSupport.wallEndPosition = undefined;
|    | 680|+						placementSupport.wallEndPosition = undefined;
| 681| 681| 
| 682| 682| 							inputState = INPUT_BUILDING_WALL_CLICK;
| 683| 683| 						}
|    | [NORMAL] ESLintBear (indent):
|    | Expected indentation of 6 tabs but found 7.
|----|    | /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
| 679| 679| 							placementSupport.position = placementSupport.wallEndPosition;
| 680| 680| 							placementSupport.wallEndPosition = undefined;
| 681| 681| 
| 682|    |-							inputState = INPUT_BUILDING_WALL_CLICK;
|    | 682|+						inputState = INPUT_BUILDING_WALL_CLICK;
| 683| 683| 						}
| 684| 684| 						else
| 685| 685| 						{
|    | [NORMAL] ESLintBear (indent):
|    | Expected indentation of 5 tabs but found 6.
|----|    | /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
| 680| 680| 							placementSupport.wallEndPosition = undefined;
| 681| 681| 
| 682| 682| 							inputState = INPUT_BUILDING_WALL_CLICK;
| 683|    |-						}
|    | 683|+					}
| 684| 684| 						else
| 685| 685| 						{
| 686| 686| 							placementSupport.Reset();
|    | [NORMAL] ESLintBear (indent):
|    | Expected indentation of 5 tabs but found 6.
|----|    | /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
| 681| 681| 
| 682| 682| 							inputState = INPUT_BUILDING_WALL_CLICK;
| 683| 683| 						}
| 684|    |-						else
|    | 684|+					else
| 685| 685| 						{
| 686| 686| 							placementSupport.Reset();
| 687| 687| 							inputState = INPUT_NORMAL;
|    | [NORMAL] ESLintBear (indent):
|    | Expected indentation of 5 tabs but found 6.
|----|    | /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
| 682| 682| 							inputState = INPUT_BUILDING_WALL_CLICK;
| 683| 683| 						}
| 684| 684| 						else
| 685|    |-						{
|    | 685|+					{
| 686| 686| 							placementSupport.Reset();
| 687| 687| 							inputState = INPUT_NORMAL;
| 688| 688| 						}
|    | [NORMAL] ESLintBear (indent):
|    | Expected indentation of 6 tabs but found 7.
|----|    | /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
| 683| 683| 						}
| 684| 684| 						else
| 685| 685| 						{
| 686|    |-							placementSupport.Reset();
|    | 686|+						placementSupport.Reset();
| 687| 687| 							inputState = INPUT_NORMAL;
| 688| 688| 						}
| 689| 689| 					}
|    | [NORMAL] ESLintBear (indent):
|    | Expected indentation of 6 tabs but found 7.
|----|    | /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
| 684| 684| 						else
| 685| 685| 						{
| 686| 686| 							placementSupport.Reset();
| 687|    |-							inputState = INPUT_NORMAL;
|    | 687|+						inputState = INPUT_NORMAL;
| 688| 688| 						}
| 689| 689| 					}
| 690| 690| 					else
|    | [NORMAL] ESLintBear (indent):
|    | Expected indentation of 5 tabs but found 6.
|----|    | /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
| 685| 685| 						{
| 686| 686| 							placementSupport.Reset();
| 687| 687| 							inputState = INPUT_NORMAL;
| 688|    |-						}
|    | 688|+					}
| 689| 689| 					}
| 690| 690| 					else
| 691| 691| 						placementSupport.tooltipMessage = translate("Cannot build wall here!");
|    | [NORMAL] ESLintBear (indent):
|    | Expected indentation of 4 tabs but found 5.
|----|    | /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
| 686| 686| 							placementSupport.Reset();
| 687| 687| 							inputState = INPUT_NORMAL;
| 688| 688| 						}
| 689|    |-					}
|    | 689|+				}
| 690| 690| 					else
| 691| 691| 						placementSupport.tooltipMessage = translate("Cannot build wall here!");
| 692| 692| 
|    | [NORMAL] ESLintBear (indent):
|    | Expected indentation of 4 tabs but found 5.
|----|    | /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
| 687| 687| 							inputState = INPUT_NORMAL;
| 688| 688| 						}
| 689| 689| 					}
| 690|    |-					else
|    | 690|+				else
| 691| 691| 						placementSupport.tooltipMessage = translate("Cannot build wall here!");
| 692| 692| 
| 693| 693| 					updateBuildingPlacementPreview();
|    | [NORMAL] ESLintBear (indent):
|    | Expected indentation of 5 tabs but found 6.
|----|    | /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
| 688| 688| 						}
| 689| 689| 					}
| 690| 690| 					else
| 691|    |-						placementSupport.tooltipMessage = translate("Cannot build wall here!");
|    | 691|+					placementSupport.tooltipMessage = translate("Cannot build wall here!");
| 692| 692| 
| 693| 693| 					updateBuildingPlacementPreview();
| 694| 694| 					return true;
|    | [NORMAL] ESLintBear (indent):
|    | Expected indentation of 4 tabs but found 5.
|----|    | /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
| 690| 690| 					else
| 691| 691| 						placementSupport.tooltipMessage = translate("Cannot build wall here!");
| 692| 692| 
| 693|    |-					updateBuildingPlacementPreview();
|    | 693|+				updateBuildingPlacementPreview();
| 694| 694| 					return true;
| 695| 695| 				}
| 696| 696| 				else if (ev.button == SDL_BUTTON_RIGHT)
|    | [NORMAL] ESLintBear (indent):
|    | Expected indentation of 4 tabs but found 5.
|----|    | /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
| 691| 691| 						placementSupport.tooltipMessage = translate("Cannot build wall here!");
| 692| 692| 
| 693| 693| 					updateBuildingPlacementPreview();
| 694|    |-					return true;
|    | 694|+				return true;
| 695| 695| 				}
| 696| 696| 				else if (ev.button == SDL_BUTTON_RIGHT)
| 697| 697| 				{
|    | [NORMAL] ESLintBear (indent):
|    | Expected indentation of 3 tabs but found 4.
|----|    | /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
| 692| 692| 
| 693| 693| 					updateBuildingPlacementPreview();
| 694| 694| 					return true;
| 695|    |-				}
|    | 695|+			}
| 696| 696| 				else if (ev.button == SDL_BUTTON_RIGHT)
| 697| 697| 				{
| 698| 698| 					// reset to normal input mode
|    | [NORMAL] ESLintBear (indent):
|    | Expected indentation of 3 tabs but found 4.
|----|    | /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
| 693| 693| 					updateBuildingPlacementPreview();
| 694| 694| 					return true;
| 695| 695| 				}
| 696|    |-				else if (ev.button == SDL_BUTTON_RIGHT)
|    | 696|+			else if (ev.button == SDL_BUTTON_RIGHT)
| 697| 697| 				{
| 698| 698| 					// reset to normal input mode
| 699| 699| 					placementSupport.Reset();
|    | [NORMAL] ESLintBear (indent):
|    | Expected indentation of 3 tabs but found 4.
|----|    | /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
| 694| 694| 					return true;
| 695| 695| 				}
| 696| 696| 				else if (ev.button == SDL_BUTTON_RIGHT)
| 697|    |-				{
|    | 697|+			{
| 698| 698| 					// reset to normal input mode
| 699| 699| 					placementSupport.Reset();
| 700| 700| 					updateBuildingPlacementPreview();
|    | [NORMAL] ESLintBear (indent):
|    | Expected indentation of 4 tabs but found 5.
|----|    | /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
| 695| 695| 				}
| 696| 696| 				else if (ev.button == SDL_BUTTON_RIGHT)
| 697| 697| 				{
| 698|    |-					// reset to normal input mode
|    | 698|+				// reset to normal input mode
| 699| 699| 					placementSupport.Reset();
| 700| 700| 					updateBuildingPlacementPreview();
| 701| 701| 
|    | [NORMAL] ESLintBear (indent):
|    | Expected indentation of 4 tabs but found 5.
|----|    | /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
| 696| 696| 				else if (ev.button == SDL_BUTTON_RIGHT)
| 697| 697| 				{
| 698| 698| 					// reset to normal input mode
| 699|    |-					placementSupport.Reset();
|    | 699|+				placementSupport.Reset();
| 700| 700| 					updateBuildingPlacementPreview();
| 701| 701| 
| 702| 702| 					inputState = INPUT_NORMAL;
|    | [NORMAL] ESLintBear (indent):
|    | Expected indentation of 4 tabs but found 5.
|----|    | /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
| 697| 697| 				{
| 698| 698| 					// reset to normal input mode
| 699| 699| 					placementSupport.Reset();
| 700|    |-					updateBuildingPlacementPreview();
|    | 700|+				updateBuildingPlacementPreview();
| 701| 701| 
| 702| 702| 					inputState = INPUT_NORMAL;
| 703| 703| 					return true;
|    | [NORMAL] ESLintBear (indent):
|    | Expected indentation of 4 tabs but found 5.
|----|    | /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
| 699| 699| 					placementSupport.Reset();
| 700| 700| 					updateBuildingPlacementPreview();
| 701| 701| 
| 702|    |-					inputState = INPUT_NORMAL;
|    | 702|+				inputState = INPUT_NORMAL;
| 703| 703| 					return true;
| 704| 704| 				}
| 705| 705| 				break;
|    | [NORMAL] ESLintBear (indent):
|    | Expected indentation of 4 tabs but found 5.
|----|    | /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
| 700| 700| 					updateBuildingPlacementPreview();
| 701| 701| 
| 702| 702| 					inputState = INPUT_NORMAL;
| 703|    |-					return true;
|    | 703|+				return true;
| 704| 704| 				}
| 705| 705| 				break;
| 706| 706| 		}
|    | [NORMAL] ESLintBear (indent):
|    | Expected indentation of 3 tabs but found 4.
|----|    | /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
| 701| 701| 
| 702| 702| 					inputState = INPUT_NORMAL;
| 703| 703| 					return true;
| 704|    |-				}
|    | 704|+			}
| 705| 705| 				break;
| 706| 706| 		}
| 707| 707| 		break;
|    | [NORMAL] ESLintBear (indent):
|    | Expected indentation of 3 tabs but found 4.
|----|    | /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
| 702| 702| 					inputState = INPUT_NORMAL;
| 703| 703| 					return true;
| 704| 704| 				}
| 705|    |-				break;
|    | 705|+			break;
| 706| 706| 		}
| 707| 707| 		break;
| 708| 708| 
|    | [NORMAL] ESLintBear (indent):
|    | Expected indentation of 3 tabs but found 4.
|----|    | /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
| 844| 844| 			break;
| 845| 845| 
| 846| 846| 		case "hotkeydown":
| 847|    |-				if (ev.hotkey.indexOf("selection.group.") == 0)
|    | 847|+			if (ev.hotkey.indexOf("selection.group.") == 0)
| 848| 848| 				{
| 849| 849| 					let now = Date.now();
| 850| 850| 					if (now - doublePressTimer < doublePressTime && ev.hotkey == prevHotkey)
|    | [NORMAL] ESLintBear (indent):
|    | Expected indentation of 3 tabs but found 4.
|----|    | /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
| 845| 845| 
| 846| 846| 		case "hotkeydown":
| 847| 847| 				if (ev.hotkey.indexOf("selection.group.") == 0)
| 848|    |-				{
|    | 848|+			{
| 849| 849| 					let now = Date.now();
| 850| 850| 					if (now - doublePressTimer < doublePressTime && ev.hotkey == prevHotkey)
| 851| 851| 					{
|    | [NORMAL] ESLintBear (indent):
|    | Expected indentation of 4 tabs but found 5.
|----|    | /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
| 846| 846| 		case "hotkeydown":
| 847| 847| 				if (ev.hotkey.indexOf("selection.group.") == 0)
| 848| 848| 				{
| 849|    |-					let now = Date.now();
|    | 849|+				let now = Date.now();
| 850| 850| 					if (now - doublePressTimer < doublePressTime && ev.hotkey == prevHotkey)
| 851| 851| 					{
| 852| 852| 						if (ev.hotkey.indexOf("selection.group.select.") == 0)
|    | [NORMAL] ESLintBear (indent):
|    | Expected indentation of 4 tabs but found 5.
|----|    | /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
| 847| 847| 				if (ev.hotkey.indexOf("selection.group.") == 0)
| 848| 848| 				{
| 849| 849| 					let now = Date.now();
| 850|    |-					if (now - doublePressTimer < doublePressTime && ev.hotkey == prevHotkey)
|    | 850|+				if (now - doublePressTimer < doublePressTime && ev.hotkey == prevHotkey)
| 851| 851| 					{
| 852| 852| 						if (ev.hotkey.indexOf("selection.group.select.") == 0)
| 853| 853| 						{
|    | [NORMAL] ESLintBear (indent):
|    | Expected indentation of 4 tabs but found 5.
|----|    | /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
| 848| 848| 				{
| 849| 849| 					let now = Date.now();
| 850| 850| 					if (now - doublePressTimer < doublePressTime && ev.hotkey == prevHotkey)
| 851|    |-					{
|    | 851|+				{
| 852| 852| 						if (ev.hotkey.indexOf("selection.group.select.") == 0)
| 853| 853| 						{
| 854| 854| 							var sptr = ev.hotkey.split(".");
|    | [NORMAL] ESLintBear (indent):
|    | Expected indentation of 5 tabs but found 6.
|----|    | /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
| 849| 849| 					let now = Date.now();
| 850| 850| 					if (now - doublePressTimer < doublePressTime && ev.hotkey == prevHotkey)
| 851| 851| 					{
| 852|    |-						if (ev.hotkey.indexOf("selection.group.select.") == 0)
|    | 852|+					if (ev.hotkey.indexOf("selection.group.select.") == 0)
| 853| 853| 						{
| 854| 854| 							var sptr = ev.hotkey.split(".");
| 855| 855| 							performGroup("snap", sptr[3]);
|    | [NORMAL] ESLintBear (indent):
|    | Expected indentation of 5 tabs but found 6.
|----|    | /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
| 850| 850| 					if (now - doublePressTimer < doublePressTime && ev.hotkey == prevHotkey)
| 851| 851| 					{
| 852| 852| 						if (ev.hotkey.indexOf("selection.group.select.") == 0)
| 853|    |-						{
|    | 853|+					{
| 854| 854| 							var sptr = ev.hotkey.split(".");
| 855| 855| 							performGroup("snap", sptr[3]);
| 856| 856| 						}
|    | [NORMAL] ESLintBear (indent):
|    | Expected indentation of 6 tabs but found 7.
|----|    | /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
| 851| 851| 					{
| 852| 852| 						if (ev.hotkey.indexOf("selection.group.select.") == 0)
| 853| 853| 						{
| 854|    |-							var sptr = ev.hotkey.split(".");
|    | 854|+						var sptr = ev.hotkey.split(".");
| 855| 855| 							performGroup("snap", sptr[3]);
| 856| 856| 						}
| 857| 857| 					}
|    | [NORMAL] ESLintBear (indent):
|    | Expected indentation of 6 tabs but found 7.
|----|    | /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
| 852| 852| 						if (ev.hotkey.indexOf("selection.group.select.") == 0)
| 853| 853| 						{
| 854| 854| 							var sptr = ev.hotkey.split(".");
| 855|    |-							performGroup("snap", sptr[3]);
|    | 855|+						performGroup("snap", sptr[3]);
| 856| 856| 						}
| 857| 857| 					}
| 858| 858| 					else
|    | [NORMAL] ESLintBear (indent):
|    | Expected indentation of 5 tabs but found 6.
|----|    | /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
| 853| 853| 						{
| 854| 854| 							var sptr = ev.hotkey.split(".");
| 855| 855| 							performGroup("snap", sptr[3]);
| 856|    |-						}
|    | 856|+					}
| 857| 857| 					}
| 858| 858| 					else
| 859| 859| 					{
|    | [NORMAL] ESLintBear (indent):
|    | Expected indentation of 4 tabs but found 5.
|----|    | /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
| 854| 854| 							var sptr = ev.hotkey.split(".");
| 855| 855| 							performGroup("snap", sptr[3]);
| 856| 856| 						}
| 857|    |-					}
|    | 857|+				}
| 858| 858| 					else
| 859| 859| 					{
| 860| 860| 						var sptr = ev.hotkey.split(".");
|    | [NORMAL] ESLintBear (indent):
|    | Expected indentation of 4 tabs but found 5.
|----|    | /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
| 855| 855| 							performGroup("snap", sptr[3]);
| 856| 856| 						}
| 857| 857| 					}
| 858|    |-					else
|    | 858|+				else
| 859| 859| 					{
| 860| 860| 						var sptr = ev.hotkey.split(".");
| 861| 861| 						performGroup(sptr[2], sptr[3]);
|    | [NORMAL] ESLintBear (indent):
|    | Expected indentation of 4 tabs but found 5.
|----|    | /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
| 856| 856| 						}
| 857| 857| 					}
| 858| 858| 					else
| 859|    |-					{
|    | 859|+				{
| 860| 860| 						var sptr = ev.hotkey.split(".");
| 861| 861| 						performGroup(sptr[2], sptr[3]);
| 862| 862| 
|    | [NORMAL] ESLintBear (indent):
|    | Expected indentation of 5 tabs but found 6.
|----|    | /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
| 857| 857| 					}
| 858| 858| 					else
| 859| 859| 					{
| 860|    |-						var sptr = ev.hotkey.split(".");
|    | 860|+					var sptr = ev.hotkey.split(".");
| 861| 861| 						performGroup(sptr[2], sptr[3]);
| 862| 862| 
| 863| 863| 						doublePressTimer = now;
|    | [NORMAL] ESLintBear (indent):
|    | Expected indentation of 5 tabs but found 6.
|----|    | /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
| 858| 858| 					else
| 859| 859| 					{
| 860| 860| 						var sptr = ev.hotkey.split(".");
| 861|    |-						performGroup(sptr[2], sptr[3]);
|    | 861|+					performGroup(sptr[2], sptr[3]);
| 862| 862| 
| 863| 863| 						doublePressTimer = now;
| 864| 864| 						prevHotkey = ev.hotkey;
|    | [NORMAL] ESLintBear (indent):
|    | Expected indentation of 5 tabs but found 6.
|----|    | /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
| 860| 860| 						var sptr = ev.hotkey.split(".");
| 861| 861| 						performGroup(sptr[2], sptr[3]);
| 862| 862| 
| 863|    |-						doublePressTimer = now;
|    | 863|+					doublePressTimer = now;
| 864| 864| 						prevHotkey = ev.hotkey;
| 865| 865| 					}
| 866| 866| 				}
|    | [NORMAL] ESLintBear (indent):
|    | Expected indentation of 5 tabs but found 6.
|----|    | /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
| 861| 861| 						performGroup(sptr[2], sptr[3]);
| 862| 862| 
| 863| 863| 						doublePressTimer = now;
| 864|    |-						prevHotkey = ev.hotkey;
|    | 864|+					prevHotkey = ev.hotkey;
| 865| 865| 					}
| 866| 866| 				}
| 867| 867| 				break;
|    | [NORMAL] ESLintBear (indent):
|    | Expected indentation of 4 tabs but found 5.
|----|    | /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
| 862| 862| 
| 863| 863| 						doublePressTimer = now;
| 864| 864| 						prevHotkey = ev.hotkey;
| 865|    |-					}
|    | 865|+				}
| 866| 866| 				}
| 867| 867| 				break;
| 868| 868| 		}
|    | [NORMAL] ESLintBear (indent):
|    | Expected indentation of 3 tabs but found 4.
|----|    | /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
| 863| 863| 						doublePressTimer = now;
| 864| 864| 						prevHotkey = ev.hotkey;
| 865| 865| 					}
| 866|    |-				}
|    | 866|+			}
| 867| 867| 				break;
| 868| 868| 		}
| 869| 869| 		break;
|    | [NORMAL] ESLintBear (indent):
|    | Expected indentation of 3 tabs but found 4.
|----|    | /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
| 864| 864| 						prevHotkey = ev.hotkey;
| 865| 865| 					}
| 866| 866| 				}
| 867|    |-				break;
|    | 867|+			break;
| 868| 868| 		}
| 869| 869| 		break;
| 870| 870| 
|    | [NORMAL] ESLintBear (space-in-parens):
|    | There should be no spaces inside this paren.
|----|    | /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
|1515|1515| 		g_BatchTrainingEntityAllowedCount < batchedSize * appropriateBuildings.length)
|1516|1516| 	{
|1517|1517| 		// Train as many full batches as we can
|1518|    |-		let buildingsCountToTrainFullBatch = Math.floor( g_BatchTrainingEntityAllowedCount / batchedSize);
|    |1518|+		let buildingsCountToTrainFullBatch = Math.floor(g_BatchTrainingEntityAllowedCount / batchedSize);
|1519|1519| 		Engine.PostNetworkCommand({
|1520|1520| 			"type": "train",
|1521|1521| 			"entities": appropriateBuildings.slice(0, buildingsCountToTrainFullBatch),
|    | [NORMAL] ESLintBear (comma-spacing):
|    | A space is required after ','.
|----|    | /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/gui/session/input.js
|1594|1594| 	var selectall = Engine.HotkeyIsPressed("selection.offscreen");
|1595|1595| 
|1596|1596| 	// Reset the last idle unit, etc., if the selection type has changed.
|1597|    |-	if (selectall || classes.length != lastIdleClasses.length || !classes.every((v,i) => v === lastIdleClasses[i]))
|    |1597|+	if (selectall || classes.length != lastIdleClasses.length || !classes.every((v, i) => v === lastIdleClasses[i]))
|1598|1598| 		resetIdleUnit();
|1599|1599| 	lastIdleClasses = classes;
|1600|1600| 

binaries/data/mods/public/gui/session/input.js
| 231| »   var·target·=·undefined;
|    | [NORMAL] ESLintBear (no-undef-init):
|    | It's not necessary to initialize 'target' to undefined.

binaries/data/mods/public/gui/session/input.js
| 245| »   var·actionInfo·=·undefined;
|    | [NORMAL] ESLintBear (no-undef-init):
|    | It's not necessary to initialize 'actionInfo' to undefined.

binaries/data/mods/public/gui/session/input.js
| 468| »   switch·(ev.type)
|    | [NORMAL] ESLintBear (default-case):
|    | Expected a default case.

binaries/data/mods/public/gui/session/input.js
| 495| »   switch·(inputState)
|    | [NORMAL] ESLintBear (default-case):
|    | Expected a default case.

binaries/data/mods/public/gui/session/input.js
| 499| »   »   switch·(ev.type)
|    | [NORMAL] ESLintBear (default-case):
|    | Expected a default case.

binaries/data/mods/public/gui/session/input.js
| 554| »   »   switch·(ev.type)
|    | [NORMAL] ESLintBear (default-case):
|    | Expected a default case.

binaries/data/mods/public/gui/session/input.js
| 564| »   »   switch·(ev.type)
|    | [NORMAL] ESLintBear (default-case):
|    | Expected a default case.

binaries/data/mods/public/gui/session/input.js
| 612| »   »   switch·(ev.type)
|    | [NORMAL] ESLintBear (default-case):
|    | Expected a default case.

binaries/data/mods/public/gui/session/input.js
| 641| »   »   switch·(ev.type)
|    | [NORMAL] ESLintBear (default-case):
|    | Expected a default case.

binaries/data/mods/public/gui/session/input.js
| 710| »   »   switch·(ev.type)
|    | [NORMAL] ESLintBear (default-case):
|    | Expected a default case.

binaries/data/mods/public/gui/session/input.js
| 811| »   switch·(inputState)
|    | [NORMAL] ESLintBear (default-case):
|    | Expected a default case.

binaries/data/mods/public/gui/session/input.js
| 814| »   »   switch·(ev.type)
|    | [NORMAL] ESLintBear (default-case):
|    | Expected a default case.

binaries/data/mods/public/gui/session/input.js
| 916| »   »   switch·(ev.type)
|    | [NORMAL] ESLintBear (default-case):
|    | Expected a default case.

binaries/data/mods/public/gui/session/input.js
|1005| »   »   switch·(ev.type)
|    | [NORMAL] ESLintBear (default-case):
|    | Expected a default case.

binaries/data/mods/public/gui/session/input.js
|1019| »   »   »   »   let·action·=·determineAction(ev.x,·ev.y);
|    | [NORMAL] ESLintBear (no-shadow):
|    | 'action' is already declared in the upper scope.

binaries/data/mods/public/gui/session/input.js
|1028| »   »   switch·(ev.type)
|    | [NORMAL] ESLintBear (default-case):
|    | Expected a default case.

binaries/data/mods/public/gui/session/input.js
|1117| »   »   »   switch·(ev.hotkey)
|    | [NORMAL] ESLintBear (default-case):
|    | Expected a default case.

binaries/data/mods/public/gui/session/input.js
|1545| »   switch·(action)
|    | [NORMAL] ESLintBear (default-case):
|    | Expected a default case.

binaries/data/mods/public/gui/session/input.js
| 231| »   var·target·=·undefined;
|    | [NORMAL] JSHintBear:
|    | It's not necessary to initialize 'target' to 'undefined'.

binaries/data/mods/public/gui/session/input.js
| 245| »   var·actionInfo·=·undefined;
|    | [NORMAL] JSHintBear:
|    | It's not necessary to initialize 'actionInfo' to 'undefined'.

binaries/data/mods/public/gui/session/input.js
| 259| »   for·(var·action·of·actions)
|    | [NORMAL] JSHintBear:
|    | 'action' is already defined.

binaries/data/mods/public/gui/session/input.js
| 262| »   »   »   var·r·=·g_UnitActions[action].hotkeyActionCheck(target,·selection);
|    | [NORMAL] JSHintBear:
|    | 'r' is already defined.

binaries/data/mods/public/gui/session/input.js
| 267| »   for·(var·action·of·actions)
|    | [NORMAL] JSHintBear:
|    | 'action' is already defined.

binaries/data/mods/public/gui/session/input.js
| 270| »   »   »   var·r·=·g_UnitActions[action].actionCheck(target,·selection);
|    | [NORMAL] JSHintBear:
|    | 'r' is already defined.

binaries/data/mods/public/gui/session/input.js
| 483| »   »   &&·(ev.button·==·SDL_BUTTON_LEFT·||·ev.button·==·SDL_BUTTON_RIGHT))
|    | [NORMAL] JSHintBear:
|    | Misleading line break before '&&'; readers may interpret this as an expression boundary.

binaries/data/mods/public/gui/session/input.js
| 513| »   »   »   »   var·rect·=·updateBandbox(bandbox,·ev,·true);
|    | [NORMAL] JSHintBear:
|    | 'rect' is already defined.

binaries/data/mods/public/gui/session/input.js
| 516| »   »   »   »   var·ents·=·getPreferredEntities(Engine.PickPlayerEntitiesInRect(rect[0],·rect[1],·rect[2],·rect[3],·g_ViewedPlayer));
|    | [NORMAL] JSHintBear:
|    | 'ents' is already defined.

binaries/data/mods/public/gui/session/input.js
| 673| »   »   »   »   »   var·queued·=·Engine.HotkeyIsPressed("session.queue");
|    | [NORMAL] JSHintBear:
|    | 'queued' is already defined.

binaries/data/mods/public/gui/session/input.js
| 747| »   »   »   »   var·queued·=·Engine.HotkeyIsPressed("session.queue");
|    | [NORMAL] JSHintBear:
|    | 'queued' is already defined.

binaries/data/mods/public/gui/session/input.js
| 860| »   »   »   »   »   »   var·sptr·=·ev.hotkey.split(".");
|    | [NORMAL] JSHintBear:
|    | 'sptr' is already defined.

binaries/data/mods/public/gui/session/input.js
| 876| »   »   »   var·ent·=·Engine.PickEntityAtPoint(ev.x,·ev.y);
|    | [NORMAL] JSHintBear:
|    | 'ent' is already defined.

binaries/data/mods/public/gui/session/input.js
| 902| »   »   »   }
|    | [NORMAL] JSHintBear:
|    | Expected a 'break' statement before 'default'.

binaries/data/mods/public/gui/session/input.js
| 926| »   »   »   var·ent·=·Engine.PickEntityAtPoint(ev.x,·ev.y);
|    | [NORMAL] JSHintBear:
|    | 'ent' is already defined.
Executing section cli...

Link to build: https://jenkins.wildfiregames.com/job/docker-differential/1069/display/redirect

Stan added inline comments.Sun, Nov 10, 3:11 PM
binaries/data/mods/public/gui/session/input.js
1051–1052

Helper function for all three calls ?

binaries/data/mods/public/simulation/components/GuiInterface.js
1700

Math.Min() ?

1726

Order important ? if !behindA it's gonna be always different that behindB ?

1734

Is there a way to order the edges so that you only have a small part of the array to browse through ?

1745

Cache the Pi values ?

source/simulation2/scripting/JSInterface_Simulation.cpp
139

I guess it's lighter to do that first than the math ? Else you could move it next to where it's called.

174

Convention says ++value but here it would make it start at -1.
I guess one could also use i and the index of the entity, but that's not better.

vladislavbelov added inline comments.Sun, Nov 10, 3:19 PM
binaries/data/mods/public/gui/session/input.js
1051–1052

I'm thinking about moving to another class.

binaries/data/mods/public/simulation/components/GuiInterface.js
1700

Math.max then :)

1726

Order is important :)

1745

You mean Math.PI / N? We don't need to cache Math.PI by itself.

source/simulation2/scripting/JSInterface_Simulation.cpp
139

It's easier to check, so I moved it before the size check.

174

We use ++index for loops, but it's not about loops, but about independed from loop index.

Stan added inline comments.Mon, Nov 11, 10:46 AM
binaries/data/mods/public/gui/session/input.js
1051–1052

Maybe that would be nicer. Though might be slower;

binaries/data/mods/public/simulation/components/GuiInterface.js
1745

Yeah that's what I meant.

source/simulation2/scripting/JSInterface_Simulation.cpp
174

True but we also use it for variables.

Moves BuildingSnapping to other class.

Build failure - The Moirai have given mortals hearts that can endure.

Link to build: https://jenkins.wildfiregames.com/job/vs2015-differential/562/display/redirect

Build failure - The Moirai have given mortals hearts that can endure.

Link to build: https://jenkins.wildfiregames.com/job/docker-differential/1076/display/redirect

Stan added inline comments.Mon, Nov 11, 10:09 PM
binaries/data/mods/public/simulation/helpers/BuildingPlacement.js
1 ↗(On Diff #10303)

BuildingSnapper ?
SnappingManager ?

Fixes some @elexis notes.

Build failure - The Moirai have given mortals hearts that can endure.

Link to build: https://jenkins.wildfiregames.com/job/vs2015-differential/563/display/redirect

Build failure - The Moirai have given mortals hearts that can endure.

Link to build: https://jenkins.wildfiregames.com/job/docker-differential/1077/display/redirect