From 15aed1ade40177340bac4634d5b971b3c52c49bd Mon Sep 17 00:00:00 2001 From: PsiOmegaDelta Date: Sun, 3 Apr 2016 20:38:30 +0200 Subject: [PATCH] Makes it possible to further customize loadout items. Can now configure the path and contents of loadout items. --- .../preference_setup/loadout/gear_tweaks.dm | 75 ++++++++++++++++++- .../preference_setup/loadout/loadout.dm | 15 +++- 2 files changed, 86 insertions(+), 4 deletions(-) diff --git a/code/modules/client/preference_setup/loadout/gear_tweaks.dm b/code/modules/client/preference_setup/loadout/gear_tweaks.dm index 272f8618eb..ead0c2e738 100644 --- a/code/modules/client/preference_setup/loadout/gear_tweaks.dm +++ b/code/modules/client/preference_setup/loadout/gear_tweaks.dm @@ -7,7 +7,10 @@ /datum/gear_tweak/proc/get_default() return -/datum/gear_tweak/proc/apply_tweak(var/obj/item/I, var/metadata) +/datum/gear_tweak/proc/tweak_gear_data(var/metadata, var/datum/gear_data) + return + +/datum/gear_tweak/proc/tweak_item(var/obj/item/I, var/metadata) return /* @@ -34,7 +37,75 @@ var/datum/gear_tweak/color/gear_tweak_free_color_choice = new() return input(user, "Choose an item color.", "Character Preference", metadata) as null|anything in valid_colors return input(user, "Choose an item color.", "Global Preference", metadata) as color|null -/datum/gear_tweak/color/apply_tweak(var/obj/item/I, var/metadata) +/datum/gear_tweak/color/tweak_item(var/obj/item/I, var/metadata) if(valid_colors && !(metadata in valid_colors)) return I.color = metadata + +/* +* Path adjustment +*/ + +/datum/gear_tweak/path + var/list/valid_paths + +/datum/gear_tweak/path/New(var/list/valid_paths) + src.valid_paths = valid_paths + ..() + +/datum/gear_tweak/path/get_contents(var/metadata) + return "(Type: [metadata])" + +/datum/gear_tweak/path/get_default() + return valid_paths[1] + +/datum/gear_tweak/path/get_metadata(var/user, var/metadata) + return input(user, "Choose a type.", "Character Preference", metadata) as null|anything in valid_paths + +/datum/gear_tweak/path/tweak_gear_data(var/metadata, var/datum/gear_data/gear_data) + if(!(metadata in valid_paths)) + return + gear_data.path = valid_paths[metadata] + +/* +* Content adjustment +*/ + +/datum/gear_tweak/contents + var/list/valid_contents + +/datum/gear_tweak/contents/New() + valid_contents = args + ..() + +/datum/gear_tweak/contents/get_contents(var/metadata) + return "(Contents)" + +/datum/gear_tweak/contents/get_default() + . = list() + for(var/i = 1 to valid_contents.len) + var/list/contents = valid_contents[i] + . += contents[1] + +/datum/gear_tweak/contents/get_metadata(var/user, var/list/metadata) + . = list() + for(var/i = 1 to valid_contents.len) + var/entry = input(user, "Choose an entry.", "Character Preference", metadata[i]) as null|anything in (valid_contents[i] + list("Random", "None")) + if(entry) + . += entry + else + return metadata + +/datum/gear_tweak/contents/tweak_item(var/obj/item/I, var/list/metadata) + if(metadata.len != valid_contents.len) + return + for(var/i = 1 to valid_contents.len) + var/list/contents = valid_contents[i] + var/path = contents[metadata[i]] + if(path) + if(path == "Random") + path = pick(contents) + path = contents[path] + else if(path == "None") + continue + new path(I) diff --git a/code/modules/client/preference_setup/loadout/loadout.dm b/code/modules/client/preference_setup/loadout/loadout.dm index 05c33e6cae..09ab09d3db 100644 --- a/code/modules/client/preference_setup/loadout/loadout.dm +++ b/code/modules/client/preference_setup/loadout/loadout.dm @@ -184,8 +184,19 @@ var/list/gear_datums = list() var/sort_category = "General" var/list/gear_tweaks = list() //List of datums which will alter the item after it has been spawned. +/datum/gear_data + var/path + var/location + +/datum/gear_data/New(var/path, var/location) + src.path = path + src.location = location + /datum/gear/proc/spawn_item(var/location, var/metadata) - var/item = new path(location) + var/datum/gear_data/gd = new(path, location) for(var/datum/gear_tweak/gt in gear_tweaks) - gt.apply_tweak(item, metadata["[gt]"]) + gt.tweak_gear_data(metadata["[gt]"], gd) + var/item = new gd.path(gd.location) + for(var/datum/gear_tweak/gt in gear_tweaks) + gt.tweak_item(item, metadata["[gt]"]) return item