From 716f041e1d761bcf0500773b80ba38b7519bb12c Mon Sep 17 00:00:00 2001
From: DCoded <dcoded@live.com>
Date: Sat, 16 Feb 2019 13:45:51 -0500
Subject: [PATCH] Initial vaginalAttachment setup

---
 src/init/setupVars.tw                    | 6 ++++++
 src/js/SlaveState.js                     | 6 ++++++
 src/js/datatypeCleanupJS.js              | 6 ++++++
 src/js/rulesAssistantOptions.js          | 9 +++++++++
 src/js/slaveSummaryWidgets.js            | 8 ++++++++
 src/pregmod/widgets/bodyswapWidgets.tw   | 1 +
 src/uncategorized/reRelativeRecruiter.tw | 1 +
 src/uncategorized/slaveStats.tw          | 1 +
 8 files changed, 38 insertions(+)

diff --git a/src/init/setupVars.tw b/src/init/setupVars.tw
index a1de3392ff9..5a23e12fa46 100644
--- a/src/init/setupVars.tw
+++ b/src/init/setupVars.tw
@@ -2082,6 +2082,12 @@ Then pick _namePool.random(), or display those names as possible choices, or do
 	{name: "Anal chastity belt", value: "anal chastity"},
 	{name: "Combined chastity belt", value: "combined chastity"}]>>
 
