File tree Expand file tree Collapse file tree 3 files changed +43
-15
lines changed
newIDE/app/src/EventsSheet/EventsTree Expand file tree Collapse file tree 3 files changed +43
-15
lines changed Original file line number Diff line number Diff 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
Original file line number Diff line number Diff line change 11// @flow
22import { mapFor , mapVector } from '../../../Utils/MapFor' ;
3- import { isElseEventValid } from '../helpers' ;
3+ import { isElseEventValid , getPreviousExecutableEventIndex } from '../helpers' ;
44
55const 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' ) ;
Original file line number Diff line number Diff 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} ;
You can’t perform that action at this time.
0 commit comments