diff --git a/src/core/low-actions.ts b/src/core/low-actions.ts
index 73462ec..c21a143 100644
--- a/src/core/low-actions.ts
+++ b/src/core/low-actions.ts
@@ -66,6 +66,9 @@ function reduceMouseDownInHand(state: GameState, wp: WidgetPoint & { t: 'hand' }
if (tool == 'dynamite') return { t: 'mouseDownIntent', intent: dynamiteIntent, wp };
else if (tool == 'bomb') return { t: 'mouseDownIntent', intent: bombIntent, wp };
else {
+ if (button == 2)
+ return { t: 'shuffle' };
+
const hoverTile = wp.indexValid && index >= 0 && index < tiles.length;
if (hoverTile) {
return { t: 'startDragHandTile', index, wp };
@@ -94,7 +97,7 @@ function reducePauseButton(state: CoreState): CoreState {
return produce(state, s => { s.slowState.paused = { pauseTime_in_clock: Date.now() }; });
}
-function reduceShuffleButton(state: CoreState): CoreState {
+function reduceShuffle(state: CoreState): CoreState {
const hs = get_hand_tiles(state);
let randomOrder = getRandomOrder(hs.length);
let retries = 0;
@@ -120,7 +123,6 @@ function reduceMouseDown(state: GameState, wp: WidgetPoint, button: number, mods
case 'hand': return reduceMouseDownInHand(state, wp, button, mods);
case 'toolbar': return reduceMouseDownInToolbar(state, wp, button, mods);
case 'pauseButton': return { t: 'vacuousDownAnd', wp, action: { t: 'pause' } };
- case 'shuffleButton': return { t: 'vacuousDownAnd', wp, action: { t: 'shuffle' } };
case 'nowhere': return { t: 'vacuousDown', wp };
}
}
@@ -411,7 +413,7 @@ function resolveGameLowAction(state: GameState, action: GameLowAction): GameStat
}
}
case 'vacuousDown': return vacuous_down(state, action.wp);
- case 'shuffle': return withCoreState(state, reduceShuffleButton);
+ case 'shuffle': return withCoreState(state, reduceShuffle);
case 'pause': return withCoreState(state, reducePauseButton);
case 'multiple': return resolveGameLowActions(state, action.actions);
case 'deselect': return withCoreState(state, deselect);
diff --git a/src/ui/instructions.tsx b/src/ui/instructions.tsx
index a51728c..6fcd23a 100644
--- a/src/ui/instructions.tsx
+++ b/src/ui/instructions.tsx
@@ -156,6 +156,8 @@ export function Instructions(props: { dispatch: Dispatch, page: number }): JSX.E
` or / | Flip orientation of dragged tile group |
space | Draw Tile |
mouse wheel | Zoom in/out |
+ right mouse button | Pan |
+ right mouse button in hand | Shuffle |
(starting from tile) Alt drag | Swap tiles |
Shift drag | Add to selection |
Ctrl drag | Subtract from selection |
diff --git a/src/ui/render.ts b/src/ui/render.ts
index b98ee5a..e0cf96e 100644
--- a/src/ui/render.ts
+++ b/src/ui/render.ts
@@ -20,7 +20,7 @@ import { drawAnimation } from './drawAnimation';
import { drawBonus } from './drawBonus';
import { CanvasInfo } from './use-canvas';
import { cell_in_canvas, drawBubble, pan_canvas_from_world_of_state } from './view-helpers';
-import { GLOBAL_BORDER, PANIC_THICK, canvas_bds_in_canvas, canvas_from_hand, canvas_from_toolbar, effective_toolbar_bds_in_canvas, getWidgetPoint, hand_bds_in_canvas, inner_hand_bds_in_canvas, panic_bds_in_canvas, pause_button_bds_in_canvas, score_bds_in_canvas, shuffle_button_bds_in_canvas, spacer1_bds_in_canvas, spacer2_bds_in_canvas, toolbar_bds_in_canvas, world_bds_in_canvas } from './widget-helpers';
+import { GLOBAL_BORDER, PANIC_THICK, canvas_bds_in_canvas, canvas_from_hand, canvas_from_toolbar, effective_toolbar_bds_in_canvas, getWidgetPoint, hand_bds_in_canvas, inner_hand_bds_in_canvas, panic_bds_in_canvas, pause_button_bds_in_canvas, score_bds_in_canvas, spacer1_bds_in_canvas, spacer2_bds_in_canvas, toolbar_bds_in_canvas, world_bds_in_canvas } from './widget-helpers';
const INTERFACE_RADIUS = 2 * GLOBAL_BORDER;
const PANIC_RADIUS = Math.min(INTERFACE_RADIUS, PANIC_THICK / 2);
@@ -339,14 +339,6 @@ export function rawPaint(ci: CanvasInfo, state: GameState, glEnabled: boolean) {
}
}
- function drawShuffleButton() {
- d.textAlign = 'center';
- d.textBaseline = 'middle';
- if (cs.slowState.winState.t != 'lost') {
- fillText(d, '🔀', midpointOfRect(shuffle_button_bds_in_canvas), 'white', '36px sans-serif');
- }
- }
-
function drawHand(illegalDrag: boolean) {
// const handBackgroundColor = illegalDrag ? backgroundRed : backgroundGray;
// fillRect(d, hand_bds_in_canvas, handBackgroundColor);
@@ -498,7 +490,6 @@ export function rawPaint(ci: CanvasInfo, state: GameState, glEnabled: boolean) {
fillText(d, 'YOU LOST', mp, 'rgba(128,0,0,1)', '96px serif');
}
else {
- drawShuffleButton();
drawAnimations(now_in_game(cs.game_from_clock), glEnabled);
}
if (cs.slowState.winState.t == 'won') {
diff --git a/src/ui/widget-helpers.ts b/src/ui/widget-helpers.ts
index efe652e..ec387c7 100644
--- a/src/ui/widget-helpers.ts
+++ b/src/ui/widget-helpers.ts
@@ -17,8 +17,6 @@ const SPACER_WIDTH = 5;
export const canvas_bds_in_canvas: Rect = { p: { x: 0, y: 0 }, sz: { x: 1024, y: 768 } };
export const DEFAULT_TILE_SCALE = 48;
-const SHUFFLE_WIDTH = DEFAULT_TILE_SCALE + 2 * HAND_VERT_PADDING + 2 * HAND_VERT_MARGIN + PANIC_THICK + GLOBAL_BORDER;
-
const pauseButton = packVert(
nameRect('pause', fixedRect(vdiag(DEFAULT_TILE_SCALE + 2 * HAND_VERT_PADDING - HAND_VERT_MARGIN))),
fixedRect({ x: 0, y: HAND_VERT_MARGIN }),
@@ -104,14 +102,6 @@ export function effective_toolbar_bds_in_canvas(state: CoreState): Rect {
export const pause_button_bds_in_canvas: Rect = rects['pause'];
-export const shuffle_button_bds_in_canvas: Rect = {
- p: {
- x: canvas_bds_in_canvas.sz.x - SHUFFLE_WIDTH,
- y: canvas_bds_in_canvas.sz.y - 1.9 * BAR_WIDTH - 10,
- },
- sz: { x: SHUFFLE_WIDTH, y: BAR_WIDTH }
-};
-
export function canvas_from_hand(): SE2 {
return {
scale: { x: DEFAULT_TILE_SCALE, y: DEFAULT_TILE_SCALE },
@@ -150,7 +140,6 @@ export type WidgetPoint =
| DragWidgetPoint
| { t: 'toolbar', p_in_local: Point, p_in_canvas: Point, local_from_canvas: SE2, tool: Tool }
| { t: 'pauseButton', p_in_canvas: Point }
- | { t: 'shuffleButton', p_in_canvas: Point }
| { t: 'nowhere', p_in_canvas: Point } // outside canvas bounds
;
@@ -161,12 +150,6 @@ export function getWidgetPoint(state: CoreState, p_in_canvas: Point): WidgetPoin
p_in_canvas,
};
}
- if (pointInRect(p_in_canvas, shuffle_button_bds_in_canvas) && state.slowState.winState.t != 'lost') {
- return {
- t: 'shuffleButton',
- p_in_canvas,
- };
- }
else if (pointInRect(p_in_canvas, effective_toolbar_bds_in_canvas(state))) {
const toolbar_from_canvas = inverse(canvas_from_toolbar());
const p_in_local = apply(toolbar_from_canvas, p_in_canvas);