From 1ca5acdf2c6ed2e992eccb2210f4fb3f7b1cb155 Mon Sep 17 00:00:00 2001
From: 2hu4u <2hu4u@airmail.cc>
Date: Sat, 14 Jul 2018 15:14:49 +1200
Subject: [PATCH] Rules Assistant Haircuts

Added hair length maintenance to the RA, put RA haircuts into backwards
compat.
---
 src/js/DefaultRules.tw                      | 12 ++++++++++++
 src/js/rulesAssistant.tw                    |  1 +
 src/js/rulesAssistantOptions.tw             | 15 +++++++++++++++
 src/uncategorized/BackwardsCompatibility.tw |  4 ++++
 src/uncategorized/initRules.tw              |  2 ++
 5 files changed, 34 insertions(+)

diff --git a/src/js/DefaultRules.tw b/src/js/DefaultRules.tw
index 029db52dbd0..2b7898375cc 100644
--- a/src/js/DefaultRules.tw
+++ b/src/js/DefaultRules.tw
@@ -1769,6 +1769,18 @@ window.DefaultRules = (function() {
 			}
 		}
 
+		if (rule.haircuts !== undefined && (rule.haircuts !== "no default setting")) {
+			if (slave.bald != 1) {
+				if (rule.haircuts === 1 && slave.haircuts !== 1) {
+					r += `<br>${slave.slaveName}'s hair will now be maintained at ${lengthToEitherUnit(slave.hLength)} long.`;
+					slave.haircuts = 1;
+				} else if (rule.haircuts === 0 && slave.haircuts !== 0) {
+					r += `<br>${slave.slaveName}'s hair length will no longer be maintained.`;
+					slave.haircuts = 0;
+				}
+			}
+		}
+
 		if (rule.pubicHColor !== undefined && (rule.pubicHColor !== "no default setting")) {
 			if (slave.pubicHStyle != "bald" && slave.pubicHStyle != "hairless") {
 				if ((slave.pubicHColor !== rule.pubicHColor)) {
diff --git a/src/js/rulesAssistant.tw b/src/js/rulesAssistant.tw
index 3e0d87f0bdf..c7fcfe7abf3 100644
--- a/src/js/rulesAssistant.tw
+++ b/src/js/rulesAssistant.tw
@@ -208,6 +208,7 @@ window.emptyDefaultRule = function emptyDefaultRule() {
 			nails: "no default setting",
 			hColor: "no default setting",
 			hLength: "no default setting",
+			haircuts: "no default setting",
 			hStyle: "no default setting",
 			pubicHColor: "no default setting",
 			pubicHStyle: "no default setting",
diff --git a/src/js/rulesAssistantOptions.tw b/src/js/rulesAssistantOptions.tw
index 501d897b1bd..dd4a98aa105 100644
--- a/src/js/rulesAssistantOptions.tw
+++ b/src/js/rulesAssistantOptions.tw
@@ -969,6 +969,7 @@ window.rulesAssistantOptions = (function() {
 			this.appendChild(new MakeupList());
 			this.appendChild(new NailsList());
 			this.appendChild(new HairLengthList());
+			this.appendChild(new HaircutsList());
 			this.appendChild(new HairColourList());
 			this.appendChild(new HairStyleList());
 			this.appendChild(new PubicHairColourList());
@@ -2076,6 +2077,20 @@ window.rulesAssistantOptions = (function() {
 			this.onchange = (value) => current_rule.set.hLength = value;
 		}
 	}
+
+	class HaircutsList extends List {
+		constructor() {
+			const pairs = [
+				["no default setting"],
+				["maintain hair length", 1],
+				["do not maintain hair length", 0]
+			];
+			super("Hair length maintenance", pairs);
+			this.setValue(current_rule.set.haircuts);
+			this.onchange = (value) => current_rule.set.haircuts = value;
+		}
+	}
+
 	class HairColourList extends List {
 		constructor() {
 			const pairs = [
diff --git a/src/uncategorized/BackwardsCompatibility.tw b/src/uncategorized/BackwardsCompatibility.tw
index 7ce96339b6c..87c736cf6b9 100644
--- a/src/uncategorized/BackwardsCompatibility.tw
+++ b/src/uncategorized/BackwardsCompatibility.tw
@@ -2945,3 +2945,7 @@ Done!
 	if (x.set.preg === -1) x.set.preg = true;
 	else x.set.preg = false;
 })>>
+
+<<run $defaultRules.filter(x => !([1, 0, "no default setting"].includes(x.set.haircuts))).forEach(x => {
+	x.set.haircuts = "no default setting";
+})>>
diff --git a/src/uncategorized/initRules.tw b/src/uncategorized/initRules.tw
index 2dc97f98aae..aaf8c51768e 100644
--- a/src/uncategorized/initRules.tw
+++ b/src/uncategorized/initRules.tw
@@ -47,6 +47,7 @@
 	nails: "no default setting",
 	hColor: "no default setting",
 	hLength: "no default setting",
+	haircuts: "no default setting",
 	hStyle: "no default setting",
 	pubicHColor: "no default setting",
 	pubicHStyle: "no default setting",
@@ -169,6 +170,7 @@
 	nails: "no default setting",
 	hColor: "no default setting",
 	hLength: "no default setting",
+	haircuts: "no default setting",
 	hStyle: "no default setting",
 	pubicHColor: "no default setting",
 	pubicHStyle: "no default setting",
-- 
GitLab