Ending messages can be configured to jump to next chapter instead of return message

This commit is contained in:
Ruben van de Ven 2019-08-23 12:37:01 +02:00
parent f135520c87
commit 6ca3a79acd
3 changed files with 31 additions and 4 deletions

View File

@ -203,7 +203,8 @@ Types of conditions:
## Diversions ## Diversions
TODO - ReplyContains: Match the contents of speech using regex.
+ works only if the current message has one, and only one, direction.
times occured/only on n-th instance: determines the order of diversions of the same type (for Timeout and no_response). Starting at 1, as a diversion with value of 0 can occur always times occured/only on n-th instance: determines the order of diversions of the same type (for Timeout and no_response). Starting at 1, as a diversion with value of 0 can occur always

View File

@ -74,6 +74,9 @@ class Message(object):
self.uuid = None # Have a unique id each time the message is played back. self.uuid = None # Have a unique id each time the message is played back.
self.color = None self.color = None
self.lightChange = None self.lightChange = None
# Used by diversions, autogenerated directions should link to next chapter mark instead of the given msgTo
self.generatedDirectionsJumpToChapter = False
def __getstate__(self): def __getstate__(self):
# Copy the object's state from self.__dict__ which contains # Copy the object's state from self.__dict__ which contains
@ -110,6 +113,7 @@ class Message(object):
# prevent clipping on some Lyrebird tracks # prevent clipping on some Lyrebird tracks
msg.params['vol'] = .8 msg.params['vol'] = .8
msg.lightChange = data['light'] if 'light' in data else None msg.lightChange = data['light'] if 'light' in data else None
msg.generatedDirectionsJumpToChapter = bool(data['generatedDirectionsJumpToChapter']) if 'generatedDirectionsJumpToChapter' in data else False
msg.params['vol'] = float(msg.params['vol']) msg.params['vol'] = float(msg.params['vol'])
@ -765,8 +769,12 @@ class Diversion(object):
msg = story.get(msgId) msg = story.get(msgId)
if not msg: if not msg:
continue continue
usedReturnMessage = returnMsg
if msg.generatedDirectionsJumpToChapter:
usedReturnMessage = story.getNextChapterForMsg(returnMsg, canIncludeSelf=True)
direction = Direction(f"{self.id}-{i}-{self.counter}", msg, returnMsg) direction = Direction(f"{self.id}-{i}-{self.counter}", msg, usedReturnMessage)
data = json.loads(f""" data = json.loads(f"""
{{ {{
"@id": "{self.id}-ct{i}-{self.counter}", "@id": "{self.id}-ct{i}-{self.counter}",
@ -802,7 +810,7 @@ class Diversion(object):
story.add(condition2) story.add(condition2)
direction.isDiversionReturn = True # will clear the currentDiversion on story direction.isDiversionReturn = True # will clear the currentDiversion on story
story.logger.info(f"Created direction: {direction.id} ({msg.id} -> {returnMsg.id}) {condition.id} with timeout {finalTimeoutDuration}s") story.logger.info(f"Created direction: {direction.id} ({msg.id} -> {usedReturnMessage.id}) {condition.id} with timeout {finalTimeoutDuration}s")
story.add(condition) story.add(condition)
story.add(direction) story.add(direction)

View File

@ -1229,6 +1229,18 @@ class Graph {
chapterAttributes['checked'] = 'checked'; chapterAttributes['checked'] = 'checked';
} }
let generatedDirectionsJumpToChapterAttributes = {
'name': msg['@id'] + '-generatedDirectionsJumpToChapter',
// 'readonly': 'readonly',
'type': 'checkbox',
'on': {
'change': this.getEditEventListener()
}
}
if ( msg.hasOwnProperty('generatedDirectionsJumpToChapter') && msg['generatedDirectionsJumpToChapter'] == true ) {
generatedDirectionsJumpToChapterAttributes['checked'] = 'checked';
}
let params = {}; let params = {};
if(msg.hasOwnProperty('params')) { if(msg.hasOwnProperty('params')) {
params = msg['params']; params = msg['params'];
@ -1443,7 +1455,13 @@ class Graph {
}, },
lightOptions lightOptions
) )
) ),
crel( 'label',
crel( 'span', {
'title': "Only for diversions: when this message is the final message of a diversion, it jumps back to the next chapter instead of the given message (overrules settings of diversion on a per message basis)"
},'Generated directions jump to next chapter' ),
crel( 'input', generatedDirectionsJumpToChapterAttributes )
),
); );
msgEl.appendChild( msgInfoEl ); msgEl.appendChild( msgInfoEl );