1
0
forked from mirrors/0ad
Commit Graph

105 Commits

Author SHA1 Message Date
wraitii e94e1f1fcf Better fix for formation waltzing, revert 5d96346ac5.
5d96346ac5 proved unsufficient to fix formation 'waltzing'. This is a
better fix, which makes sure units actually try to reach their
designated offset in the first place.
Further, it removes code that recalculated offsets un-necessarily, which
led to an issue with "sloppy" formations such as open and closed orders.

Fixes #5997

Differential Revision: https://code.wildfiregames.com/D3543
This was SVN commit r24865.
2021-02-10 09:59:39 +00:00
wraitii c57a4d90a1 Fix segfault from a formation infinite loop.
#5932 reported a segfault. The direct cause is an infinite loop in
Order.Repair in a formation controller.
There are multiple issues at play here, but the core problem is that the
controller has been marked for destruction, but remains alive over the
turn and UnitAI timers can fire. This leads to an unexpected state that
triggers an infinite loop.

To avoid this problem, immediately switch the formation controller to a
clean state when it's being disbanded.

Fixes #5932

Differential Revision: https://code.wildfiregames.com/D3410
This was SVN commit r24688.
2021-01-18 18:29:40 +00:00
wraitii 59d0885d68 Allow picking a default formation for walk (and walk-like) orders.
This allows choosing a "default formation", which is activated
automatically for units given walk orders (and attack-walk etc.).
Conversely, units in formation that are given a gather/build/... order
are taken out of formation and given the order individually.
The default formation can be selected by right-clicking on any formation
icon.

This leverages formations for walking, where they are quite efficient
(in fact, perhaps too efficient), while circumventing issues with
various orders.

Choosing the "null formation" as the default formation de-activates the
behaviour entirely, and plays out exactly like SVN.

This makes it possible to queue a formation-order then a
noformation-order (i.e. walk then repair), though the behaviour isn't
very flexible.

For modders, it should be relatively easy to change the setup for each
order, and/or to force deactivating/activating formations in general.

Tested by: Freagarach, Angen
Refs #3479, #1791.
Makes #3478 mostly invalid.

Differential Revision: https://code.wildfiregames.com/D2764
This was SVN commit r24480.
2020-12-31 10:04:58 +00:00
bb 42c70cd508 Let units take time actual time for turning while moving. This limits the possibility of "dancing" (making short moves to avoid being hit by arrows) beyond only patrolling.
Reviewed By: wraitii
Gameplay Tests By: FeldFeld
Comments By: Freagarach, Angen
Differential Revision: D2837
refs: #5106

This was SVN commit r24415.
2020-12-17 22:54:14 +00:00
bb 7335fc793a sloppyness → sloppiness
Patch By: Nescio
Differential Revision: D3003
This was SVN commit r24040.
2020-09-14 16:55:14 +00:00
Angen 1f5766079d Clean Formation.js
var -> let
comments - capital leters, dots
a:help - dots
spaces

Differential Revision: https://code.wildfiregames.com/D3001
Comments by: Nescio, Jenkins
This was SVN commit r24024.
2020-09-06 14:08:56 +00:00
Angen f074096cf3 Use average rotation of members when giving formation controller into the world
Differential revision: https://code.wildfiregames.com/D2890
Reviewed by: wraitii
Comments by: Freagarach
This was SVN commit r23899.
2020-07-26 18:22:26 +00:00
wraitii a7da40ac2f Fix formations reshaping incorrectly & related issues.
Formation were reshaping in cases where they should not (such as when
the controller is waiting on members).
This made them look very odd for some orders.

This also cleans up held positions for formations somewhat.

Also:
- ed54ad3486 fixed units not facing correctly after a formation-walk.
The fix is correct, but we can actually make it slightly more
self-contained by moving everything in `leave`. Also clarify comments.
- This fixes some very broken code in 4ca448a686 in
FORMATIONMEMBER.WALKING.MovementUpdate. It never errored because
formation controllers weren't moved out of the world before.

