mirror of
https://github.com/flame-engine/flame.git
synced 2025-11-01 10:38:17 +08:00
Add random to the Color and Paint extensions (#1081)
* Add `randomColor` to the `Color` extension * Add flame rive package to monorepo (#1048) Add flame rive package to monorepo * Add random to PaintExtension * Update examples/pubspec.yaml Co-authored-by: Erick <erickzanardoo@gmail.com> Co-authored-by: Renan <6718144+renancaraujo@users.noreply.github.com> Co-authored-by: Erick <erickzanardoo@gmail.com>
This commit is contained in:
@ -1,11 +1,9 @@
|
||||
import 'dart:math';
|
||||
import 'dart:ui';
|
||||
|
||||
import 'package:flame/components.dart';
|
||||
import 'package:flame/extensions.dart';
|
||||
import 'package:flame/game.dart';
|
||||
import 'package:flame/input.dart';
|
||||
import 'package:flame/palette.dart';
|
||||
|
||||
const priorityInfo = '''
|
||||
On this example, click on the square to bring them to the front by changing the
|
||||
@ -18,7 +16,7 @@ class Square extends PositionComponent with HasGameRef<Priority>, Tappable {
|
||||
Square(Vector2 position) {
|
||||
this.position.setFrom(position);
|
||||
size.setValues(100, 100);
|
||||
paint = _randomPaint();
|
||||
paint = PaintExtension.random(withAlpha: 0.9, base: 100);
|
||||
}
|
||||
|
||||
@override
|
||||
@ -35,17 +33,6 @@ class Square extends PositionComponent with HasGameRef<Priority>, Tappable {
|
||||
super.render(canvas);
|
||||
canvas.drawRect(size.toRect(), paint);
|
||||
}
|
||||
|
||||
static Paint _randomPaint() {
|
||||
final rng = Random();
|
||||
final color = Color.fromRGBO(
|
||||
rng.nextInt(256),
|
||||
rng.nextInt(256),
|
||||
rng.nextInt(256),
|
||||
0.9,
|
||||
);
|
||||
return PaletteEntry(color).paint();
|
||||
}
|
||||
}
|
||||
|
||||
class Priority extends FlameGame with HasTappableComponents {
|
||||
|
||||
@ -1,26 +1,13 @@
|
||||
import 'dart:math' as math;
|
||||
|
||||
import 'package:flame/components.dart';
|
||||
import 'package:flame/extensions.dart';
|
||||
import 'package:flame/game.dart';
|
||||
import 'package:flame/palette.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
|
||||
class TappableSquare extends PositionComponent with Tappable {
|
||||
static Paint _randomPaint() {
|
||||
final rng = math.Random();
|
||||
final color = Color.fromRGBO(
|
||||
rng.nextInt(256),
|
||||
rng.nextInt(256),
|
||||
rng.nextInt(256),
|
||||
0.9,
|
||||
);
|
||||
return PaletteEntry(color).paint();
|
||||
}
|
||||
|
||||
Paint currentPaint;
|
||||
|
||||
TappableSquare({Vector2? position})
|
||||
: currentPaint = _randomPaint(),
|
||||
: currentPaint = PaintExtension.random(withAlpha: 0.9, base: 100),
|
||||
super(
|
||||
position: position ?? Vector2.all(100),
|
||||
size: Vector2.all(100),
|
||||
|
||||
@ -17,6 +17,7 @@
|
||||
- Create default implementations of `RectangleComponent`, `CircleComponent` and `PolygonComponent`
|
||||
- Streamlined the argument list for all components extending `PositionComponent`
|
||||
- Improved interaction between viewport and isHud components
|
||||
- `randomColor` method in the `Color` extension
|
||||
- Calling super-method in `.render()` is now optional
|
||||
- Components that manipulate canvas state are now responsible for saving/restoring that state
|
||||
|
||||
|
||||
@ -3,6 +3,7 @@ export 'src/extensions/color.dart';
|
||||
export 'src/extensions/image.dart';
|
||||
export 'src/extensions/matrix4.dart';
|
||||
export 'src/extensions/offset.dart';
|
||||
export 'src/extensions/paint.dart';
|
||||
export 'src/extensions/rect.dart';
|
||||
export 'src/extensions/rectangle.dart';
|
||||
export 'src/extensions/size.dart';
|
||||
|
||||
@ -1 +1,3 @@
|
||||
export 'src/extensions/color.dart';
|
||||
export 'src/extensions/paint.dart';
|
||||
export 'src/palette.dart';
|
||||
|
||||
@ -1,3 +1,4 @@
|
||||
import 'dart:math';
|
||||
import 'dart:ui';
|
||||
|
||||
export 'dart:ui' show Color;
|
||||
@ -101,4 +102,27 @@ extension ColorExtension on Color {
|
||||
components[3],
|
||||
);
|
||||
}
|
||||
|
||||
/// Generates a random [Color] with the set [withAlpha] or the default (1.0).
|
||||
/// You can pass in a random number generator [rng], if omitted the function
|
||||
/// will create a new [Random] object without a seed and use that.
|
||||
/// [base] can be used to get the random colors in only a lighter spectrum, it
|
||||
/// should be between [0-256].
|
||||
static Color random({
|
||||
double withAlpha = 1.0,
|
||||
int base = 0,
|
||||
Random? rng,
|
||||
}) {
|
||||
assert(
|
||||
base >= 0 && base <= 256,
|
||||
'The base argument should be between 0-256',
|
||||
);
|
||||
rng ??= Random();
|
||||
return Color.fromRGBO(
|
||||
base + (base == 256 ? 0 : rng.nextInt(256 - base)),
|
||||
base + (base == 256 ? 0 : rng.nextInt(256 - base)),
|
||||
base + (base == 256 ? 0 : rng.nextInt(256 - base)),
|
||||
withAlpha,
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
81
packages/flame/lib/src/extensions/paint.dart
Normal file
81
packages/flame/lib/src/extensions/paint.dart
Normal file
@ -0,0 +1,81 @@
|
||||
import 'dart:math';
|
||||
import 'dart:ui';
|
||||
|
||||
import 'color.dart';
|
||||
|
||||
export 'dart:ui' show Color;
|
||||
|
||||
extension PaintExtension on Paint {
|
||||
/// Darken the shade of the [Color] in the [Paint] object by the [amount].
|
||||
///
|
||||
/// [amount] is a double between 0 and 1.
|
||||
///
|
||||
/// Based on: https://stackoverflow.com/a/60191441.
|
||||
void darken(double amount) {
|
||||
color = color.darken(amount);
|
||||
}
|
||||
|
||||
/// Brighten the shade of the [Color] in the [Paint] object by the [amount].
|
||||
///
|
||||
/// [amount] is a double between 0 and 1.
|
||||
///
|
||||
/// Based on: https://stackoverflow.com/a/60191441.
|
||||
void brighten(double amount) {
|
||||
color = color.brighten(amount);
|
||||
}
|
||||
|
||||
/// Parses an RGB color from a valid hex string (e.g. #1C1C1C).
|
||||
///
|
||||
/// The `#` is optional.
|
||||
/// The short-hand syntax is support, e.g.: #CCC.
|
||||
/// Lower-case letters are supported.
|
||||
///
|
||||
/// Examples of valid inputs:
|
||||
/// ccc, CCC, #ccc, #CCC, #c1c1c1, #C1C1C1, c1c1c1, C1C1C1
|
||||
///
|
||||
/// If the string is not valid, an error is thrown.
|
||||
///
|
||||
/// Note: if you are hardcoding colors, use Dart's built-in hexadecimal
|
||||
/// literals instead.
|
||||
static Paint fromRGBHexString(String hexString) {
|
||||
final color = ColorExtension.fromRGBHexString(hexString);
|
||||
return Paint()..color = color;
|
||||
}
|
||||
|
||||
/// Parses an ARGB color from a valid hex string (e.g. #1C1C1C).
|
||||
///
|
||||
/// The `#` is optional.
|
||||
/// The short-hand syntax is support, e.g.: #CCCC.
|
||||
/// Lower-case letters are supported.
|
||||
///
|
||||
/// Examples of valid inputs:
|
||||
/// fccc, FCCC, #fccc, #FCCC, #ffc1c1c1, #FFC1C1C1, ffc1c1c1, FFC1C1C1
|
||||
///
|
||||
/// If the string is not valid, an error is thrown.
|
||||
///
|
||||
/// Note: if you are hardcoding colors, use Dart's built-in hexadecimal
|
||||
/// literals instead.
|
||||
static Paint fromARGBHexString(String hexString) {
|
||||
final color = ColorExtension.fromARGBHexString(hexString);
|
||||
return Paint()..color = color;
|
||||
}
|
||||
|
||||
/// Generates a random [Color] in a new [Paint] object with the set
|
||||
/// alpha as [withAlpha] or the default (1.0).
|
||||
/// You can pass in a random number generator [rng], if omitted the function
|
||||
/// will create a new [Random] object without a seed and use that.
|
||||
/// [base] can be used to get the random colors in only a lighter spectrum, it
|
||||
/// should be between [0-256].
|
||||
static Paint random({
|
||||
double withAlpha = 1.0,
|
||||
int base = 0,
|
||||
Random? rng,
|
||||
}) {
|
||||
final color = ColorExtension.random(
|
||||
withAlpha: withAlpha,
|
||||
base: base,
|
||||
rng: rng,
|
||||
);
|
||||
return Paint()..color = color;
|
||||
}
|
||||
}
|
||||
@ -1,5 +1,3 @@
|
||||
import 'dart:math' as math;
|
||||
|
||||
import 'package:flame/palette.dart';
|
||||
import 'package:flame_forge2d/body_component.dart';
|
||||
import 'package:flame_forge2d/contact_callbacks.dart';
|
||||
@ -23,17 +21,7 @@ class Ball extends BodyComponent {
|
||||
paint = originalPaint;
|
||||
}
|
||||
|
||||
Paint randomPaint() {
|
||||
final rng = math.Random();
|
||||
return PaletteEntry(
|
||||
Color.fromARGB(
|
||||
100 + rng.nextInt(155),
|
||||
100 + rng.nextInt(155),
|
||||
100 + rng.nextInt(155),
|
||||
255,
|
||||
),
|
||||
).paint();
|
||||
}
|
||||
Paint randomPaint() => PaintExtension.random(withAlpha: 0.9, base: 100);
|
||||
|
||||
@override
|
||||
Body createBody() {
|
||||
|
||||
@ -1,6 +1,5 @@
|
||||
import 'dart:math';
|
||||
|
||||
import 'package:flame/components.dart';
|
||||
import 'package:flame/extensions.dart';
|
||||
import 'package:flame/game.dart';
|
||||
import 'package:flame/input.dart';
|
||||
import 'package:flame/palette.dart';
|
||||
@ -85,7 +84,7 @@ class Square extends PositionComponent with HasGameRef<RiveExampleGame> {
|
||||
Square(Vector2 position) {
|
||||
this.position.setFrom(position);
|
||||
size.setValues(100, 100);
|
||||
paint = _randomPaint();
|
||||
paint = PaintExtension.random(withAlpha: 0.9, base: 100);
|
||||
}
|
||||
|
||||
@override
|
||||
@ -93,15 +92,4 @@ class Square extends PositionComponent with HasGameRef<RiveExampleGame> {
|
||||
super.render(canvas);
|
||||
canvas.drawRect(size.toRect(), paint);
|
||||
}
|
||||
|
||||
static Paint _randomPaint() {
|
||||
final rng = Random();
|
||||
final color = Color.fromRGBO(
|
||||
rng.nextInt(256),
|
||||
rng.nextInt(256),
|
||||
rng.nextInt(256),
|
||||
0.9,
|
||||
);
|
||||
return PaletteEntry(color).paint();
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user