Page MenuHomeWildfire Games

Play an animation when buildings a researching techs.
ClosedPublic

Authored by Stan on Dec 9 2019, 8:40 PM.

Details

Reviewers
Angen
Group Reviewers
Restricted Owners Package(Owns No Changed Paths)
Commits
rP23239: Allow modders to play an animation when objects with production queues are…
Summary

Currently there is no way to tell if a building is researching. You can know the tech is researching.

Test Plan

Make sure the variant is correctly set.

Diff Detail

Repository
rP 0 A.D. Public Repository
Lint
Automatic diff as part of commit; lint not applicable.
Unit
Automatic diff as part of commit; unit tests not applicable.

Event Timeline

Stan created this revision.Dec 9 2019, 8:40 PM
Vulcan added a comment.Dec 9 2019, 8:42 PM

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

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

Vulcan added a comment.Dec 9 2019, 8:49 PM

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

Linter detected issues:
Executing section Source...
Executing section JS...
|    | [NORMAL] ESLintBear (semi):
|    | Missing semicolon.
|----|    | /zpool0/trunk/binaries/data/mods/public/simulation/components/ProductionQueue.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/simulation/components/ProductionQueue.js
| 447| 447| 			// item.player is used as this.entity's owner may be invalid (deletion, etc.)
| 448| 448| 			var cmpTechnologyManager = QueryPlayerIDInterface(item.player, IID_TechnologyManager);
| 449| 449| 			cmpTechnologyManager.StoppedResearch(item.technologyTemplate, true);
| 450|    |-			let cmpVisual = Engine.QueryInterface(this.entity, IID_Visual)
|    | 450|+			let cmpVisual = Engine.QueryInterface(this.entity, IID_Visual);
| 451| 451| 			if (cmpVisual)
| 452| 452| 				cmpVisual.SelectAnimation("idle", false, 1.0);
| 453| 453| 		}

binaries/data/mods/public/simulation/components/ProductionQueue.js
| 772| »   »   »   let·template·=·TechnologyTemplates.Get(item.technologyTemplate);
|    | [NORMAL] ESLintBear (no-shadow):
|    | 'template' is already declared in the upper scope.

binaries/data/mods/public/simulation/components/ProductionQueue.js
| 190| »   for·(var·i·in·techList)
|    | [NORMAL] JSHintBear:
|    | 'i' is already defined.

binaries/data/mods/public/simulation/components/ProductionQueue.js
| 192| »   »   var·tech·=·techList[i];
|    | [NORMAL] JSHintBear:
|    | 'tech' is already defined.

binaries/data/mods/public/simulation/components/ProductionQueue.js
| 202| »   for·(var·i·=·0;·i·<·techList.length;·i++)
|    | [NORMAL] JSHintBear:
|    | 'i' is already defined.

binaries/data/mods/public/simulation/components/ProductionQueue.js
| 204| »   »   var·tech·=·techList[i];
|    | [NORMAL] JSHintBear:
|    | 'tech' is already defined.

binaries/data/mods/public/simulation/components/ProductionQueue.js
| 450| »   »   »   let·cmpVisual·=·Engine.QueryInterface(this.entity,·IID_Visual)
|    | [NORMAL] JSHintBear:
|    | Missing semicolon.

binaries/data/mods/public/simulation/components/ProductionQueue.js
| 758| »   »   »   »   »   var·cmpPlayer·=·QueryOwnerInterface(this.entity);
|    | [NORMAL] JSHintBear:
|    | 'cmpPlayer' is already defined.

binaries/data/mods/public/simulation/components/ProductionQueue.js
| 769| »   »   »   var·cmpTechnologyManager·=·QueryOwnerInterface(this.entity,·IID_TechnologyManager);
|    | [NORMAL] JSHintBear:
|    | 'cmpTechnologyManager' is already defined.
Executing section cli...

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

Angen requested changes to this revision.Dec 9 2019, 8:49 PM
Angen added a subscriber: Angen.

you missed some cases :)