Reviewed By: Angen
Fixes #5443

Differential Revision: https://code.wildfiregames.com/D2763
This was SVN commit r23806.
2020-07-07 10:24:58 +00:00
wraitii feda708d5d Fix formations not queueing orders properly.
Formation controllers were not always waiting on their members correctly
because the "finishedOrder" check was being reset in the wrong place.
This happened particularly with queued orders.

This merges the "finishedOrder" and the "InPosition" logic.

Reported by: elexis
Based on a patch by: Freagarach
Tested by: Freagarach
Reviewed By: Angen
Fixes #3274

Differential Revision: https://code.wildfiregames.com/D2702
This was SVN commit r23744.
2020-06-06 16:07:01 +00:00
Angen 9f6d44feb8 Remove some variables from serialisation and update this.animations name to reflect what it actually holds [Formations.js]
Needs ReviewPublic

Differential Revision: https://code.wildfiregames.com/D2707
Comments by: elexis, Stan, wraitii, bb
Remove variables were not needed to be serialised or stored inside
component
Create `variablesToSerialize` to hold list of variables, that need to be
Serialized.
Rename `this.template.Animations` to `this.template.AnimationVariants`
(and anything related) as it does not hold animation names but names of
animation variants what is misleading.
Do not create timer when deserializing as that would cause oos and timer
already exists.
this.Init has to be called from Deserialize because it is not called by
default

This was SVN commit r23694.
2020-05-23 13:03:34 +00:00
Angen 23111ab427 Actually do not use sorting order for forced columnar formation
f19a8d6b41 moved sorting classes to template and according to lines 561
and 574 in that commit, it was intended to not use sorting in case of
forced columnar formation.

Fixing oversight at lines 660 and 662 in that commit by removing this.
word so cavalry will be put to the front always.

Noticed in D2707 after @elexis mentioned behaviour change on unused
variable.

Differential Revision: https://code.wildfiregames.com/D2711
This was SVN commit r23613.
2020-05-01 09:44:14 +00:00
Angen 67a4c18c74 Disband formation instead destroying
Fix missed line change in 9c2e9d7893 when rebasing D1462

This was SVN commit r23454.
2020-01-28 19:31:04 +00:00
Angen 9c2e9d7893 Enforce formation required member count
Disband formation with less memebers than required.
Do not allow one member in formation.
Show only formations entities actually are allowed to form. (do not show
wedge for infantry)

Differential Revision: https://code.wildfiregames.com/D1462
Fixes: #5119
Comments by: elexis, bb, temple, Stan, Freagarach
This was SVN commit r23450.
2020-01-27 17:49:06 +00:00
Angen 163d710952 Update auras when a formation member renames
Reported on forum:
https://wildfiregames.com/forum/index.php?/topic/25196-when-unit-levels-up-he-loses-armor-bonus-from-athens-hero/

Relevant diff: https://code.wildfiregames.com/D997

Differential Revision: https://code.wildfiregames.com/D1727
Patch by: @Freagarach
This was SVN commit r23408.
2020-01-17 09:32:52 +00:00
Angen d12e5a9df0 Do not allow to override formation animation variants chosen when walking and define remaining combat variants
Fixing oversight from e7ab2c9b3f. Switching to columnar formation,
adding or removing formation members does not reset animation variant
passed by last order.

Also adding remaining combat variants for formationwalk.

Differential Revision: https://code.wildfiregames.com/D2556
This was SVN commit r23359.
2020-01-10 10:03:15 +00:00
Angen e7ab2c9b3f Support order defined animation variants for formation
Allows to pass variant name when moving units to formation used by
UnitAi when formation is moving. That variant will be passed as
parameter of order FormationWalk so formationmember can set requested
variant.

This passed variant will be ignored if formation defines own variant
based on position of member.

When none of above is true, that means nor formation nor order defines
variant, member will fallback to default variant in order to show
carried resources if has some what makes it more consistant with
animation variants used in individual state.

