Refactors table creation (#19441)

* refactors table creation

* probably works will test later

* tested and tweaked

* words are hard

* Apply suggestions from code review

Co-authored-by: Sirryan2002 <80364400+Sirryan2002@users.noreply.github.com>

* steel review

* proc breakout

Co-authored-by: Sirryan2002 <80364400+Sirryan2002@users.noreply.github.com>
This commit is contained in:
S34N
2022-11-15 15:45:55 -06:00
committed by GitHub
co-authored by Sirryan2002
parent b66fb2448c
commit 4de47b8b58
7 changed files with 99 additions and 102 deletions
@@ -37,6 +37,7 @@ GLOBAL_LIST_INIT(glass_recipes, list (
full_window = /obj/structure/window/full/basic
merge_type = /obj/item/stack/sheet/glass
point_value = 1
table_type = /obj/structure/table/glass
/obj/item/stack/sheet/glass/detailed_examine()
return "Use in your hand to build a window. Can be upgraded to reinforced glass by adding metal rods, which are made from metal sheets."
@@ -110,6 +111,7 @@ GLOBAL_LIST_INIT(reinforced_glass_recipes, list (
full_window = /obj/structure/window/full/reinforced
merge_type = /obj/item/stack/sheet/rglass
point_value = 4
table_type = /obj/structure/table/glass/reinforced
/obj/item/stack/sheet/rglass/New(loc, amount)
recipes = GLOB.reinforced_glass_recipes
@@ -145,6 +147,7 @@ GLOBAL_LIST_INIT(pglass_recipes, list (
created_window = /obj/structure/window/plasmabasic
full_window = /obj/structure/window/full/plasmabasic
point_value = 19
table_type = /obj/structure/table/glass/plasma
/obj/item/stack/sheet/plasmaglass/New(loc, amount)
recipes = GLOB.pglass_recipes
@@ -188,6 +191,7 @@ GLOBAL_LIST_INIT(prglass_recipes, list (
created_window = /obj/structure/window/plasmareinforced
full_window = /obj/structure/window/full/plasmareinforced
point_value = 23
table_type = /obj/structure/table/glass/reinforced/plasma
/obj/item/stack/sheet/plasmarglass/New(loc, amount)
recipes = GLOB.prglass_recipes
@@ -208,6 +212,7 @@ GLOBAL_LIST_INIT(titaniumglass_recipes, list(
resistance_flags = ACID_PROOF
merge_type = /obj/item/stack/sheet/titaniumglass
full_window = /obj/structure/window/full/shuttle
table_type = /obj/structure/table/glass/reinforced/titanium
/obj/item/stack/sheet/titaniumglass/New(loc, amount)
recipes = GLOB.titaniumglass_recipes
@@ -228,6 +233,7 @@ GLOBAL_LIST_INIT(plastitaniumglass_recipes, list(
resistance_flags = ACID_PROOF
merge_type = /obj/item/stack/sheet/plastitaniumglass
full_window = /obj/structure/window/full/plastitanium
table_type = /obj/structure/table/glass/reinforced/plastitanium
/obj/item/stack/sheet/plastitaniumglass/New(loc, amount)
recipes = GLOB.plastitaniumglass_recipes
@@ -418,6 +418,7 @@ GLOBAL_LIST_INIT(plastitanium_recipes, list(
throw_speed = 1
origin_tech = "materials=6;abductor=1"
sheettype = "abductor"
table_type = /obj/structure/table/abductor
/obj/item/stack/sheet/mineral/abductor/fifty
amount = 50
@@ -126,6 +126,7 @@ GLOBAL_LIST_INIT(metal_recipes, list(
origin_tech = "materials=1"
merge_type = /obj/item/stack/sheet/metal
point_value = 2
table_type = /obj/structure/table
/obj/item/stack/sheet/metal/cyborg
energy_type = /datum/robot_energy_storage/metal
@@ -177,6 +178,7 @@ GLOBAL_LIST_INIT(plasteel_recipes, list(
origin_tech = "materials=2"
merge_type = /obj/item/stack/sheet/plasteel
point_value = 23
table_type = /obj/structure/table/reinforced
/obj/item/stack/sheet/plasteel/New(loc, amount=null)
recipes = GLOB.plasteel_recipes
@@ -243,6 +245,7 @@ GLOBAL_LIST_INIT(wood_recipes, list(
armor = list(MELEE = 0, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 0, BIO = 0, RAD = 0, FIRE = 50, ACID = 0)
merge_type = /obj/item/stack/sheet/wood
sheettype = "wood"
table_type = /obj/structure/table/wood
/obj/item/stack/sheet/wood/New(loc, amount=null)
recipes = GLOB.wood_recipes
@@ -497,6 +500,7 @@ GLOBAL_LIST_INIT(brass_recipes, list (
throw_speed = 1
throw_range = 3
turf_type = /turf/simulated/floor/clockwork
table_type = /obj/structure/table/reinforced/brass
/obj/item/stack/tile/brass/narsie_act()
new /obj/item/stack/sheet/runed_metal(loc, amount)
+2
View File
@@ -27,6 +27,8 @@
var/merge_type = null // This path and its children should merge with this stack, defaults to src.type
var/recipe_width = 400 //Width of the recipe popup
var/recipe_height = 400 //Height of the recipe popup
/// What sort of table is made when applying this stack to a frame?
var/table_type
/obj/item/stack/New(loc, new_amount, merge = TRUE)
..()
@@ -76,7 +76,7 @@
icon_state = "tile-carpet"
turf_type = /turf/simulated/floor/carpet
resistance_flags = FLAMMABLE
var/fancy_table_type = /obj/structure/table/wood/fancy //Decides what table will be built with what carpet tile
table_type = /obj/structure/table/wood/fancy //Decides what table will be built with what carpet tile
/obj/item/stack/tile/carpet/twenty
amount = 20
@@ -85,7 +85,7 @@
name = "black carpet"
icon_state = "tile-carpet-black"
turf_type = /turf/simulated/floor/carpet/black
fancy_table_type = /obj/structure/table/wood/fancy/black
table_type = /obj/structure/table/wood/fancy/black
/obj/item/stack/tile/carpet/black/twenty
amount = 20
@@ -94,7 +94,7 @@
name = "blue carpet"
icon_state = "tile-carpet-blue"
turf_type = /turf/simulated/floor/carpet/blue
fancy_table_type = /obj/structure/table/wood/fancy/blue
table_type = /obj/structure/table/wood/fancy/blue
/obj/item/stack/tile/carpet/blue/twenty
amount = 20
@@ -103,7 +103,7 @@
name = "cyan carpet"
icon_state = "tile-carpet-cyan"
turf_type = /turf/simulated/floor/carpet/cyan
fancy_table_type = /obj/structure/table/wood/fancy/cyan
table_type = /obj/structure/table/wood/fancy/cyan
/obj/item/stack/tile/carpet/cyan/twenty
amount = 20
@@ -112,7 +112,7 @@
name = "green carpet"
icon_state = "tile-carpet-green"
turf_type = /turf/simulated/floor/carpet/green
fancy_table_type = /obj/structure/table/wood/fancy/green
table_type = /obj/structure/table/wood/fancy/green
/obj/item/stack/tile/carpet/green/twenty
amount = 20
@@ -121,7 +121,7 @@
name = "orange carpet"
icon_state = "tile-carpet-orange"
turf_type = /turf/simulated/floor/carpet/orange
fancy_table_type = /obj/structure/table/wood/fancy/orange
table_type = /obj/structure/table/wood/fancy/orange
/obj/item/stack/tile/carpet/orange/twenty
amount = 20
@@ -130,7 +130,7 @@
name = "purple carpet"
icon_state = "tile-carpet-purple"
turf_type = /turf/simulated/floor/carpet/purple
fancy_table_type = /obj/structure/table/wood/fancy/purple
table_type = /obj/structure/table/wood/fancy/purple
/obj/item/stack/tile/carpet/purple/twenty
amount = 20
@@ -139,7 +139,7 @@
name = "red carpet"
icon_state = "tile-carpet-red"
turf_type = /turf/simulated/floor/carpet/red
fancy_table_type = /obj/structure/table/wood/fancy/red
table_type = /obj/structure/table/wood/fancy/red
/obj/item/stack/tile/carpet/red/twenty
amount = 20
@@ -148,7 +148,7 @@
name = "royal black carpet"
icon_state = "tile-carpet-royalblack"
turf_type = /turf/simulated/floor/carpet/royalblack
fancy_table_type = /obj/structure/table/wood/fancy/royalblack
table_type = /obj/structure/table/wood/fancy/royalblack
/obj/item/stack/tile/carpet/royalblack/ten
amount = 10
@@ -159,7 +159,7 @@
name = "royal blue carpet"
icon_state = "tile-carpet-royalblue"
turf_type = /turf/simulated/floor/carpet/royalblue
fancy_table_type = /obj/structure/table/wood/fancy/royalblue
table_type = /obj/structure/table/wood/fancy/royalblue
/obj/item/stack/tile/carpet/royalblue/ten
amount = 10
+54 -68
View File
@@ -22,45 +22,27 @@
var/framestackamount = 2
/obj/structure/table_frame/attackby(obj/item/I, mob/user, params)
if(istype(I, /obj/item/stack/sheet/plasteel))
var/obj/item/stack/sheet/plasteel/P = I
if(P.get_amount() < 1)
to_chat(user, "<span class='warning'>You need one plasteel sheet to do this!</span>")
return
to_chat(user, "<span class='notice'>You start adding [P] to [src]...</span>")
if(do_after(user, 50, target = src) && P.use(1))
make_new_table(/obj/structure/table/reinforced)
else if(istype(I, /obj/item/stack/sheet/metal))
var/obj/item/stack/sheet/metal/M = I
if(M.get_amount() < 1)
to_chat(user, "<span class='warning'>You need one metal sheet to do this!</span>")
return
to_chat(user, "<span class='notice'>You start adding [M] to [src]...</span>")
if(do_after(user, 20, target = src) && M.use(1))
make_new_table(/obj/structure/table)
else if(istype(I, /obj/item/stack/sheet/glass))
var/obj/item/stack/sheet/glass/G = I
if(G.get_amount() < 1)
to_chat(user, "<span class='warning'>You need one glass sheet to do this!</span>")
return
to_chat(user, "<span class='notice'>You start adding [G] to [src]...</span>")
if(do_after(user, 20, target = src) && G.use(1))
make_new_table(/obj/structure/table/glass)
else if(istype(I, /obj/item/stack/tile/carpet))
var/obj/item/stack/tile/carpet/C = I
if(C.get_amount() < 1)
to_chat(user, "<span class='warning'>You need one [C.name] sheet to do this!</span>")
return
to_chat(user, "<span class='notice'>You start adding [C] to [src]...</span>")
if(do_after(user, 20, target = src) && C.use(1))
make_new_table(C.fancy_table_type)
else
if(!try_make_table(I, user))
return ..()
///Try to make a table with the item used to attack. FALSE if you can't make a table and should attack. TRUE does not necessarily mean a table was made.
/obj/structure/table_frame/proc/try_make_table(obj/item/stack/stack, mob/user)
if(!stack?.table_type)
return FALSE
if(stack.get_amount() < 1)
to_chat(user, "<span class='warning'>You need at least one sheet of [stack] to do this!</span>")
return TRUE
to_chat(user, "<span class='notice'>You start adding [stack] to [src]...</span>")
if(!(do_after(user, 50, target = src) && stack.use(1)))
return TRUE
if(stack.table_type)
make_new_table(stack.table_type)
return TRUE
/obj/structure/table_frame/wrench_act(mob/user, obj/item/I)
. = TRUE
if(!I.use_tool(src, user, 0, volume = I.tool_volume))
@@ -99,46 +81,50 @@
framestackamount = 2
resistance_flags = FLAMMABLE
/obj/structure/table_frame/wood/attackby(obj/item/I, mob/user, params)
if(istype(I, /obj/item/stack/sheet/wood))
var/obj/item/stack/sheet/wood/W = I
if(W.get_amount() < 1)
to_chat(user, "<span class='warning'>You need one wood sheet to do this!</span>")
return
to_chat(user, "<span class='notice'>You start adding [W] to [src]...</span>")
if(do_after(user, 20, target = src) && W.use(1))
make_new_table(/obj/structure/table/wood)
return
else if(istype(I, /obj/item/stack/tile/carpet))
var/obj/item/stack/tile/carpet/C = I
if(C.get_amount() < 1)
to_chat(user, "<span class='warning'>You need one carpet sheet to do this!</span>")
return
to_chat(user, "<span class='notice'>You start adding [C] to [src]...</span>")
if(do_after(user, 20, target = src) && C.use(1))
make_new_table(/obj/structure/table/wood/poker)
else
return ..()
/obj/structure/table_frame/wood/try_make_table(obj/item/stack/stack, mob/user)
if(!istype(stack, /obj/item/stack/tile/carpet) && !istype(stack, /obj/item/stack/sheet/wood))
return FALSE
if(stack.get_amount() < 1) //no need for safeties as we did an istype earlier
to_chat(user, "<span class='warning'>You need at least one sheet of [stack] to do this!</span>")
return TRUE
to_chat(user, "<span class='notice'>You start adding [stack] to [src]...</span>")
if(!(do_after(user, 50, target = src) && stack.use(1)))
return TRUE
if(istype(stack, /obj/item/stack/tile/carpet))
make_new_table(/obj/structure/table/wood/poker)
return TRUE
make_new_table(stack.table_type)
return TRUE
/obj/structure/table_frame/brass
name = "brass table frame"
desc = "Four pieces of brass arranged in a square. It's slightly warm to the touch."
icon_state = "brass_frame"
resistance_flags = FIRE_PROOF | ACID_PROOF
density = TRUE
anchored = TRUE
framestack = /obj/item/stack/tile/brass
framestackamount = 1
/obj/structure/table_frame/brass/attackby(obj/item/I, mob/user, params)
if(istype(I, /obj/item/stack/tile/brass))
var/obj/item/stack/tile/brass/W = I
if(W.get_amount() < 1)
to_chat(user, "<span class='warning'>You need one brass sheet to do this!</span>")
return
to_chat(user, "<span class='notice'>You start adding [W] to [src]...</span>")
if(do_after(user, 20, target = src) && W.use(1))
make_new_table(/obj/structure/table/reinforced/brass)
else
return ..()
/obj/structure/table_frame/brass/try_make_table(obj/item/stack/stack, mob/user)
if(!istype(stack, /obj/item/stack/tile/brass))
return FALSE
if(stack.get_amount() < 1) //no need for safeties as we did an istype earlier
to_chat(user, "<span class='warning'>You need at least one sheet of [stack] to do this!</span>")
return TRUE
to_chat(user, "<span class='notice'>You start adding [stack] to [src]...</span>")
if(do_after(user, 20, target = src) && stack.use(1))
make_new_table(stack.table_type)
return TRUE
/obj/structure/table_frame/brass/narsie_act()
..()