Release: Quarkus backend, Keycloak login, game history, clock, bot, tutorial and rematch #3

Merged
jhalitaksoy merged 88 commits from develop into main 2026-10-17 03:23:38 +03:00
2 changed files with 4 additions and 2 deletions
Showing only changes of commit 57fa54e77d - Show all commits

View File

@ -114,6 +114,8 @@ which helps to check what the server holds.
(`theme/themes.ts`) are passed to core's `ThemeManager`, which the mobile app uses with its own default themes. (`theme/themes.ts`) are passed to core's `ThemeManager`, which the mobile app uses with its own default themes.
- Styles that need container queries (`@container`, `cqw`), such as the board's, are plain `.css` files imported by the - Styles that need container queries (`@container`, `cqw`), such as the board's, are plain `.css` files imported by the
component; styled-jsx 5.0 does not handle them. `BoardView` fills its container and stands upright below 600 px. component; styled-jsx 5.0 does not handle them. `BoardView` fills its container and stands upright below 600 px.
- `PitAnimator` sends the same `BoardViewModel` object, changed, at every animation step. Put a new object (or a new
id in its own state, as `GamePage` does) into React state, or React skips the update and only the first step shows.
- The rules, lessons and move explanations live in `packages/core/src/tutorial`; their boards after a move come from - The rules, lessons and move explanations live in `packages/core/src/tutorial`; their boards after a move come from
the engine (`getMoveOutcome`). After a rule change, run core's tests: they fail if a lesson no longer works, and the engine (`getMoveOutcome`). After a rule change, run core's tests: they fail if a lesson no longer works, and
the rule texts in `en.ts`/`tr.ts` may need updating. the rule texts in `en.ts`/`tr.ts` may need updating.

View File

@ -63,9 +63,9 @@ const LessonPage: FunctionComponent<{ context: Context, theme: Theme }> = ({ con
useEffect(() => { useEffect(() => {
hideTutorialBanner(context.storage); hideTutorialBanner(context.storage);
// The animator sends the same model, changed, at every step; a new one makes React draw each step.
animator.current = new PitAnimator(context.themeManager, (model) => { animator.current = new PitAnimator(context.themeManager, (model) => {
model.id = v4(); setBoardViewModel(new BoardViewModel(v4(), model.pits));
setBoardViewModel(model);
}); });
start(); start();
return () => { return () => {