From 45174442fa9379c7cd14d778131822498bb5ee9f Mon Sep 17 00:00:00 2001
From: Arkerthan <arkerthan@gmail.com>
Date: Thu, 21 May 2020 11:23:24 +0200
Subject: [PATCH] Add occupancy report to facility framework

---
 src/004-base/facility.js                      | 11 ++++
 src/facilities/arcade/arcadeFramework.js      |  2 +-
 src/facilities/armory/armoryFramework.js      | 15 ++++--
 src/facilities/club/clubFramework.js          |  2 +-
 .../headGirlSuite/headGirlSuiteFramework.js   | 16 ++++--
 .../incubator/incubatorFramework.js           |  2 +-
 src/facilities/nursery/nurseryFramework.js    |  7 +++
 src/facilities/pit/pitFramework.js            |  5 ++
 .../schoolroom/schoolroomFramework.js         |  2 +-
 src/facilities/spa/spaFramework.js            |  2 +-
 src/gui/quicklinks.js                         | 52 ++++++-------------
 11 files changed, 70 insertions(+), 46 deletions(-)

diff --git a/src/004-base/facility.js b/src/004-base/facility.js
index 6c5c4b92124..6348f7d78f1 100644
--- a/src/004-base/facility.js
+++ b/src/004-base/facility.js
@@ -522,6 +522,17 @@ App.Entity.Facilities.Facility = class {
 		return res;
 	}
 
