Skip to content

Commit

Permalink
👍 リールの位置と判定調整
Browse files Browse the repository at this point in the history
  • Loading branch information
dicenull committed Sep 12, 2023
1 parent 34da82b commit aefbbfd
Showing 1 changed file with 31 additions and 25 deletions.
56 changes: 31 additions & 25 deletions lib/feature_slot/reel_component.dart
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@ import 'package:app/feature_slot/slot_core.dart';
import 'package:app/feature_slot/slot_symbol.dart';
import 'package:flame/components.dart';
import 'package:flame/effects.dart';
import 'package:flame/extensions.dart';
import 'package:flame/flame.dart';
import 'package:flame/palette.dart';
import 'package:flame_audio/flame_audio.dart';
Expand Down Expand Up @@ -37,6 +38,8 @@ class ReelComponent extends PositionComponent
(SlotSymbol, ReelPos)? _suberi;
SlotSymbol? _meoshi;

final visibleCount = 4;

ReelComponent(this._symbols, this.symbolSize, this.onHit)
: _reel = <_SymbolState>[],
reelHeight = symbolSize * _symbols.length {
Expand Down Expand Up @@ -67,18 +70,6 @@ class ReelComponent extends PositionComponent
});
}

@override
FutureOr<void> onLoad() {
reelClipRange = Rect.fromCenter(
center: reelCenter.toOffset() - margin,
width: symbolSize,
height: visibleReelHeight,
);

final shadowComponent = _ShadowComponent(reelClipRange);
add(shadowComponent);
}

Effect get hitEffect => ColorEffect(
const Color(0xFFFFFFFF),
const Offset(0.0, 0.5),
Expand All @@ -89,11 +80,14 @@ class ReelComponent extends PositionComponent
),
);

Offset get margin => Offset(0, symbolSize * .5);
int get length => _symbols.length;
Vector2 get reelCenter => Vector2(symbolSize, visibleReelHeight) * .5;
double get visibleReelHeight => symbolSize * 4;

Offset get margin => (_reel.length % 2 != visibleCount % 2)
? Offset.zero
: Offset(0, symbolSize * .5);
Vector2 get reelCenter =>
Vector2(symbolSize, visibleReelHeight) * .5 - margin.toVector2();
double get visibleReelHeight => symbolSize * visibleCount;
double calcDrawHeight(int y) =>
(symbolSize * y + reelPosition) % reelHeight - reelHeight * .5;

Expand All @@ -103,6 +97,18 @@ class ReelComponent extends PositionComponent
_reel[hitIndex].sprite.add(hitEffect);
}

@override
FutureOr<void> onLoad() {
reelClipRange = Rect.fromCenter(
center: reelCenter.toOffset(),
width: symbolSize,
height: visibleReelHeight,
);

final shadowComponent = _ShadowComponent(reelClipRange);
add(shadowComponent);
}

@override
void render(Canvas canvas) {
final bgColor = BasicPalette.white.withAlpha(100);
Expand All @@ -124,12 +130,12 @@ class ReelComponent extends PositionComponent
Rect.fromPoints(p.toOffset(), Offset(symbolSize, symbolSize)),
BasicPalette.green.paint()..style = PaintingStyle.stroke);
});
canvas.drawCircle(reelCenter.toOffset(), 5, bgColor.paint());
canvas.drawCircle(reelCenter.toOffset(), 20, bgColor.paint());

final centerIndex = _calcCenterIndex();
final symbolCenterHeight = calcDrawHeight(centerIndex) + symbolSize * .5;

canvas.drawCircle(Offset(0, symbolCenterHeight), 10, bgColor.paint());
canvas.drawCircle(Offset(0, symbolCenterHeight), 5, bgColor.paint());
}
}

Expand Down Expand Up @@ -160,7 +166,7 @@ class ReelComponent extends PositionComponent
final diff = reelCenter.y - symbolCenterHeight;
final (t, c, b) = _indexList(centerIndex);

if (diff.abs() < amount) {
if (diff.abs() <= amount * 1.5) {
final suberi = _suberi;
if (suberi != null) {
final (symbol, pos) = suberi;
Expand Down Expand Up @@ -253,13 +259,6 @@ class ReelComponent extends PositionComponent

enum ReelPos { top, center, bottom }

class _SymbolState {
final SpriteComponent sprite;
final SlotSymbol symbol;

_SymbolState({required this.sprite, required this.symbol});
}

class _ShadowComponent extends PositionComponent {
final Rect clipRange;
late final Shader shader;
Expand Down Expand Up @@ -290,3 +289,10 @@ class _ShadowComponent extends PositionComponent {
canvas.drawRect(clipRange, Paint()..shader = shader);
}
}

class _SymbolState {
final SpriteComponent sprite;
final SlotSymbol symbol;

_SymbolState({required this.sprite, required this.symbol});
}

0 comments on commit aefbbfd

Please sign in to comment.