Merge pull request #1741 from Hixie/heroes
Unmatched heroes don't need to animate
This commit is contained in:
commit
dd136c49de
@ -70,6 +70,7 @@ class _HeroManifest {
|
|||||||
}
|
}
|
||||||
|
|
||||||
abstract class HeroHandle {
|
abstract class HeroHandle {
|
||||||
|
bool get alwaysAnimate;
|
||||||
_HeroManifest _takeChild(Rect animationArea);
|
_HeroManifest _takeChild(Rect animationArea);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -78,7 +79,8 @@ class Hero extends StatefulComponent {
|
|||||||
Key key,
|
Key key,
|
||||||
this.tag,
|
this.tag,
|
||||||
this.child,
|
this.child,
|
||||||
this.turns: 1
|
this.turns: 1,
|
||||||
|
this.alwaysAnimate: false
|
||||||
}) : super(key: key) {
|
}) : super(key: key) {
|
||||||
assert(tag != null);
|
assert(tag != null);
|
||||||
}
|
}
|
||||||
@ -87,6 +89,12 @@ class Hero extends StatefulComponent {
|
|||||||
final Widget child;
|
final Widget child;
|
||||||
final int turns;
|
final int turns;
|
||||||
|
|
||||||
|
/// If true, the hero will always animate, even if it has no matching hero to
|
||||||
|
/// animate to or from. (This only applies if the hero is relevant; if there
|
||||||
|
/// are multiple heroes with the same tag, only the one whose key matches the
|
||||||
|
/// "most valuable keys" will be used.)
|
||||||
|
final bool alwaysAnimate;
|
||||||
|
|
||||||
static Map<Object, HeroHandle> of(BuildContext context, Set<Key> mostValuableKeys) {
|
static Map<Object, HeroHandle> of(BuildContext context, Set<Key> mostValuableKeys) {
|
||||||
mostValuableKeys ??= new Set<Key>();
|
mostValuableKeys ??= new Set<Key>();
|
||||||
assert(!mostValuableKeys.contains(null));
|
assert(!mostValuableKeys.contains(null));
|
||||||
@ -143,6 +151,8 @@ class HeroState extends State<Hero> implements HeroHandle {
|
|||||||
_HeroMode _mode = _HeroMode.constructing;
|
_HeroMode _mode = _HeroMode.constructing;
|
||||||
Size _size;
|
Size _size;
|
||||||
|
|
||||||
|
bool get alwaysAnimate => config.alwaysAnimate;
|
||||||
|
|
||||||
_HeroManifest _takeChild(Rect animationArea) {
|
_HeroManifest _takeChild(Rect animationArea) {
|
||||||
assert(_mode == _HeroMode.measured || _mode == _HeroMode.taken);
|
assert(_mode == _HeroMode.measured || _mode == _HeroMode.taken);
|
||||||
final RenderBox renderObject = context.findRenderObject();
|
final RenderBox renderObject = context.findRenderObject();
|
||||||
@ -235,6 +245,8 @@ class _HeroQuestState implements HeroHandle {
|
|||||||
final AnimatedRelativeRectValue currentRect;
|
final AnimatedRelativeRectValue currentRect;
|
||||||
final AnimatedValue<double> currentTurns;
|
final AnimatedValue<double> currentTurns;
|
||||||
|
|
||||||
|
bool get alwaysAnimate => true;
|
||||||
|
|
||||||
bool get taken => _taken;
|
bool get taken => _taken;
|
||||||
bool _taken = false;
|
bool _taken = false;
|
||||||
_HeroManifest _takeChild(Rect animationArea) {
|
_HeroManifest _takeChild(Rect animationArea) {
|
||||||
@ -319,6 +331,9 @@ class HeroParty {
|
|||||||
final List<_HeroQuestState> _newHeroes = <_HeroQuestState>[];
|
final List<_HeroQuestState> _newHeroes = <_HeroQuestState>[];
|
||||||
for (_HeroMatch heroPair in heroes.values) {
|
for (_HeroMatch heroPair in heroes.values) {
|
||||||
assert(heroPair.from != null || heroPair.to != null);
|
assert(heroPair.from != null || heroPair.to != null);
|
||||||
|
if ((heroPair.from == null && !heroPair.to.alwaysAnimate) ||
|
||||||
|
(heroPair.to == null && !heroPair.from.alwaysAnimate))
|
||||||
|
continue;
|
||||||
_HeroManifest from = heroPair.from?._takeChild(animationArea);
|
_HeroManifest from = heroPair.from?._takeChild(animationArea);
|
||||||
assert(heroPair.to == null || heroPair.to is HeroState);
|
assert(heroPair.to == null || heroPair.to is HeroState);
|
||||||
_HeroManifest to = heroPair.to?._takeChild(animationArea);
|
_HeroManifest to = heroPair.to?._takeChild(animationArea);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user