-
Notifications
You must be signed in to change notification settings - Fork 4.9k
/
pimpin_ride.dm
167 lines (147 loc) · 5.58 KB
/
pimpin_ride.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
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
/**
* # Janicart
*/
/obj/vehicle/ridden/janicart
name = "janicart (pimpin' ride)"
desc = "A brave janitor cyborg gave its life to produce such an amazing combination of speed and utility."
icon_state = "pussywagon"
key_type = /obj/item/key/janitor
movedelay = 1
/// The attached garbage bag, if present
var/obj/item/storage/bag/trash/trash_bag
/// The installed upgrade, if present
var/obj/item/janicart_upgrade/installed_upgrade
/obj/vehicle/ridden/janicart/Initialize(mapload)
. = ..()
update_appearance()
AddElement(/datum/element/ridable, /datum/component/riding/vehicle/janicart)
if (installed_upgrade)
installed_upgrade.install(src)
/obj/vehicle/ridden/janicart/Destroy()
if (trash_bag)
QDEL_NULL(trash_bag)
if (installed_upgrade)
QDEL_NULL(installed_upgrade)
return ..()
/obj/vehicle/ridden/janicart/examine(mob/user)
. = ..()
if (installed_upgrade)
. += "It has been upgraded with [installed_upgrade], which can be removed with a screwdriver."
/obj/vehicle/ridden/janicart/attackby(obj/item/I, mob/user, params)
if(istype(I, /obj/item/storage/bag/trash))
if(trash_bag)
to_chat(user, span_warning("[src] already has a trashbag hooked!"))
return
if(!user.transferItemToLoc(I, src))
return
to_chat(user, span_notice("You hook the trashbag onto [src]."))
trash_bag = I
RegisterSignal(trash_bag, COMSIG_PARENT_QDELETING, .proc/bag_deleted)
SEND_SIGNAL(src, COMSIG_VACUUM_BAG_ATTACH, I)
update_appearance()
else if(istype(I, /obj/item/janicart_upgrade))
if(installed_upgrade)
to_chat(user, span_warning("[src] already has an upgrade installed! Use a screwdriver to remove it."))
return
var/obj/item/janicart_upgrade/new_upgrade = I
new_upgrade.forceMove(src)
new_upgrade.install(src)
installed_upgrade = new_upgrade
to_chat(user, span_notice("You upgrade [src] with [new_upgrade]."))
update_appearance()
else if (istype(I, /obj/item/screwdriver) && installed_upgrade)
installed_upgrade.uninstall(src)
installed_upgrade.forceMove(get_turf(user))
user.put_in_hands(installed_upgrade)
to_chat(user, span_notice("You remove [installed_upgrade] from [src]"))
installed_upgrade = null
update_appearance()
else if(trash_bag && (!is_key(I) || is_key(inserted_key))) // don't put a key in the trash when we need it
trash_bag.attackby(I, user)
else
return ..()
/obj/vehicle/ridden/janicart/update_overlays()
. = ..()
if(trash_bag)
. += "cart_garbage"
if(installed_upgrade)
var/mutable_appearance/overlay = new(SSgreyscale.GetColoredIconByType(installed_upgrade.overlay_greyscale_config, installed_upgrade.greyscale_colors))
overlay.icon_state = "janicart_upgrade"
. += overlay
/obj/vehicle/ridden/janicart/attack_hand(mob/user, list/modifiers)
// right click removes bag without unbuckling when possible
. = (LAZYACCESS(modifiers, RIGHT_CLICK) && try_remove_bag(user)) || ..()
if (!.)
try_remove_bag(user)
/**
* Called if the attached bag is being qdeleted, ensures appearance is maintained properly
*/
/obj/vehicle/ridden/janicart/proc/bag_deleted(datum/source)
SIGNAL_HANDLER
INVOKE_ASYNC(src, .proc/try_remove_bag)
/**
* Attempts to remove the attached trash bag, returns true if bag was removed
*
* Arguments:
* * remover - The (optional) mob attempting to remove the bag
*/
/obj/vehicle/ridden/janicart/proc/try_remove_bag(mob/remover = null)
if (!trash_bag)
return FALSE
if (remover)
trash_bag.forceMove(get_turf(remover))
remover.put_in_hands(trash_bag)
UnregisterSignal(trash_bag, COMSIG_PARENT_QDELETING)
trash_bag = null
SEND_SIGNAL(src, COMSIG_VACUUM_BAG_DETACH)
update_appearance()
return TRUE
/obj/vehicle/ridden/janicart/upgraded
installed_upgrade = new /obj/item/janicart_upgrade/buffer
/obj/vehicle/ridden/janicart/upgraded/vacuum
installed_upgrade = new /obj/item/janicart_upgrade/vacuum
/**
* # Janicart Upgrade
*
* Functional upgrades that can be installed into a janicart.
*
*/
/obj/item/janicart_upgrade
name = "base upgrade"
desc = "An abstract upgrade for mobile janicarts."
icon_state = "janicart_upgrade"
greyscale_config = /datum/greyscale_config/janicart_upgrade
/// The greyscale config for the on-cart installed upgrade overlay
var/overlay_greyscale_config = /datum/greyscale_config/janicart_upgrade/installed
/**
* Called when upgrade is installed into a janicart
*
* Arguments:
* * installee - The cart the upgrade is being installed into
*/
/obj/item/janicart_upgrade/proc/install(obj/vehicle/ridden/janicart/installee)
return FALSE
/**
* Called when upgrade is uninstalled from a janicart
*
* Arguments:
* * installee - The cart the upgrade is being removed from
*/
/obj/item/janicart_upgrade/proc/uninstall(obj/vehicle/ridden/janicart/installee)
return FALSE
/obj/item/janicart_upgrade/buffer
name = "floor buffer upgrade"
desc = "An upgrade for mobile janicarts which adds a floor buffer functionality."
greyscale_colors = "#ffffff#6aa3ff#a2a2a2#d1d15f"
/obj/item/janicart_upgrade/buffer/install(obj/vehicle/ridden/janicart/installee)
installee._AddElement(list(/datum/element/cleaning))
/obj/item/janicart_upgrade/buffer/uninstall(obj/vehicle/ridden/janicart/installee)
installee._RemoveElement(list(/datum/element/cleaning))
/obj/item/janicart_upgrade/vacuum
name = "vacuum upgrade"
desc = "An upgrade for mobile janicarts which adds a vacuum functionality."
greyscale_colors = "#ffffff#ffea6a#a2a2a2#d1d15f"
/obj/item/janicart_upgrade/vacuum/install(obj/vehicle/ridden/janicart/installee)
installee._AddComponent(list(/datum/component/vacuum, installee.trash_bag))
/obj/item/janicart_upgrade/vacuum/uninstall(obj/vehicle/ridden/janicart/installee)
qdel(installee.GetComponent(/datum/component/vacuum))