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