@@ -190,7 +190,7 @@ class _WolfRendererState extends State<WolfRenderer>
|
||||
if (player.angle < 0) player.angle += 2 * math.pi;
|
||||
if (player.angle >= 2 * math.pi) player.angle -= 2 * math.pi;
|
||||
|
||||
Coordinate2D validatedPos = _calculateValidatedPosition(
|
||||
final Coordinate2D validatedPos = _calculateValidatedPosition(
|
||||
player.position,
|
||||
inputResult.movement,
|
||||
);
|
||||
@@ -223,8 +223,8 @@ class _WolfRendererState extends State<WolfRenderer>
|
||||
({Coordinate2D movement, double dAngle}) _processInputs(Duration elapsed) {
|
||||
inputManager.update();
|
||||
|
||||
const double moveSpeed = 0.16;
|
||||
const double turnSpeed = 0.12;
|
||||
const double moveSpeed = 0.14;
|
||||
const double turnSpeed = 0.10;
|
||||
|
||||
Coordinate2D movement = const Coordinate2D(0, 0);
|
||||
double dAngle = 0.0;
|
||||
@@ -301,18 +301,37 @@ class _WolfRendererState extends State<WolfRenderer>
|
||||
return Coordinate2D(newX, newY);
|
||||
}
|
||||
|
||||
// renderer.dart
|
||||
void _updateEntities(Duration elapsed) {
|
||||
List<Entity> itemsToRemove = [];
|
||||
|
||||
for (Entity entity in entities) {
|
||||
if (entity is Enemy) {
|
||||
entity.update(
|
||||
// 1. Get Intent
|
||||
final intent = entity.update(
|
||||
elapsedMs: elapsed.inMilliseconds,
|
||||
playerPosition: player.position,
|
||||
isWalkable: _isWalkable,
|
||||
onDamagePlayer: _takeDamage,
|
||||
);
|
||||
|
||||
// 2. Update Angle
|
||||
entity.angle = intent.newAngle;
|
||||
|
||||
// 3. Resolve Movement & Collision
|
||||
// We reuse the same logic we used for the player!
|
||||
Coordinate2D validatedPos = _calculateValidatedPosition(
|
||||
entity.position,
|
||||
intent.movement,
|
||||
);
|
||||
|
||||
entity.position = validatedPos;
|
||||
|
||||
// 4. Handle Attacking (if the enemy logic decides to)
|
||||
// You can move 'onDamagePlayer' calls into the enemy's
|
||||
// internal state check here if preferred.
|
||||
} else if (entity is Collectible) {
|
||||
// Collectible pickup logic remains the same
|
||||
if (player.position.distanceTo(entity.position) < 0.5) {
|
||||
if (player.tryPickup(entity)) {
|
||||
itemsToRemove.add(entity);
|
||||
|
||||
Reference in New Issue
Block a user