+	/**
+	 * @param {boolean} long
+	 * @returns {string}
+	 */
+	occupancyReport(long) {
+		const nonEmployees = this.nonEmployeeOccupantsCount;
+		return `(${this.hostedSlaves}${nonEmployees ? `+${nonEmployees}` : ""}/${this.capacity}${long
+			? ` ${this.job().desc.position}s${this.manager && this.manager.currentEmployee ? `, ${this.manager.desc.position}` : ""}`
+			: this.manager && this.manager.currentEmployee ? ", L" : ""})`;
+	}
+
 	/**
 	 * @protected
 	 * @param {string} jobName
diff --git a/src/facilities/arcade/arcadeFramework.js b/src/facilities/arcade/arcadeFramework.js
index 961d529eb86..58f5d63338c 100644
--- a/src/facilities/arcade/arcadeFramework.js
+++ b/src/facilities/arcade/arcadeFramework.js
@@ -3,7 +3,7 @@ App.Data.Facilities.arcade = {
 	genericName: null,
 	jobs: {
 		assignee: {
-			position: "whore",
+			position: "inmate",
 			assignment: Job.ARCADE,
 			publicSexUse: true,
 			fuckdollAccepted: true,
diff --git a/src/facilities/armory/armoryFramework.js b/src/facilities/armory/armoryFramework.js
index 2f866ee1672..c38797f641f 100644
--- a/src/facilities/armory/armoryFramework.js
+++ b/src/facilities/armory/armoryFramework.js
@@ -21,6 +21,15 @@ App.Data.Facilities.armory = {
 	}
 };
 
-App.Entity.facilities.armory = new App.Entity.Facilities.Facility(
-	App.Data.Facilities.armory
-);
+App.Entity.Facilities.Armory = class extends App.Entity.Facilities.Facility {
+	constructor() {
+		super(App.Data.Facilities.armory);
+	}
+
+	/** @override */
+	occupancyReport(long) {
+		return this.manager.currentEmployee ? "(BG)" : "";
+	}
+};
+
+App.Entity.facilities.armory = new App.Entity.Facilities.Armory();
diff --git a/src/facilities/club/clubFramework.js b/src/facilities/club/clubFramework.js
index 02638c99d13..3d25fd0af3b 100644
--- a/src/facilities/club/clubFramework.js
+++ b/src/facilities/club/clubFramework.js
@@ -3,7 +3,7 @@ App.Data.Facilities.club = {
 	genericName: null,
 	jobs: {
 		slut: {
-			position: "Slut",
+			position: "slut",
 			assignment: Job.CLUB,
 			publicSexUse: true,
 			fuckdollAccepted: false,
diff --git a/src/facilities/headGirlSuite/headGirlSuiteFramework.js b/src/facilities/headGirlSuite/headGirlSuiteFramework.js
index a980f8a700c..6f0c0f246b3 100644
--- a/src/facilities/headGirlSuite/headGirlSuiteFramework.js
+++ b/src/facilities/headGirlSuite/headGirlSuiteFramework.js
@@ -33,6 +33,16 @@ App.Data.Facilities.headGirlSuite = {
 	}
 };
 
-App.Entity.facilities.headGirlSuite = new App.Entity.Facilities.SingleJobFacility(
-	App.Data.Facilities.headGirlSuite
-);
+App.Entity.Facilities.HeadGirlSuite = class extends App.Entity.Facilities.SingleJobFacility {
+	constructor() {
+		super(App.Data.Facilities.headGirlSuite);
+	}
+
+	/** @override */
+	occupancyReport(long) {
+		return this.manager.currentEmployee ? `(HG${
+			this.hostedSlaves ? long ? " and slave" : ", 1" : ""})` : "";
+	}
+};
+
+App.Entity.facilities.headGirlSuite = new App.Entity.Facilities.HeadGirlSuite();
diff --git a/src/facilities/incubator/incubatorFramework.js b/src/facilities/incubator/incubatorFramework.js
index a425efb8c58..bf1867fa54d 100644
--- a/src/facilities/incubator/incubatorFramework.js
+++ b/src/facilities/incubator/incubatorFramework.js
@@ -3,7 +3,7 @@ App.Data.Facilities.incubator = {
 	genericName: null,
 	jobs: {
 		tank: {
-			position: "Tank",
+			position: "tank",
 			assignment: Job.TANK,
 			publicSexUse: false,
 			fuckdollAccepted: false
diff --git a/src/facilities/nursery/nurseryFramework.js b/src/facilities/nursery/nurseryFramework.js
index 2403edffab0..2c7ed603499 100644
--- a/src/facilities/nursery/nurseryFramework.js
+++ b/src/facilities/nursery/nurseryFramework.js
@@ -60,6 +60,13 @@ App.Entity.Facilities.Nursery = class extends App.Entity.Facilities.SingleJobFac
 	// get capacity() {
 	// 	return State.Variables.nurseryNannies;
 	// }
+
+	/** @override */
+	occupancyReport(long) {
+		return long
+			? `(${V.nurseryBabies}/${V.nursery} babies, ${this.nursery.hostedSlaves}/${V.nurseryNannies} nannies${this.manager.currentEmployee ? ", attendant" : ""}`
+			: `(${V.nurseryBabies}/${V.nursery}, ${this.nursery.hostedSlaves}/${V.nurseryNannies}${this.manager.currentEmployee ? ", L" : ""}`;
+	}
 };
 
 App.Entity.facilities.nursery = new App.Entity.Facilities.Nursery();
diff --git a/src/facilities/pit/pitFramework.js b/src/facilities/pit/pitFramework.js
index bac95c22fe1..b68554b2a0a 100644
--- a/src/facilities/pit/pitFramework.js
+++ b/src/facilities/pit/pitFramework.js
@@ -45,6 +45,11 @@ App.Entity.Facilities.Pit = class extends App.Entity.Facilities.SingleJobFacilit
 	get capacity() {
 		return super.capacity > 0 ? Number.MAX_VALUE : 0;
 	}
+
+	/** @override */
+	occupancyReport(long) {
+		return `(${this.hostedSlaves}${long ? ` ${this.job().desc.position}s` : ""})`;
+	}
 };
 
 App.Entity.facilities.pit = new App.Entity.Facilities.Pit();
diff --git a/src/facilities/schoolroom/schoolroomFramework.js b/src/facilities/schoolroom/schoolroomFramework.js
index 04b487df197..0676a003f17 100644
--- a/src/facilities/schoolroom/schoolroomFramework.js
+++ b/src/facilities/schoolroom/schoolroomFramework.js
@@ -3,7 +3,7 @@ App.Data.Facilities.schoolroom = {
 	genericName: null,
 	jobs: {
 		student: {
-			position: "",
+			position: "student",
 			assignment: Job.SCHOOL,
 			publicSexUse: false,
 			fuckdollAccepted: false,
diff --git a/src/facilities/spa/spaFramework.js b/src/facilities/spa/spaFramework.js
index 2375a1bde62..475e5f10aa2 100644
--- a/src/facilities/spa/spaFramework.js
+++ b/src/facilities/spa/spaFramework.js
@@ -3,7 +3,7 @@ App.Data.Facilities.spa = {
 	genericName: null,
 	jobs: {
 		assignee: {
-			position: "",
+			position: "bather",
 			assignment: Job.SPA,
 			publicSexUse: false,
 			fuckdollAccepted: false,
diff --git a/src/gui/quicklinks.js b/src/gui/quicklinks.js
index 0ca0a49f59e..9b8d71fbbf3 100644
--- a/src/gui/quicklinks.js
+++ b/src/gui/quicklinks.js
@@ -147,42 +147,24 @@ App.UI.quickMenu = (function() {
 	});
 
 	// extra information behind the link, is a function
+	const f = App.Entity.facilities;
 	const extraInfo = cleanPassageMapping({
-		Arcade: () => `(${App.Entity.facilities.arcade.employeesIDs().size}/${V.arcade}${
-			V.abbreviateSidebar === 2 ? " inmates" : ""})`,
-		"BG Select": () => V.Bodyguard !== 0 ? "(BG)" : "",
-		Brothel: () => `(${App.Entity.facilities.brothel.employeesIDs().size}/${V.brothel}${
-			V.abbreviateSidebar === 2 ? ` whores${V.Madam ? ", madam" : ""}` : V.Madam ? ", L" : ""})`,
-		Cellblock: () => `(${App.Entity.facilities.cellblock.employeesIDs().size}/${V.cellblock}${
-			V.abbreviateSidebar === 2 ? ` prisoners${V.Wardeness ? ", wardeness" : ""}` : V.Wardeness ? ", L" : ""})`,
-		Clinic: () => `(${App.Entity.facilities.clinic.employeesIDs().size}/${V.clinic}${
-			V.abbreviateSidebar === 2 ? ` patients${V.Nurse ? ", nurse" : ""}` : V.Nurse ? ", L" : ""})`,
-		Club: () => `(${App.Entity.facilities.club.employeesIDs().size}/${V.brothel}${
-			V.abbreviateSidebar === 2 ? ` sluts${V.DJ ? ", DJ" : ""}` : V.DJ ? ", L" : ""})`,
-		Dairy: () => {
-			const SCapT9 = V.bioreactorsXY + V.bioreactorsXX + V.bioreactorsHerm + V.bioreactorsBarren;
-			return `(${App.Entity.facilities.dairy.employeesIDs().size}${SCapT9 ? `+${SCapT9}` : ""}/${V.dairy}${
-				V.abbreviateSidebar === 2 ? ` cows${V.Milkmaid ? ", milkmaid" : ""}`
-					: V.Milkmaid ? ", L" : ""}`;
-		},
-		Farmyard: () => `(${App.Entity.facilities.farmyard.employeesIDs().size}/${V.farmyard}${
-			V.abbreviateSidebar === 2 ? ` farmhands${V.Farmer ? ", farmer" : ""}` : V.Farmer ? ", L" : ""})`,
-		"Head Girl Suite": () => V.HeadGirl !== 0 ? `(HG${
-			App.Entity.facilities.headGirlSuite.employeesIDs().size ?
-				V.abbreviateSidebar === 2 ? " and slave" : ", 1" : ""})` : "",
-		Incubator: () => `(${V.incubatorSlaves}/${V.incubator}${V.abbreviateSidebar === 2 ? " slaves" : ""})`,
-		"Master Suite": () => `(${App.Entity.facilities.masterSuite.employeesIDs().size}/${V.masterSuite}${
-			V.abbreviateSidebar === 2 ? ` fucktoys${V.Concubine ? ", concubine" : ""}` : V.Concubine ? ", L" : ""})`,
-		Nursery: () => V.abbreviateSidebar === 2
-			? `(${V.nurseryBabies}/${V.nursery} babies, ${App.Entity.facilities.nursery.employeesIDs().size}/${V.nurseryNannies} nannies${V.Matron ? ", attendant" : ""}`
-			: `(${V.nurseryBabies}/${V.nursery}, ${App.Entity.facilities.nursery.employeesIDs().size}/${V.nurseryNannies}${V.Matron ? ", L" : ""}`,
-		Pit: () => `(${V.fighterIDs.length}${V.abbreviateSidebar === 2 ? " combatants" : ""}`,
-		Schoolroom: () => `(${App.Entity.facilities.schoolroom.employeesIDs().size}/${V.schoolroom}${
-			V.abbreviateSidebar === 2 ? ` students${V.Schoolteacher ? ", schoolteacher" : ""}` : V.Schoolteacher ? ", L" : ""})`,
-		"Servants' Quarters": () => `(${App.Entity.facilities.servantsQuarters.employeesIDs().size}/${V.servantsQuarters}${
-			V.abbreviateSidebar === 2 ? ` servants${V.Stewardess ? ", stewardess" : ""}` : V.Stewardess ? ", L" : ""})`,
-		Spa: () => `(${App.Entity.facilities.spa.employeesIDs().size}/${V.spa}${
-			V.abbreviateSidebar === 2 ? ` bathing${V.Attendant ? ", attendant" : ""}` : V.Attendant ? ", L" : ""})`,
+		Arcade:         () => f.arcade      .occupancyReport(V.abbreviateSidebar === 2),
+		"BG Select":    () => f.armory      .occupancyReport(V.abbreviateSidebar === 2),
+		Brothel:        () => f.brothel     .occupancyReport(V.abbreviateSidebar === 2),
+		Cellblock:      () => f.cellblock   .occupancyReport(V.abbreviateSidebar === 2),
+		Clinic:         () => f.clinic      .occupancyReport(V.abbreviateSidebar === 2),
+		Club:           () => f.club        .occupancyReport(V.abbreviateSidebar === 2),
+		Dairy:          () => f.dairy       .occupancyReport(V.abbreviateSidebar === 2),
+		Farmyard:       () => f.farmyard    .occupancyReport(V.abbreviateSidebar === 2),
+		"Head Girl Suite": () => f.headGirlSuite.occupancyReport(V.abbreviateSidebar === 2),
+		Incubator:      () => f.incubator   .occupancyReport(V.abbreviateSidebar === 2),
+		"Master Suite": () => f.masterSuite .occupancyReport(V.abbreviateSidebar === 2),
+		Nursery:        () => f.nursery     .occupancyReport(V.abbreviateSidebar === 2),
+		Pit:            () => f.pit         .occupancyReport(V.abbreviateSidebar === 2),
+		Schoolroom:     () => f.schoolroom  .occupancyReport(V.abbreviateSidebar === 2),
+		"Servants' Quarters": () => f.servantsQuarters.occupancyReport(V.abbreviateSidebar === 2),
+		Spa:            () => f.spa         .occupancyReport(V.abbreviateSidebar === 2),
 	});
 
 	// true shows a notification symbol
-- 
GitLab