diff --git a/code/_onclick/ai.dm b/code/_onclick/ai.dm
index 6e21012259b..5f5c105862f 100644
--- a/code/_onclick/ai.dm
+++ b/code/_onclick/ai.dm
@@ -11,8 +11,7 @@
*/
/mob/living/silicon/ai/DblClickOn(var/atom/A, params)
if(client.click_intercept)
- if(call(client.click_intercept, "InterceptClickOn")(src, params, A))
- return
+ client.click_intercept.InterceptClickOn(src, params, A)
if(control_disabled || stat) return
@@ -28,8 +27,7 @@
next_click = world.time + 1
if(client.click_intercept)
- if(call(client.click_intercept, "InterceptClickOn")(src, params, A))
- return
+ client.click_intercept.InterceptClickOn(src, params, A)
if(control_disabled || stat)
return
diff --git a/code/_onclick/click.dm b/code/_onclick/click.dm
index e16fc5af6c1..466f0d358e9 100644
--- a/code/_onclick/click.dm
+++ b/code/_onclick/click.dm
@@ -39,10 +39,7 @@
next_click = world.time + 1
if(client.click_intercept)
- if(call(client.click_intercept, "InterceptClickOn")(src, params, A))
- return
- else
- log_to_dd("Some twerp set a click_intercept without a viable \"InterceptClickOn\" variable, go yell at them. Mob: [src]")
+ client.click_intercept.InterceptClickOn(src, params, A)
var/list/modifiers = params2list(params)
if(modifiers["shift"] && modifiers["ctrl"])
diff --git a/code/_onclick/cyborg.dm b/code/_onclick/cyborg.dm
index bc46ae1b514..39c5f965176 100644
--- a/code/_onclick/cyborg.dm
+++ b/code/_onclick/cyborg.dm
@@ -12,8 +12,7 @@
next_click = world.time + 1
if(client.click_intercept)
- if(call(client.click_intercept, "InterceptClickOn")(src, params, A))
- return
+ client.click_intercept.InterceptClickOn(src, params, A)
var/list/modifiers = params2list(params)
if(modifiers["shift"] && modifiers["ctrl"])
diff --git a/code/_onclick/observer.dm b/code/_onclick/observer.dm
index e4f9fef933a..2058ce86cb1 100644
--- a/code/_onclick/observer.dm
+++ b/code/_onclick/observer.dm
@@ -1,7 +1,6 @@
/mob/dead/observer/DblClickOn(var/atom/A, var/params)
if(client.click_intercept)
- if(call(client.click_intercept, "InterceptClickOn")(src, params, A))
- return
+ client.click_intercept.InterceptClickOn(src, params, A)
if(can_reenter_corpse && mind && mind.current)
if(A == mind.current || (mind.current in A)) // double click your corpse or whatever holds it
reenter_corpse() // (cloning scanner, body bag, closet, mech, etc)
@@ -18,8 +17,7 @@
/mob/dead/observer/ClickOn(var/atom/A, var/params)
if(client.click_intercept)
- if(call(client.click_intercept, "InterceptClickOn")(src, params, A))
- return
+ client.click_intercept.InterceptClickOn(src, params, A)
if(world.time <= next_move)
return
diff --git a/code/game/gamemodes/miniantags/revenant/revenant.dm b/code/game/gamemodes/miniantags/revenant/revenant.dm
index 4c7277cfdaf..817a24ff467 100644
--- a/code/game/gamemodes/miniantags/revenant/revenant.dm
+++ b/code/game/gamemodes/miniantags/revenant/revenant.dm
@@ -87,9 +87,9 @@
src << "You feel your essence fraying!"
/mob/living/simple_animal/revenant/ClickOn(var/atom/A, var/params) //Copypaste from ghost code - revenants can't interact with the world directly.if(client.click_intercept)
+
if(client.click_intercept)
- if(call(client.click_intercept, "InterceptClickOn")(src, params, A))
- return
+ client.click_intercept.InterceptClickOn(src, params, A)
var/list/modifiers = params2list(params)
if(modifiers["middle"])
diff --git a/code/modules/admin/buildmode.dm b/code/modules/admin/buildmode.dm
index c7a2e331c44..ebe37bc9697 100644
--- a/code/modules/admin/buildmode.dm
+++ b/code/modules/admin/buildmode.dm
@@ -8,7 +8,7 @@
/obj/screen/buildmode
icon = 'icons/misc/buildmode.dmi'
- var/datum/buildmode/bd
+ var/datum/click_intercept/buildmode/bd
/obj/screen/buildmode/New(bld)
..()
@@ -88,10 +88,38 @@
cl = null
qdel(I)
-/datum/buildmode
- var/mode = BASIC_BUILDMODE
+/datum/click_intercept
var/client/holder = null
var/list/obj/screen/buttons = list()
+
+/datum/click_intercept/New(client/c)
+ create_buttons()
+ holder = c
+ holder.click_intercept = src
+ holder.show_popup_menus = 0
+ holder.screen += buttons
+
+/datum/click_intercept/Destroy()
+ for(var/button in buttons)
+ qdel(button)
+
+
+/datum/click_intercept/proc/create_buttons()
+ return
+
+/datum/click_intercept/proc/InterceptClickOn(user,params,atom/object)
+ return
+
+/datum/click_intercept/proc/quit()
+ holder.screen -= buttons
+ holder.click_intercept = null
+ holder.show_popup_menus = 1
+ qdel(src)
+
+
+
+/datum/click_intercept/buildmode
+ var/mode = BASIC_BUILDMODE
var/build_dir = SOUTH
var/atom/movable/throw_atom = null
var/obj/effect/buildmode_reticule/cornerA = null
@@ -102,37 +130,23 @@
var/objholder = /obj/structure/closet
var/atom/movable/stored = null
-/datum/buildmode/New(client/c)
- create_buttons()
- holder = c
- holder.click_intercept = src
- holder.show_popup_menus = 0
- holder.screen += buttons
-
-/datum/buildmode/proc/quit()
- holder.screen -= buttons
- holder.click_intercept = null
- holder.show_popup_menus = 1
- qdel(src)
-
-/datum/buildmode/Destroy()
+/datum/click_intercept/buildmode/Destroy()
stored = null
Reset()
- for(var/button in buttons)
- qdel(button)
+ ..()
-/datum/buildmode/proc/create_buttons()
+/datum/click_intercept/buildmode/create_buttons()
buttons += new /obj/screen/buildmode/mode(src)
buttons += new /obj/screen/buildmode/help(src)
buttons += new /obj/screen/buildmode/bdir(src)
buttons += new /obj/screen/buildmode/quit(src)
-/datum/buildmode/proc/toggle_modes()
+/datum/click_intercept/buildmode/proc/toggle_modes()
mode = (mode % NUM_BUILDMODES) +1
Reset()
return
-/datum/buildmode/proc/show_help(mob/user)
+/datum/click_intercept/buildmode/proc/show_help(mob/user)
switch(mode)
if(BASIC_BUILDMODE)
user << "***********************************************************"
@@ -175,7 +189,7 @@
user << "Right Mouse Button on obj/mob = Select target to copy"
user << "***********************************************************"
-/datum/buildmode/proc/change_settings(mob/user)
+/datum/click_intercept/buildmode/proc/change_settings(mob/user)
switch(mode)
if(BASIC_BUILDMODE)
@@ -221,7 +235,7 @@
cornerA = null
cornerB = null
-/datum/buildmode/proc/change_dir()
+/datum/click_intercept/buildmode/proc/change_dir()
switch(build_dir)
if(NORTH)
build_dir = EAST
@@ -235,32 +249,32 @@
build_dir = NORTH
return 1
-/datum/buildmode/proc/deselect_region()
+/datum/click_intercept/buildmode/proc/deselect_region()
qdel(cornerA)
cornerA = null
qdel(cornerB)
cornerB = null
-/datum/buildmode/proc/Reset()//Reset temporary variables
+/datum/click_intercept/buildmode/proc/Reset()//Reset temporary variables
deselect_region()
-/datum/buildmode/proc/select_tile(var/turf/T)
+/datum/click_intercept/buildmode/proc/select_tile(var/turf/T)
return new /obj/effect/buildmode_reticule(T, holder)
-/proc/togglebuildmode(mob/M in player_list)
+/proc/togglebuildmode(mob/M as mob in player_list)
set name = "Toggle Build Mode"
set category = "Special Verbs"
if(M.client)
- if(istype(M.client.click_intercept,/datum/buildmode))
- var/datum/buildmode/B = M.client.click_intercept
+ if(istype(M.client.click_intercept,/datum/click_intercept/buildmode))
+ var/datum/click_intercept/buildmode/B = M.client.click_intercept
B.quit()
log_admin("[key_name(usr)] has left build mode.")
else
- new/datum/buildmode(M.client)
+ new/datum/click_intercept/buildmode(M.client)
message_admins("[key_name(usr)] has entered build mode.")
log_admin("[key_name(usr)] has entered build mode.")
-/datum/buildmode/proc/InterceptClickOn(user,params,atom/object) //Click Intercept
+/datum/click_intercept/buildmode/InterceptClickOn(user,params,atom/object) //Click Intercept
var/list/pa = params2list(params)
var/right_click = pa.Find("right")
var/left_click = pa.Find("left")
diff --git a/code/modules/client/client defines.dm b/code/modules/client/client defines.dm
index 3f19442f94b..fa6d0015399 100644
--- a/code/modules/client/client defines.dm
+++ b/code/modules/client/client defines.dm
@@ -81,4 +81,4 @@
control_freak = CONTROL_FREAK_ALL | CONTROL_FREAK_SKIN | CONTROL_FREAK_MACROS
- var/datum/click_intercept = null // To use this, implement "InterceptClickOn" in your datum, then set your desired client's click_intercept to that datum
\ No newline at end of file
+ var/datum/click_intercept/click_intercept = null
\ No newline at end of file
diff --git a/code/modules/mob/login.dm b/code/modules/mob/login.dm
index ce0dfc31efe..54fc8aac90d 100644
--- a/code/modules/mob/login.dm
+++ b/code/modules/mob/login.dm
@@ -34,6 +34,8 @@
if(hud_used)
qdel(hud_used) //remove the hud objects
hud_used = null
+ if(client.click_intercept)
+ client.click_intercept.quit() // Let's not keep any old click_intercepts
hud_used = new /datum/hud(src)
next_move = 1