Commit graph

140 commits

Author SHA1 Message Date
Vantha
0a3bd16cb5
Optimise GetEntityState
GetEntityState is a performance-critical function in the GUI when a
large number of units are selected. The goal of this patch is to
increase the efficiency of it without modifying the returned states
visible to rest of the GUI in any way (it renames a few properties of
entities states or moves them around, but the information they contain
and the way to access it remain the complete same)

As explained the comments, certain parts (the template data) of an
entity state are "predictable" and can be reused between entities with
the same template.
What one has to account for, however, is that values of the template
data can be modified. This happens on two different levels:
Firstly, player-wide modifications, which apply to all entities owned
by that player. This includes stuff like bonuses from researched techs,
civs bonuses, team bonuses. And secondly, entity-local modifications,
which apply to individual entities. This includes buffs or debuffs from
status effects or auras (of other entities).

So we can construct a whole entity state by first just computing the
dynamic state (stuff like current hitpoints, which differs from entity
to entity) and then adding the (potentially already cached) template
data to it, which can be reused between entities with the same template
and owning player. And then overwrite the values affected by
entity-local modifications, which are usually just a few and even they
can be cached and reused for entities with the same owning player,
template, and entity-local modifications (identified by the
"modifications ID").

This saves the effort of retrieving/computing a ton of data each turn
and also saves the time it takes the engine to clone the data from the
simulation to the GUI (as the return value of the GUI interface call),
which previously took just as long as retrieving the entity states
themselves.

Since only the dynamic state is read from the components, a number of
small getter methods have become unused; they are kept (for now at
least) since they might be useful again in the future or for mods.
2026-08-14 12:47:04 +02:00
Vantha
fb38c8781b More versatile placement of research buttons
Some checks failed
checkrefs / lfscheck (push) Has been cancelled
checkrefs / checkrefs (push) Has been cancelled
lint / cppcheck (push) Has been cancelled
lint / copyright (push) Has been cancelled
lint / jenkinsfiles (push) Has been cancelled
pre-commit / build (push) Has been cancelled
This patch allows techs to optionally define a property "placeBelow"
specifying a combination of class requirements. The selection panel then
tries to place their research button below the training button whose
unit matches these classes -- if there is only and exactly one.
This is useful for techs only affecting a single type of unit: it e.g.
allows always placing the fishing nets research button below the fishing
boats training button.
To prevent duplicating information in "placeBelow" (e.g. from
"affects"), it can also be set to two magic values: "{AffectedUnit}" and
"{UnlockedUnit}". In practice, many techs use those, but class
combination remain useful for granular control in very specific cases.

Regarding tech pairs, as explained in a comment, their two research
buttons can now be placed in three different arrangements (with
descending preference):
1. Vertically below a single training button.
2. Horizontally below two adjacent training buttons.
3. Horizontally adjacent in the bottom row (below no training buttons).

Vertically in the third and fourth rows (below no training button) --
how it was previously -- is no longer done as it'd conflict with and
doesn't fit the new layout and the clear separation between "generic"
and "specific" techs.

Whenever a research button can't be placed in their preferred location
because it is already occupied, the code simply falls back to the default
position in the bottom row.

