Refactor coordinate system
Signed-off-by: Hans Kokx <hans.d.kokx@gmail.com>
This commit is contained in:
@@ -1,6 +1,6 @@
|
||||
import 'dart:math' as math;
|
||||
|
||||
import 'package:wolf_dart/classes/linear_coordinates.dart';
|
||||
import 'package:wolf_dart/classes/coordinate_2d.dart';
|
||||
import 'package:wolf_dart/features/entities/enemies/enemy.dart';
|
||||
import 'package:wolf_dart/features/entities/entity.dart';
|
||||
|
||||
@@ -56,19 +56,20 @@ class BrownGuard extends Enemy {
|
||||
@override
|
||||
void update({
|
||||
required int elapsedMs,
|
||||
required LinearCoordinates player,
|
||||
required Coordinate2D playerPosition,
|
||||
required bool Function(int x, int y) isWalkable,
|
||||
required void Function(int damage) onDamagePlayer,
|
||||
}) {
|
||||
// 1. Wake up logic
|
||||
if (state == EntityState.idle && hasLineOfSight(player, isWalkable)) {
|
||||
if (state == EntityState.idle &&
|
||||
hasLineOfSight(playerPosition, isWalkable)) {
|
||||
state = EntityState.patrolling;
|
||||
lastActionTime = elapsedMs;
|
||||
}
|
||||
|
||||
// 2. Pre-calculate angles (needed for almost all states)
|
||||
double dx = player.x - x;
|
||||
double dy = player.y - y;
|
||||
double dx = playerPosition.x - x;
|
||||
double dy = playerPosition.y - y;
|
||||
double distance = math.sqrt(dx * dx + dy * dy);
|
||||
double angleToPlayer = math.atan2(dy, dx);
|
||||
|
||||
@@ -107,7 +108,7 @@ class BrownGuard extends Enemy {
|
||||
spriteIndex = 58 + (walkFrame * 8) + octant;
|
||||
// Shooting transition
|
||||
if (distance < 5.0 && elapsedMs - lastActionTime > 2000) {
|
||||
if (hasLineOfSight(player, isWalkable)) {
|
||||
if (hasLineOfSight(playerPosition, isWalkable)) {
|
||||
state = EntityState.shooting;
|
||||
lastActionTime = elapsedMs;
|
||||
_hasFiredThisCycle = false;
|
||||
|
||||
Reference in New Issue
Block a user