mirror of
https://github.com/AndorsTrailRelease/andors-trail.git
synced 2026-01-06 19:45:42 +01:00
62 lines
1.9 KiB
JavaScript
62 lines
1.9 KiB
JavaScript
var ATEditor = (function(ATEditor, model, _) {
|
|
|
|
function DialogueShowTreeController($scope, $routeParams) {
|
|
$scope.datasource = model.dialogue;
|
|
$scope.rootPhrase = $scope.datasource.findById($routeParams.id);
|
|
$scope.onclick = function(node) {
|
|
ATEditor.navigationFunctions.editObjId(model.dialogue, node.id);
|
|
};
|
|
|
|
function buildSingleTreeNode(type, id, text, children) {
|
|
return {
|
|
id: id || ""
|
|
,text: text || ""
|
|
,type: type
|
|
,children: children || []
|
|
};
|
|
}
|
|
|
|
function singleChild(n) { return n ? [n] : []; }
|
|
|
|
function buildPhraseTree(phrase, visitedPhrases) {
|
|
if (!phrase) { return; }
|
|
if (visitedPhrases[phrase.id]) {
|
|
return buildSingleTreeNode("loop", phrase.id, phrase.message);
|
|
}
|
|
visitedPhrases[phrase.id] = true;
|
|
|
|
var children;
|
|
if (phrase.hasOnlyNextReply) {
|
|
var nextNode = model.dialogue.findById(phrase.nextPhraseID);
|
|
children = singleChild(buildPhraseTree(nextNode, visitedPhrases));
|
|
} else {
|
|
children = _.map(phrase.replies, function(reply) {
|
|
var replyChild;
|
|
if (reply.nextPhraseID.length == 1) {
|
|
replyChild = buildSingleTreeNode("action");
|
|
} else {
|
|
var nextNode = model.dialogue.findById(reply.nextPhraseID);
|
|
replyChild = buildPhraseTree(nextNode, visitedPhrases);
|
|
}
|
|
|
|
if (!reply.text) {
|
|
return replyChild || buildSingleTreeNode("reply", phrase.id, "(no text)");
|
|
}
|
|
|
|
return buildSingleTreeNode("reply", phrase.id, reply.text, singleChild(replyChild));
|
|
});
|
|
}
|
|
|
|
var phraseText = phrase.message || "(conditional evaluation)";
|
|
return buildSingleTreeNode("phrase", phrase.id, phraseText, children);
|
|
}
|
|
|
|
$scope.node = buildPhraseTree($scope.rootPhrase, {});
|
|
};
|
|
|
|
ATEditor.controllers = ATEditor.controllers || {};
|
|
ATEditor.controllers.DialogueShowTreeController = DialogueShowTreeController;
|
|
|
|
return ATEditor;
|
|
})(ATEditor, ATEditor.model, _);
|