Differential Revision: https://code.wildfiregames.com/D2550
This was SVN commit r23352.
2020-01-09 20:53:13 +00:00
Angen ed54ad3486 Do not face point after movement for formation walk
After formation member ends walking, he tries to face target point.
However that eliminates rotation set by SetInPosition from formation
component. Partly fixed in 9d0b4db973 with setting correct rotation in
idle state, but one could still notice that there is glitch when unit
does quick turn to target point and then back. However that solution
would be still required if logic in SetInPosition would not be changed
to always set correct rotation. Another alternative would be to unset
unit at position with every walking order but that would have the same
effect and this is just more performance friendly to not splice member
from position every time.

Notice that information from inPosition is currently not used, so that
change in it is not braking anything.

This was SVN commit r23346.
2020-01-08 21:37:19 +00:00
Angen 425fb6d93a Fix units not reentering FORMATIONMEMBER.IDLE when they are promoted or stopped
When unit is idle in formation and promoted, it enters INDIVIDUAL.IDLE
incorrectly.
When unit is moving as part of formation and formation is ordered to
stop, unit enters INDIVIDUAL.IDLE but should keep FORMATIONMEMBER.IDLE.

Differential Revision: https://code.wildfiregames.com/D2468
This was SVN commit r23236.
2019-12-14 15:47:26 +00:00
Angen a7b7486dea Set correct animation variant for formation member when starts to move
Formation variants for members are not set correctly once they move
because their ranks changes but variants do not get updated.

This was SVN commit r23233.
2019-12-14 10:10:26 +00:00
Angen 3a79451638 ComputeMotionParameters correctly when formation member is added or removed
As noticed by @bb in
https://code.wildfiregames.com/D1727?id=7276#inline-38148 and found
issue in 4ee4f16793#inline-4563 ComputeMotionParameters is not called
correctly.

One problem is when merging twinformations, addMembers does not update
speed, so if one formation contains slowest unit and it is merged to
formation which does not, merged formation will move faster than it
should, the same problem applies if unit is added calling function from
outside of component.

Another problem is when from formation is removed slowest unit and has
rearrange set to false. Having speed computation after rearrange check
means formation is not going to move faster if slowest member is removed
by player or killed (but it will if player recreates formation manually)

Differential Revision: https://code.wildfiregames.com/D2449
This was SVN commit r23223.
2019-12-08 13:59:33 +00:00
wraitii e16c4c4800 Add a system component to handle stat modifiers, make technologies and auras use this common interface.
The ModifiersManager system component provides an interface to add and
remove modifiers, and get modified stats.
The goal is to merge all the different stat-modifying systems 0 A.D. has
implemented over the years.
This commit makes technologies and auras use ModifiersManager. Some
cheats and AI bonuses also have a similar stat-modifying effect that
have not yet been updated.

Further, this system component makes it possible for e.g. triggers to
easily add modifiers, enabling the writing of Castle Blood Automatic,
RPG or Tower Defense maps without the need for mods or hacks.

The 'Modifier' name was preferred over 'Modification' as it is shorter
and more readable, along with the logic that 'modifiers' store
'modifications' and this stores modifiers. Renaming of other functions
and classes has been left for future work for now.

Internally, this uses a JS data structure. If performance issues arise
with it in the future, this data structure or the whole component could
be moved to C++.
The performance has been tested to be about as fast as the current
implementations (and specifically much faster for global auras with no
icons). Testing showed that sending value modification messages was by
far the slowest part.

Comments by: leper, Stan, elexis
Differential Revision: https://code.wildfiregames.com/D274
This was SVN commit r22767.
2019-08-24 07:37:07 +00:00
wraitii c03abd1e92 UnitMotion cleanup - remove dead code, add a common path for MoveTo functions, rename BeginPathing, move functions around for better readability.
BeginPathing renamed to ComputePathToGoal, as that is what this function
does.
IsMoving renamed to IsMoveRequested, as the function returns true when
the unit has a move request going on, not when it is actually moving
across the map, which was misleading.

