mirror of
				https://github.com/flame-engine/flame.git
				synced 2025-11-04 21:17:13 +08:00 
			
		
		
		
	
		
			
				
	
	
		
			55 lines
		
	
	
		
			1.5 KiB
		
	
	
	
		
			Dart
		
	
	
	
	
	
			
		
		
	
	
			55 lines
		
	
	
		
			1.5 KiB
		
	
	
	
		
			Dart
		
	
	
	
	
	
import 'package:flame/extensions.dart';
 | 
						|
import 'package:flame_oxygen/flame_oxygen.dart';
 | 
						|
import 'package:flame_oxygen_example/component/timer_component.dart';
 | 
						|
import 'package:flame_oxygen_example/component/velocity_component.dart';
 | 
						|
import 'package:flame_oxygen_example/main.dart';
 | 
						|
import 'package:flutter/material.dart';
 | 
						|
 | 
						|
class MoveSystem extends System with UpdateSystem, GameRef<ExampleGame> {
 | 
						|
  Query? _query;
 | 
						|
 | 
						|
  @override
 | 
						|
  void init() {
 | 
						|
    _query = createQuery([
 | 
						|
      Has<PositionComponent>(),
 | 
						|
      Has<VelocityComponent>(),
 | 
						|
    ]);
 | 
						|
  }
 | 
						|
 | 
						|
  @override
 | 
						|
  void dispose() {
 | 
						|
    _query = null;
 | 
						|
    super.dispose();
 | 
						|
  }
 | 
						|
 | 
						|
  @override
 | 
						|
  void update(double delta) {
 | 
						|
    for (final entity in _query?.entities ?? <Entity>[]) {
 | 
						|
      final velocity = entity.get<VelocityComponent>()!.velocity;
 | 
						|
      final size = entity.get<SizeComponent>()!.size;
 | 
						|
      final position = entity.get<PositionComponent>()!.position
 | 
						|
        ..add(velocity * delta);
 | 
						|
 | 
						|
      final screenSize = Vector2.zero() & game!.size;
 | 
						|
      if (!screenSize.containsPoint(position) ||
 | 
						|
          !screenSize.containsPoint(position + size)) {
 | 
						|
        velocity.setFrom(-velocity);
 | 
						|
 | 
						|
        game!.createEntity(
 | 
						|
          name: '${entity.name} says',
 | 
						|
          position: position + size / 2,
 | 
						|
          size: Vector2.zero(),
 | 
						|
          anchor: Anchor.topCenter,
 | 
						|
        )
 | 
						|
          ..add<TextComponent, TextInit>(
 | 
						|
            TextInit(
 | 
						|
              'Kawabunga',
 | 
						|
              style: const TextStyle(color: Colors.blue, fontSize: 12),
 | 
						|
            ),
 | 
						|
          )
 | 
						|
          ..add<TimerComponent, double>(3);
 | 
						|
      }
 | 
						|
    }
 | 
						|
  }
 | 
						|
}
 |