diff --git a/code/WorkInProgress/Railgun.dm b/code/WorkInProgress/Railgun.dm index 4b35ff0a..f8b4e9bf 100644 --- a/code/WorkInProgress/Railgun.dm +++ b/code/WorkInProgress/Railgun.dm @@ -404,8 +404,6 @@ proc/line_ReturnEfficDir(Angle) ReturnedDir = WEST return ReturnedDir - - //This returns the tangent reciprocal of x, for use with East and West straights. proc/tanR(x) return (cos(x)/sin(x)) diff --git a/code/obj/machinery/manufacturer.dm b/code/obj/machinery/manufacturer.dm index 4f895a61..9cd5395b 100644 --- a/code/obj/machinery/manufacturer.dm +++ b/code/obj/machinery/manufacturer.dm @@ -817,7 +817,7 @@ src.output_target = M boutput(usr, "You set the manufacturer to output to [over_object]!") - else if (istype(over_object,/obj/table/) && istype(over_object,/obj/rack/)) + else if (istype(over_object,/obj/table/) || istype(over_object,/obj/rack/)) var/obj/O = over_object src.output_target = O.loc boutput(usr, "You set the manufacturer to output on top of [O]!") diff --git a/code/obj/machinery/vending.dm b/code/obj/machinery/vending.dm index 8d4bc300..74da178c 100644 --- a/code/obj/machinery/vending.dm +++ b/code/obj/machinery/vending.dm @@ -90,6 +90,8 @@ var/datum/light/light + var/output_target = null + power_usage = 50 New() @@ -113,6 +115,65 @@ proc/create_products() return + MouseDrop(over_object, src_location, over_location) + if(!istype(usr,/mob/living/)) + boutput(usr, "Only living mobs are able to set the output target for [src].") + return + + if(get_dist(over_object,src) > 1) + boutput(usr, "[src] is too far away from the target!") + return + + if(get_dist(over_object,usr) > 1) + boutput(usr, "You are too far away from the target!") + return + + if (istype(over_object,/obj/storage/crate/)) + var/obj/storage/crate/C = over_object + if (C.locked || C.welded) + boutput(usr, "You can't use a currently unopenable crate as an output target.") + else + src.output_target = over_object + boutput(usr, "You set [src] to output to [over_object]!") + + else if (istype(over_object,/obj/table/) || istype(over_object,/obj/rack/)) + var/obj/O = over_object + src.output_target = O.loc + boutput(usr, "You set [src] to output on top of [O]!") + + else if (istype(over_object,/turf/simulated/floor/)) + src.output_target = over_object + boutput(usr, "You set [src] to output to [over_object]!") + + else + boutput(usr, "You can't use that as an output target.") + return + + proc/get_output_location() + if (!src.output_target) + return src.loc + + if (get_dist(src.output_target,src) > 1) + src.output_target = null + return src.loc + + if (istype(src.output_target,/obj/storage/crate/)) + var/obj/storage/crate/C = src.output_target + if (C.locked || C.welded) + src.output_target = null + return src.loc + else + if (C.open) + return C.loc + else + return C + + else if (istype(src.output_target,/turf/simulated/floor/)) + return src.output_target + + else + return src.loc + /obj/machinery/vending/coffee name = "coffee machine" desc = "A Robust Coffee vending machine." @@ -1150,13 +1211,13 @@ if (!pay || (src.credit >= R.product_cost) || (account && account.fields["current_money"] >= R.product_cost)) //Conor12: Prevents credit hitting negative numbers if multiple items are bought at once. R.product_amount-- if (ispath(product_path)) - new product_path(get_turf(src)) + new product_path(get_output_location()) else if (isicon(R.product_path)) var/icon/welp = icon(R.product_path) if (welp.Width() > 32 || welp.Height() > 32) welp.Scale(32, 32) R.product_path = welp // if scaling is required reset the product_path so it only happens the first time - var/obj/dummy = new /obj/item(get_turf(src)) + var/obj/dummy = new /obj/item(get_output_location()) dummy.name = R.product_name dummy.desc = "?!" dummy.icon = welp @@ -1196,7 +1257,7 @@ if (href_list["return_credits"]) spawn(src.vend_delay) if (src.credit > 0) - var/obj/item/spacecash/returned = new /obj/item/spacecash(get_turf(src), src.credit) + var/obj/item/spacecash/returned = new /obj/item/spacecash(get_output_location(), src.credit) src.credit = 0 boutput(usr, "You receive [returned].") src.generate_HTML(1)