UpdateMovementState's implementation moved closer to where it is used.

PathIsShort and WAYPOINT_ADVANCE_MAX are currently unused, thus deleted.

Differential Revision: https://code.wildfiregames.com/D2067
This was SVN commit r22568.
2019-07-28 10:51:12 +00:00
wraitii 7cf6244110 Formation animation refactor - use animation variants instead of special move override.
The animation overrides are a little awkward. Instead, use animation
variants, which allow defining different animations (and props and such)
easily for different units in a formation.
This lets us clean up the special C++ code to override the walk
animations.

It continues the work started by 8446b92f1b.

Original Patch By: temple
Differential Revision: https://code.wildfiregames.com/D1337
This was SVN commit r22442.
2019-07-08 18:23:44 +00:00
wraitii 859d96fba5 UnitMotion - improve variable names and reuse a duplicated function (cleanup def47cb7ae)
This:
 - cleans up a code duplication and clarifies the intent.
 - reorders things around for clarity
 - improves variable names.

Commented By: elexis
Differential Revision: https://code.wildfiregames.com/D1840
This was SVN commit r22277.
2019-05-13 16:47:51 +00:00
wraitii def47cb7ae Change Run Speed into a Run multiplier.
This changes running speed into a running multiplier (of walk speed).

The advantage is that it simplifies code since you can setup a default
run multiplier at the template level and it'll work for all subsequent
templates, and technologies cannot forget to change it. It makes
specialised unit templates easier to maintain, too.

Formations have a 100 run multiplier which effectively sets their
maximal walking speed at 100

Reviewed By: bb, O2 JS Simulation
Differential Revision: https://code.wildfiregames.com/D438
This was SVN commit r22197.
2019-04-19 10:04:50 +00:00
temple 0ed00dca6f Add an IsInWorld check to Formation
Differential Revision: https://code.wildfiregames.com/D1435
Reviewed by: elexis
This was SVN commit r21667.
2018-04-07 17:18:16 +00:00
temple a68d38f5d5 Remove lastFormationTemplate from UnitAI
Differential Revision: https://code.wildfiregames.com/D1255
Reviewed by: bb
This was SVN commit r21243.
2018-02-17 17:54:24 +00:00
temple 680ad76249 Fix formation auras
Differential Revision: https://code.wildfiregames.com/D756
Reviewed by: mimo
Comments by: bb
This was SVN commit r21006.
2018-01-24 19:17:04 +00:00
temple 2b501c9fa6 Fix formation animation warning
Differential Revision: https://code.wildfiregames.com/D998
Reviewed by: wraitii
Fixes: #3239

This was SVN commit r20956.
2018-01-22 03:00:41 +00:00
elexis 774a049cdd Vector cleanup.
Improve some of the comments mentioned by fatherbushido in b3dbcc457b.
Rename avg to average and test it.
Inline constructor defaults.
Don't use array functions nor for...of loops here to maximize the
performance, refs c751500907.

This was SVN commit r20706.
2017-12-28 01:54:56 +00:00
mimo bcdfbd28f8 Change some occurrences of BroadcastMessage where an entity id is available to use PostMessage
Patch by echotangoecho

Reviewed By: O2 JS Simulation, mimo
Differential Revision: https://code.wildfiregames.com/D733
This was SVN commit r20038.
2017-08-25 16:06:29 +00:00
elexis 08fbf223f6 Unify random integer and float helper functions of GUI, Simulation and AI.
Patch By: bb
Differential Revision: D121
Refs: #4326

Removes the Random.js simulation helper and randomFloat function of the
random map scripts library.
Adds randomIntInclusive and randomIntExclusive to make the calls more
readable and fix and prevent off-by-one mistakes.
Adds randBool and use it in an AI occurance. It will be used in many
places by the random map scripts.
Use the pickRandom function introduced in 3c56638e8b in more applicable
occurances.
Replace remaining occurances of Math.random() with the new functions to
easily test completeness.

Cleanup of the random map script functions will come in a separate
commit.

