From 08f378b430b831ebc3426bd9e6192063a851aa91 Mon Sep 17 00:00:00 2001
From: lowercasedonkey <lowercasedonkey@gmail.com>
Date: Mon, 21 Dec 2020 23:41:22 -0500
Subject: [PATCH] Fat grafting to js

---
 src/005-passages/interactPassages.js    |   9 ++
 src/npc/surgery/fatGraft.js             | 118 ++++++++++++++++++++++++
 src/pregmod/fatGraftingWorkaround.tw    |  47 ----------
 src/uncategorized/remoteSurgery.tw      |   2 +-
 src/uncategorized/surgeryDegradation.tw |   2 +-
 5 files changed, 129 insertions(+), 49 deletions(-)
 create mode 100644 src/npc/surgery/fatGraft.js
 delete mode 100644 src/pregmod/fatGraftingWorkaround.tw

diff --git a/src/005-passages/interactPassages.js b/src/005-passages/interactPassages.js
index d04947c2ba4..fff8eaf9c65 100644
--- a/src/005-passages/interactPassages.js
+++ b/src/005-passages/interactPassages.js
@@ -21,3 +21,12 @@ new App.DomPassage("SlaveOnSlaveFeeding",
 );
 
 new App.DomPassage("KillSlave", () => App.UI.SlaveInteract.killSlave(getSlave(V.AS)));
+
+new App.DomPassage("Fat Grafting",
+	() => {
+		V.nextButton = "Finalize fat transfer";
+		V.nextLink = "Surgery Degradation";
+
+		return App.UI.SlaveInteract.fatGraft(getSlave(V.AS));
+	}
+);
diff --git a/src/npc/surgery/fatGraft.js b/src/npc/surgery/fatGraft.js
new file mode 100644
index 00000000000..5c0a4048b3c
--- /dev/null
+++ b/src/npc/surgery/fatGraft.js
@@ -0,0 +1,118 @@
+/**
+ *
+ * @param {App.Entity.SlaveState} slave
+ * @returns {DocumentFragment}
+ */
+App.UI.SlaveInteract.fatGraft = function(slave) {
+	const frag = new DocumentFragment();
+	let availableFat = Math.round(slave.weight/10);
+	let boobFat = 0;
+	let buttFat = 0;
+
+	const passage = App.UI.DOM.appendNewElement("span", frag, content());
+
+	return frag;
+
+	function content() {
+		const el = new DocumentFragment();
+		let r = [];
+		const {his} = getPronouns(slave);
+		let p;
+		let linkArray = [];
+		r.push(`Enough graftable body fat was harvested for an additional ${availableFat * 100}ccs per breast or an additional`);
+		if (getSlave(V.AS).butt <= 10) {
+			r.push(num(availableFat / 2));
+		} else {
+			r.push(num(availableFat / 5));
+		}
+		r.push(`sizes to ${his} rear.`);
+		if (availableFat === 0) {
+			r.push(`All fat marked for use.`);
+		} else {
+			r.push(`A total of ${availableFat} ${(availableFat === 1) ? `unit` : `units`} remain.`);
+		}
+		App.Events.addNode(el, r, "p", "scene-intro");
+
+		// Boobs
+		p = App.UI.DOM.appendNewElement("p", el);
+		App.UI.DOM.appendNewElement("div", p, `${boobFat} units of fat will be added to ${his} breasts for a size gain of ${boobFat * 100}ccs.`);
+		if (availableFat > 0) {
+			linkArray.push(
+				App.UI.DOM.link(
+					"Increase",
+					() => {
+						boobFat++;
+						availableFat--;
+						refresh();
+					}
+				)
+			);
+		} else {
+			linkArray.push(App.UI.DOM.disabledLink(`No more fat available.`, []));
+		}
+		if (boobFat > 0) {
+			linkArray.push(
+				App.UI.DOM.link(
+					"Decrease",
+					() => {
+						boobFat--;
+						availableFat++;
+						refresh();
+					}
+				)
+			);
+		} else {
+			linkArray.push(App.UI.DOM.disabledLink(`No fat marked for breast use.`, []));
+		}
+		App.UI.DOM.appendNewElement("div", p, App.UI.DOM.generateLinksStrip(linkArray));
+
+		// Ass
+		p = App.UI.DOM.appendNewElement("p", el);
+		r = [];
+		linkArray = [];
+		App.UI.DOM.appendNewElement("div", p,);
+		if (getSlave(V.AS).butt <= 10) {
+			r.push(buttFat * 2);
+		} else {
+			r.push(buttFat * 5);
+		}
+		r.push(`units of fat will be added to ${his} ass for a size gain of ${buttFat}.`);
+		App.UI.DOM.appendNewElement("div", p, r.join(" "));
+		const fatMoved = (getSlave(V.AS).butt > 10) ? 0.2 : 0.5;
+		if (availableFat > 0) {
+			linkArray.push(
+				App.UI.DOM.link(
+					"Increase",
+					() => {
+						buttFat += fatMoved;
+						availableFat -= 1;
+						refresh();
+					}
+				)
+			);
+		} else {
+			linkArray.push(App.UI.DOM.disabledLink(`No more fat available.`, []));
+		}
+		if (buttFat > 0) {
+			linkArray.push(
+				App.UI.DOM.link(
+					"Decrease",
+					() => {
+						buttFat -= fatMoved;
+						availableFat -= 1;
+						refresh();
+					}
+				)
+			);
+		} else {
+			linkArray.push(App.UI.DOM.disabledLink(`No fat marked for ass use.`, []));
+		}
+		App.UI.DOM.appendNewElement("div", p, App.UI.DOM.generateLinksStrip(linkArray));
+		return el;
+	}
+	function refresh() {
+		V.boobFat = boobFat;
+		V.buttFat = buttFat;
+		jQuery(passage).empty().append(content());
+	}
+};
diff --git a/src/pregmod/fatGraftingWorkaround.tw b/src/pregmod/fatGraftingWorkaround.tw
deleted file mode 100644
index 39868b4d703..00000000000
--- a/src/pregmod/fatGraftingWorkaround.tw
+++ /dev/null
@@ -1,47 +0,0 @@
-:: fat grafting workaround [nobr]
-
-<<set $nextButton = "Finalize fat transfer", $nextLink = "Surgery Degradation">>
-
-Enough graftable body fat was harvested for an additional <<print $availableFat*100>>ccs per breast or an additional <<if getSlave($AS).butt <= 10>><<print $availableFat/2>><<else>><<print $availableFat/5>><</if>> sizes to $his rear. <<if $availableFat == 0>>All fat marked for use<<else>>A total of $availableFat unit<<if $availableFat > 1>>s<</if>> remain<</if>>.
-
-<br><br>
-$boobFat units of fat will be added to $his breasts for a size gain of <<print $boobFat*100>>ccs.
-<br>
-<<if $availableFat > 0>>
-	[[Increase|fat grafting workaround][$boobFat++, $availableFat--]] |
-<<else>>
-	No more fat available. |
-<</if>>
-<<if $boobFat > 0>>
-	[[Decrease|fat grafting workaround][$boobFat--, $availableFat++]]
-<<else>>
-	No fat marked for breast use.
-<</if>>
-
-<br><br>
-<<if getSlave($AS).butt <= 10>><<print $buttFat*2>><<else>><<print $buttFat*5>><</if>> units of fat will be added to $his ass for a size gain of $buttFat.
-<<if getSlave($AS).butt > 10>>
-	<br>
-	<<if $availableFat > 0>>
-		[[Increase|fat grafting workaround][$buttFat += .2, $availableFat -= 1]] |
-	<<else>>
-		No more fat available. |
-	<</if>>
-	<<if $buttFat > 0>>
-		[[Decrease|fat grafting workaround][$buttFat -= .2, $availableFat += 1]]
-	<<else>>
-		No fat marked for ass use.
-	<</if>>
-<<else>>
-	<br>
-	<<if $availableFat > 0>>
-		[[Increase|fat grafting workaround][$buttFat += .5, $availableFat -= 1]] |
-	<<else>>
-		No more fat available. |
-	<</if>>
-	<<if $buttFat > 0>>
-		[[Decrease|fat grafting workaround][$buttFat -= .5, $availableFat += 1]]
-	<<else>>
-		No fat marked for ass use.
-	<</if>>
-<</if>>
diff --git a/src/uncategorized/remoteSurgery.tw b/src/uncategorized/remoteSurgery.tw
index 021fafc1f2a..f31ea7a6196 100644
--- a/src/uncategorized/remoteSurgery.tw
+++ b/src/uncategorized/remoteSurgery.tw
@@ -1037,7 +1037,7 @@
 					$He is overweight. [[Liposuction|Surgery Degradation][surgeryDamage(getSlave($AS),10), cashX(forceNeg($surgeryCost), "slaveSurgery", getSlave($AS)), $surgeryType = "liposuction"]]
 				<</if>>
 				<<if $surgeryUpgrade == 1>>
