UpdateShroud shows up in profile reports as one of the most
active methods (2.3% CPU time, main mono thread).
This commit introduces `anyCellDirty` to indicate that at lease one
of the cells was marked as dirty.
Avoiding the need to traverse all projected cells of the map
to find any dirty cell.
This reduces the number of shroud updates by at least 50% during a
test game. I assume this is related to renders occurring more
often than logic ticks(?).
This allows TraitInfos to act when the actor preview is placed
in the editor, returning arbitrary data which the editor stores
and gives back if the preview is removed.
Inits that are logically singletons (e.g. actor
location or owner) should implement this interface
to avoid runtime inconsistencies.
Duplicate instances are rejected at init-time,
allowing simpler queries when they are used.
A shared ValueActorInit<T> is introduced to reduce duplication
in the most common init cases, and an ActorInitActorReference
allow actors to be referenced by map.yaml name.
- Fix rendering issues
- Track particles in world pixels instead of screen pixels
- Removed un/underused fade in/out support
- Update wind once per tick instead of once per particle
- Make Particle struct readonly
- Removed implicit pip definitions and IPips interface.
New decoration traits have been added to render them.
Pip types are no longer hardcoded in OpenRA.Game.
- Decoration rendering is now managed by SelectionDecorations(Base),
which allows us to remove assumptions about the selection box
geometry from the decoration traits.
- RenderNameTag has been replaced by WithNameTagDecoration, which is
an otherwise normal decoration trait.
- Unify the configuration and reduce duplication between traits.
- Removed hardcoded references to specific selection box renderables.
- Remove legacy cruft.