From 04a598d5f67ee86b7cb1abbbe1884937498065a1 Mon Sep 17 00:00:00 2001 From: Arkerthan <arkerthan@mailbox.org> Date: Fri, 24 Jun 2022 15:43:56 +0200 Subject: [PATCH] Update DefaultRules.js to modern code style --- devTools/types/FC/RA.d.ts | 2 +- src/js/DefaultRules.js | 231 +++++++++++++++++++------------------- 2 files changed, 114 insertions(+), 119 deletions(-) diff --git a/devTools/types/FC/RA.d.ts b/devTools/types/FC/RA.d.ts index 4552816cf06..973663067ed 100644 --- a/devTools/types/FC/RA.d.ts +++ b/devTools/types/FC/RA.d.ts @@ -138,7 +138,7 @@ declare namespace FC { standardReward: Rules.Reward; weight: NumericRange; diet: string; - dietCum: number; + dietCum: 0 | 1 | 2; dietMilk: FC.dietMilkType; onDiet: number; muscles: NumericTarget; diff --git a/src/js/DefaultRules.js b/src/js/DefaultRules.js index 73c08b7a472..ea6789ee623 100644 --- a/src/js/DefaultRules.js +++ b/src/js/DefaultRules.js @@ -1,113 +1,87 @@ -// this code applies RA rules onto slaves -globalThis.DefaultRules = (function() { - "use strict"; - - const assignedTypes = { - "auto": {success: "has been automatically assigned", unable: "could not be assigned"}, - "allowed": {success: "is allowed", unable: "could not be allowed"}, - }; - const getAssignmentDescription = function({rule, slave, assignmentResult, append = null}) { - const assignment = rule.setAssignment === Job.CHOICE - ? { - descriptionType: "allowed", - work: `select ${pronouns.his} own assignments` - } : { - descriptionType: "auto", - work: App.Utils.jobForAssignment(rule.setAssignment).assignment - }; - - const assignedTypeInfo = assignedTypes[assignment.descriptionType]; - const hasBeenAssigned = assignedTypeInfo[assignmentResult]; - return `<br>${slave.slaveName} ${hasBeenAssigned} to ${assignment.work}${append || ''}.`; - }; +/** + * this code applies RA rules onto slaves + * @param {App.Entity.SlaveState} slave + * @returns {string} + */ +globalThis.DefaultRules = function(slave) { + if (slave.useRulesAssistant === 0) { + return ""; // exempted + } - /** @type {string} */ - let r; - let pronouns; - let he; - let him; - let his; + const slaveReadOnly = createReadonlyProxy(slave); + const {rule, ruleIds} = runWithReadonlyProxy(() => ProcessSlaveRules(slaveReadOnly)); + slave.currentRules = ruleIds; + if (ruleIds.length === 0) { + return ""; // no rules apply + } - /** - * @param {App.Entity.SlaveState} slave - * @returns {string} - */ - function DefaultRules(slave) { - if (slave.useRulesAssistant === 0) { - return r; - } // exempted - r = ""; - ({he, him, his} = pronouns = getPronouns(slave)); - const slaveReadOnly = createReadonlyProxy(slave); - const {rule, ruleIds} = runWithReadonlyProxy(() => ProcessSlaveRules(slaveReadOnly)); - slave.currentRules = ruleIds; - if (ruleIds.length === 0) { - return r; - } // no rules apply - - AssignJobToSlave(slave, rule); - if (slave.fuckdoll === 0) { - ProcessClothing(slave, rule); - ProcessCollar(slave, rule); - ProcessMask(slave, rule); - ProcessGag(slave, rule); - ProcessEyewear(slave, rule); - ProcessEarwear(slave, rule); - ProcessDildos(slave, rule); - ProcessDickAccessories(slave, rule); - ProcessAnalAccessories(slave, rule); - ProcessChastity(slave, rule); - ProcessShoes(slave, rule); - ProcessBellyAccessories(slave, rule); - ProcessArmAccessory(slave, rule); - ProcessLegAccessory(slave, rule); - } - ProcessPit(slave, rule); - ProcessBellyImplant(slave, rule); - if (isFertile(slave) || slave.pregWeek < 0) { - ProcessContraceptives(slave, rule); - } - if (slave.preg > 0 && slave.pregKnown === 1 && slave.broodmother === 0) { - ProcessAbortions(slave, rule); - } - ProcessDrugs(slave, rule); - ProcessEnema(slave, rule); - ProcessDiet(slave, rule); - ProcessCuratives(slave, rule); - ProcessAphrodisiacs(slave, rule); - ProcessPenisHormones(slave, rule); - ProcessFemaleHormones(slave, rule); - ProcessPregnancyDrugs(slave, rule); - if (slave.fuckdoll === 0) { - ProcessLivingStandard(slave, rule); - ProcessRest(slave, rule); - ProcessSpeech(slave, rule); - ProcessRelationship(slave, rule); - ProcessRelease(slave, rule); - ProcessLactation(slave, rule); - if (!canWalk(slave) && canMove(slave)) { - ProcessMobility(slave, rule); - } - ProcessPunishment(slave, rule); - ProcessReward(slave, rule); - } - ProcessToyHole(slave, rule); - ProcessDietCum(slave, rule); - ProcessDietMilk(slave, rule); - if (V.arcologies[0].FSHedonisticDecadenceResearch === 1) { - ProcessSolidFood(slave, rule); - } - ProcessTeeth(slave, rule); - ProcessStyle(slave, rule); - ProcessPiercings(slave, rule); - ProcessSmartPiercings(slave, rule); - ProcessTattoos(slave, rule); - ProcessPornFeedEnabled(slave, rule); - ProcessPorn(slave, rule); - ProcessLabel(slave, rule); - ProcessOther(slave, rule); - return r; + let r = ""; + const pronouns = getPronouns(slave); + const {he, him, his} = pronouns; + + AssignJobToSlave(slave, rule); + if (slave.fuckdoll === 0) { + ProcessClothing(slave, rule); + ProcessCollar(slave, rule); + ProcessMask(slave, rule); + ProcessGag(slave, rule); + ProcessEyewear(slave, rule); + ProcessEarwear(slave, rule); + ProcessDildos(slave, rule); + ProcessDickAccessories(slave, rule); + ProcessAnalAccessories(slave, rule); + ProcessChastity(slave, rule); + ProcessShoes(slave, rule); + ProcessBellyAccessories(slave, rule); + ProcessArmAccessory(slave, rule); + ProcessLegAccessory(slave, rule); + } + ProcessPit(slave, rule); + ProcessBellyImplant(slave, rule); + if (isFertile(slave) || slave.pregWeek < 0) { + ProcessContraceptives(slave, rule); + } + if (slave.preg > 0 && slave.pregKnown === 1 && slave.broodmother === 0) { + ProcessAbortions(slave, rule); + } + ProcessDrugs(slave, rule); + ProcessEnema(slave, rule); + ProcessDiet(slave, rule); + ProcessCuratives(slave, rule); + ProcessAphrodisiacs(slave, rule); + ProcessPenisHormones(slave, rule); + ProcessFemaleHormones(slave, rule); + ProcessPregnancyDrugs(slave, rule); + if (slave.fuckdoll === 0) { + ProcessLivingStandard(slave, rule); + ProcessRest(slave, rule); + ProcessSpeech(slave, rule); + ProcessRelationship(slave, rule); + ProcessRelease(slave, rule); + ProcessLactation(slave, rule); + if (!canWalk(slave) && canMove(slave)) { + ProcessMobility(slave, rule); + } + ProcessPunishment(slave, rule); + ProcessReward(slave, rule); } + ProcessToyHole(slave, rule); + ProcessDietCum(slave, rule); + ProcessDietMilk(slave, rule); + if (V.arcologies[0].FSHedonisticDecadenceResearch === 1) { + ProcessSolidFood(slave, rule); + } + ProcessTeeth(slave, rule); + ProcessStyle(slave, rule); + ProcessPiercings(slave, rule); + ProcessSmartPiercings(slave, rule); + ProcessTattoos(slave, rule); + ProcessPornFeedEnabled(slave, rule); + ProcessPorn(slave, rule); + ProcessLabel(slave, rule); + ProcessOther(slave, rule); + return r; + /** * @param {App.Entity.SlaveState} slave @@ -132,8 +106,9 @@ globalThis.DefaultRules = (function() { * @returns {FC.RA.RuleSetters} */ function ProcessAssignments(slave, rule) { - // Before merging rules, we process assignments for each rule separately so we can remove slaves from facilities when they no longer qualify, even if the final "winning" rule assigns them elsewhere - // We also ignore inapplicable assignments for the current slave, so we only merge assignments that are valid + // Before merging rules, we process assignments for each rule separately, so we can remove slaves from + // facilities when they no longer qualify, even if the final "winning" rule assigns them elsewhere. + // We also ignore inapplicable assignments for the current slave, so we only merge assignments that are valid. if (rule.setAssignment === null) { delete rule.setAssignment; return rule; @@ -160,8 +135,7 @@ globalThis.DefaultRules = (function() { removeAssignment(); } else if (!job.facility.hasFreeSpace && slave.assignment !== rule.setAssignment) { r += getAssignmentDescription({ - rule, slave, assignmentResult: "unable", - append: " because it was full" + rule, slave, assignmentResult: "unable", append: " because it was full" }); removeAssignment(); } @@ -184,6 +158,29 @@ globalThis.DefaultRules = (function() { } } + /** + * @param {object} params + * @param {FC.RA.RuleSetters} params.rule + * @param {App.Entity.SlaveState} params.slave + * @param {"success"|"unable"} params.assignmentResult + * @param {string} [params.append] + * @returns {string} + */ + function getAssignmentDescription({rule, slave, assignmentResult, append = null}) { + const assignment = rule.setAssignment === Job.CHOICE ? { + work: `select ${pronouns.his} own assignments`, + success: "is allowed", + unable: "could not be allowed" + } : { + work: App.Utils.jobForAssignment(rule.setAssignment).assignment, + success: "has been automatically assigned", + unable: "could not be assigned" + }; + + const hasBeenAssigned = assignment[assignmentResult]; + return `<br>${slave.slaveName} ${hasBeenAssigned} to ${assignment.work}${append || ''}.`; + } + /** * @param {App.Entity.SlaveState} slave * @param {FC.RA.RuleSetters} rule @@ -984,7 +981,7 @@ globalThis.DefaultRules = (function() { * @param {FC.RA.RuleSetters} rule */ function ProcessBellyImplant(slave, rule) { - // Here is belly implant size control, it's used in Surgery Degradation passage to setup devotion and trust changes. + // Here is belly implant size control, it's used in Surgery Degradation passage to set up devotion and trust changes. // silent calls to surgery degradation have been replaced with a js function, which is less hacky if ((rule.bellyImplantVol !== undefined) && slave.bellyImplant >= 0 && rule.bellyImplantVol >= 0) { r += "<br>"; @@ -1287,7 +1284,7 @@ globalThis.DefaultRules = (function() { * @param {{drug: FC.Drug, weight: number}[]} priorities * @param {number} step */ - function drugsImpl(slave, asset, target, priorities, step) { + function drugsImpl(slave, asset, target, priorities, step) { const flesh = App.Medicine.fleshSize(slave, asset); if (growDrugs[asset] !== null && App.RA.shallGrow(flesh, target, step) && App.Medicine.maxAssetSize(asset) > slave[asset]) { priorities.push({ @@ -1810,7 +1807,7 @@ globalThis.DefaultRules = (function() { * @param {number} hormones * @param {string} slaveClass */ - const applyHormones = (slave, hormones, slaveClass) => { + function applyHormones(slave, hormones, slaveClass) { if (!_.isNil(hormones)) { const newHormones = slave.indentureRestrictions >= 2 ? Math.clamp(hormones, -1, 1) : hormones; if (slave.hormones !== newHormones) { @@ -1818,7 +1815,7 @@ globalThis.DefaultRules = (function() { r += `<br>${slave.slaveName} is ${slaveClass}, so ${he} has been put on the appropriate hormonal regime.`; } } - }; + } /** * @param {App.Entity.SlaveState} slave @@ -3156,9 +3153,7 @@ globalThis.DefaultRules = (function() { slave.pronoun = rule.pronoun; } } - - return DefaultRules; -})(); +}; /** * @param {App.Entity.SlaveState} slave -- GitLab