This was SVN commit r19270.
2017-03-03 21:13:10 +00:00
Itms 83a2e810da Remove all occurrences of for each in JS scripts.
This will allow us to use some linters that would otherwise crash on
this non-standard SpiderMonkey feature. Refs #4419.

Special thanks to elexis for thoroughly checking and testing all the
changes!
Reviewed By: leper, elexis
Differential Revision: https://code.wildfiregames.com/D40
This was SVN commit r19191.
2017-01-30 12:47:08 +00:00
elexis 6149dd3841 Actually remove trailing whitespace for non-header files as well.
This was SVN commit r18989.
2016-11-23 13:02:58 +00:00
mimo 14aaa7c640 add some missing semicolon
This was SVN commit r17059.
2015-09-21 21:08:58 +00:00
mimo 0b86bbd424 another bunch of cleanup (mainly missing semicolon) signaled by jshint
This was SVN commit r17045.
2015-09-19 12:50:48 +00:00
Itms b77ad821c2 Reenable formations and fix/improve the communication between UnitAI and UnitMotion. With the new pathfinder some path requests can be completed instantaneously, so UnitAI has to handle MoveStarted messages even in the IDLE state.
Please note that this commit makes #3410 really visible. Formation
members might pass through buildings.

Refs #3410, #3337.

This was SVN commit r17028.
2015-09-17 16:31:23 +00:00
Itms 128a603287 Use the terrain-only grid for terrain edges in the short pathfinder algorithm. This grid is updated on each terrain change, whereas the passability grid is updated once a turn. This caused OOS on rejoin, fixes #3292.
However, using the terrain-only grid reveals one discrepancy between the
short pathfinder (which uses unit radii) and the long one (which uses
unit clearances). So I implemented the change proposed by sanderd17 in
#3294, which is removing unit radius and using only the pathfinder
clearance. Refs #3294
Now some tweaking has to be done in the templates, so that units get a
passability class suited to their apparent size. In the meantime the
unit motion is quite bugged.

This was SVN commit r16867.
2015-07-18 08:37:49 +00:00
Itms 0f10e21ab1 Keep ownership when changing formation. Fixes #3154, fix proposed by sanderd17.
This was SVN commit r16847.
2015-07-12 08:48:31 +00:00
leper 9990d4c885 Actually call the function instead of testing if it exists. Patch by falsevision. Fixes #2626.
This was SVN commit r15342.
2014-06-13 12:54:57 +00:00
sanderd17 1e3ba2d438 Let formations use the UnitAI.AddOrder method, instead of directly deciding if ReplaceOrder or PushOrder should be used. This replaces the expectedRoute, and might lead to units behaving more as demanded. Refs #2568
This was SVN commit r15207.
2014-05-24 09:40:21 +00:00
sanderd17 99a7bc67ac Fix 672f5a8b11 when sloppyness is 0
This was SVN commit r15182.
2014-05-20 18:45:36 +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 86196212e2 Improve navigation for ship formations by setting the formation controller to the right passability class
This was SVN commit r15149.
2014-05-18 07:59:43 +00:00
sanderd17 a49b359748 Fix formations attacking by adding a combat.approaching state. Fixes #2496
This was SVN commit r15054.
2014-04-28 13:05:47 +00:00
sanderd17 ff2979ca68 Save formation rotation when loading a new formation
This was SVN commit r14910.
2014-04-09 18:01:12 +00:00
sanderd17 1f63325ede Rotate entities to the right angle when forming a formation
This was SVN commit r14909.
2014-04-09 11:15:00 +00:00
sanderd17 d27dffa31d Now really fix the issue with promoting and formation animations
This was SVN commit r14906.
2014-04-06 18:43:06 +00:00
sanderd17 c5e59d02e1 Fix formation animations with promoted units
This was SVN commit r14900.
2014-04-05 09:48:57 +00:00
sanderd17 61da102371 Add testudo animations to the right actor files and use it in the formation template
This was SVN commit r14898.
2014-04-04 18:38:13 +00:00