Skip to content

Commit 5896f9b

Browse files
committed
Merge branch 'language-selector' into develop-1.13
2 parents 04f7187 + d2406ae commit 5896f9b

31 files changed

+549
-376
lines changed

public/index.html

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
<!DOCTYPE html>
2-
<html lang="en">
2+
<html>
33
<head>
44
<meta charset="utf-8" />
55
<meta name="viewport" content="width=device-width, initial-scale=1" />

src/ActionsHandler.js

Lines changed: 13 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -2,9 +2,9 @@
22

33
import { App } from './App';
44
import type { AppState } from './App';
5-
import CharacterMessageBuilder from './CharacterMessageBuilder';
65
import type { CharacterUpdate } from './CharacterState';
7-
import type { IntlShape } from 'react-intl';
6+
import EndOfSceneMessage from './EndOfSceneMessage';
7+
import HitWallMessage from './HitWallMessage';
88
import SceneDimensions from './SceneDimensions';
99
import type { AudioManager, MovementBlockName } from './types';
1010

@@ -18,13 +18,11 @@ export default class ActionsHandler {
1818
app: App;
1919
audioManager: AudioManager;
2020
sceneDimensions: SceneDimensions;
21-
characterMessageBuilder: CharacterMessageBuilder;
2221

23-
constructor(app: App, audioManager: AudioManager, sceneDimensions: SceneDimensions, intl: IntlShape) {
22+
constructor(app: App, audioManager: AudioManager, sceneDimensions: SceneDimensions) {
2423
this.app = app;
2524
this.audioManager = audioManager;
2625
this.sceneDimensions = sceneDimensions;
27-
this.characterMessageBuilder = new CharacterMessageBuilder(sceneDimensions, intl);
2826
}
2927

3028
doAction(action: MovementBlockName, stepTimeMs: number): Promise<ActionResult> {
@@ -138,9 +136,16 @@ export default class ActionsHandler {
138136
};
139137

140138
if (characterUpdate.event != null) {
141-
const message = this.characterMessageBuilder.buildMessage(characterUpdate.event);
142-
if (message != null) {
143-
stateUpdate.message = message;
139+
switch(characterUpdate.event.type) {
140+
case 'endOfScene':
141+
stateUpdate.message = new EndOfSceneMessage();
142+
break;
143+
case 'hitWall':
144+
stateUpdate.message = new HitWallMessage(characterUpdate.event.x, characterUpdate.event.y, this.sceneDimensions);
145+
break;
146+
default:
147+
// Unhandled event type
148+
break;
144149
}
145150
}
146151

src/ActionsHandler.test.js

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@ function createActionsHandler() {
3434
AudioManagerImpl.mockClear();
3535

3636
// $FlowFixMe: Jest mock API
37-
const actionsHandler = new ActionsHandler(new App(), new AudioManagerImpl(), sceneDimensions, intl);
37+
const actionsHandler = new ActionsHandler(new App(), new AudioManagerImpl(), sceneDimensions);
3838

3939
// $FlowFixMe: Jest mock API
4040
const appMock = App.mock.instances[0];
@@ -267,7 +267,11 @@ test.each(([
267267
expect(newState.characterState.xPos).toBe(testData.expectedX);
268268
expect(newState.characterState.yPos).toBe(testData.expectedY);
269269
expect(newState.characterState.direction).toBe(testData.expectedDirection);
270-
expect(newState.message).toBe(testData.expectedMessage);
270+
if (testData.expectedMessage != null) {
271+
expect(newState.message.getMessage(intl)).toBe(testData.expectedMessage);
272+
} else {
273+
expect(newState.message).toBe(testData.expectedMessage);
274+
}
271275
});
272276

273277
actionsHandler.doAction(testData.action, 0).then((result) => {

src/AnnouncementBuilder.js

Lines changed: 16 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -9,65 +9,59 @@ type AnnouncementData = {|
99
|};
1010

1111
export default class AnnouncementBuilder {
12-
intl: IntlShape;
13-
14-
constructor(intl: IntlShape) {
15-
this.intl = intl;
16-
}
17-
18-
buildSelectActionAnnouncement(action: string): AnnouncementData {
12+
buildSelectActionAnnouncement(action: string, intl: IntlShape): AnnouncementData {
1913
let actionType = null;
2014
if (action === 'loop') {
21-
actionType = this.intl.formatMessage({
15+
actionType = intl.formatMessage({
2216
id: 'Announcement.control'
2317
});
2418
} else {
25-
actionType = this.intl.formatMessage({
19+
actionType = intl.formatMessage({
2620
id: 'Announcement.movement'
2721
});
2822
}
2923
return {
3024
messageIdSuffix: 'actionSelected',
3125
values: {
3226
actionType,
33-
actionName: this.intl.formatMessage({
27+
actionName: intl.formatMessage({
3428
id: `Announcement.${action}`
3529
}),
3630
}
3731
};
3832
}
3933

40-
buildAddStepAnnouncement(action: string): AnnouncementData {
34+
buildAddStepAnnouncement(action: string, intl: IntlShape): AnnouncementData {
4135
let actionType = null;
4236
if (action === 'loop') {
43-
actionType = this.intl.formatMessage({
37+
actionType = intl.formatMessage({
4438
id: 'Announcement.control'
4539
});
4640
} else {
47-
actionType = this.intl.formatMessage({
41+
actionType = intl.formatMessage({
4842
id: 'Announcement.movement'
4943
});
5044
}
5145
return {
5246
messageIdSuffix: 'add',
5347
values: {
5448
actionType,
55-
actionName: this.intl.formatMessage({
49+
actionName: intl.formatMessage({
5650
id: `Announcement.${action}`
5751
}),
5852
}
5953
};
6054
}
6155

62-
buildDeleteStepAnnouncement(programBlock: ProgramBlock): AnnouncementData {
56+
buildDeleteStepAnnouncement(programBlock: ProgramBlock, intl: IntlShape): AnnouncementData {
6357
if (programBlock.block === 'startLoop' || programBlock.block === 'endLoop') {
6458
return {
6559
messageIdSuffix: 'delete',
6660
values: {
67-
actionType: this.intl.formatMessage({
61+
actionType: intl.formatMessage({
6862
id: "Announcement.control"
6963
}),
70-
actionName: this.intl.formatMessage(
64+
actionName: intl.formatMessage(
7165
{
7266
id: `Announcement.${programBlock.block}`
7367
},
@@ -81,10 +75,10 @@ export default class AnnouncementBuilder {
8175
return {
8276
messageIdSuffix: 'delete',
8377
values: {
84-
actionType: this.intl.formatMessage({
78+
actionType: intl.formatMessage({
8579
id: "Announcement.movement"
8680
}),
87-
actionName: this.intl.formatMessage(
81+
actionName: intl.formatMessage(
8882
{
8983
id: `Announcement.${programBlock.block}`
9084
}
@@ -95,15 +89,15 @@ export default class AnnouncementBuilder {
9589
}
9690

9791
buildReplaceStepAnnouncement(programBlock: ProgramBlock,
98-
selectedAction: string): AnnouncementData {
92+
selectedAction: string, intl: IntlShape): AnnouncementData {
9993

10094
return {
10195
messageIdSuffix: 'replace',
10296
values: {
103-
oldActionName: this.intl.formatMessage({
97+
oldActionName: intl.formatMessage({
10498
id: `Announcement.${programBlock.block}`
10599
}),
106-
newActionName: this.intl.formatMessage({
100+
newActionName: intl.formatMessage({
107101
id: `Announcement.${selectedAction}`
108102
})
109103
}

src/AnnouncementBuilder.test.js

Lines changed: 14 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -10,24 +10,20 @@ const intl = createIntl({
1010
messages: messages.en
1111
});
1212

13-
function createAnnouncementBuilder() {
14-
return new AnnouncementBuilder(intl);
15-
}
16-
1713
test('Test buildSelectActionAnnouncement()', () => {
1814
expect.assertions(2);
1915

20-
const announcementBuilder = createAnnouncementBuilder();
16+
const announcementBuilder = new AnnouncementBuilder();
2117

22-
expect(announcementBuilder.buildSelectActionAnnouncement('loop')).toStrictEqual({
18+
expect(announcementBuilder.buildSelectActionAnnouncement('loop', intl)).toStrictEqual({
2319
messageIdSuffix: 'actionSelected',
2420
values: {
2521
actionType: 'control',
2622
actionName: 'loop'
2723
}
2824
});
2925

30-
expect(announcementBuilder.buildSelectActionAnnouncement('forward1')).toStrictEqual({
26+
expect(announcementBuilder.buildSelectActionAnnouncement('forward1', intl)).toStrictEqual({
3127
messageIdSuffix: 'actionSelected',
3228
values: {
3329
actionType: 'movement',
@@ -39,17 +35,17 @@ test('Test buildSelectActionAnnouncement()', () => {
3935
test('Test buildAddStepAnnouncement()', () => {
4036
expect.assertions(2);
4137

42-
const announcementBuilder = createAnnouncementBuilder();
38+
const announcementBuilder = new AnnouncementBuilder();
4339

44-
expect(announcementBuilder.buildAddStepAnnouncement('loop')).toStrictEqual({
40+
expect(announcementBuilder.buildAddStepAnnouncement('loop', intl)).toStrictEqual({
4541
messageIdSuffix: 'add',
4642
values: {
4743
actionType: 'control',
4844
actionName: 'loop'
4945
}
5046
});
5147

52-
expect(announcementBuilder.buildAddStepAnnouncement('forward1')).toStrictEqual({
48+
expect(announcementBuilder.buildAddStepAnnouncement('forward1', intl)).toStrictEqual({
5349
messageIdSuffix: 'add',
5450
values: {
5551
actionType: 'movement',
@@ -60,15 +56,15 @@ test('Test buildAddStepAnnouncement()', () => {
6056

6157
describe('Test buildDeleteStepAnnouncement()', () => {
6258
test('startLoop', () => {
63-
const announcementBuilder = createAnnouncementBuilder();
59+
const announcementBuilder = new AnnouncementBuilder();
6460

6561
const startLoopBlock = {
6662
block: 'startLoop',
6763
label: 'A',
6864
iterations: 1
6965
};
7066

71-
expect(announcementBuilder.buildDeleteStepAnnouncement(startLoopBlock)).toStrictEqual({
67+
expect(announcementBuilder.buildDeleteStepAnnouncement(startLoopBlock, intl)).toStrictEqual({
7268
messageIdSuffix: 'delete',
7369
values: {
7470
actionType: 'control',
@@ -78,14 +74,14 @@ describe('Test buildDeleteStepAnnouncement()', () => {
7874
});
7975

8076
test('endLoop', () => {
81-
const announcementBuilder = createAnnouncementBuilder();
77+
const announcementBuilder = new AnnouncementBuilder();
8278

8379
const endLoopBlock = {
8480
block: 'endLoop',
8581
label: 'A'
8682
};
8783

88-
expect(announcementBuilder.buildDeleteStepAnnouncement(endLoopBlock)).toStrictEqual({
84+
expect(announcementBuilder.buildDeleteStepAnnouncement(endLoopBlock, intl)).toStrictEqual({
8985
messageIdSuffix: 'delete',
9086
values: {
9187
actionType: 'control',
@@ -95,13 +91,13 @@ describe('Test buildDeleteStepAnnouncement()', () => {
9591
});
9692

9793
test('forward1', () => {
98-
const announcementBuilder = createAnnouncementBuilder();
94+
const announcementBuilder = new AnnouncementBuilder();
9995

10096
const forwardBlock = {
10197
block: 'forward1'
10298
};
10399

104-
expect(announcementBuilder.buildDeleteStepAnnouncement(forwardBlock)).toStrictEqual({
100+
expect(announcementBuilder.buildDeleteStepAnnouncement(forwardBlock, intl)).toStrictEqual({
105101
messageIdSuffix: 'delete',
106102
values: {
107103
actionType: 'movement',
@@ -114,13 +110,13 @@ describe('Test buildDeleteStepAnnouncement()', () => {
114110
test('Test buildReplaceStepAnnouncement()', () => {
115111
expect.assertions(1);
116112

117-
const announcementBuilder = createAnnouncementBuilder();
113+
const announcementBuilder = new AnnouncementBuilder();
118114

119115
const forwardBlock = {
120116
block: 'forward1'
121117
};
122118

123-
expect(announcementBuilder.buildReplaceStepAnnouncement(forwardBlock, 'right45')).toStrictEqual({
119+
expect(announcementBuilder.buildReplaceStepAnnouncement(forwardBlock, 'right45', intl)).toStrictEqual({
124120
messageIdSuffix: 'replace',
125121
values: {
126122
oldActionName: 'forward 1 square',

0 commit comments

Comments
 (0)