simpleAttackMelee method
void
simpleAttackMelee({
- required Future<
SpriteAnimation> attackEffectTopAnim, - required double damage,
- required double height,
- required double width,
- int? id,
- bool withPush = false,
- double? radAngleDirection,
- VoidCallback? execute,
- int interval = 1000,
Execute simple attack melee using animation
Implementation
void simpleAttackMelee({
required Future<SpriteAnimation> attackEffectTopAnim,
required double damage,
required double height,
required double width,
int? id,
bool withPush = false,
double? radAngleDirection,
VoidCallback? execute,
int interval = 1000,
}) {
if (!this.checkInterval('attackMelee', interval, dtUpdate)) return;
if (isDead) return;
double angle = radAngleDirection ?? this.currentRadAngle;
double nextX = this.height * cos(angle);
double nextY = this.height * 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: attackEffectTopAnim,
position: positionAttack,
rotateRadAngle: angle,
));
gameRef
.visibleAttackables()
.where((a) =>
a.receivesAttackFromEnemy() &&
a.rectAttackable().rect.overlaps(positionAttack.rect))
.forEach((attackable) {
attackable.receiveDamage(damage, id);
final rectAfterPush =
attackable.position.translate(diffBase.dx, diffBase.dy);
if (withPush &&
(attackable is ObjectCollision &&
!(attackable as ObjectCollision)
.isCollision(displacement: rectAfterPush.position)
.isNotEmpty)) {
attackable.position = rectAfterPush;
}
});
if (execute != null) execute();
}