|
22 | 22 | var/progress_ended = FALSE |
23 | 23 |
|
24 | 24 |
|
25 | | -/datum/progressbar/New(mob/User, goal_number, atom/target, timed_action_flags = NONE) |
| 25 | +/datum/progressbar/New(mob/User, goal_number, atom/target, timed_action_flags = NONE, datum/callback/extra_checks) |
26 | 26 | . = ..() |
27 | 27 | if (!istype(target)) |
28 | 28 | stack_trace("Invalid target [target] passed in") |
|
42 | 42 | SET_PLANE_EXPLICIT(bar, ABOVE_HUD_PLANE, User) //yogs change, increased so it draws ontop of ventcrawling overlays |
43 | 43 | bar.appearance_flags = APPEARANCE_UI_IGNORE_ALPHA |
44 | 44 | user = User |
| 45 | + src.extra_checks = extra_checks |
45 | 46 |
|
46 | 47 | LAZYADDASSOCLIST(user.progressbars, bar_loc, src) |
47 | 48 | var/list/bars = user.progressbars[bar_loc] |
|
59 | 60 | var/obj/mecha/mech = user.loc |
60 | 61 | if(ismecha(user.loc) && user == mech.occupant) |
61 | 62 | RegisterSignal(mech, COMSIG_MOVABLE_MOVED, PROC_REF(on_moved)) |
62 | | - if(!(timed_action_flags & IGNORE_TARGET_LOC_CHANGE)) |
| 63 | + if(!(timed_action_flags & IGNORE_TARGET_LOC_CHANGE) && target != user) |
63 | 64 | RegisterSignal(target, COMSIG_MOVABLE_MOVED, PROC_REF(on_moved)) |
64 | 65 | if(!(timed_action_flags & IGNORE_HELD_ITEM)) |
65 | 66 | var/obj/item/held = user.get_active_held_item() |
|
70 | 71 | RegisterSignal(user, COMSIG_MOB_PICKUP_ITEM, PROC_REF(end_progress)) |
71 | 72 | RegisterSignal(user, COMSIG_MOB_SWAPPING_HANDS, PROC_REF(end_progress)) |
72 | 73 | if(!(timed_action_flags & IGNORE_INCAPACITATED)) |
| 74 | + if(HAS_TRAIT(user, TRAIT_INCAPACITATED)) |
| 75 | + end_progress() |
| 76 | + return |
73 | 77 | RegisterSignal(user, SIGNAL_ADDTRAIT(TRAIT_INCAPACITATED), PROC_REF(end_progress)) |
74 | 78 |
|
75 | 79 |
|
|
0 commit comments