From f9ce2beba23302f7ecab4e3963c08dfebc9fc70b Mon Sep 17 00:00:00 2001 From: Gandalf <9026500+Gandalf2k15@users.noreply.github.com> Date: Tue, 8 Feb 2022 02:20:58 +0000 Subject: [PATCH] Sprefs (#11096) * Weeeeew * Update interaction_datum.dm --- .../client/preferences/erp_preferences.dm | 30 +++++++++++++++++++ .../code/interaction_component.dm | 2 ++ .../code/interaction_datum.dm | 5 ++++ .../skyrat/erp_preferences.tsx | 9 +++++- 4 files changed, 45 insertions(+), 1 deletion(-) diff --git a/modular_skyrat/master_files/code/modules/client/preferences/erp_preferences.dm b/modular_skyrat/master_files/code/modules/client/preferences/erp_preferences.dm index 7e79a7ebdaf..fccf1d54f4a 100644 --- a/modular_skyrat/master_files/code/modules/client/preferences/erp_preferences.dm +++ b/modular_skyrat/master_files/code/modules/client/preferences/erp_preferences.dm @@ -196,3 +196,33 @@ /datum/preference/choiced/erp_status_mechanics/apply_to_human(mob/living/carbon/human/target, value, datum/preferences/preferences) return FALSE + +/datum/preference/choiced/erp_sexuality + category = PREFERENCE_CATEGORY_GAME_PREFERENCES + savefile_identifier = PREFERENCE_PLAYER + savefile_key = "erp_sexuality_pref" + +/datum/preference/choiced/erp_sexuality/init_possible_values() + return list("Gay", "Straight", "None") // For simplicity's sake we only have 3 options. + +/datum/preference/choiced/erp_sexuality/create_default_value() + return "None" + +/datum/preference/choiced/erp_sexuality/is_accessible(datum/preferences/preferences) + if (!..(preferences)) + return FALSE + + if(CONFIG_GET(flag/disable_erp_preferences)) + return FALSE + + return preferences.read_preference(/datum/preference/toggle/master_erp_preferences) + +/datum/preference/choiced/erp_sexuality/deserialize(input, datum/preferences/preferences) + if(CONFIG_GET(flag/disable_erp_preferences)) + return "None" + if(!preferences.read_preference(/datum/preference/toggle/master_erp_preferences)) + return "None" + . = ..() + +/datum/preference/choiced/erp_sexuality/apply_to_human(mob/living/carbon/human/target, value, datum/preferences/preferences) + return FALSE diff --git a/modular_skyrat/modules/interaction_menu/code/interaction_component.dm b/modular_skyrat/modules/interaction_menu/code/interaction_component.dm index 5ec433b4c98..c429eed2228 100644 --- a/modular_skyrat/modules/interaction_menu/code/interaction_component.dm +++ b/modular_skyrat/modules/interaction_menu/code/interaction_component.dm @@ -25,6 +25,8 @@ var/datum/interaction/interaction = GLOB.interaction_instances[iterating_interaction_id] if(interaction.lewd && !self.client?.prefs?.read_preference(/datum/preference/toggle/erp)) continue + if(interaction.sexuality != "None" && interaction.sexuality != self.client?.prefs?.read_preference(/datum/preference/choiced/erp_sexuality)) + continue interactions.Add(interaction) /datum/component/interactable/RegisterWithParent() diff --git a/modular_skyrat/modules/interaction_menu/code/interaction_datum.dm b/modular_skyrat/modules/interaction_menu/code/interaction_datum.dm index b30b793f22c..313d8b27620 100644 --- a/modular_skyrat/modules/interaction_menu/code/interaction_datum.dm +++ b/modular_skyrat/modules/interaction_menu/code/interaction_datum.dm @@ -48,6 +48,8 @@ GLOBAL_LIST_EMPTY_TYPED(interaction_instances, /datum/interaction) var/list/interaction_requires = list() /// What color should the interaction button be? var/color = "blue" + /// What sexuality preference do we display for. + var/sexuality = "None" /datum/interaction/proc/allow_act(mob/living/carbon/human/user, mob/living/carbon/human/target) if(target == user && usage == INTERACTION_OTHER) @@ -155,6 +157,7 @@ GLOBAL_LIST_EMPTY_TYPED(interaction_instances, /datum/interaction) target_pleasure = sanitize_integer(json["target_pleasure"], 0, 100, 0) target_pain = sanitize_integer(json["target_pain"], 0, 100, 0) lewd = sanitize_integer(json["lewd"], 0, 1, 0) + sexuality = sanitize_text(json["sexuality"]) return TRUE /datum/interaction/proc/json_save(path) @@ -184,6 +187,7 @@ GLOBAL_LIST_EMPTY_TYPED(interaction_instances, /datum/interaction) "target_pleasure" = target_pleasure, "target_pain" = target_pain, "lewd" = lewd, + "sexuality" = sexuality, ) var/file = file(fpath) WRITE_FILE(file, json_encode(json)) @@ -253,6 +257,7 @@ GLOBAL_LIST_EMPTY_TYPED(interaction_instances, /datum/interaction) interaction.target_pleasure = sanitize_integer(ijson["target_pleasure"], 0, 100, 0) interaction.target_pain = sanitize_integer(ijson["target_pain"], 0, 100, 0) interaction.lewd = sanitize_integer(ijson["lewd"], 0, 1, 0) + interaction.sexuality = sanitize_text(ijson["sexuality"]) GLOB.interaction_instances[iname] = interaction diff --git a/tgui/packages/tgui/interfaces/PreferencesMenu/preferences/features/game_preferences/skyrat/erp_preferences.tsx b/tgui/packages/tgui/interfaces/PreferencesMenu/preferences/features/game_preferences/skyrat/erp_preferences.tsx index 2beb4e7c5a3..fc2f300681b 100644 --- a/tgui/packages/tgui/interfaces/PreferencesMenu/preferences/features/game_preferences/skyrat/erp_preferences.tsx +++ b/tgui/packages/tgui/interfaces/PreferencesMenu/preferences/features/game_preferences/skyrat/erp_preferences.tsx @@ -1,4 +1,4 @@ -import { CheckboxInput, FeatureToggle } from "../../base"; +import { CheckboxInput, FeatureDropdownInput, FeatureChoiced, FeatureToggle } from "../../base"; export const master_erp_pref: FeatureToggle = { name: "Show/Hide Erotic Roleplay Preferences", @@ -76,3 +76,10 @@ export const autocum_pref: FeatureToggle = { description: "Toggles whether you automatically cum using the arousal system, or if you need to do it manually.", component: CheckboxInput, }; + +export const erp_sexuality_pref: FeatureChoiced = { + name: "Sexuality Preference", + category: "ERP", + description: "Determines what sexual content you see, limited use. None will show all content.", + component: FeatureDropdownInput, +};