binaries/data/mods/public/simulation/components/ProductionQueue.js
353 ↗(On Diff #10548)

you are starting research here as well

772 ↗(On Diff #10548)

here you finished research, you need to switch back to idle animation

This revision now requires changes to proceed.Dec 9 2019, 8:49 PM
Angen added inline comments.Dec 9 2019, 8:51 PM
binaries/data/mods/public/simulation/components/ProductionQueue.js
710 ↗(On Diff #10548)

this does not exist here

Stan updated this revision to Diff 10550.Dec 9 2019, 10:30 PM
Stan marked 3 inline comments as done.

Fix notes. Add example.

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

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

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

Linter detected issues:
Executing section Source...
Executing section JS...
|    | [NORMAL] ESLintBear (semi):
|    | Missing semicolon.
|----|    | /zpool0/trunk/binaries/data/mods/public/simulation/components/ProductionQueue.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/simulation/components/ProductionQueue.js
| 352| 352| 			if (this.queue.length == 0)
| 353| 353| 			{
| 354| 354| 				cmpTechnologyManager.StartedResearch(templateName, false);
| 355|    |-				let cmpVisual = Engine.QueryInterface(this.entity, IID_Visual)
|    | 355|+				let cmpVisual = Engine.QueryInterface(this.entity, IID_Visual);
| 356| 356| 				if (cmpVisual)
| 357| 357| 					cmpVisual.SelectAnimation("researching", false, 1.0);
| 358| 358| 			}
|    | [NORMAL] ESLintBear (semi):
|    | Missing semicolon.
|----|    | /zpool0/trunk/binaries/data/mods/public/simulation/components/ProductionQueue.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/simulation/components/ProductionQueue.js
| 452| 452| 			// item.player is used as this.entity's owner may be invalid (deletion, etc.)
| 453| 453| 			var cmpTechnologyManager = QueryPlayerIDInterface(item.player, IID_TechnologyManager);
| 454| 454| 			cmpTechnologyManager.StoppedResearch(item.technologyTemplate, true);
| 455|    |-			let cmpVisual = Engine.QueryInterface(this.entity, IID_Visual)
|    | 455|+			let cmpVisual = Engine.QueryInterface(this.entity, IID_Visual);
| 456| 456| 			if (cmpVisual)
| 457| 457| 				cmpVisual.SelectAnimation("idle", false, 1.0);
| 458| 458| 		}
|    | [NORMAL] ESLintBear (semi):
|    | Missing semicolon.
|----|    | /zpool0/trunk/binaries/data/mods/public/simulation/components/ProductionQueue.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/simulation/components/ProductionQueue.js
| 712| 712| 				// Mark the research as started.
| 713| 713| 				var cmpTechnologyManager = QueryOwnerInterface(this.entity, IID_TechnologyManager);
| 714| 714| 				cmpTechnologyManager.StartedResearch(item.technologyTemplate, true);
| 715|    |-				let cmpVisual = Engine.QueryInterface(this.entity, IID_Visual)
|    | 715|+				let cmpVisual = Engine.QueryInterface(this.entity, IID_Visual);
| 716| 716| 				if (cmpVisual)
| 717| 717| 					cmpVisual.SelectAnimation("researching", false, 1.0);
| 718| 718| 			}
|    | [NORMAL] ESLintBear (semi):
|    | Missing semicolon.
|----|    | /zpool0/trunk/binaries/data/mods/public/simulation/components/ProductionQueue.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/simulation/components/ProductionQueue.js
| 774| 774| 		{
| 775| 775| 			var cmpTechnologyManager = QueryOwnerInterface(this.entity, IID_TechnologyManager);
| 776| 776| 			cmpTechnologyManager.ResearchTechnology(item.technologyTemplate);
| 777|    |-			let cmpVisual = Engine.QueryInterface(this.entity, IID_Visual)
|    | 777|+			let cmpVisual = Engine.QueryInterface(this.entity, IID_Visual);
| 778| 778| 			if (cmpVisual)
| 779| 779| 				cmpVisual.SelectAnimation("idle", false, 1.0);
| 780| 780| 			let template = TechnologyTemplates.Get(item.technologyTemplate);

binaries/data/mods/public/simulation/components/ProductionQueue.js
| 780| »   »   »   let·template·=·TechnologyTemplates.Get(item.technologyTemplate);
|    | [NORMAL] ESLintBear (no-shadow):
|    | 'template' is already declared in the upper scope.

binaries/data/mods/public/simulation/components/ProductionQueue.js
| 190| »   for·(var·i·in·techList)
|    | [NORMAL] JSHintBear:
|    | 'i' is already defined.

binaries/data/mods/public/simulation/components/ProductionQueue.js
| 192| »   »   var·tech·=·techList[i];
|    | [NORMAL] JSHintBear:
|    | 'tech' is already defined.

binaries/data/mods/public/simulation/components/ProductionQueue.js
| 202| »   for·(var·i·=·0;·i·<·techList.length;·i++)
|    | [NORMAL] JSHintBear:
|    | 'i' is already defined.

binaries/data/mods/public/simulation/components/ProductionQueue.js
| 204| »   »   var·tech·=·techList[i];
|    | [NORMAL] JSHintBear:
|    | 'tech' is already defined.

binaries/data/mods/public/simulation/components/ProductionQueue.js
| 355| »   »   »   »   let·cmpVisual·=·Engine.QueryInterface(this.entity,·IID_Visual)
|    | [NORMAL] JSHintBear:
|    | Missing semicolon.

binaries/data/mods/public/simulation/components/ProductionQueue.js
| 455| »   »   »   let·cmpVisual·=·Engine.QueryInterface(this.entity,·IID_Visual)
|    | [NORMAL] JSHintBear:
|    | Missing semicolon.

binaries/data/mods/public/simulation/components/ProductionQueue.js
| 715| »   »   »   »   let·cmpVisual·=·Engine.QueryInterface(this.entity,·IID_Visual)
|    | [NORMAL] JSHintBear:
|    | Missing semicolon.

binaries/data/mods/public/simulation/components/ProductionQueue.js
| 764| »   »   »   »   »   var·cmpPlayer·=·QueryOwnerInterface(this.entity);
|    | [NORMAL] JSHintBear:
|    | 'cmpPlayer' is already defined.

binaries/data/mods/public/simulation/components/ProductionQueue.js
| 775| »   »   »   var·cmpTechnologyManager·=·QueryOwnerInterface(this.entity,·IID_TechnologyManager);
|    | [NORMAL] JSHintBear:
|    | 'cmpTechnologyManager' is already defined.

binaries/data/mods/public/simulation/components/ProductionQueue.js
| 777| »   »   »   let·cmpVisual·=·Engine.QueryInterface(this.entity,·IID_Visual)
|    | [NORMAL] JSHintBear:
|    | Missing semicolon.
Executing section cli...

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

Should this be limited to the current player's own researching? Or also their allies? What about enemies?

I think, due to being triggered from ProductionQueue, this only applies to the current player. Is that right?

If so, I don't think we should change the visual aspects of buildings only for the current player. While the chimney is pretty subtle (possibly a reason not to do this...), if I were to notice it as a player, I would assume that others can see it too. Exposing that publicly, I think, significantly influences strategy for players, in a way I don't think is very intuitive or discoverable. In particular because we don't expose that for other types of activity in buildings either (e.g. training units). If we do, we should probably also expose it when selecting the enemy building, in a similar way to how this is shown to observers/replays.

But overall, I think it makes for better strategy if this is kept confidential. There is already a lot of strategic advantages as one becomes more experiences, quite a few of them are rather esoteric and suffering from discoverability. This would add to that pile.

Even if we don't expose it publicly, my point stands about it being ambiguous to players whether it is public which seems like a source of confusion/frustration. Can we prevent that somehow? For example, by making the indication more virtual and "out of scene"? For example, we show icons above units and buildings when hovering over them with the intent to attack or gather. Something like that might be more natural as "private" / specific to your view.

Stan added a comment.Dec 10 2019, 7:33 AM

This is visible (while not in sync) by all the players. If @borg thinks this this is too dangerous for vanilla I won't add it. But I think it's nice to give the options to modders.

There could also be a gear with a percentage displayed. My goal was to reproduce the researching effect from Starcraft for my Stella Artis mod :)

Angen added a comment.EditedDec 10 2019, 1:35 PM

I do not think it would be so big information leak to the enemy.

  1. it does not tell what is researching
  2. it does not tell how long until research is finished
  3. to get this information, entity needs to be visible
  4. it only tells which building is productive, compare that to towers with garrison flags. Flags do tell someone is in there but do not tell what kind of units or how many. (and yet some players ask to have garrison flags on ships)

What options would enemy have:

  1. entity is not researching, attack something else (thank you, that building was expensive)
  2. entity is not researching, attack it anyway so owner needs to rebuild it if it is lost and cannot research during that time
  3. entity is researching, attack it and hope it will be destroyed before research ends
  4. enemy will not care he has more important targets like fortress, tower, cc, house
  5. enemy will not care he is winning anyway

My opinion is that, players should build key research structures in defended locations and no at the borders, what they generally should do even know if they do not want to loose that building to the enemy.

Sure for example with houses,/towers seeing one of them is researching some tech so enemy picks that to take down first. (research in buildings that are at most safe location, cannot be picked up easily - more strategy which building to use to research and where to place it if you think enemy can take that down easily)
Note that if enemy has constant vision in your territory he is probably hitting you hard already.

Anyway it is good to have that possibility for mods even when vanilla will not use it.

There is already a lot of strategic advantages as one becomes more experiences, quite a few of them are rather esoteric and suffering from discoverability.

Is not that point of being more experienced ? To know how to use information one can gather against the enemy, to plan when to attack, avoid? Rather than steamrolling and fast clicking to victory or walling, towering out opponent?

Stan added a comment.Dec 11 2019, 3:32 PM

Anything wrong with the patch itself? As I said, we are not forced to use it in Vanilla but it would be nice to give the option to modders.

Angen added a comment.Dec 12 2019, 8:45 AM

Feature itself and code is good and works correctly.
To proceed please exclude art changes (as it is not entirely clear if it is desired in vanila, for reference I am not against and bb said something in way he is not against either irc log) and fix notes.

binaries/data/mods/public/simulation/components/ProductionQueue.js
357 ↗(On Diff #10550)

1.0 -> 1 (and other related places)

455 ↗(On Diff #10550)

missing ;

715 ↗(On Diff #10550)

missing ;

777 ↗(On Diff #10550)

missing ;

Stan marked 4 inline comments as done.Dec 12 2019, 11:35 AM
Stan updated this revision to Diff 10572.Dec 12 2019, 11:36 AM

Fix notes

Stan updated this revision to Diff 10573.Dec 12 2019, 11:36 AM

Actually save the file...

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

Linter detected issues:
Executing section Source...
Executing section JS...
|    | [NORMAL] ESLintBear (semi):
|    | Missing semicolon.
|----|    | /zpool0/trunk/binaries/data/mods/public/simulation/components/ProductionQueue.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/simulation/components/ProductionQueue.js
| 352| 352| 			if (this.queue.length == 0)
| 353| 353| 			{
| 354| 354| 				cmpTechnologyManager.StartedResearch(templateName, false);
| 355|    |-				let cmpVisual = Engine.QueryInterface(this.entity, IID_Visual)
|    | 355|+				let cmpVisual = Engine.QueryInterface(this.entity, IID_Visual);
| 356| 356| 				if (cmpVisual)
| 357| 357| 					cmpVisual.SelectAnimation("researching", false, 1);
| 358| 358| 			}
|    | [NORMAL] ESLintBear (semi):
|    | Missing semicolon.
|----|    | /zpool0/trunk/binaries/data/mods/public/simulation/components/ProductionQueue.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/simulation/components/ProductionQueue.js
| 452| 452| 			// item.player is used as this.entity's owner may be invalid (deletion, etc.)
| 453| 453| 			var cmpTechnologyManager = QueryPlayerIDInterface(item.player, IID_TechnologyManager);
| 454| 454| 			cmpTechnologyManager.StoppedResearch(item.technologyTemplate, true);
| 455|    |-			let cmpVisual = Engine.QueryInterface(this.entity, IID_Visual)
|    | 455|+			let cmpVisual = Engine.QueryInterface(this.entity, IID_Visual);
| 456| 456| 			if (cmpVisual)
| 457| 457| 				cmpVisual.SelectAnimation("idle", false, 1);
| 458| 458| 		}
|    | [NORMAL] ESLintBear (semi):
|    | Missing semicolon.
|----|    | /zpool0/trunk/binaries/data/mods/public/simulation/components/ProductionQueue.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/simulation/components/ProductionQueue.js
| 712| 712| 				// Mark the research as started.
| 713| 713| 				var cmpTechnologyManager = QueryOwnerInterface(this.entity, IID_TechnologyManager);
| 714| 714| 				cmpTechnologyManager.StartedResearch(item.technologyTemplate, true);
| 715|    |-				let cmpVisual = Engine.QueryInterface(this.entity, IID_Visual)
|    | 715|+				let cmpVisual = Engine.QueryInterface(this.entity, IID_Visual);
| 716| 716| 				if (cmpVisual)
| 717| 717| 					cmpVisual.SelectAnimation("researching", false, 1);
| 718| 718| 			}
|    | [NORMAL] ESLintBear (semi):
|    | Missing semicolon.
|----|    | /zpool0/trunk/binaries/data/mods/public/simulation/components/ProductionQueue.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/simulation/components/ProductionQueue.js
| 774| 774| 		{
| 775| 775| 			var cmpTechnologyManager = QueryOwnerInterface(this.entity, IID_TechnologyManager);
| 776| 776| 			cmpTechnologyManager.ResearchTechnology(item.technologyTemplate);
| 777|    |-			let cmpVisual = Engine.QueryInterface(this.entity, IID_Visual)
|    | 777|+			let cmpVisual = Engine.QueryInterface(this.entity, IID_Visual);
| 778| 778| 			if (cmpVisual)
| 779| 779| 				cmpVisual.SelectAnimation("idle", false, 1);
| 780| 780| 			let template = TechnologyTemplates.Get(item.technologyTemplate);

binaries/data/mods/public/simulation/components/ProductionQueue.js
| 780| »   »   »   let·template·=·TechnologyTemplates.Get(item.technologyTemplate);
|    | [NORMAL] ESLintBear (no-shadow):
|    | 'template' is already declared in the upper scope.

binaries/data/mods/public/simulation/components/ProductionQueue.js
| 190| »   for·(var·i·in·techList)
|    | [NORMAL] JSHintBear:
|    | 'i' is already defined.

binaries/data/mods/public/simulation/components/ProductionQueue.js
| 192| »   »   var·tech·=·techList[i];
|    | [NORMAL] JSHintBear:
|    | 'tech' is already defined.

binaries/data/mods/public/simulation/components/ProductionQueue.js
| 202| »   for·(var·i·=·0;·i·<·techList.length;·i++)
|    | [NORMAL] JSHintBear:
|    | 'i' is already defined.

binaries/data/mods/public/simulation/components/ProductionQueue.js
| 204| »   »   var·tech·=·techList[i];
|    | [NORMAL] JSHintBear:
|    | 'tech' is already defined.

binaries/data/mods/public/simulation/components/ProductionQueue.js
| 355| »   »   »   »   let·cmpVisual·=·Engine.QueryInterface(this.entity,·IID_Visual)
|    | [NORMAL] JSHintBear:
|    | Missing semicolon.

binaries/data/mods/public/simulation/components/ProductionQueue.js
| 455| »   »   »   let·cmpVisual·=·Engine.QueryInterface(this.entity,·IID_Visual)
|    | [NORMAL] JSHintBear:
|    | Missing semicolon.

binaries/data/mods/public/simulation/components/ProductionQueue.js
| 715| »   »   »   »   let·cmpVisual·=·Engine.QueryInterface(this.entity,·IID_Visual)
|    | [NORMAL] JSHintBear:
|    | Missing semicolon.

binaries/data/mods/public/simulation/components/ProductionQueue.js
| 764| »   »   »   »   »   var·cmpPlayer·=·QueryOwnerInterface(this.entity);
|    | [NORMAL] JSHintBear:
|    | 'cmpPlayer' is already defined.

binaries/data/mods/public/simulation/components/ProductionQueue.js
| 775| »   »   »   var·cmpTechnologyManager·=·QueryOwnerInterface(this.entity,·IID_TechnologyManager);
|    | [NORMAL] JSHintBear:
|    | 'cmpTechnologyManager' is already defined.

binaries/data/mods/public/simulation/components/ProductionQueue.js
| 777| »   »   »   let·cmpVisual·=·Engine.QueryInterface(this.entity,·IID_Visual)
|    | [NORMAL] JSHintBear:
|    | Missing semicolon.
Executing section cli...

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

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

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

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

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

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

Linter detected issues:
Executing section Source...
Executing section JS...

binaries/data/mods/public/simulation/components/ProductionQueue.js
| 780| »   »   »   let·template·=·TechnologyTemplates.Get(item.technologyTemplate);
|    | [NORMAL] ESLintBear (no-shadow):
|    | 'template' is already declared in the upper scope.

binaries/data/mods/public/simulation/components/ProductionQueue.js
| 190| »   for·(var·i·in·techList)
|    | [NORMAL] JSHintBear:
|    | 'i' is already defined.

binaries/data/mods/public/simulation/components/ProductionQueue.js
| 192| »   »   var·tech·=·techList[i];
|    | [NORMAL] JSHintBear:
|    | 'tech' is already defined.

binaries/data/mods/public/simulation/components/ProductionQueue.js
| 202| »   for·(var·i·=·0;·i·<·techList.length;·i++)
|    | [NORMAL] JSHintBear:
|    | 'i' is already defined.

binaries/data/mods/public/simulation/components/ProductionQueue.js
| 204| »   »   var·tech·=·techList[i];
|    | [NORMAL] JSHintBear:
|    | 'tech' is already defined.

binaries/data/mods/public/simulation/components/ProductionQueue.js
| 764| »   »   »   »   »   var·cmpPlayer·=·QueryOwnerInterface(this.entity);
|    | [NORMAL] JSHintBear:
|    | 'cmpPlayer' is already defined.

binaries/data/mods/public/simulation/components/ProductionQueue.js
| 775| »   »   »   var·cmpTechnologyManager·=·QueryOwnerInterface(this.entity,·IID_TechnologyManager);
|    | [NORMAL] JSHintBear:
|    | 'cmpTechnologyManager' is already defined.
Executing section cli...

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

@Stan The blacksmith in the blacksmith's shop should be set in the blacksmith's shop. He only needs the action output of forging weapons, for example.

Angen requested changes to this revision.Dec 13 2019, 9:27 PM
let cmpVisual = Engine.QueryInterface(this.entity, IID_Visual);
	if (cmpVisual)
		cmpVisual.SelectAnimation("researching", false, 1);

is called now at 4 places and differs only with name of animation.
You should make it a function :)

This revision now requires changes to proceed.Dec 13 2019, 9:27 PM
Stan updated this revision to Diff 10583.Dec 14 2019, 2:56 PM

Make a function, add a default option so that variant name is configurable.

Stan updated this revision to Diff 10585.Dec 14 2019, 2:59 PM

Remove bogus folders.

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

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

Stan updated this revision to Diff 10586.Dec 14 2019, 3:00 PM

Update comment

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

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

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

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

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

Linter detected issues:
Executing section Source...
Executing section JS...
|    | [NORMAL] ESLintBear (semi):
|    | Missing semicolon.
|----|    | /zpool0/trunk/binaries/data/mods/public/simulation/components/ProductionQueue.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/simulation/components/ProductionQueue.js
| 473| 473| 	let cmpVisual = Engine.QueryInterface(this.entity, IID_Visual);
| 474| 474| 	if (cmpVisual)
| 475| 475| 		cmpVisual.SelectAnimation(name, false, 1);
| 476|    |-}
|    | 476|+};
| 477| 477| 
| 478| 478| /*
| 479| 479|  * Returns basic data from all batches in the production queue.

binaries/data/mods/public/simulation/components/ProductionQueue.js
| 785| »   »   »   let·template·=·TechnologyTemplates.Get(item.technologyTemplate);
|    | [NORMAL] ESLintBear (no-shadow):
|    | 'template' is already declared in the upper scope.

binaries/data/mods/public/simulation/components/ProductionQueue.js
| 196| »   for·(var·i·in·techList)
|    | [NORMAL] JSHintBear:
|    | 'i' is already defined.

binaries/data/mods/public/simulation/components/ProductionQueue.js
| 198| »   »   var·tech·=·techList[i];
|    | [NORMAL] JSHintBear:
|    | 'tech' is already defined.

binaries/data/mods/public/simulation/components/ProductionQueue.js
| 208| »   for·(var·i·=·0;·i·<·techList.length;·i++)
|    | [NORMAL] JSHintBear:
|    | 'i' is already defined.

binaries/data/mods/public/simulation/components/ProductionQueue.js
| 210| »   »   var·tech·=·techList[i];
|    | [NORMAL] JSHintBear:
|    | 'tech' is already defined.

binaries/data/mods/public/simulation/components/ProductionQueue.js
| 476| }
|    | [NORMAL] JSHintBear:
|    | Missing semicolon.

binaries/data/mods/public/simulation/components/ProductionQueue.js
| 771| »   »   »   »   »   var·cmpPlayer·=·QueryOwnerInterface(this.entity);
|    | [NORMAL] JSHintBear:
|    | 'cmpPlayer' is already defined.

binaries/data/mods/public/simulation/components/ProductionQueue.js
| 782| »   »   »   var·cmpTechnologyManager·=·QueryOwnerInterface(this.entity,·IID_TechnologyManager);
|    | [NORMAL] JSHintBear:
|    | 'cmpTechnologyManager' is already defined.
Executing section cli...

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

Stan updated this revision to Diff 10587.Dec 14 2019, 3:09 PM

Update comment specifying the default value

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

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

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

Linter detected issues:
Executing section Source...
Executing section JS...
|    | [NORMAL] ESLintBear (semi):
|    | Missing semicolon.
|----|    | /zpool0/trunk/binaries/data/mods/public/simulation/components/ProductionQueue.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/simulation/components/ProductionQueue.js
| 473| 473| 	let cmpVisual = Engine.QueryInterface(this.entity, IID_Visual);
| 474| 474| 	if (cmpVisual)
| 475| 475| 		cmpVisual.SelectAnimation(name, false, 1);
| 476|    |-}
|    | 476|+};
| 477| 477| 
| 478| 478| /*
| 479| 479|  * Returns basic data from all batches in the production queue.

binaries/data/mods/public/simulation/components/ProductionQueue.js
| 785| »   »   »   let·template·=·TechnologyTemplates.Get(item.technologyTemplate);
|    | [NORMAL] ESLintBear (no-shadow):
|    | 'template' is already declared in the upper scope.

binaries/data/mods/public/simulation/components/ProductionQueue.js
| 196| »   for·(var·i·in·techList)
|    | [NORMAL] JSHintBear:
|    | 'i' is already defined.

binaries/data/mods/public/simulation/components/ProductionQueue.js
| 198| »   »   var·tech·=·techList[i];
|    | [NORMAL] JSHintBear:
|    | 'tech' is already defined.

binaries/data/mods/public/simulation/components/ProductionQueue.js
| 208| »   for·(var·i·=·0;·i·<·techList.length;·i++)
|    | [NORMAL] JSHintBear:
|    | 'i' is already defined.

binaries/data/mods/public/simulation/components/ProductionQueue.js
| 210| »   »   var·tech·=·techList[i];
|    | [NORMAL] JSHintBear:
|    | 'tech' is already defined.

binaries/data/mods/public/simulation/components/ProductionQueue.js
| 476| }
|    | [NORMAL] JSHintBear:
|    | Missing semicolon.

binaries/data/mods/public/simulation/components/ProductionQueue.js
| 771| »   »   »   »   »   var·cmpPlayer·=·QueryOwnerInterface(this.entity);
|    | [NORMAL] JSHintBear:
|    | 'cmpPlayer' is already defined.

binaries/data/mods/public/simulation/components/ProductionQueue.js
| 782| »   »   »   var·cmpTechnologyManager·=·QueryOwnerInterface(this.entity,·IID_TechnologyManager);
|    | [NORMAL] JSHintBear:
|    | 'cmpTechnologyManager' is already defined.
Executing section cli...

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

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

Linter detected issues:
Executing section Source...
Executing section JS...
|    | [NORMAL] ESLintBear (semi):
|    | Missing semicolon.
|----|    | /zpool0/trunk/binaries/data/mods/public/simulation/components/ProductionQueue.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/simulation/components/ProductionQueue.js
| 473| 473| 	let cmpVisual = Engine.QueryInterface(this.entity, IID_Visual);
| 474| 474| 	if (cmpVisual)
| 475| 475| 		cmpVisual.SelectAnimation(name, false, 1);
| 476|    |-}
|    | 476|+};
| 477| 477| 
| 478| 478| /*
| 479| 479|  * Returns basic data from all batches in the production queue.

binaries/data/mods/public/simulation/components/ProductionQueue.js
| 785| »   »   »   let·template·=·TechnologyTemplates.Get(item.technologyTemplate);
|    | [NORMAL] ESLintBear (no-shadow):
|    | 'template' is already declared in the upper scope.

binaries/data/mods/public/simulation/components/ProductionQueue.js
| 196| »   for·(var·i·in·techList)
|    | [NORMAL] JSHintBear:
|    | 'i' is already defined.

binaries/data/mods/public/simulation/components/ProductionQueue.js
| 198| »   »   var·tech·=·techList[i];
|    | [NORMAL] JSHintBear:
|    | 'tech' is already defined.

binaries/data/mods/public/simulation/components/ProductionQueue.js
| 208| »   for·(var·i·=·0;·i·<·techList.length;·i++)
|    | [NORMAL] JSHintBear:
|    | 'i' is already defined.

binaries/data/mods/public/simulation/components/ProductionQueue.js
| 210| »   »   var·tech·=·techList[i];
|    | [NORMAL] JSHintBear:
|    | 'tech' is already defined.

binaries/data/mods/public/simulation/components/ProductionQueue.js
| 476| }
|    | [NORMAL] JSHintBear:
|    | Missing semicolon.

binaries/data/mods/public/simulation/components/ProductionQueue.js
| 771| »   »   »   »   »   var·cmpPlayer·=·QueryOwnerInterface(this.entity);
|    | [NORMAL] JSHintBear:
|    | 'cmpPlayer' is already defined.

binaries/data/mods/public/simulation/components/ProductionQueue.js
| 782| »   »   »   var·cmpTechnologyManager·=·QueryOwnerInterface(this.entity,·IID_TechnologyManager);
|    | [NORMAL] JSHintBear:
|    | 'cmpTechnologyManager' is already defined.
Executing section cli...

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

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

Linter detected issues:
Executing section Source...
Executing section JS...
|    | [NORMAL] ESLintBear (semi):
|    | Missing semicolon.
|----|    | /zpool0/trunk/binaries/data/mods/public/simulation/components/ProductionQueue.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/simulation/components/ProductionQueue.js
| 473| 473| 	let cmpVisual = Engine.QueryInterface(this.entity, IID_Visual);
| 474| 474| 	if (cmpVisual)
| 475| 475| 		cmpVisual.SelectAnimation(name, false, 1);
| 476|    |-}
|    | 476|+};
| 477| 477| 
| 478| 478| /*
| 479| 479|  * Returns basic data from all batches in the production queue.

binaries/data/mods/public/simulation/components/ProductionQueue.js
| 785| »   »   »   let·template·=·TechnologyTemplates.Get(item.technologyTemplate);
|    | [NORMAL] ESLintBear (no-shadow):
|    | 'template' is already declared in the upper scope.

binaries/data/mods/public/simulation/components/ProductionQueue.js
| 196| »   for·(var·i·in·techList)
|    | [NORMAL] JSHintBear:
|    | 'i' is already defined.

binaries/data/mods/public/simulation/components/ProductionQueue.js
| 198| »   »   var·tech·=·techList[i];
|    | [NORMAL] JSHintBear:
|    | 'tech' is already defined.

binaries/data/mods/public/simulation/components/ProductionQueue.js
| 208| »   for·(var·i·=·0;·i·<·techList.length;·i++)
|    | [NORMAL] JSHintBear:
|    | 'i' is already defined.

binaries/data/mods/public/simulation/components/ProductionQueue.js
| 210| »   »   var·tech·=·techList[i];
|    | [NORMAL] JSHintBear:
|    | 'tech' is already defined.

binaries/data/mods/public/simulation/components/ProductionQueue.js
| 476| }
|    | [NORMAL] JSHintBear:
|    | Missing semicolon.

binaries/data/mods/public/simulation/components/ProductionQueue.js
| 771| »   »   »   »   »   var·cmpPlayer·=·QueryOwnerInterface(this.entity);
|    | [NORMAL] JSHintBear:
|    | 'cmpPlayer' is already defined.

binaries/data/mods/public/simulation/components/ProductionQueue.js
| 782| »   »   »   var·cmpTechnologyManager·=·QueryOwnerInterface(this.entity,·IID_TechnologyManager);
|    | [NORMAL] JSHintBear:
|    | 'cmpTechnologyManager' is already defined.
Executing section cli...

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

Stan updated this revision to Diff 10590.Dec 14 2019, 4:08 PM

Remove configurable variant

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

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

Stan updated this revision to Diff 10591.Dec 14 2019, 4:12 PM

Remove binaries

Stan updated this revision to Diff 10592.Dec 14 2019, 4:13 PM

leftover

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

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

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

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

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

Linter detected issues:
Executing section Source...
Executing section JS...
|    | [NORMAL] ESLintBear (semi):
|    | Missing semicolon.
|----|    | /zpool0/trunk/binaries/data/mods/public/simulation/components/ProductionQueue.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/simulation/components/ProductionQueue.js
| 467| 467| 	let cmpVisual = Engine.QueryInterface(this.entity, IID_Visual);
| 468| 468| 	if (cmpVisual)
| 469| 469| 		cmpVisual.SelectAnimation(name, false, 1);
| 470|    |-}
|    | 470|+};
| 471| 471| 
| 472| 472| /*
| 473| 473|  * Returns basic data from all batches in the production queue.

binaries/data/mods/public/simulation/components/ProductionQueue.js
| 779| »   »   »   let·template·=·TechnologyTemplates.Get(item.technologyTemplate);
|    | [NORMAL] ESLintBear (no-shadow):
|    | 'template' is already declared in the upper scope.

binaries/data/mods/public/simulation/components/ProductionQueue.js
| 190| »   for·(var·i·in·techList)
|    | [NORMAL] JSHintBear:
|    | 'i' is already defined.

binaries/data/mods/public/simulation/components/ProductionQueue.js
| 192| »   »   var·tech·=·techList[i];
|    | [NORMAL] JSHintBear:
|    | 'tech' is already defined.

binaries/data/mods/public/simulation/components/ProductionQueue.js
| 202| »   for·(var·i·=·0;·i·<·techList.length;·i++)
|    | [NORMAL] JSHintBear:
|    | 'i' is already defined.

binaries/data/mods/public/simulation/components/ProductionQueue.js
| 204| »   »   var·tech·=·techList[i];
|    | [NORMAL] JSHintBear:
|    | 'tech' is already defined.

binaries/data/mods/public/simulation/components/ProductionQueue.js
| 470| }
|    | [NORMAL] JSHintBear:
|    | Missing semicolon.

binaries/data/mods/public/simulation/components/ProductionQueue.js
| 765| »   »   »   »   »   var·cmpPlayer·=·QueryOwnerInterface(this.entity);
|    | [NORMAL] JSHintBear:
|    | 'cmpPlayer' is already defined.

binaries/data/mods/public/simulation/components/ProductionQueue.js
| 776| »   »   »   var·cmpTechnologyManager·=·QueryOwnerInterface(this.entity,·IID_TechnologyManager);
|    | [NORMAL] JSHintBear:
|    | 'cmpTechnologyManager' is already defined.
Executing section cli...

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

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

Linter detected issues:
Executing section Source...
Executing section JS...
|    | [NORMAL] ESLintBear (semi):
|    | Missing semicolon.
|----|    | /zpool0/trunk/binaries/data/mods/public/simulation/components/ProductionQueue.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/simulation/components/ProductionQueue.js
| 467| 467| 	let cmpVisual = Engine.QueryInterface(this.entity, IID_Visual);
| 468| 468| 	if (cmpVisual)
| 469| 469| 		cmpVisual.SelectAnimation(name, false, 1);
| 470|    |-}
|    | 470|+};
| 471| 471| 
| 472| 472| /*
| 473| 473|  * Returns basic data from all batches in the production queue.

binaries/data/mods/public/simulation/components/ProductionQueue.js
| 779| »   »   »   let·template·=·TechnologyTemplates.Get(item.technologyTemplate);
|    | [NORMAL] ESLintBear (no-shadow):
|    | 'template' is already declared in the upper scope.

binaries/data/mods/public/simulation/components/ProductionQueue.js
| 190| »   for·(var·i·in·techList)
|    | [NORMAL] JSHintBear:
|    | 'i' is already defined.

binaries/data/mods/public/simulation/components/ProductionQueue.js
| 192| »   »   var·tech·=·techList[i];
|    | [NORMAL] JSHintBear:
|    | 'tech' is already defined.

binaries/data/mods/public/simulation/components/ProductionQueue.js
| 202| »   for·(var·i·=·0;·i·<·techList.length;·i++)
|    | [NORMAL] JSHintBear:
|    | 'i' is already defined.

binaries/data/mods/public/simulation/components/ProductionQueue.js
| 204| »   »   var·tech·=·techList[i];
|    | [NORMAL] JSHintBear:
|    | 'tech' is already defined.

binaries/data/mods/public/simulation/components/ProductionQueue.js
| 470| }
|    | [NORMAL] JSHintBear:
|    | Missing semicolon.

binaries/data/mods/public/simulation/components/ProductionQueue.js
| 765| »   »   »   »   »   var·cmpPlayer·=·QueryOwnerInterface(this.entity);
|    | [NORMAL] JSHintBear:
|    | 'cmpPlayer' is already defined.

binaries/data/mods/public/simulation/components/ProductionQueue.js
| 776| »   »   »   var·cmpTechnologyManager·=·QueryOwnerInterface(this.entity,·IID_TechnologyManager);
|    | [NORMAL] JSHintBear:
|    | 'cmpTechnologyManager' is already defined.
Executing section cli...

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

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

Linter detected issues:
Executing section Source...
Executing section JS...
|    | [NORMAL] ESLintBear (semi):
|    | Missing semicolon.
|----|    | /zpool0/trunk/binaries/data/mods/public/simulation/components/ProductionQueue.js
|    |++++| /zpool0/trunk/binaries/data/mods/public/simulation/components/ProductionQueue.js
| 467| 467| 	let cmpVisual = Engine.QueryInterface(this.entity, IID_Visual);
| 468| 468| 	if (cmpVisual)
| 469| 469| 		cmpVisual.SelectAnimation(name, false, 1);
| 470|    |-}
|    | 470|+};
| 471| 471| 
| 472| 472| /*
| 473| 473|  * Returns basic data from all batches in the production queue.

binaries/data/mods/public/simulation/components/ProductionQueue.js
| 779| »   »   »   let·template·=·TechnologyTemplates.Get(item.technologyTemplate);
|    | [NORMAL] ESLintBear (no-shadow):
|    | 'template' is already declared in the upper scope.

binaries/data/mods/public/simulation/components/ProductionQueue.js
| 190| »   for·(var·i·in·techList)
|    | [NORMAL] JSHintBear:
|    | 'i' is already defined.

binaries/data/mods/public/simulation/components/ProductionQueue.js
| 192| »   »   var·tech·=·techList[i];
|    | [NORMAL] JSHintBear:
|    | 'tech' is already defined.

binaries/data/mods/public/simulation/components/ProductionQueue.js
| 202| »   for·(var·i·=·0;·i·<·techList.length;·i++)
|    | [NORMAL] JSHintBear:
|    | 'i' is already defined.

binaries/data/mods/public/simulation/components/ProductionQueue.js
| 204| »   »   var·tech·=·techList[i];
|    | [NORMAL] JSHintBear:
|    | 'tech' is already defined.

binaries/data/mods/public/simulation/components/ProductionQueue.js
| 470| }
|    | [NORMAL] JSHintBear:
|    | Missing semicolon.

binaries/data/mods/public/simulation/components/ProductionQueue.js
| 765| »   »   »   »   »   var·cmpPlayer·=·QueryOwnerInterface(this.entity);
|    | [NORMAL] JSHintBear:
|    | 'cmpPlayer' is already defined.

binaries/data/mods/public/simulation/components/ProductionQueue.js
| 776| »   »   »   var·cmpTechnologyManager·=·QueryOwnerInterface(this.entity,·IID_TechnologyManager);
|    | [NORMAL] JSHintBear:
|    | 'cmpTechnologyManager' is already defined.
Executing section cli...

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

Angen accepted this revision.Dec 14 2019, 9:40 PM

Feature itself and code is good and works correctly.
Mods can have researching buildings with some visual changes without need to modify the code.
In the future if it would be decided, art can be made and used it in vanilla, too.

This revision is now accepted and ready to land.Dec 14 2019, 9:40 PM