diff --git a/src/events/debugEvent.js b/src/events/debugEvent.js index 044296df3cd22972560e1af6f1ffa9e53945eadf..d8c3dce979a1202ce3fb8a9013a95750d02aee3d 100644 --- a/src/events/debugEvent.js +++ b/src/events/debugEvent.js @@ -5,6 +5,7 @@ App.Events.debugEvent = function(eventName) { const frag = document.createDocumentFragment(); /** @type {App.Events.BaseEvent} */ const event = eval(`new ${eventName}`); + let displayOnlyValid = false; function makeCastList() { const cast = document.createDocumentFragment(); @@ -14,7 +15,6 @@ App.Events.debugEvent = function(eventName) { if (!event.actors[i]) { missingCast = true; } - App.UI.DOM.appendNewElement("div", cast, `Actor ${i}: ${event.actors[i] ? SlaveFullName(getSlave(event.actors[i])) : 'not yet cast'}`); } if (!missingCast) { App.UI.DOM.appendNewElement("div", cast, App.UI.DOM.link('Run event now', (evt) => { V.event = evt; }, [event], "JS Random Event")); @@ -27,12 +27,13 @@ App.Events.debugEvent = function(eventName) { function makeActorList() { const actors = document.createDocumentFragment(); const actorReqs = event.actorPrerequisites(); + if (actorReqs.length === 1) { actors.append(singleActorList(0)); } else { const tabBar = new App.UI.Tabs.TabBar("Options"); for (let i = 0; i < actorReqs.length; ++i) { - tabBar.addTab(`Actor ${i}`, `actor${i}`, singleActorList(i)); + tabBar.addTab(`Actor ${i}: ${event.actors[i] ? SlaveFullName(getSlave(event.actors[i])) : 'not yet cast'}`, `actor${i}`, singleActorList(i)); } actors.append(tabBar.render()); } @@ -41,18 +42,40 @@ App.Events.debugEvent = function(eventName) { function singleActorList(i) { let tab = App.UI.DOM.makeElement("div"); + if (!displayOnlyValid) { + App.UI.DOM.appendNewElement("div", tab, App.UI.DOM.link( + "Show only valid slaves", + () => { + displayOnlyValid = true; + $('#actorList').empty().append(makeActorList()); + } + )); + } else { + App.UI.DOM.appendNewElement("div", tab, App.UI.DOM.link( + "Show all slaves", + () => { + displayOnlyValid = false; + $('#actorList').empty().append(makeActorList()); + } + )); + } for (const slave of V.slaves) { - let slaveDiv = App.UI.DOM.appendNewElement("div", tab, App.UI.DOM.makeElement("span", SlaveFullName(slave), "slave-name")); + let slaveDiv = App.UI.DOM.makeElement("div", App.UI.DOM.makeElement("span", SlaveFullName(slave), "slave-name")); let slaveFails = false; for (const p of actorReqs[i]) { let passed = testPredicate(slaveDiv, p, slave); slaveFails = slaveFails || !passed; App.UI.DOM.appendNewElement("div", slaveDiv, p.name || p.toString(), [passed ? "green" : "red", "indent"]); } - if (!slaveFails) { + if (event.actors.includes(slave.ID)) { + App.UI.DOM.appendNewElement("div", slaveDiv, App.UI.DOM.link("Remove this slave", removeCasted, [slave]), "indent"); + } else if (!slaveFails) { App.UI.DOM.appendNewElement("div", slaveDiv, App.UI.DOM.link("Choose this slave", castSlave, [slave, i]), "indent"); + } else if (displayOnlyValid) { // Filter out slaves that are not valid + continue; } App.UI.DOM.appendNewElement("hr", tab); + tab.append(slaveDiv); } return tab; } @@ -64,6 +87,12 @@ App.Events.debugEvent = function(eventName) { $('#actorList').empty().append(makeActorList()); } + function removeCasted(slave) { + event.actors.delete(slave.ID); + $('#castList').empty().append(makeCastList()); + $('#actorList').empty().append(makeActorList()); + } + function testPredicate(outDiv, p, ...args) { let passed = false; try {