From a71b6e5cadede4fd9d9e169892f1b323b93d3427 Mon Sep 17 00:00:00 2001 From: Arkerthan <arkerthan@mailbox.org> Date: Mon, 21 Feb 2022 14:49:53 +0100 Subject: [PATCH] Split limbs into arms and legs in preparation of body mod changes --- devTools/types/FC/human.d.ts | 11 +++---- .../updateCustomSlaveOrder.js | 4 +-- src/facilities/nursery/utils/nurseryUtils.js | 16 +++++----- src/js/CustomSlave.js | 8 ++--- src/js/SlaveState.js | 30 ++++++++++++++----- src/js/itemAvailability.js | 4 +-- .../specificMarkets/customSlaveMarket.js | 3 +- src/npc/children/ChildState.js | 8 ++--- src/npc/startingGirls/startingGirls.js | 6 +++- src/npc/surgery/surgery.js | 10 ++++++- src/player/js/PlayerState.js | 8 ++--- 11 files changed, 69 insertions(+), 39 deletions(-) diff --git a/devTools/types/FC/human.d.ts b/devTools/types/FC/human.d.ts index 8cc3ae8aad6..23ef528c941 100644 --- a/devTools/types/FC/human.d.ts +++ b/devTools/types/FC/human.d.ts @@ -464,16 +464,17 @@ declare global { } //#endregion - type LimbState = InstanceType<typeof App.Entity.LimbState>; + type ArmState = InstanceType<typeof App.Entity.ArmState>; + type LegState = InstanceType<typeof App.Entity.LegState>; interface LimbsState { arm: { - left: LimbState; - right: LimbState; + left: ArmState; + right: ArmState; }; leg: { - left: LimbState, - right: LimbState; + left: LegState, + right: LegState; }; PLimb: number; } diff --git a/src/data/backwardsCompatibility/updateCustomSlaveOrder.js b/src/data/backwardsCompatibility/updateCustomSlaveOrder.js index d58dec28147..fb3c0ac2b4d 100644 --- a/src/data/backwardsCompatibility/updateCustomSlaveOrder.js +++ b/src/data/backwardsCompatibility/updateCustomSlaveOrder.js @@ -6,7 +6,7 @@ App.Update.CustomSlaveOrder = function(customSlaveOrder) { if (jsDef(customSlaveOrder.amp) && customSlaveOrder.amp === 1) { customSlaveOrder.leg = {left: null, right: null}; } else { - customSlaveOrder.leg = {left: new App.Entity.LimbState(), right: new App.Entity.LimbState()}; + customSlaveOrder.leg = {left: new App.Entity.LegState(), right: new App.Entity.LegState()}; } } @@ -14,7 +14,7 @@ App.Update.CustomSlaveOrder = function(customSlaveOrder) { if (jsDef(customSlaveOrder.amp) && customSlaveOrder.amp === 1) { customSlaveOrder.arm = {left: null, right: null}; } else { - customSlaveOrder.arm = {left: new App.Entity.LimbState(), right: new App.Entity.LimbState()}; + customSlaveOrder.arm = {left: new App.Entity.LegState(), right: new App.Entity.LegState()}; } } diff --git a/src/facilities/nursery/utils/nurseryUtils.js b/src/facilities/nursery/utils/nurseryUtils.js index 8b363c2b517..e5672420220 100644 --- a/src/facilities/nursery/utils/nurseryUtils.js +++ b/src/facilities/nursery/utils/nurseryUtils.js @@ -72,12 +72,12 @@ App.Facilities.Nursery.infantToChild = function infantToChild(child) { child.accent = 0; child.ageImplant = 0; child.arm = { - left: new App.Entity.LimbState(), - right: new App.Entity.LimbState() + left: new App.Entity.ArmState(), + right: new App.Entity.LegState() }; child.leg = { - left: new App.Entity.LimbState(), - right: new App.Entity.LimbState() + left: new App.Entity.LegState(), + right: new App.Entity.LegState() }; child.analArea = 0; child.anus = 0; @@ -631,12 +631,12 @@ App.Facilities.Nursery.newChild = function newChild(child) { /* eslint-enable */ child.arm = { - left: new App.Entity.LimbState(), - right: new App.Entity.LimbState() + left: new App.Entity.ArmState(), + right: new App.Entity.ArmState() }; child.leg = { - left: new App.Entity.LimbState(), - right: new App.Entity.LimbState() + left: new App.Entity.LegState(), + right: new App.Entity.LegState() }; if (V.surnamesForbidden === 1) { diff --git a/src/js/CustomSlave.js b/src/js/CustomSlave.js index 8c88013928a..b519a0589ef 100644 --- a/src/js/CustomSlave.js +++ b/src/js/CustomSlave.js @@ -156,14 +156,14 @@ App.Entity.CustomSlaveOrder = class CustomSlaveOrder { this.nationality = "Stateless"; /** desired left and right leg state - * @type {{left: App.Entity.LimbState, right: App.Entity.LimbState}} + * @type {{left: App.Entity.LegState, right: App.Entity.LegState}} */ - this.leg = {left: new App.Entity.LimbState(), right: new App.Entity.LimbState()}; + this.leg = {left: new App.Entity.LegState(), right: new App.Entity.LegState()}; /** desired left and right arm state - * @type {{left: App.Entity.LimbState, right: App.Entity.LimbState}} + * @type {{left: App.Entity.ArmState, right: App.Entity.ArmState}} */ - this.arm = {left: new App.Entity.LimbState(), right: new App.Entity.LimbState()}; + this.arm = {left: new App.Entity.ArmState(), right: new App.Entity.ArmState()}; /** desired eye state * Only the "vision" property is used, all others are ignored diff --git a/src/js/SlaveState.js b/src/js/SlaveState.js index 2874a159b17..3ae6e600cae 100644 --- a/src/js/SlaveState.js +++ b/src/js/SlaveState.js @@ -428,7 +428,6 @@ App.Entity.genitalPiercingState = class extends App.Entity.piercingState { } }; - App.Entity.piercingStateRA = class { constructor() { /** @type {FC.PiercingType} */ @@ -449,7 +448,6 @@ App.Entity.genitalPiercingStateRA = class extends App.Entity.piercingStateRA { } }; - App.Entity.completePiercingState = class { constructor() { this.ear = new App.Entity.piercingState(); @@ -504,6 +502,24 @@ App.Entity.LimbState = class LimbState { } }; +/** + * To ensure that all new arms contain expected attributes + */ +App.Entity.ArmState = class extends App.Entity.LimbState { + constructor() { + super(); + } +}; + +/** + * To ensure that all new legs contain expected attributes + */ +App.Entity.LegState = class extends App.Entity.LimbState { + constructor() { + super(); + } +}; + /** * To ensure that all new eyes contain expected attributes */ @@ -940,19 +956,19 @@ App.Entity.SlaveState = class SlaveState { * * 3: quadruped interface */ this.PLimb = 0; - /* + /** * legs of the slave */ this.leg = { - left: new App.Entity.LimbState(), - right: new App.Entity.LimbState() + left: new App.Entity.LegState(), + right: new App.Entity.LegState() }; /** * arms of the slave */ this.arm = { - left: new App.Entity.LimbState(), - right: new App.Entity.LimbState() + left: new App.Entity.ArmState(), + right: new App.Entity.ArmState() }; /** are heels clipped * @type {FC.Bool} diff --git a/src/js/itemAvailability.js b/src/js/itemAvailability.js index 8b7efc871ff..26b33ee2984 100644 --- a/src/js/itemAvailability.js +++ b/src/js/itemAvailability.js @@ -245,8 +245,8 @@ globalThis.addProsthetic = function(slave, prosthetic) { if (limb > 0) { let p = { id: prosthetic, - arm: {left: new App.Entity.LimbState(), right: new App.Entity.LimbState()}, - leg: {left: new App.Entity.LimbState(), right: new App.Entity.LimbState()} + arm: {left: new App.Entity.ArmState(), right: new App.Entity.ArmState()}, + leg: {left: new App.Entity.LegState(), right: new App.Entity.LegState()} }; p.arm.left.type = limb; p.arm.right.type = limb; diff --git a/src/markets/specificMarkets/customSlaveMarket.js b/src/markets/specificMarkets/customSlaveMarket.js index a9b76aeb00e..8eb1481e708 100644 --- a/src/markets/specificMarkets/customSlaveMarket.js +++ b/src/markets/specificMarkets/customSlaveMarket.js @@ -876,7 +876,8 @@ App.Markets["Custom Slave"] = function() { App.UI.DOM.link( "Add", () => { - _.set(slave, value, new App.Entity.LimbState()); + const limb = value.startsWith("leg.") ? new App.Entity.LegState() : new App.Entity.ArmState(); + _.set(slave, value, limb); jQuery(`#${descText.id}`).empty().append(description(true, text)); } ) diff --git a/src/npc/children/ChildState.js b/src/npc/children/ChildState.js index d37dd7932f7..308179296ee 100644 --- a/src/npc/children/ChildState.js +++ b/src/npc/children/ChildState.js @@ -352,8 +352,8 @@ App.Facilities.Nursery.ChildState = class ChildState { * * 6: swiss army leg */ this.leg = { - left: new App.Entity.LimbState(), - right: new App.Entity.LimbState() + left: new App.Entity.LegState(), + right: new App.Entity.LegState() }; /** * arms of the slave @@ -366,8 +366,8 @@ App.Facilities.Nursery.ChildState = class ChildState { * * 6: swiss army arm */ this.arm = { - left: new App.Entity.LimbState(), - right: new App.Entity.LimbState() + left: new App.Entity.ArmState(), + right: new App.Entity.ArmState() }; /** Are heels clipped * diff --git a/src/npc/startingGirls/startingGirls.js b/src/npc/startingGirls/startingGirls.js index ed5cd636874..8a789727163 100644 --- a/src/npc/startingGirls/startingGirls.js +++ b/src/npc/startingGirls/startingGirls.js @@ -795,7 +795,11 @@ App.StartingGirls.physical = function(slave, cheat = false) { options.addCustomOption(`${capFirstChar(side)} ${limb}: amputated`) .addButton("Restore", () => { - slave[limb][side] = new App.Entity.LimbState(); + if (limb === "arm") { + slave[limb][side] = new App.Entity.ArmState(); + } else { + slave[limb][side] = new App.Entity.LegState(); + } }, "" ); diff --git a/src/npc/surgery/surgery.js b/src/npc/surgery/surgery.js index d12e5640397..a8e1029089c 100644 --- a/src/npc/surgery/surgery.js +++ b/src/npc/surgery/surgery.js @@ -838,13 +838,21 @@ globalThis.removeLimbs = function(slave, limb) { * @param {number} id */ globalThis.attachLimbs = function(slave, limb, id) { + /** + * @param {"arm"|"leg"} limb + * @param {FC.BodySide} side + */ function attach(limb, side) { let prosthetic = findProsthetic(slave, limbToProsthetic(id)); if (prosthetic) { slave[limb][side] = prosthetic[limb][side]; } else { - slave[limb][side] = new App.Entity.LimbState(); + if (limb === "arm") { + slave[limb][side] = new App.Entity.ArmState(); + } else { + slave[limb][side] = new App.Entity.LegState(); + } slave[limb][side].type = id; } } diff --git a/src/player/js/PlayerState.js b/src/player/js/PlayerState.js index dd5adec12d2..47389648642 100644 --- a/src/player/js/PlayerState.js +++ b/src/player/js/PlayerState.js @@ -526,15 +526,15 @@ App.Entity.PlayerState = class PlayerState { * your legs */ this.leg = { - left: new App.Entity.LimbState(), - right: new App.Entity.LimbState() + left: new App.Entity.LegState(), + right: new App.Entity.LegState() }; /** * your arms */ this.arm = { - left: new App.Entity.LimbState(), - right: new App.Entity.LimbState() + left: new App.Entity.ArmState(), + right: new App.Entity.ArmState() }; /** are your heels clipped * @type {FC.Bool} -- GitLab