-					| [[Fat grafting|fat grafting workaround][surgeryDamage(getSlave($AS),40), cashX(forceNeg($surgeryCost), "slaveSurgery", getSlave($AS))*2, $availableFat = Math.round(getSlave($AS).weight/10), $boobFat = 0, $buttFat = 0, $surgeryType = "fat graft"]]
+					| [[Fat grafting|Fat Grafting][surgeryDamage(getSlave($AS),40), cashX(forceNeg($surgeryCost), "slaveSurgery", getSlave($AS))*2, $surgeryType = "fat graft"]]
 				<</if>>
 			<</if>>
 		</div>
diff --git a/src/uncategorized/surgeryDegradation.tw b/src/uncategorized/surgeryDegradation.tw
index 59f02493792..ac29f03eb38 100644
--- a/src/uncategorized/surgeryDegradation.tw
+++ b/src/uncategorized/surgeryDegradation.tw
@@ -1339,7 +1339,7 @@ As the remote surgery's long recovery cycle completes,
 		Due to the large amount of fat removed from $his midsection, it droops noticeably after the surgery.
 		<<set getSlave($AS).bellySag = 5>>
 	<</if>>
-	<<set getSlave($AS).weight = 0, $boobFat = 0, $buttFat = 0, $availableFat = 0>>
+	<<set getSlave($AS).weight = 0, $boobFat = 0, $buttFat = 0>>
 
 <<case "lipo">>
 	<<if getSlave($AS).fetish == "mindbroken">>
-- 
GitLab