+<<set setup.vaginalAttachments = [
+	{name: "No default setting", value: "no default setting"},
+	{name: "None", value: "none"},
+	{name: "Bullet vibrator", value: "bullet vibrator"},
+	{name: "Vibrating dildo", value: "vibrating dildo"}]>>
+
 <<set setup.dickAccessories = [
 	{name: "No default setting", value: "no default setting"},
 	{name: "None", value: "none"},
diff --git a/src/js/SlaveState.js b/src/js/SlaveState.js
index ddc98c3653e..0fff9142222 100644
--- a/src/js/SlaveState.js
+++ b/src/js/SlaveState.js
@@ -1529,6 +1529,12 @@ App.Entity.SlaveState = class SlaveState {
 		 * * "anal chastity"
 		 * * "combined chastity"
 		 */
+		this.vaginalAttachment = "none";
+		/**
+		 * * "none"
+		 * * "bullet vibrator"
+		 * * "vibrating dildo"
+		 */
 		this.dickAccessory = "none";
 		/**
 		 * * "none"
diff --git a/src/js/datatypeCleanupJS.js b/src/js/datatypeCleanupJS.js
index bad5c1431f6..ee9df56b7e0 100644
--- a/src/js/datatypeCleanupJS.js
+++ b/src/js/datatypeCleanupJS.js
@@ -372,6 +372,9 @@ window.SlaveDatatypeCleanup = (function SlaveDatatypeCleanup() {
 		if (typeof slave.vaginalAccessory !== "string") {
 			slave.vaginalAccessory = "none";
 		}
+		if (typeof slave.vaginalAttachments !== "string") {
+			slave.vaginalAttachments = "none";
+		}
 		if (typeof slave.dickAccessory !== "string") {
 			slave.dickAccessory = "none";
 		}
@@ -942,6 +945,9 @@ window.childCosmeticsDatatypeCleanup = function childCosmeticsDatatypeCleanup(ch
 	if (typeof child.vaginalAccessory !== "string") {
 		child.vaginalAccessory = "none";
 	}
+	if (typeof child.vaginalAttachments !== "string") {
+		child.vaginalAttachments = "none";
+	}
 	if (typeof child.dickAccessory !== "string") {
 		child.dickAccessory = "none";
 	}
diff --git a/src/js/rulesAssistantOptions.js b/src/js/rulesAssistantOptions.js
index f9daa49363c..49f07cb2bd6 100644
--- a/src/js/rulesAssistantOptions.js
+++ b/src/js/rulesAssistantOptions.js
@@ -917,6 +917,7 @@ window.rulesAssistantOptions = (function() {
 			this.appendChild(new VagAccVirginsList());
 			this.appendChild(new VagAccAVirginsList());
 			this.appendChild(new VagAccOtherList());
+			this.appendChild(new VagAccAttachmentsList();)
 			if (V.seeDicks !== 0 || V.makeDicks !== 0) {
 				this.appendChild(new DickAccVirginsList());
 				this.appendChild(new DickAccOtherList());
@@ -1334,6 +1335,14 @@ window.rulesAssistantOptions = (function() {
 		}
 	}
 
+	class VagAccAttachmentsList extends List {	/**TODO: this will need expanding */
+		constructor() {
+			super("Vaginal attachments for slaves with vaginal accessories", accs);
+			this.setValue(current_rule.set.vaginalAttachment);
+			this.onchange = (value) => current_rule.set.vaginalAttachment = value;
+		}
+	}
+
 	class DickAccVirginsList extends List {
 		constructor() {
 			super("Dick accessories for anal virgins", setup.dickAccessories.map(i => [i.name, i.value]));
diff --git a/src/js/slaveSummaryWidgets.js b/src/js/slaveSummaryWidgets.js
index 6a73d9818b1..3598ce92af9 100644
--- a/src/js/slaveSummaryWidgets.js
+++ b/src/js/slaveSummaryWidgets.js
@@ -4631,6 +4631,14 @@ window.SlaveSummaryUncached = (function(){
 				break;
 		}
 		r += " ";
+		switch (slave.vaginalAttachment) {	/** TODO: this will need serious work */
+			case "bullet vibrator":
+				r += `Attached bullet vibrator.`;
+				break;
+			case "vibrating dildo":
+				r += `Vibrating dildo.`;
+				break;
+		}
 	}
 
 	/** @param {App.Entity.SlaveState} slave */
diff --git a/src/pregmod/widgets/bodyswapWidgets.tw b/src/pregmod/widgets/bodyswapWidgets.tw
index 612aee85096..6e284a0f88b 100644
--- a/src/pregmod/widgets/bodyswapWidgets.tw
+++ b/src/pregmod/widgets/bodyswapWidgets.tw
@@ -118,6 +118,7 @@
 <<set $args[0].teeth = $args[1].teeth>>
 <<set $args[0].tonguePiercing = $args[1].tonguePiercing>>
 <<set $args[0].vagina = $args[1].vagina>>
+<<set $args[0].vaginalAttachment = $args[1].vaginalAttachment>>
 <<set $args[0].vaginaLube = $args[1].vaginaLube>>
 <<set $args[0].vaginaPiercing = $args[1].vaginaPiercing>>
 <<set $args[0].vaginaTat = $args[1].vaginaTat>>
diff --git a/src/uncategorized/reRelativeRecruiter.tw b/src/uncategorized/reRelativeRecruiter.tw
index a1a3fa2449a..45890cc72e8 100644
--- a/src/uncategorized/reRelativeRecruiter.tw
+++ b/src/uncategorized/reRelativeRecruiter.tw
@@ -485,6 +485,7 @@
 <<set $activeSlave.inflation = 0, $activeSlave.inflationType = "none", $activeSlave.inflationMethod = 0>>
 <<set $activeSlave.bodySwap = 0>>
 <<set $activeSlave.pregControl = "none">>
+<<set $activeSlave.vaginalAttachment = "none">>
 <<set $activeSlave.buttplugAttachment = "none">>
 <<run SetBellySize($activeSlave)>>
 <<if $activeSlave.physicalAge < 6>>
diff --git a/src/uncategorized/slaveStats.tw b/src/uncategorized/slaveStats.tw
index 1795cfc1d3e..c8487ab2b20 100644
--- a/src/uncategorized/slaveStats.tw
+++ b/src/uncategorized/slaveStats.tw
@@ -248,6 +248,7 @@ slaveName: $activeSlave.slaveName	   /* TODO: figure out why this is being inden
 <br>collar: $activeSlave.collar
 <br>shoes: $activeSlave.shoes
 <br>vaginalAccessory: $activeSlave.vaginalAccessory
+<br>vaginalAttachment: $activeSlave.vaginalAttachment
 <br>dickAccessory: $activeSlave.dickAccessory
 <br>legAccessory: $activeSlave.legAccessory
 <br>buttplug: $activeSlave.buttplug
-- 
GitLab