From dad4e19785c9b74bfdd16e5c93989b728048fd6b Mon Sep 17 00:00:00 2001 From: Yoshax Date: Sat, 18 Feb 2017 21:46:13 +0000 Subject: [PATCH] Does custom food stuff --- code/_helpers/icons_vr.dm | 45 +++ code/game/machinery/vending_vr.dm | 27 ++ .../food/z_custom_food_vr.dm | 279 ++++++++++++++++++ icons/obj/food_custom.dmi | Bin 6903 -> 23788 bytes vorestation.dme | 2 + 5 files changed, 353 insertions(+) create mode 100644 code/_helpers/icons_vr.dm create mode 100644 code/modules/reagents/reagent_containers/food/z_custom_food_vr.dm diff --git a/code/_helpers/icons_vr.dm b/code/_helpers/icons_vr.dm new file mode 100644 index 0000000000..be5de68e82 --- /dev/null +++ b/code/_helpers/icons_vr.dm @@ -0,0 +1,45 @@ +/proc/AverageColor(var/icon/I, var/accurate = 0, var/ignoreGreyscale = 0) +//Accurate: Use more accurate color averaging, usually has better results and prevents muddied or overly dark colors. Mad thanks to wwjnc. +//ignoreGreyscale: Excempts greyscale colors from the color list, useful for filtering outlines or plate overlays. + var/list/colors = ListColors(I, ignoreGreyscale) + if(!colors.len) + return null + + var/list/colorsum = list(0, 0, 0) //Holds the sum of the RGB values to calculate the average + var/list/RGB = list(0, 0, 0) //Temp list for each color + var/total = colors.len + + var/final_average + if (accurate) //keeping it legible + for(var/i = 1 to total) + RGB = ReadRGB(colors[i]) + colorsum[1] += RGB[1]*RGB[1] + colorsum[2] += RGB[2]*RGB[2] + colorsum[3] += RGB[3]*RGB[3] + final_average = rgb(sqrt(colorsum[1]/total), sqrt(colorsum[2]/total), sqrt(colorsum[3]/total)) + else + for(var/i = 1 to total) + RGB = ReadRGB(colors[i]) + colorsum[1] += RGB[1] + colorsum[2] += RGB[2] + colorsum[3] += RGB[3] + final_average = rgb(colorsum[1]/total, colorsum[2]/total, colorsum[3]/total) + return final_average + +/proc/ListColors(var/icon/I, var/ignoreGreyscale = 0) + var/list/colors = list() + for(var/x_pixel = 1 to I.Width()) + for(var/y_pixel = 1 to I.Height()) + var/this_color = I.GetPixel(x_pixel, y_pixel) + if(this_color) + if (ignoreGreyscale && ReadHSV(RGBtoHSV(this_color))[2] == 0) //If saturation is 0, must be greyscale + continue + colors.Add(this_color) + return colors + +/proc/empty_Y_space(var/icon/I) //Returns the amount of lines containing only transparent pixels in an icon, starting from the bottom + for(var/y_pixel = 1 to I.Height()) + for(var/x_pixel = 1 to I.Width()) + if (I.GetPixel(x_pixel, y_pixel)) + return y_pixel - 1 + return null \ No newline at end of file diff --git a/code/game/machinery/vending_vr.dm b/code/game/machinery/vending_vr.dm index 203e5c03a4..1b37f51685 100644 --- a/code/game/machinery/vending_vr.dm +++ b/code/game/machinery/vending_vr.dm @@ -21,6 +21,33 @@ /obj/item/device/flashlight/glowstick = 3, /obj/item/device/flashlight/glowstick/red = 3, /obj/item/device/flashlight/glowstick/blue = 3, /obj/item/device/flashlight/glowstick/orange =3, /obj/item/device/flashlight/glowstick/yellow = 3, /obj/item/weapon/reagent_containers/spray/windowsealant = 5) +/obj/machinery/vending/dinnerware + name = "Dinnerware" + desc = "A kitchen and restaurant equipment vendor." + product_ads = "Mm, food stuffs!;Food and food accessories.;Get your plates!;You like forks?;I like forks.;Woo, utensils.;You don't really need these..." + icon_state = "dinnerware" + products = list( + /obj/item/weapon/tray = 8, + /obj/item/weapon/material/kitchen/utensil/fork = 6, + /obj/item/weapon/material/kitchen/utensil/knife = 6, + /obj/item/weapon/material/kitchen/utensil/spoon = 6, + /obj/item/weapon/material/knife = 3, + /obj/item/weapon/material/kitchen/rollingpin = 2, + /obj/item/weapon/reagent_containers/food/drinks/glass2/square = 8, + /obj/item/weapon/reagent_containers/food/drinks/glass2/shake = 8, + /obj/item/weapon/glass_extra/stick = 15, + /obj/item/weapon/glass_extra/straw = 15, + /obj/item/clothing/suit/chef/classic = 2, + /obj/item/weapon/storage/toolbox/lunchbox = 3, + /obj/item/weapon/storage/toolbox/lunchbox/heart = 3, + /obj/item/weapon/storage/toolbox/lunchbox/cat = 3, + /obj/item/weapon/storage/toolbox/lunchbox/nt = 3, + /obj/item/weapon/storage/toolbox/lunchbox/mars = 3, + /obj/item/weapon/storage/toolbox/lunchbox/cti = 3, + /obj/item/weapon/storage/toolbox/lunchbox/nymph = 3, + /obj/item/weapon/storage/toolbox/lunchbox/syndicate = 3, + /obj/item/trash/bowl = 30) + contraband = list(/obj/item/weapon/material/knife/butch = 2) /* var/list/log = list() var/req_log_access = access_armory diff --git a/code/modules/reagents/reagent_containers/food/z_custom_food_vr.dm b/code/modules/reagents/reagent_containers/food/z_custom_food_vr.dm new file mode 100644 index 0000000000..eeeb9896ef --- /dev/null +++ b/code/modules/reagents/reagent_containers/food/z_custom_food_vr.dm @@ -0,0 +1,279 @@ +// Customizable Foods ////////////////////////////////////////// +var/global/deepFriedEverything = 0 +var/global/deepFriedNutriment = 0 +var/global/foodNesting = 0 +var/global/recursiveFood = 0 +var/global/ingredientLimit = 20 + + +/obj/item/weapon/reagent_containers/food/snacks/customizable + icon = 'icons/obj/food_custom.dmi' + trash = /obj/item/trash/plate + bitesize = 2 + + var/ingMax = 100 + var/list/ingredients = list() + var/stackIngredients = 0 + var/fullyCustom = 0 + var/addTop = 0 + var/image/topping + var/image/filling + +/obj/item/weapon/reagent_containers/food/snacks/customizable/New(loc,ingredient) + . = ..() + topping = image(icon,,"[initial(icon_state)]_top") + filling = image(icon,,"[initial(icon_state)]_filling") + src.reagents.add_reagent("nutriment",3) + src.updateName() + return + +/obj/item/weapon/reagent_containers/food/snacks/customizable/attackby(obj/item/I, mob/user) + if(istype(I,/obj/item/weapon/reagent_containers/food/snacks)) + if((contents.len >= ingMax) || (contents.len >= ingredientLimit)) + to_chat(user, "That's already looking pretty stuffed.") + return + + var/obj/item/weapon/reagent_containers/food/snacks/S = I + if(istype(S,/obj/item/weapon/reagent_containers/food/snacks/customizable)) + var/obj/item/weapon/reagent_containers/food/snacks/customizable/SC = S + if(fullyCustom && SC.fullyCustom) + to_chat(user, "You slap yourself on the back of the head for thinking that stacking plates is an interesting dish.") + return + if(!recursiveFood && istype(I, /obj/item/weapon/reagent_containers/food/snacks/customizable)) + //to_chat(user, "[pick("As uniquely original as that idea is, you can't figure out how to perform it.","That would be a straining topological exercise.","This world just isn't ready for your cooking genius.","It's possible that you may have a problem.","It won't fit.","You don't think that would taste very good.","Quit goofin' around.")]") + to_chat(user, "As uniquely original as that idea is, you can't figure out how to perform it.") + return + /*if(!user.drop_item()) + user << "\The [I] is stuck to your hands!" + return*/ + user.drop_item() + I.forceMove(src) + + S.reagents.trans_to(src,S.reagents.total_volume) + ingredients += S + + if(src.addTop) + overlays -= topping //thank you Comic + if(!fullyCustom && !stackIngredients && overlays.len) + overlays -= filling //we can't directly modify the overlay, so we have to remove it and then add it again + var/newcolor = S.filling_color != "#FFFFFF" ? S.filling_color : AverageColor(getFlatIcon(S, S.dir, 0), 1, 1) + filling.color = BlendRGB(filling.color, newcolor, 1/ingredients.len) + overlays += filling + else + overlays += generateFilling(S) + if(addTop) + drawTopping() + + updateName() + to_chat(user, "You add the [I.name] to the [src.name].") + else + . = ..() + return + +/obj/item/weapon/reagent_containers/food/snacks/customizable/proc/generateFilling(var/obj/item/weapon/reagent_containers/food/snacks/S, params) + var/image/I + if(fullyCustom) + var/icon/C = getFlatIcon(S, S.dir, 0) + I = image(C) + I.pixel_y = 12 * empty_Y_space(C) + else + I = filling + if(istype(S) && S.filling_color != "#FFFFFF") + I.color = S.filling_color + else + I.color = AverageColor(getFlatIcon(S, S.dir, 0), 1, 1) + if(src.stackIngredients) + I.pixel_y = src.ingredients.len * 2 + else + src.overlays.len = 0 + if(src.fullyCustom || src.stackIngredients) + var/clicked_x = text2num(params2list(params)["icon-x"]) + if (isnull(clicked_x)) + I.pixel_x = 0 + else if (clicked_x < 9) + I.pixel_x = -2 //this looks pretty shitty + else if (clicked_x < 14) + I.pixel_x = -1 //but hey + else if (clicked_x < 19) + I.pixel_x = 0 //it works + else if (clicked_x < 25) + I.pixel_x = 1 + else + I.pixel_x = 2 + return I + +/obj/item/weapon/reagent_containers/food/snacks/customizable/proc/updateName() + var/i = 1 + var/new_name + for(var/obj/item/S in ingredients) + if(i == 1) + new_name += "[S.name]" + else if(i == src.ingredients.len) + new_name += " and [S.name]" + else + new_name += ", [S.name]" + i++ + new_name = "[new_name] [initial(name)]" + if(length(new_name) >= 150) + name = "something yummy" + else + name = new_name + return new_name + +/obj/item/weapon/reagent_containers/food/snacks/customizable/Destroy() + for(. in ingredients) qdel(.) + return ..() + +/obj/item/weapon/reagent_containers/food/snacks/customizable/proc/drawTopping() + var/image/I = topping + I.pixel_y = (ingredients.len+1)*2 + overlays += I + + +// Sandwiches ////////////////////////////////////////////////// + +/obj/item/weapon/reagent_containers/food/snacks/customizable/sandwich + name = "sandwich" + desc = "A timeless classic." + icon_state = "c_sandwich" + stackIngredients = 1 + addTop = 0 + +/obj/item/weapon/reagent_containers/food/snacks/customizable/sandwich/attackby(obj/item/I,mob/user) + if(istype(I,/obj/item/weapon/reagent_containers/food/snacks/breadslice) && !addTop) + I.reagents.trans_to(src,I.reagents.total_volume) + qdel(I) + addTop = 1 + src.drawTopping() + else + ..() + +/obj/item/weapon/reagent_containers/food/snacks/customizable/burger + name = "burger" + desc = "The apex of space culinary achievement." + icon_state = "c_burger" + stackIngredients = 1 + addTop = 1 + +// Misc Subtypes /////////////////////////////////////////////// + +/obj/item/weapon/reagent_containers/food/snacks/customizable/fullycustom + name = "on a plate" + desc = "A unique dish." + icon_state = "fullycustom" + fullyCustom = 1 //how the fuck do you forget to add this? + ingMax = 1 + +/obj/item/weapon/reagent_containers/food/snacks/customizable/soup + name = "soup" + desc = "A bowl with liquid and... stuff in it." + icon_state = "soup" + trash = /obj/item/trash/bowl + +/obj/item/weapon/reagent_containers/food/snacks/customizable/pizza + name = "pan pizza" + desc = "A personalized pan pizza meant for only one person." + icon_state = "personal_pizza" + +/obj/item/weapon/reagent_containers/food/snacks/customizable/pasta + name = "spaghetti" + desc = "Noodles. With stuff. Delicious." + icon_state = "pasta_bot" + +// Various Snacks ////////////////////////////////////////////// + +/obj/item/weapon/reagent_containers/food/snacks/breadslice/attackby(obj/item/I,mob/user,params) + if(istype(I,/obj/item/weapon/reagent_containers/food/snacks)) + if(!recursiveFood && istype(I, /obj/item/weapon/reagent_containers/food/snacks/customizable)) + to_chat(user, "Sorry, no recursive food.") + return + var/obj/F = new/obj/item/weapon/reagent_containers/food/snacks/customizable/sandwich(get_turf(src),I) //boy ain't this a mouthful + F.attackby(I, user) + qdel(src) + else + return ..() + +/obj/item/weapon/reagent_containers/food/snacks/bun/attackby(obj/item/I, mob/user) + // Bun + meatball = burger + if(istype(I,/obj/item/weapon/reagent_containers/food/snacks/meatball)) + new /obj/item/weapon/reagent_containers/food/snacks/monkeyburger(src) + to_chat(user, "You make a burger.") + qdel(I) + qdel(src) + + // Bun + cutlet = hamburger + else if(istype(I, /obj/item/weapon/reagent_containers/food/snacks/cutlet)) + new /obj/item/weapon/reagent_containers/food/snacks/monkeyburger(src) + to_chat(user, "You make a burger.") + qdel(I) + qdel(src) + + // Bun + sausage = hotdog + else if(istype(I, /obj/item/weapon/reagent_containers/food/snacks/sausage)) + new /obj/item/weapon/reagent_containers/food/snacks/hotdog(src) + to_chat(user, "You make a hotdog.") + qdel(I) + qdel(src) + + if(istype(I,/obj/item/weapon/reagent_containers/food/snacks)) + if(!recursiveFood && istype(I, /obj/item/weapon/reagent_containers/food/snacks/customizable)) + to_chat(user, "Sorry, no recursive food.") + return + var/obj/F = new/obj/item/weapon/reagent_containers/food/snacks/customizable/burger(get_turf(src),I) + F.attackby(I, user) + qdel(src) + else + return ..() + +/obj/item/weapon/reagent_containers/food/snacks/sliceable/flatdough/attackby(obj/item/I, mob/user) + if(istype(I, /obj/item/weapon/reagent_containers/food/snacks)) + if(!recursiveFood && istype(I, /obj/item/weapon/reagent_containers/food/snacks/customizable)) + to_chat(user, "Sorry, no recursive food.") + return + var/obj/F = new/obj/item/weapon/reagent_containers/food/snacks/customizable/pizza(get_turf(src),I) + F.attackby(I, user) + qdel(src) + else + return ..() + +/obj/item/weapon/reagent_containers/food/snacks/spagetti/attackby(obj/item/I, mob/user) + if(istype(I, /obj/item/weapon/reagent_containers/food/snacks)) + if(!recursiveFood && istype(I, /obj/item/weapon/reagent_containers/food/snacks/customizable)) + to_chat(user, "Sorry, no recursive food.") + return + var/obj/F = new/obj/item/weapon/reagent_containers/food/snacks/customizable/pasta(get_turf(src),I) + F.attackby(I, user) + qdel(src) + else + return ..() + +// Custom Meals //////////////////////////////////////////////// +/* +/obj/item/trash/plate/attackby(obj/item/I, mob/user) + if(istype(I,/obj/item/weapon/reagent_containers/food/snacks)) + if(istype(I,/obj/item/weapon/reagent_containers/food/snacks/customizable/fullycustom)) //no platestacking even with recursive food, for now + to_chat(user, "That's already got a plate!") + return + var/obj/F = new/obj/item/weapon/reagent_containers/food/snacks/customizable/fullycustom(get_turf(src),I) + F.attackby(I, user) + qdel(src) + else + return ..() +*/ + +/obj/item/trash/bowl + name = "bowl" + desc = "An empty bowl. Put some food in it to start making a soup." + icon = 'icons/obj/food_custom.dmi' + icon_state = "soup" + +/obj/item/trash/bowl/attackby(obj/item/I, mob/user) + if(istype(I,/obj/item/weapon/reagent_containers/food/snacks)) + if(!recursiveFood && istype(I, /obj/item/weapon/reagent_containers/food/snacks/customizable)) + to_chat(user, "Sorry, no recursive food.") + return + var/obj/F = new/obj/item/weapon/reagent_containers/food/snacks/customizable/soup(get_turf(src),I) + F.attackby(I, user) + qdel(src) + else + return ..() diff --git a/icons/obj/food_custom.dmi b/icons/obj/food_custom.dmi index 39491d65f5eb8b4b78a3b4ccf0e7af5dc6dbbb56..4057be39939f87adbe1613ad7b15805b5d9de540 100644 GIT binary patch literal 23788 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 XBq`8URF4>ZlLe?LX)At~w~Y8digFWt diff --git a/vorestation.dme b/vorestation.dme index 138eaa6bc7..9042c3c292 100644 --- a/vorestation.dme +++ b/vorestation.dme @@ -57,6 +57,7 @@ #include "code\_helpers\global_lists.dm" #include "code\_helpers\global_lists_vr.dm" #include "code\_helpers\icons.dm" +#include "code\_helpers\icons_vr.dm" #include "code\_helpers\lists.dm" #include "code\_helpers\logging.dm" #include "code\_helpers\maths.dm" @@ -2067,6 +2068,7 @@ #include "code\modules\reagents\reagent_containers\food\lunch.dm" #include "code\modules\reagents\reagent_containers\food\sandwich.dm" #include "code\modules\reagents\reagent_containers\food\snacks.dm" +#include "code\modules\reagents\reagent_containers\food\z_custom_food_vr.dm" #include "code\modules\reagents\reagent_containers\food\drinks\bottle.dm" #include "code\modules\reagents\reagent_containers\food\drinks\cup.dm" #include "code\modules\reagents\reagent_containers\food\drinks\jar.dm"