|
1 | 1 | #define PROGRESSBAR_HEIGHT 6 |
2 | 2 | #define PROGRESSBAR_ANIMATION_TIME 5 |
| 3 | +#define SKILL_ICON_OFFSET_X -18 |
| 4 | +#define SKILL_ICON_OFFSET_Y -13 |
3 | 5 |
|
4 | 6 | /datum/progressbar |
5 | 7 | ///The progress bar visual element. |
6 | 8 | var/image/bar |
| 9 | + ///The icon for the skill used. |
| 10 | + var/image/skill_icon |
7 | 11 | ///The target where this progress bar is applied and where it is shown. |
8 | 12 | var/atom/bar_loc |
9 | 13 | ///The mob whose client sees the progress bar. |
|
18 | 22 | var/listindex = 0 |
19 | 23 |
|
20 | 24 |
|
21 | | -/datum/progressbar/New(mob/User, goal_number, atom/target) |
| 25 | +/datum/progressbar/New(mob/User, goal_number, atom/target, skill_check) |
22 | 26 | . = ..() |
23 | 27 | if (!istype(target)) |
24 | 28 | stack_trace("Invalid target [target] passed in") |
|
37 | 41 | bar = image('icons/effects/progessbar.dmi', bar_loc, "prog_bar_0") |
38 | 42 | SET_PLANE_EXPLICIT(bar, ABOVE_HUD_PLANE, User) //yogs change, increased so it draws ontop of ventcrawling overlays |
39 | 43 | bar.appearance_flags = APPEARANCE_UI_IGNORE_ALPHA |
| 44 | + if(skill_check) |
| 45 | + skill_icon = image('icons/mob/skills.dmi', bar_loc, "[skill_check]_small", pixel_x = SKILL_ICON_OFFSET_X) |
| 46 | + SET_PLANE_EXPLICIT(skill_icon, ABOVE_HUD_PLANE, User) |
| 47 | + skill_icon.appearance_flags = APPEARANCE_UI_IGNORE_ALPHA |
40 | 48 | user = User |
41 | 49 |
|
42 | 50 | LAZYADDASSOCLIST(user.progressbars, bar_loc, src) |
|
60 | 68 | continue |
61 | 69 | progress_bar.listindex-- |
62 | 70 |
|
63 | | - progress_bar.bar.pixel_y = 32 + (PROGRESSBAR_HEIGHT * (progress_bar.listindex - 1)) |
64 | | - var/dist_to_travel = 32 + (PROGRESSBAR_HEIGHT * (progress_bar.listindex - 1)) - PROGRESSBAR_HEIGHT |
| 71 | + var/dist_to_travel = 32 + (PROGRESSBAR_HEIGHT * progress_bar.listindex) - PROGRESSBAR_HEIGHT |
65 | 72 | animate(progress_bar.bar, pixel_y = dist_to_travel, time = PROGRESSBAR_ANIMATION_TIME, easing = SINE_EASING) |
66 | 73 |
|
| 74 | + if(progress_bar.skill_icon) |
| 75 | + animate(progress_bar.skill_icon, pixel_y = dist_to_travel + SKILL_ICON_OFFSET_Y, time = PROGRESSBAR_ANIMATION_TIME, easing = SINE_EASING) |
| 76 | + |
67 | 77 | LAZYREMOVEASSOC(user.progressbars, bar_loc, src) |
68 | 78 | user = null |
69 | 79 |
|
|
74 | 84 |
|
75 | 85 | if(bar) |
76 | 86 | QDEL_NULL(bar) |
| 87 | + if(skill_icon) |
| 88 | + QDEL_NULL(skill_icon) |
77 | 89 |
|
78 | 90 | return ..() |
79 | 91 |
|
|
94 | 106 | if(!user_client) //Disconnected, already gone. |
95 | 107 | return |
96 | 108 | user_client.images -= bar |
| 109 | + user_client.images -= skill_icon |
97 | 110 | user_client = null |
98 | 111 |
|
99 | 112 |
|
|
116 | 129 | bar.pixel_y = 0 |
117 | 130 | bar.alpha = 0 |
118 | 131 | user_client.images += bar |
| 132 | + if(skill_icon) |
| 133 | + skill_icon.pixel_y = SKILL_ICON_OFFSET_Y |
| 134 | + skill_icon.alpha = 0 |
| 135 | + user_client.images += skill_icon |
| 136 | + animate(skill_icon, pixel_y = 32 + SKILL_ICON_OFFSET_Y + (PROGRESSBAR_HEIGHT * (listindex - 1)), alpha = 255, time = PROGRESSBAR_ANIMATION_TIME, easing = SINE_EASING) |
119 | 137 | animate(bar, pixel_y = 32 + (PROGRESSBAR_HEIGHT * (listindex - 1)), alpha = 255, time = PROGRESSBAR_ANIMATION_TIME, easing = SINE_EASING) |
120 | 138 |
|
121 | 139 |
|
|
134 | 152 | bar.icon_state = "[bar.icon_state]_fail" |
135 | 153 |
|
136 | 154 | animate(bar, alpha = 0, time = PROGRESSBAR_ANIMATION_TIME) |
| 155 | + if(skill_icon) |
| 156 | + animate(skill_icon, alpha = 0, time = PROGRESSBAR_ANIMATION_TIME) |
137 | 157 |
|
138 | 158 | QDEL_IN(src, PROGRESSBAR_ANIMATION_TIME) |
139 | 159 |
|
140 | 160 |
|
| 161 | +#undef SKILL_ICON_OFFSET_Y |
| 162 | +#undef SKILL_ICON_OFFSET_X |
141 | 163 | #undef PROGRESSBAR_ANIMATION_TIME |
142 | 164 | #undef PROGRESSBAR_HEIGHT |
0 commit comments