mirror of
				https://github.com/flame-engine/flame.git
				synced 2025-10-31 17:06:50 +08:00 
			
		
		
		
	 bfcda073bb
			
		
	
	bfcda073bb
	
	
	
		
			
			* Update effectController
* move effect controllers into the controllers/ directory
* Add .forward property to EffectController
* SimpleEffectController supports reverse time
* Fixing some compile errors
* rename SimpleEffectController -> LinearEffectController
* minor cleanup
* DurationEffectController and PauseEffectController
* ReverseLinearEffectController
* CurvedEffectController and its reverse
* InfiniteEffectController
* Added EffectController.recede()
* Add EffectController.update()
* Add InfiniteEffectController'
* RepeatedEffectController
* SequenceEffectController
* DelayedEffectController
* Restore the [EffectController.started] property
* minor
* Rename reset() -> setToStart()
* time direction is now managed from the Effect class
* StandardEffectController replaced with function standardController()
* update some doc-comments
* flutter analyze
* flutter format
* fix some tests
* more test fixes
* fix remaining tests
* format
* rename local variable
* minor simplification
* Expand docs in PauseEffectController
* added tests
* Curved controller test
* fix errors
* formatting
* added more tests
* format
* fix RepeatedEffectController
* more tests
* format
* changelog
* increase tolerance
* Replaced standardController with factory EffectController constructor
* Added parameter EffectController({alternate=false})
* Added default for curve= parameter
* rename
* rename tests
* added more exports
* rename tests
* rename src/effects2
Co-authored-by: Lukas Klingsbo <lukas.klingsbo@gmail.com>
		
	
		
			
				
	
	
		
			111 lines
		
	
	
		
			2.7 KiB
		
	
	
	
		
			Dart
		
	
	
	
	
	
			
		
		
	
	
			111 lines
		
	
	
		
			2.7 KiB
		
	
	
	
		
			Dart
		
	
	
	
	
	
| import 'dart:math';
 | |
| import 'dart:ui';
 | |
| 
 | |
| import 'package:flame/components.dart';
 | |
| import 'package:flame/effects.dart';
 | |
| import 'package:flame/extensions.dart';
 | |
| import 'package:flame/game.dart';
 | |
| import 'package:flame/geometry.dart';
 | |
| import 'package:flame/input.dart';
 | |
| import 'package:flame/palette.dart';
 | |
| 
 | |
| enum Shapes { circle, rectangle, polygon }
 | |
| 
 | |
| class SimpleShapesExample extends FlameGame with HasTappables {
 | |
|   static const description = '''
 | |
|     An example which adds random shapes on the screen when you tap it, if you
 | |
|     tap on an already existing shape it will remove that shape and replace it
 | |
|     with a new one.
 | |
|   ''';
 | |
| 
 | |
|   final _rng = Random();
 | |
| 
 | |
|   MyShapeComponent randomShape(Vector2 position) {
 | |
|     final shapeType = Shapes.values[_rng.nextInt(Shapes.values.length)];
 | |
|     final shapeSize =
 | |
|         Vector2.all(100) + Vector2.all(50.0).scaled(_rng.nextDouble());
 | |
|     final shapeAngle = _rng.nextDouble() * 6;
 | |
|     switch (shapeType) {
 | |
|       case Shapes.circle:
 | |
|         return MyShapeComponent(
 | |
|           HitboxCircle(),
 | |
|           position: position,
 | |
|           size: shapeSize,
 | |
|           angle: shapeAngle,
 | |
|         );
 | |
|       case Shapes.rectangle:
 | |
|         return MyShapeComponent(
 | |
|           HitboxRectangle(),
 | |
|           position: position,
 | |
|           size: shapeSize,
 | |
|           angle: shapeAngle,
 | |
|         );
 | |
|       case Shapes.polygon:
 | |
|         final points = [
 | |
|           Vector2.random(_rng),
 | |
|           Vector2.random(_rng)..y *= -1,
 | |
|           -Vector2.random(_rng),
 | |
|           Vector2.random(_rng)..x *= -1,
 | |
|         ];
 | |
|         return MyShapeComponent(
 | |
|           HitboxPolygon(points),
 | |
|           position: position,
 | |
|           size: shapeSize,
 | |
|           angle: shapeAngle,
 | |
|         );
 | |
|     }
 | |
|   }
 | |
| 
 | |
|   @override
 | |
|   void onTapDown(int pointerId, TapDownInfo info) {
 | |
|     super.onTapDown(pointerId, info);
 | |
|     final tapPosition = info.eventPosition.game;
 | |
|     final component = randomShape(tapPosition);
 | |
|     add(component);
 | |
|     component.add(
 | |
|       MoveEffect.to(
 | |
|         size / 2,
 | |
|         EffectController(
 | |
|           duration: 5,
 | |
|           reverseDuration: 5,
 | |
|           infinite: true,
 | |
|         ),
 | |
|       ),
 | |
|     );
 | |
|     component.add(
 | |
|       RotateEffect.to(
 | |
|         3,
 | |
|         EffectController(
 | |
|           duration: 1,
 | |
|           reverseDuration: 1,
 | |
|           infinite: true,
 | |
|         ),
 | |
|       ),
 | |
|     );
 | |
|   }
 | |
| }
 | |
| 
 | |
| class MyShapeComponent extends ShapeComponent with Tappable {
 | |
|   @override
 | |
|   final Paint paint = BasicPalette.red.paint()..style = PaintingStyle.stroke;
 | |
| 
 | |
|   MyShapeComponent(
 | |
|     HitboxShape shape, {
 | |
|     Vector2? position,
 | |
|     Vector2? size,
 | |
|     double? angle,
 | |
|   }) : super(
 | |
|           shape,
 | |
|           position: position,
 | |
|           size: size,
 | |
|           angle: angle,
 | |
|           anchor: Anchor.center,
 | |
|         );
 | |
| 
 | |
|   @override
 | |
|   bool onTapDown(TapDownInfo _) {
 | |
|     removeFromParent();
 | |
|     return true;
 | |
|   }
 | |
| }
 |