simpleAttackMeleeByAngle method
void
simpleAttackMeleeByAngle({})
Execute simple attack melee using animation
Implementation
void simpleAttackMeleeByAngle({
required Future<SpriteAnimation> animationTop,
required double damage,
required double radAngleDirection,
dynamic id,
required double height,
required double width,
bool withPush = true,
}) {
double angle = radAngleDirection;
double nextX = height * cos(angle);
double nextY = width * sin(angle);
Offset nextPoint = Offset(nextX, nextY);
Offset diffBase = Offset(
this.position.center.dx + nextPoint.dx,
this.position.center.dy + nextPoint.dy,
) -
this.position.center;
Vector2Rect positionAttack = this.position.shift(diffBase);
gameRef.add(AnimatedObjectOnce(
animation: animationTop,
position: positionAttack,
rotateRadAngle: angle,
));
gameRef
.visibleAttackables()
.where((a) =>
(this is Player
? a.receivesAttackFromPlayer()
: a.receivesAttackFromEnemy()) &&
a.rectAttackable().overlaps(positionAttack))
.forEach((enemy) {
enemy.receiveDamage(damage, id);
final rectAfterPush =
enemy.position.position.translate(diffBase.dx, diffBase.dy);
if (withPush &&
(enemy is ObjectCollision &&
!(enemy as ObjectCollision)
.isCollision(displacement: rectAfterPush)
.isNotEmpty)) {
enemy.translate(diffBase.dx, diffBase.dy);
}
});
}