Skip to content

Commit 8f996fc

Browse files
committed
Improve support of Else for AI
Don't show in changelog
1 parent 63dede5 commit 8f996fc

File tree

3 files changed

+43
-15
lines changed

3 files changed

+43
-15
lines changed

newIDE/app/src/EventsSheet/EventsTree/TextRenderer/TextRenderer.spec.js

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -433,23 +433,23 @@ describe('EventsTree/TextRenderer', () => {
433433
Actions:
434434
- Change the number of the animation of MySpriteObject: = 1
435435
</event-0.7>
436-
<event-0.8>
436+
<event-0.8 else-of=\\"event-0.7\\">
437437
Else
438438
439439
Conditions:
440440
(no conditions)
441441
Actions:
442442
- Show GroupOfObjects
443443
</event-0.8>
444-
<event-0.9>
444+
<event-0.9 else-of=\\"event-0.8\\">
445445
Else if
446446
447447
Conditions:
448448
- GroupOfSpriteObjectsWithBehaviors is falling
449449
Actions:
450450
- Change the number of the animation of MySpriteObject: = 1
451451
</event-0.9>
452-
<event-0.10>
452+
<event-0.10 else-of=\\"event-0.9\\">
453453
Else
454454
- Declare local variable \\"MyElseVar\\" of type \\"number\\" with value \`42\`
455455

newIDE/app/src/EventsSheet/EventsTree/TextRenderer/index.js

Lines changed: 13 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
// @flow
22
import { mapFor, mapVector } from '../../../Utils/MapFor';
3-
import { isElseEventValid } from '../helpers';
3+
import { isElseEventValid, getPreviousExecutableEventIndex } from '../helpers';
44

55
const gd: libGDevelop = global.gd;
66

@@ -351,7 +351,18 @@ export const renderEventsAsText = ({
351351
padding: padding + ' ',
352352
});
353353

354-
return `${padding}<event-${eventPath}>
354+
let elseOfAttribute = '';
355+
if (
356+
event.getType() === 'BuiltinCommonInstructions::Else' &&
357+
isElseEventValid(eventsList, i)
358+
) {
359+
const previousIndex = getPreviousExecutableEventIndex(eventsList, i);
360+
const previousEventPath =
361+
(parentPath ? parentPath + '.' : '') + previousIndex;
362+
elseOfAttribute = ` else-of="event-${previousEventPath}"`;
363+
}
364+
365+
return `${padding}<event-${eventPath}${elseOfAttribute}>
355366
${eventAndSubEventsText}
356367
${padding}</event-${eventPath}>`;
357368
}).join('\n');

newIDE/app/src/EventsSheet/EventsTree/helpers.js

Lines changed: 27 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -109,19 +109,36 @@ export const getNodeAtPath = (
109109
);
110110
};
111111

112-
export const isElseEventValid = (
112+
/**
113+
* Returns the index of the previous non-disabled, executable event
114+
* in the list, or -1 if none is found.
115+
*/
116+
export const getPreviousExecutableEventIndex = (
113117
eventsList: gdEventsList,
114-
elseEventIndex: number
115-
): boolean => {
116-
for (let j = elseEventIndex - 1; j >= 0; j--) {
118+
eventIndex: number
119+
): number => {
120+
const startIndex = Math.min(eventIndex - 1, eventsList.getEventsCount() - 1);
121+
for (let j = startIndex; j >= 0; j--) {
117122
const previousEvent = eventsList.getEventAt(j);
118123
if (!previousEvent.isDisabled() && previousEvent.isExecutable()) {
119-
const previousEventType = previousEvent.getType();
120-
return (
121-
previousEventType === 'BuiltinCommonInstructions::Standard' ||
122-
previousEventType === 'BuiltinCommonInstructions::Else'
123-
);
124+
return j;
124125
}
125126
}
126-
return false;
127+
return -1;
128+
};
129+
130+
export const isElseEventValid = (
131+
eventsList: gdEventsList,
132+
elseEventIndex: number
133+
): boolean => {
134+
const previousIndex = getPreviousExecutableEventIndex(
135+
eventsList,
136+
elseEventIndex
137+
);
138+
if (previousIndex === -1) return false;
139+
const previousEventType = eventsList.getEventAt(previousIndex).getType();
140+
return (
141+
previousEventType === 'BuiltinCommonInstructions::Standard' ||
142+
previousEventType === 'BuiltinCommonInstructions::Else'
143+
);
127144
};

0 commit comments

Comments
 (0)