This patch also adds a new game option to hide the new small arrows above
the research buttons in order to give more experienced players who already
know the techs well the possibility to reduce visual clutter. By
default, the arrows are shown.
2026-07-06 05:01:12 +02:00
Vantha
faa049fe4b Don't set up command and selection panels twice
In the (common) case that the player controls all selected units or is
an observer, the 'Selection' and 'Command' panels were set up ahead and
then in the for loop again, which was wasteful.
2025-11-14 10:59:45 +01:00
Vantha
4dace890cf Fix some 'Failed to get GUI object by name' errors
Fixes #8297
2025-08-22 10:50:28 +02:00
Vantha
2026a5fece Clean up Engine.GetGUIObjectByName calls
GetGUIObjectByName was previously made stricter, logging an
error if it doesn't find the target object.
This commit deals with the resulting error-causing (invalid) calls,
by deleting them if they're unnecessary or converting them to the new
TryGetGUIObjectByName (which doesn't log any errors).
2025-08-14 10:22:56 +02:00
Vantha
fd847c2a23
Refactor GUI object resizing JS code passages
It is possible to modify sizes by setting the properties directly.
(Without having to create a copy of it)
This allows to shorten those passages quite a bit without any functional change.
2025-06-17 12:57:37 -05:00
Ralph Sennhauser
50a5d4b366
Fix eslint rule 'prefer-const' in gui/session
eslint --no-config-lookup --fix --rule '"prefer-const": 1' \
    binaries/data/mods/public/gui/session

Ref: #7812
Signed-off-by: Ralph Sennhauser <ralph.sennhauser@gmail.com>
2025-05-10 18:05:22 +02:00
Freagarach
794fa82efb Warn when finding an entity with Reasearcher/Trainer but without ProductionQueue.
As requested by @Silier and @Stan.
Following 0c4f59d0a7.

Differential revision: https://code.wildfiregames.com/D4404
Comments by: @Silier, @smiley, @Stan
This was SVN commit r26200.
2022-01-11 06:34:07 +00:00
Freagarach
0c4f59d0a7 Split tasks from ProductionQueue.
The task of the production queue should first and foremost be that; a
queue for production items.
Hence, the specifics of training/researching are delegated to specific
components.

As a side effect, this improves the test coverage and fixes:
- Resource not refunding when hitting the entity limit. Introduced in
b8758c8941.
- Autoqueue changing when unable to spawn. Introduced in 956b3f96db.

Modders can change their templates using
https://code.wildfiregames.com/P256.

Differential revision: https://code.wildfiregames.com/D4333
Fixes: #6363
Comments by: @Silier
Refs. #6364

This was SVN commit r26000.
2021-11-16 07:08:39 +00:00
Freagarach
32583008a0 Combine "EntityCommand" and "AllyEntityCommand".
By specifying the players which are allowed to use(/see) a command
button and adding an enabled/disabled property to the info.

Differential revision: D2343
Comments by: @Angen, @Stan
This was SVN commit r24501.
2021-01-02 07:19:17 +00:00
Freagarach
b97d251322 Move the controllability of an entity to cmpIdentity.
Where controllability is defined as the ability to receive _any_ order
from the player.
Fixes the concern not raised at a1dc9cadd8#42637.

Differential Revision: D1960
Reviewed By: @wraitii
Comments by: @bb, @Stan.
This was SVN commit r24148.
2020-11-09 08:38:09 +00:00
bb
33340265c8 Improve the massbarter onPress scripts, by inlining stuff used only once and uninlining mapped arrays used twice
refs #5055

This was SVN commit r21542.
2018-03-13 21:02:13 +00:00
Imarok
6c5a8269f3 Fix some style issues noticed by our linter
Reviewed By: bb
Differential Revision: https://code.wildfiregames.com/D585
This was SVN commit r20322.
2017-10-21 17:31:05 +00:00
elexis
a754b1bad4 Correctly handle commands and production for multiple units and mixed selections. Patch by Imarok, reviewed by Itms, fixes #3823. Fixes #3492, #3288, #3668.
This was SVN commit r18773.
2016-09-25 19:38:10 +00:00
elexis
a4a99bc129 Fix a lot of whitespace in gui/.
This was SVN commit r18650.
2016-08-27 15:33:22 +00:00
elexis
84bde41394 GUI style / sprite cleanup.
Move remains of common/sprite1.xml to common/common_sprites.xml.

Remove duplicates bkFillBlack and bkTranslucent.
Rename bkWhiteBorderBlack to BackgroundWhiteBorderBlack.

Move BackgroundSessionTooltip and BackgroundInformationTooltip to
session/.
Remove unused BackgroundErrorTooltip.

This was SVN commit r18636.
2016-08-25 18:36:05 +00:00
elexis
2a3d380e75 Upgrade component cleanup, refs #2706.
Use the cheat multiplier for upgrading and un/packing.
Remove if-statements that are always true.
Remove unused undefined "time" item from array in the selection panel.
Pass that object directly instead of copying each property explicitly.
Various indentation fixes in the selection panel code.

This was SVN commit r18472.
2016-07-03 01:50:55 +00:00
wraitii
b2f4b0f494 Allow entities to upgrade into other entities.
This new components allows giving the upgrade a cost, required
technologies, and a required time.
Implement gates using this generic component.
Fixes #2706

This was SVN commit r18467.
2016-07-01 19:43:26 +00:00
sanderd17
50ba14d16d Restructure unit_actions.js. Fixes #4007
This was SVN commit r18254.
2016-05-28 14:46:20 +00:00
sanderd17
f422b67eb0 Fix issue with hidden techs after researching it
This was SVN commit r18242.
2016-05-27 08:37:44 +00:00
Itms
a7b31398b0 Revert dbbc600dc3, refs #3745, refs #3823
This was SVN commit r17885.
2016-03-13 22:18:31 +00:00
Itms
dbbc600dc3 Workaround for the multiple-selection commands problem in the case of the back-to-work button. In this case a fix is really needed, as long as the system for handling the selection is not improved.
Also fix the wrong documentation for some functions.

Patch by svott, fixes #3745.

This was SVN commit r17880.
2016-03-13 16:44:21 +00:00
elexis
9ec4f35959 Improve and fix some wrong observer-checks that didn't take defeated players into account. Refs #3168, #3215.
Introduce isPlayerObserver to easily cover that case.
Move some checks and updates into selectViewPlayer and eliminate
setObserverMode.
Initialize the music before changing the perspective.

This was SVN commit r17758.
2016-02-15 12:53:06 +00:00
elexis
9a623a8e00 Style fixes.
This was SVN commit r17618.
2016-01-09 23:01:07 +00:00
elexis
6b710f35b0 Show the selection panels to observers / in replays, fixes #3731.
This allows observers to see the training queue, researched techs, unit
stance, constructable buildings, garrisoned units, market prices etc.
for all players without changing the perspective.
All buttons are disabled if the user isn't allowed to control the
affected player.
Notice updateUnitCommands() fills out the panel differently in case of
selecting an allied building.
Extends the GUIInterface methods "GetNeededResources",
"CheckTechnologyRequirements" and "IsTechnologyResearched" to optionally
take a different player-argument.

This was SVN commit r17617.
2016-01-09 22:01:08 +00:00
wraitii
909b8d4369 Allow multiple special sprites, to facilitate cases where we want to add an overlay to a sprite.
"color" can make use of the sprite's alpha texture, and the "add_color"
effect will now take the original image's alpha into account.
Remove the no longer needed "unaffordableMask" images on a variety of
panels.

Somewhat based on a patch by BoeseRaupe. Fixes #2421 and #3688.

This was SVN commit r17456.
2015-12-13 16:03:17 +00:00
mimo
4235c67764 still another bunch of cleanup (mainly missing semicolon) signaled by jshint
This was SVN commit r17046.
2015-09-19 12:55:58 +00:00
mimo
2a7dc39d07 some cleanups of gui code
This was SVN commit r16984.
2015-09-04 17:50:04 +00:00
Itms
bbf3422f01 Enhance the alert buttons by moving them to the garrisoning panel. Also add a new icon for the maximum level of alert.
Suggestion and testing by rogue-spectre, fixes #2474.

This was SVN commit r16670.
2015-05-24 13:51:02 +00:00
sanderd17
6389dba54f Allow players to unload all their units when garrisoned in allied buildings. Patch by maveric. Fixes #2857
This was SVN commit r16597.
2015-04-29 17:32:17 +00:00
historic_bruno
b1c4e29ac8 Fixes inconsistencies in spelling of colour/color by preferring "color" (only wxWidgets remains with some API that requires "colour"), fixes #1029.
NOTE: requires update-workspaces and may require correction of some
modded actors/scenarios

This was SVN commit r16438.
2015-03-15 23:59:48 +00:00
mimo
2a7c3a95f9 improve gui performance, refs #2179 comment 28
This was SVN commit r15889.
2014-10-18 16:37:53 +00:00
sanderd17
7baaf382ed Organise the session helper functions a bit per topic
This was SVN commit r15389.
2014-06-18 15:27:28 +00:00
sanderd17
7266ea681b Allow mixing the buttons for the right pane, so make it possible to have a structure that can pack and produce units. Refs #1919
This was SVN commit r15387.
2014-06-18 11:23:22 +00:00
sanderd17
013ab4bda7 Make the barter panel uniform with the others, clean up more gui code.
This was SVN commit r15375.
2014-06-16 18:34:27 +00:00
sanderd17
9a743d65fe Fix to unitAI by FalseVision + fix a mistake of my own
This was SVN commit r15363.
2014-06-15 12:43:52 +00:00
sanderd17
beaf3139c0 Move position calculation of buttons to something cleaner.
This was SVN commit r15360.
2014-06-15 09:56:54 +00:00
sanderd17
86ca3b2142 Small cleanup: i, numbButtons and numberOfItems all contain the same value anyway
This was SVN commit r15352.
2014-06-14 15:57:42 +00:00
sanderd17
7f172037ac Clean up a big part of unit_commands.js, and bring most data to a separate JS object (instead of having deep nests of switches and if-else structures)
This was SVN commit r15351.
2014-06-14 15:35:13 +00:00
sanderd17
55247e926a Remove legacy trading pane
This was SVN commit r15341.
2014-06-13 12:06:57 +00:00
sanderd17
3a2670f7fa Take aura descriptions out of tooltip, let auras be defined in the entity template rather than in JSON files, as they can't be reused anyway. Fix tooltips and auras for all heroes from athen to gaul.
This was SVN commit r15317.
2014-06-09 14:15:05 +00:00
leper
c699409246 Add translation context to stances.
This was SVN commit r15299.
2014-06-05 14:06:15 +00:00
leper
fd615c4c54 Round some alpha values for overlays.
This was SVN commit r15295.
2014-06-05 10:22:16 +00:00
sanderd17
b55b6a9cf1 Add visible class names to all common buildings
This was SVN commit r15196.
2014-05-22 14:31:48 +00:00
sanderd17
ac1a9bf8d1 Clean up class parsing + add visible classes to be displayed in the GUI without adding them separatedly to our tooltips
This was SVN commit r15195.
2014-05-22 10:20:02 +00:00
scythetwirler
eae7978868 Makes a word consistent with American English
This was SVN commit r15192.
2014-05-21 20:24:37 +00:00
scythetwirler
e0fb1223d6 Put the colon inside the translate tag.
This was SVN commit r15186.
2014-05-21 03:02:54 +00:00
sanderd17
672f5a8b11 Add sloppyness and separate icon path to formation templates (makes it possible to have multiple formation templates - like different settings for different civs - with only one icon file)
This was SVN commit r15180.
2014-05-20 17:18:40 +00:00
sanderd17
196eebe803 Fix partial internationalisation of the limit changers
This was SVN commit r15167.
2014-05-19 08:22:20 +00:00
scythetwirler
61b6eba4c1 Adds a config option for more detailed tooltips. Fixes #2549.
This was SVN commit r15161.
2014-05-19 00:01:47 +00:00