-
-
Notifications
You must be signed in to change notification settings - Fork 444
/
Copy pathbakeable.dm
101 lines (81 loc) · 3.83 KB
/
bakeable.dm
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
///This component indicates this object can be baked in an oven.
/datum/component/bakeable
dupe_mode = COMPONENT_DUPE_UNIQUE_PASSARGS // So you can change bake results with various cookstuffs
///Result atom type of baking this object
var/atom/bake_result
///Amount of time required to bake the food
var/required_bake_time = 2 MINUTES
///Is this a positive bake result?
var/positive_result = TRUE
///Time spent baking so far
var/current_bake_time = 0
var/customized = FALSE
/datum/component/bakeable/Initialize(bake_result, required_bake_time, positive_result, use_large_steam_sprite, custom = FALSE)
. = ..()
if(!isitem(parent)) //Only items support baking at the moment
return COMPONENT_INCOMPATIBLE
src.bake_result = bake_result
src.required_bake_time = required_bake_time
src.positive_result = positive_result
src.customized = custom
// Inherit the new values passed to the component
/datum/component/bakeable/InheritComponent(datum/component/bakeable/new_comp, original, bake_result, required_bake_time, positive_result, use_large_steam_sprite)
if(!original)
return
if(bake_result)
src.bake_result = bake_result
if(required_bake_time)
src.required_bake_time = required_bake_time
if(positive_result)
src.positive_result = positive_result
/datum/component/bakeable/RegisterWithParent()
RegisterSignal(parent, COMSIG_ITEM_BAKED, PROC_REF(OnBake))
RegisterSignal(parent, COMSIG_ATOM_EXAMINE, PROC_REF(OnExamine))
/datum/component/bakeable/UnregisterFromParent()
. = ..()
UnregisterSignal(parent, list(COMSIG_ITEM_BAKED, COMSIG_ATOM_EXAMINE))
///Ran every time an item is baked by something
/datum/component/bakeable/proc/OnBake(datum/source, atom/used_oven, delta_time = 1)
. = COMPONENT_HANDLED_BAKING
. |= positive_result ? COMPONENT_BAKING_GOOD_RESULT : COMPONENT_BAKING_BAD_RESULT //Are we baking shit or great food?
current_bake_time += delta_time * 10 //turn it into ds
if(current_bake_time >= required_bake_time)
FinishBaking(used_oven)
///Ran when an object finished baking
/datum/component/bakeable/proc/FinishBaking(atom/used_oven)
var/atom/original_object = parent
var/obj/item/plate/oven_tray/used_tray = original_object.loc
var/atom/baked_result = new bake_result(used_tray)
if(customized)
var/obj/item/reagent_containers/food/snacks/customizable/original = original_object
var/obj/item/reagent_containers/food/snacks/customizable/BR = baked_result
original.reagents.copy_to(BR,original.reagents.total_volume)
for(var/obj/O in original.ingredients)
BR.ingredients += O
BR.mix_filling_color(O)
BR.update_appearance()
if(original_object.custom_materials)
baked_result.set_custom_materials(original_object.custom_materials, 1)
baked_result.pixel_x = original_object.pixel_x
baked_result.pixel_y = original_object.pixel_y
used_tray.AddToPlate(baked_result)
if(positive_result)
used_oven.visible_message(span_warning("You smell something great coming from [used_oven]."))
playsound(parent, 'sound/machines/microwave/microwave-end.ogg', 50, 1)
else
used_oven.visible_message(span_warning("You smell a burnt smell coming from [used_oven]."))
SEND_SIGNAL(parent, COMSIG_BAKE_COMPLETED, baked_result)
qdel(parent)
///Gives info about the items baking status so you can see if its almost done
/datum/component/bakeable/proc/OnExamine(atom/A, mob/user, list/examine_list)
if(!current_bake_time) //Not baked yet
if(positive_result)
examine_list += span_notice("[parent] can be <b>baked</b> into \a [initial(bake_result.name)].")
return
if(positive_result)
if(current_bake_time <= required_bake_time * 0.75)
examine_list += span_notice("[parent] probably needs to be baked a bit longer!")
else if(current_bake_time <= required_bake_time)
examine_list += span_notice("[parent] seems to be almost finished baking!")
else
examine_list += span_danger("[parent] should probably not be baked for much longer!")