Files
flame/packages/flame_isolate/example/lib/colonists_game.dart
Lukas Klingsbo 2d45d2be39 chore: Remove 1.8.0 deprecations (#2538)
Removes all the deprecated methods before 1.8.0 release.
2023-05-22 19:01:55 +02:00

114 lines
3.4 KiB
Dart
Executable File

import 'dart:math';
import 'package:flame/components.dart';
import 'package:flame/flame.dart';
import 'package:flame/game.dart';
import 'package:flame/input.dart';
import 'package:flame_isolate_example/brains/path_finder.dart';
import 'package:flame_isolate_example/brains/worker_overmind.dart';
import 'package:flame_isolate_example/constants.dart';
import 'package:flame_isolate_example/game_map/game_map.dart';
import 'package:flame_isolate_example/objects/colonists_object.dart';
import 'package:flame_isolate_example/terrain/terrain.dart';
import 'package:flame_isolate_example/units/worker.dart';
import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
class ColonistsGame extends FlameGame with KeyboardEvents {
final PositionComponent _cameraPosition = PositionComponent();
late final GameMap _currentMap;
final world = World();
late final CameraComponent cameraComponent;
@override
Future<void> onLoad() async {
cameraComponent = CameraComponent.withFixedResolution(
world: world,
width: 400,
height: 600,
);
addAll([cameraComponent, world]);
cameraComponent.follow(_cameraPosition);
cameraComponent.viewfinder.zoom = 0.4;
await Flame.images.load('bread.png');
await Flame.images.load('worker.png');
await Flame.images.load('cheese.png');
world.add(_currentMap = GameMap());
_cameraPosition.position = Vector2(
GameMap.mapSizeX * Constants.tileSize / 2,
GameMap.mapSizeY * Constants.tileSize / 2,
);
add(WorkerOvermind());
}
Terrain tileAtPosition(int x, int y) {
return _currentMap.tileAtPosition(x, y);
}
static const double cameraSpeed = 200;
double _downForce = 0;
double _upForce = 0;
double _rightForce = 0;
double _leftForce = 0;
@override
KeyEventResult onKeyEvent(
RawKeyEvent event,
Set<LogicalKeyboardKey> keysPressed,
) {
var howMuch = 0.0;
if (event is RawKeyDownEvent) {
howMuch = 1;
} else if (event is RawKeyUpEvent) {
howMuch = 0;
}
if (event.data.logicalKey == LogicalKeyboardKey.keyS) {
_downForce = howMuch;
} else if (event.data.logicalKey == LogicalKeyboardKey.keyW) {
_upForce = howMuch;
} else if (event.data.logicalKey == LogicalKeyboardKey.keyD) {
_rightForce = howMuch;
} else if (event.data.logicalKey == LogicalKeyboardKey.keyA) {
_leftForce = howMuch;
} else if (event.data.logicalKey == LogicalKeyboardKey.numpadAdd &&
event is RawKeyDownEvent) {
cameraComponent.viewfinder.zoom = min(
cameraComponent.viewfinder.zoom + 0.1,
5,
);
} else if (event.data.logicalKey == LogicalKeyboardKey.numpadSubtract &&
event is RawKeyDownEvent) {
cameraComponent.viewfinder.zoom = max(
cameraComponent.viewfinder.zoom - 0.1,
0.1,
);
}
return super.onKeyEvent(event, keysPressed);
}
final direction = Vector2(0, 0);
@override
void update(double dt) {
super.update(dt);
direction.setValues(_rightForce - _leftForce, _downForce - _upForce);
final step = direction..scale(cameraSpeed * dt * 4);
_cameraPosition.position += step;
if (workers.isNotEmpty) {
cameraComponent.follow(workers.first);
}
}
PathFinderData get pathFinderData => _currentMap.pathFinderData;
Set<Worker> get workers => _currentMap.workers;
List<ColonistsObject> get worldObjects => _currentMap.worldObjects;
}