moveFromAngleDodgeObstacles method
Move to direction by radAngle with dodge obstacles
Implementation
bool moveFromAngleDodgeObstacles(
double speed,
double angle,
) {
isIdle = false;
double innerSpeed = (speed * dtUpdate);
double nextX = innerSpeed * cos(angle);
double nextY = innerSpeed * sin(angle);
Offset nextPoint = Offset(nextX, nextY);
Vector2 diffBase =
Vector2(this.center.x + nextPoint.dx, this.center.y + nextPoint.dy) -
this.center;
var collisionX = _verifyTranslateCollision(
diffBase.x,
0,
);
var collisionY = _verifyTranslateCollision(
0,
diffBase.y,
);
Vector2 newDiffBase = diffBase;
if (collisionX) {
newDiffBase = Vector2(0, newDiffBase.y);
}
if (collisionY) {
newDiffBase = Vector2(newDiffBase.x, 0);
}
if (collisionX && !collisionY && newDiffBase.y != 0) {
var collisionY = _verifyTranslateCollision(
0,
innerSpeed,
);
if (!collisionY) newDiffBase = Vector2(0, innerSpeed);
}
if (collisionY && !collisionX && newDiffBase.x != 0) {
var collisionX = _verifyTranslateCollision(
innerSpeed,
0,
);
if (!collisionX) newDiffBase = Vector2(innerSpeed, 0);
}
if (newDiffBase == Vector2.zero()) {
onMove(0, getDirectionByAngle(angle), angle);
return false;
}
this.position.add(newDiffBase);
onMove(speed, getDirectionByAngle(angle), angle);
return true;
}