diff --git a/src/interaction/main/walkPast.js b/src/interaction/main/walkPast.js index 3530725741f8a5765677dc1ff51345e16efd2a4e..33876d8ad0612ac3794a939259b443a8d58ced06 100644 --- a/src/interaction/main/walkPast.js +++ b/src/interaction/main/walkPast.js @@ -22,7 +22,7 @@ globalThis.walkPast = (function() { /** generate a walkPast vignette * @param {App.Entity.SlaveState} activeSlave * @param {string} [fixedTarget] - if set, force target to this value - * @returns {string} - vignette text (SC markup) + * @returns {DocumentFragment} - vignette */ function walkPast(activeSlave, fixedTarget) { output = ""; @@ -121,40 +121,57 @@ globalThis.walkPast = (function() { him, his, He } = getPronouns(activeSlave); + let links = []; + const executeWalkpast = (passage) => { + V.activeSlave = activeSlave; // TODO: remove me once all the F* passages don't need activeSlave anymore + $(`#walkpast-${activeSlave.ID}`).empty().append(App.UI.DOM.renderPassage(passage)); + }; if (activeSlave.fuckdoll === 0) { if (target === "FButt" && activeSlave.chastityAnus) { output += ` If you wish to have anal intercourse with ${him} you must order ${him} to remove ${his} chastity belt.`; - output += ` <span id="walkpast"><<link "Grope ${his} rear instead">><<replace "#walk">><<include "FondleButt">><</replace>><</link>></span>`; + links.push(App.UI.DOM.link(`Grope ${his} rear instead`, executeWalkpast, "FondleButt")); } else if (target === "FVagina" && activeSlave.chastityVagina) { output += ` If you wish to have vanilla intercourse with ${him} you must order ${him} to remove ${his} chastity belt.`; } else if (flag > 100) { - const setter = (flag === 110) ? `<<set $partner="${V.partner}", $relation=${V.relation}>>` : `<<set $partner="${V.partner}">>`; - output += ` <span id="walkpast"><<link "Summon them both">>${setter}<<replace "#walk">><<include "${target}">><</replace>><</link>></span>`; + links.push(App.UI.DOM.link(`Summon them both`, (partner, relation, target) => { + V.partner = partner; + V.relation = relation; // TODO: remove these once FRelation/FRival don't need them anymore + executeWalkpast(target); + }, [V.partner, flag === 110 ? V.relation : null, target])); } else if (activeSlave.assignment === Job.CONFINEMENT) { - output += ` <span id="walkpast"><<link "Have ${him} brought out of ${his} cell">><<replace "#walk">><<include "${target}">><</replace>><</link>></span>`; + links.push(App.UI.DOM.link(`Have ${him} brought out of ${his} cell`, executeWalkpast, target)); } else if (activeSlave.assignment === Job.DAIRY && V.dairyRestraintsSetting > 1) { output += ` ${He} is strapped into a milking machine and cannot leave ${V.dairyName}.`; } else { if ([Job.ARCADE, Job.CELLBLOCK, Job.ATTENDANT, Job.DJ, Job.MADAM, Job.MILKMAID, Job.TEACHER, Job.STEWARD, Job.WARDEN, Job.AGENT, Job.CONCUBINE, Job.AGENTPARTNER, Job.HEADGIRLSUITE, Job.CLUB, Job.MASTERSUITE, Job.CONFINEMENT, Job.GLORYHOLE, Job.QUARTER, Job.BROTHEL, Job.DAIRY].includes(activeSlave.assignment)) { - output += ` <span id="walkpast"><<link "Have ${him} take a break and come up">><<replace "#walk">><<include "${target}">><</replace>><</link>></span>`; + links.push(App.UI.DOM.link(`Have ${him} take a break and come up`, executeWalkpast, target)); } else { - output += ` <span id="walkpast"><<link "Call ${him} over">><<replace "#walk">><<include "${target}">><</replace>><</link>></span>`; + links.push(App.UI.DOM.link(`Call ${him} over`, executeWalkpast, target)); } } } else { switch (target) { case "FVagina": - output += ` <span id="walkpast"><<link "Fuck ${him}">><<replace "#walk">><<include "FFuckdollVaginal">><</replace>><</link>></span>`; + links.push(App.UI.DOM.link(`Fuck ${him}`, executeWalkpast, "FFuckdollVaginal")); break; case "FButt": case "FAnus": - output += ` <span id="walkpast"><<link "Fuck ${him}">><<replace "#walk">><<include "FFuckdollAnal">><</replace>><</link>></span>`; + links.push(App.UI.DOM.link(`Fuck ${him}`, executeWalkpast, "FFuckdollAnal")); break; default: - output += ` <span id="walkpast"><<link "Fuck ${him}">><<replace "#walk">><<include "FFuckdollOral">><</replace>><</link>></span>`; + links.push(App.UI.DOM.link(`Fuck ${him}`, executeWalkpast, "FFuckdollOral")); } } - return output; + + if (V.debugMode && passage() !== "Walk Past List") { + links.push(App.UI.DOM.passageLink("Show all walk past scenes", "Walk Past List")); + } + + const frag = document.createDocumentFragment(); + $(frag).append(output); + const span = App.UI.DOM.appendNewElement("span", frag, App.UI.DOM.generateLinksStrip(links)); + span.id = `walkpast-${activeSlave.ID}`; + return frag; } function primeSlave(activeSlave, seed) { @@ -9201,11 +9218,10 @@ globalThis.walkPast = (function() { /** generate the specified walkPast vignette for all slaves (for debugging purposes) * @param {string} fixedTarget - * @returns {string} + * @returns {DocumentFragment} */ globalThis.walkPastAll = function(fixedTarget) { - return V.slaves.map((s) => { - const wp = walkPast(s, fixedTarget); - return wp ? `<p>${wp}</p>` : ``; - }).join(''); + return App.UI.DOM.combineNodes(...V.slaves.map( + (s) => App.UI.DOM.makeElement("div", walkPast(s, fixedTarget)) + )); }; diff --git a/src/js/main.js b/src/js/main.js index 0a96871e591df887d8f751d5387f8df04d550723..af842e9b7c07bad7b3ac4bb266e7e42695f8f51b 100644 --- a/src/js/main.js +++ b/src/js/main.js @@ -212,6 +212,17 @@ App.MainView.useGuard = function() { return outerDiv; }; +App.MainView.walkPast = function() { + const outerDiv = document.createElement("div"); + + const slave = V.slaves.filter(s => ![Job.BODYGUARD, Job.FUCKTOY].includes(s.assignment)).random(); + if (slave) { + App.UI.DOM.appendNewElement("span", outerDiv, walkPast(slave), "scene-intro"); + } + + return outerDiv; +}; + App.MainView.full = function() { function mainMenu() { const div = document.createElement("div"); @@ -283,6 +294,7 @@ App.MainView.full = function() { if (V.useSlaveSummaryOverviewTab === 0) { fragment.append(App.MainView.useGuard()); } + fragment.append(App.MainView.walkPast()); return fragment; }; diff --git a/src/uncategorized/main.tw b/src/uncategorized/main.tw index 7eb8508310d8c183d695d4fdd17a5eabb8d22833..c8f7fb34b21dab882b08c299c00c52a5eae39ca1 100644 --- a/src/uncategorized/main.tw +++ b/src/uncategorized/main.tw @@ -31,12 +31,4 @@ <<includeDOM App.MainView.full()>> -<<set $activeSlave = $slaves.random()>> -<<if $activeSlave && ($activeSlave.assignment != "please you") && ($activeSlave.assignment != "guard you")>> - <br>//<span id="walk"><<= walkPast($activeSlave)>></span>// -<</if>> -<<if ($debugMode == 1)>> - //| [[Show all walk past scenes|Walk Past List]]// -<</if>> - <<run App.UI.SlaveList.ScrollPosition.restore()>> diff --git a/src/uncategorized/walkPastList.tw b/src/uncategorized/walkPastList.tw index adc79014a67ec6b5ddc9f7e80dec35453b435af3..fece903eb53124d7c02d9829ea386e98ab0d45f3 100644 --- a/src/uncategorized/walkPastList.tw +++ b/src/uncategorized/walkPastList.tw @@ -10,42 +10,42 @@ <h2>Choose target</h2> <<link "Lips">> <<replace "#wplist">> - <<print walkPastAll("FLips")>> + <<includeDOM walkPastAll("FLips")>> <</replace>> <</link>><br> <<link "Boobs">> <<replace "#wplist">> - <<print walkPastAll("FBoobs")>> + <<includeDOM walkPastAll("FBoobs")>> <</replace>> <</link>><br> <<link "Butt">> <<replace "#wplist">> - <<print walkPastAll("FButt")>> + <<includeDOM walkPastAll("FButt")>> <</replace>> <</link>> | <<link "Anus">> <<replace "#wplist">> - <<print walkPastAll("FAnus")>> + <<includeDOM walkPastAll("FAnus")>> <</replace>> <</link>> | <<link "Vagina">> <<replace "#wplist">> - <<print walkPastAll("FVagina")>> + <<includeDOM walkPastAll("FVagina")>> <</replace>> <</link>> //or ass if they lack one//<br> <<link "Dick">> <<replace "#wplist">> - <<print walkPastAll("FDick")>> + <<includeDOM walkPastAll("FDick")>> <</replace>> <</link>><br> <<link "Rival">> <<replace "#wplist">> - <<print walkPastAll("FRival")>> + <<includeDOM walkPastAll("FRival")>> <</replace>> <</link>><br> <<link "Relation">> <<replace "#wplist">> - <<print walkPastAll("FRelation")>> + <<includeDOM walkPastAll("FRelation")>> <</replace>> <</link>>