diff --git a/src/interaction/slaveInteract.js b/src/interaction/slaveInteract.js index 484dfe405c5cbd4de2cc7cece263a7f1a0796702..b187865f2dd471fc3c70e8c0586a6377d9d96cb0 100644 --- a/src/interaction/slaveInteract.js +++ b/src/interaction/slaveInteract.js @@ -2098,6 +2098,223 @@ App.UI.SlaveInteract.nursery = function(slave) { return jQuery('#nursery').empty().append(el); }; +App.UI.SlaveInteract.smartSettings = function(slave) { + let el = document.createElement('div'); + + const { + // eslint-disable-next-line no-unused-vars + he, + him, + his, + hers, + himself, + boy, + He, + His + } = getPronouns(slave); + const bodyPart = []; + const BDSM = []; + const gender = []; + const level = []; + + if (slave.clitPiercing === 3 || slave.vaginalAccessory === "smart bullet vibrator") { + // Level + level.push({text: `No sex`, updateSlave: {clitSetting: `none`}}); + level.push({text: `All sex`, updateSlave: {clitSetting: `all`}}); + + // Body part + bodyPart.push({text: `Vanilla`, updateSlave: {clitSetting: `vanilla`}}); + bodyPart.push({text: `Oral`, updateSlave: {clitSetting: `oral`}}); + bodyPart.push({text: `Anal`, updateSlave: {clitSetting: `anal`}}); + bodyPart.push({text: `Boobs`, updateSlave: {clitSetting: `boobs`}}); + if (V.seePreg !== 0) { + bodyPart.push({text: `Preg`, updateSlave: {clitSetting: `pregnancy`}}); + } + // BDSM + BDSM.push({text: `Sub`, updateSlave: {clitSetting: `submissive`}}); + BDSM.push({text: `Dom`, updateSlave: {clitSetting: `dom`}}); + BDSM.push({text: `Masochism`, updateSlave: {clitSetting: `masochist`}}); + BDSM.push({text: `Sadism`, updateSlave: {clitSetting: `sadist`}}); + BDSM.push({text: `Humiliation`, updateSlave: {clitSetting: `humiliation`}}); + + // Gender + gender.push({text: `Men`, updateSlave: {clitSetting: `men`}}); + gender.push({text: `Women`, updateSlave: {clitSetting: `women`}}); + gender.push({text: `Anti-men`, updateSlave: {clitSetting: `anti-men`}}); + gender.push({text: `Anti-women`, updateSlave: {clitSetting: `anti-women`}}); + } + + let title = document.createElement('div'); + title.textContent = ``; + if (slave.clitPiercing === 3) { + if (slave.dick < 1) { + title.textContent = `${His} smart clit piercing `; + if (slave.vaginalAccessory === "smart bullet vibrator") { + title.textContent += `and smart bullet vibrator are `; + } else { + title.textContent += `is `; + } + title.textContent += `set to: `; + } else{ + title.textContent = `${His} smart frenulum piercing `; + if (slave.vaginalAccessory === "smart bullet vibrator") { + title.textContent += `and smart bullet vibrator are `; + } else { + title.textContent += `is `; + } + title.textContent += `set to: `; + } + } else { + title.textContent = `${His} smart bullet vibe is set to: `; + } + let selected = document.createElement('span'); + selected.style.fontWeight = "bold"; + selected.textContent = `${slave.clitSetting}. `; + title.append(selected); + el.append(title); + + let links; + if (level.length) { + links = document.createElement('div'); + links.append(`Level: `); + links.appendChild(App.UI.SlaveInteract.generateRows(level, slave)); + links.className = "choices"; + el.append(links); + } + + if (bodyPart.length) { + links = document.createElement('div'); + links.append(`Body part: `); + links.appendChild(App.UI.SlaveInteract.generateRows(bodyPart, slave)); + links.className = "choices"; + el.append(links); + } + + if (BDSM.length) { + links = document.createElement('div'); + links.append(`BDSM: `); + links.appendChild(App.UI.SlaveInteract.generateRows(BDSM, slave)); + links.className = "choices"; + el.append(links); + } + + if (gender.length) { + links = document.createElement('div'); + links.append(`Gender: `); + links.appendChild(App.UI.SlaveInteract.generateRows(gender, slave)); + links.className = "choices"; + el.append(links); + } + + return jQuery('#smartSettings').empty().append(el); +}; + +App.UI.SlaveInteract.orgasm = function(slave) { + let el = document.createElement('div'); + + const { + // eslint-disable-next-line no-unused-vars + he, + him, + his, + hers, + himself, + boy, + He, + His + } = getPronouns(slave); + const masturbation = []; + const partner = []; + const family = []; + const slaves = []; + const master = []; + + // Masturbation + masturbation.push({text: `Allow`, updateSlave: {"rules.release.masturbation": 1}}); + masturbation.push({text: `Forbid`, updateSlave: {"rules.release.masturbation": 0}}); + + // Partner + partner.push({text: `Allow`, updateSlave: {"rules.release.partner": 1}}); + partner.push({text: `Forbid`, updateSlave: {"rules.release.partner": 0}}); + + // Family + family.push({text: `Allow`, updateSlave: {"rules.release.family": 1}}); + family.push({text: `Forbid`, updateSlave: {"rules.release.family": 0}}); + + // Slaves + slaves.push({text: `Allow`, updateSlave: {"rules.release.slaves": 1}}); + slaves.push({text: `Forbid`, updateSlave: {"rules.release.slaves": 0}}); + + // Master + master.push({text: `Grant`, updateSlave: {"rules.release.master": 1}}); + master.push({text: `Deny`, updateSlave: {"rules.release.master": 0}}); + + let title = document.createElement('div'); + title.textContent = `Non-assignment orgasm rules: `; + el.append(title); + + let links; + if (masturbation.length) { + links = document.createElement('div'); + links.append(`Masturbation: `); + status(slave.rules.release.masturbation); + links.appendChild(App.UI.SlaveInteract.generateRows(masturbation, slave)); + links.className = "choices"; + el.append(links); + } + + if (partner.length) { + links = document.createElement('div'); + links.append(`Partner: `); + status(slave.rules.release.partner); + links.appendChild(App.UI.SlaveInteract.generateRows(partner, slave)); + links.className = "choices"; + el.append(links); + } + + if (family.length) { + links = document.createElement('div'); + links.append(`Family: `); + status(slave.rules.release.family); + links.appendChild(App.UI.SlaveInteract.generateRows(family, slave)); + links.className = "choices"; + el.append(links); + } + + if (slaves.length) { + links = document.createElement('div'); + links.append(`Other slaves: `); + status(slave.rules.release.slaves); + links.appendChild(App.UI.SlaveInteract.generateRows(slaves, slave)); + links.className = "choices"; + el.append(links); + } + + if (master.length) { + links = document.createElement('div'); + links.append(`Master: `); + status(slave.rules.release.master, true); + links.appendChild(App.UI.SlaveInteract.generateRows(master, slave)); + links.className = "choices"; + el.append(links); + } + + function status(setting, master) { + let selected = document.createElement('span'); + selected.style.fontWeight = "bold"; + let text; + if (master) { + text = setting ? "granted" : "denied"; + } else { + text = setting ? "allowed" : "denied"; + } + selected.textContent = `${text}. `; + links.append(selected); + } + + return jQuery('#orgasm').empty().append(el); +}; + App.UI.SlaveInteract.custom = (function() { let el; let label; @@ -3006,7 +3223,9 @@ App.UI.SlaveInteract.generateRows = function(array, slave, category, accessCheck function click(arrayOption) { if (arrayOption.updateSlave) { - Object.assign(slave, arrayOption.updateSlave); + for (const slaveProperty in arrayOption.updateSlave) { + setValue(slave, slaveProperty, arrayOption.updateSlave[slaveProperty]); + } } if (arrayOption.update) { Object.assign(V, arrayOption.update); @@ -3015,6 +3234,20 @@ App.UI.SlaveInteract.generateRows = function(array, slave, category, accessCheck App.UI.SlaveInteract.refreshAll(slave); return; } + + function setValue(obj, path, val) { + const ref = resolve(obj, path); + ref.obj[ref.prop] = val; + } + + function resolve(obj, path, separator = '.') { + const pathArray = Array.isArray(path) ? path : path.split(separator); + if (pathArray.length === 1) { + return {obj: obj, prop: pathArray[0]}; + } + const lastObj = pathArray.slice(0, pathArray.length - 1).reduce((prev, prop) => prev[prop], obj); + return {obj: lastObj, prop: pathArray.slice(pathArray.length - 1)}; + } }; App.UI.SlaveInteract.refreshAll = function(slave) { @@ -3033,4 +3266,6 @@ App.UI.SlaveInteract.refreshAll = function(slave) { App.UI.SlaveInteract.diet(slave); App.UI.SlaveInteract.dietBase(slave); App.UI.SlaveInteract.snacks(slave); + App.UI.SlaveInteract.smartSettings(slave); + App.UI.SlaveInteract.orgasm(slave); }; diff --git a/src/uncategorized/slaveInteract.tw b/src/uncategorized/slaveInteract.tw index 52f4425885c3cc02e173d9a52d53b106c88b573b..b2842a8b890b8a72a23c5f7b2bb4af2e9a8d5ca4 100644 --- a/src/uncategorized/slaveInteract.tw +++ b/src/uncategorized/slaveInteract.tw @@ -432,37 +432,11 @@ <</if>> <</if>> - <br><br>Non-assignment orgasm rules: - <div style="text-indent:2em"> - Masturbation is <span id="relMasturbation" style="font-weight:bold"><<if getSlave($AS).rules.release.masturbation === 1>>allowed<<else>>forbidden<</if>></span>. - <<link "Allow">><<set getSlave($AS).rules.release.masturbation = 1>><<replace "#relMasturbation">>allowed<</replace>><</link>> | - <<link "Forbid">><<set getSlave($AS).rules.release.masturbation = 0>><<replace "#relMasturbation">>forbidden<</replace>><</link>> - </div> - <div style="text-indent:2em"> - Sex with romantic partner is <span id="relPartner" style="font-weight:bold"><<if getSlave($AS).rules.release.partner === 1>>allowed<<else>>forbidden<</if>></span>. - <<link "Allow">><<set getSlave($AS).rules.release.partner = 1>><<replace "#relPartner">>allowed<</replace>><</link>> | - <<link "Forbid">><<set getSlave($AS).rules.release.partner = 0>><<replace "#relPartner">>forbidden<</replace>><</link>> - </div> - <<if $seeIncest == 1>> - <div style="text-indent:2em"> - Sex with close family is <span id="relFamily" style="font-weight:bold"><<if getSlave($AS).rules.release.family === 1>>allowed<<else>>forbidden<</if>></span>. - <<link "Allow">><<set getSlave($AS).rules.release.family = 1>><<replace "#relFamily">>allowed<</replace>><</link>> | - <<link "Forbid">><<set getSlave($AS).rules.release.family = 0>><<replace "#relFamily">>forbidden<</replace>><</link>> - </div> - <</if>> - <div style="text-indent:2em"> - Sex with other slaves is <span id="relSlaves" style="font-weight:bold"><<if getSlave($AS).rules.release.slaves === 1>>allowed<<else>>forbidden<</if>></span>. - <<link "Allow">><<set getSlave($AS).rules.release.slaves = 1>><<replace "#relSlaves">>allowed<</replace>><</link>> | - <<link "Forbid">><<set getSlave($AS).rules.release.slaves = 0>><<replace "#relSlaves">>forbidden<</replace>><</link>> - </div> - <div style="text-indent:2em"> - Routine sex with <<= properMaster()>> is <span id="relMaster" style="font-weight:bold"><<if getSlave($AS).rules.release.master === 1>>granted<<else>>denied<</if>></span>. - <<link "Grant">><<set getSlave($AS).rules.release.master = 1>><<replace "#relMaster">>granted<</replace>><</link>> | - <<link "Deny">><<set getSlave($AS).rules.release.master = 0>><<replace "#relMaster">>denied<</replace>><</link>> - </div> + <span id="orgasm"></span> + <script>App.UI.SlaveInteract.orgasm(getSlave(V.activeSlave.ID))</script> <<if getSlave($AS).voice != 0>> - <br>Speech rules: <span id="speechRules" style="font-weight:bold"><<= getSlave($AS).rules.speech>></span>. + Speech rules: <span id="speechRules" style="font-weight:bold"><<= getSlave($AS).rules.speech>></span>. <<link "Restrictive">><<set getSlave($AS).rules.speech = "restrictive">><<replace "#speechRules">><<= getSlave($AS).rules.speech>><</replace>><</link>> | <<link "Permissive">><<set getSlave($AS).rules.speech = "permissive">><<replace "#speechRules">><<= getSlave($AS).rules.speech>><</replace>><</link>> <<if getSlave($AS).accent > 0 && getSlave($AS).accent < 4>>| <<link "Accent elimination">><<set getSlave($AS).rules.speech = "accent elimination">><<replace "#speechRules">><<= getSlave($AS).rules.speech>><</replace>><</link>> @@ -476,39 +450,8 @@ <<link "Just friends">><<set getSlave($AS).rules.relationship = "just friends">><<replace "#relationshipRules">><<= getSlave($AS).rules.relationship>><</replace>><</link>> | <<link "Permissive">><<set getSlave($AS).rules.relationship = "permissive">><<replace "#relationshipRules">><<= getSlave($AS).rules.relationship>><</replace>><</link>> <</if>> - - <<if getSlave($AS).clitPiercing == 3 || getSlave($AS).vaginalAccessory == "smart bullet vibrator">> - <div> - <<if getSlave($AS).clitPiercing == 3>> - <<if getSlave($AS).dick < 1>> - $His smart clit piercing <<if getSlave($AS).vaginalAccessory == "smart bullet vibrator">>and smart bullet vibrator are<<else>>is<</if>> set to - <<else>> - $His smart frenulum piercing <<if getSlave($AS).vaginalAccessory == "smart bullet vibrator">>and smart bullet vibrator are<<else>>is<</if>> set to - <</if>> - <<else>> - $His smart bullet vibe is set to - <</if>> - <span id="setting" style="font-weight:bold"><<= getSlave($AS).clitSetting>></span>. - <<link "Vanilla">><<set getSlave($AS).clitSetting = "vanilla">><<replace "#setting">><<= getSlave($AS).clitSetting>><</replace>><</link>> - | <<link "Oral">><<set getSlave($AS).clitSetting = "oral">><<replace "#setting">><<= getSlave($AS).clitSetting>><</replace>><</link>> - | <<link "Anal">><<set getSlave($AS).clitSetting = "anal">><<replace "#setting">><<= getSlave($AS).clitSetting>><</replace>><</link>> - | <<link "Boobs">><<set getSlave($AS).clitSetting = "boobs">><<replace "#setting">><<= getSlave($AS).clitSetting>><</replace>><</link>> - | <<link "Sub">><<set getSlave($AS).clitSetting = "submissive">><<replace "#setting">><<= getSlave($AS).clitSetting>><</replace>><</link>> - | <<link "Dom">><<set getSlave($AS).clitSetting = "dom">><<replace "#setting">><<= getSlave($AS).clitSetting>><</replace>><</link>> - | <<link "Humiliation">><<set getSlave($AS).clitSetting = "humiliation">><<replace "#setting">><<= getSlave($AS).clitSetting>><</replace>><</link>> - <<if $seePreg != 0>> - | <<link "Preg">><<set getSlave($AS).clitSetting = "pregnancy">><<replace "#setting">><<= getSlave($AS).clitSetting>><</replace>><</link>> - <</if>> - | <<link "Pain">><<set getSlave($AS).clitSetting = "masochist">><<replace "#setting">><<= getSlave($AS).clitSetting>><</replace>><</link>> - | <<link "Sadism">><<set getSlave($AS).clitSetting = "sadist">><<replace "#setting">><<= getSlave($AS).clitSetting>><</replace>><</link>> - | <<link "Men">><<set getSlave($AS).clitSetting = "men">><<replace "#setting">><<= getSlave($AS).clitSetting>><</replace>><</link>> - | <<link "Anti-men">><<set getSlave($AS).clitSetting = "anti-men">><<replace "#setting">><<= getSlave($AS).clitSetting>><</replace>><</link>> - | <<link "Women">><<set getSlave($AS).clitSetting = "women">><<replace "#setting">><<= getSlave($AS).clitSetting>><</replace>><</link>> - | <<link "Anti-women">><<set getSlave($AS).clitSetting = "anti-women">><<replace "#setting">><<= getSlave($AS).clitSetting>><</replace>><</link>> - | <<link "All sex">><<set getSlave($AS).clitSetting = "all">><<replace "#setting">><<= getSlave($AS).clitSetting>><</replace>><</link>> - | <<link "No sex">><<set getSlave($AS).clitSetting = "none">><<replace "#setting">><<= getSlave($AS).clitSetting>><</replace>><</link>> - </div> - <</if>> + <span id="smartSettings"></span> + <script>App.UI.SlaveInteract.smartSettings(getSlave(V.activeSlave.ID))</script> </div> </div>