From d6797056f2d9a4e0cab4e9a1eb087cd3d30412d5 Mon Sep 17 00:00:00 2001 From: PsiOmegaDelta Date: Fri, 26 Feb 2016 11:46:39 +0100 Subject: [PATCH 1/6] Adds progress bars to tasks that take time --- code/__defines/appearance.dm | 3 + code/_helpers/mobs.dm | 112 ++++++++++++++++++++++++++++++----- code/_helpers/unsorted.dm | 41 ------------- code/datums/progressbar.dm | 43 ++++++++++++++ icons/effects/progessbar.dmi | Bin 0 -> 571 bytes polaris.dme | 2 + 6 files changed, 146 insertions(+), 55 deletions(-) create mode 100644 code/__defines/appearance.dm create mode 100644 code/datums/progressbar.dm create mode 100644 icons/effects/progessbar.dmi diff --git a/code/__defines/appearance.dm b/code/__defines/appearance.dm new file mode 100644 index 00000000000..faa97e8f066 --- /dev/null +++ b/code/__defines/appearance.dm @@ -0,0 +1,3 @@ +// Consider these images/atoms as part of the UI/HUD +#define APPEARANCE_UI_IGNORE_ALPHA RESET_COLOR|RESET_TRANSFORM|NO_CLIENT_COLOR|RESET_ALPHA +#define APPEARANCE_UI RESET_COLOR|RESET_TRANSFORM|NO_CLIENT_COLOR diff --git a/code/_helpers/mobs.dm b/code/_helpers/mobs.dm index 9213765bbc2..a12340dae60 100644 --- a/code/_helpers/mobs.dm +++ b/code/_helpers/mobs.dm @@ -30,13 +30,10 @@ proc/random_hair_style(gender, species = "Human") var/list/valid_hairstyles = list() for(var/hairstyle in hair_styles_list) var/datum/sprite_accessory/S = hair_styles_list[hairstyle] - - if(gender != NEUTER && gender != PLURAL) - if(gender == MALE && S.gender == FEMALE) - continue - if(gender == FEMALE && S.gender == MALE) - continue - + if(gender == MALE && S.gender == FEMALE) + continue + if(gender == FEMALE && S.gender == MALE) + continue if( !(species in S.species_allowed)) continue valid_hairstyles[hairstyle] = hair_styles_list[hairstyle] @@ -52,13 +49,10 @@ proc/random_facial_hair_style(gender, species = "Human") var/list/valid_facialhairstyles = list() for(var/facialhairstyle in facial_hair_styles_list) var/datum/sprite_accessory/S = facial_hair_styles_list[facialhairstyle] - - if(gender != NEUTER && gender != PLURAL) - if(gender == MALE && S.gender == FEMALE) - continue - if(gender == FEMALE && S.gender == MALE) - continue - + if(gender == MALE && S.gender == FEMALE) + continue + if(gender == FEMALE && S.gender == MALE) + continue if( !(species in S.species_allowed)) continue @@ -171,3 +165,93 @@ Proc for attack log creation, because really why not return 0 var/mob/living/silicon/robot/R = thing.loc return (thing in R.module.modules) + +/proc/get_exposed_defense_zone(var/atom/movable/target) + var/obj/item/weapon/grab/G = locate() in target + if(G && G.state >= GRAB_NECK) //works because mobs are currently not allowed to upgrade to NECK if they are grabbing two people. + return pick("head", "l_hand", "r_hand", "l_foot", "r_foot", "l_arm", "r_arm", "l_leg", "r_leg") + else + return pick("chest", "groin") + +/proc/do_mob(mob/user , mob/target, time = 30, uninterruptible = 0, progress = 1) + if(!user || !target) + return 0 + var/user_loc = user.loc + var/target_loc = target.loc + + var/holding = user.get_active_hand() + var/datum/progressbar/progbar + if (progress) + progbar = new(user, time, target) + + var/endtime = world.time+time + var/starttime = world.time + . = 1 + while (world.time < endtime) + sleep(1) + if (progress) + progbar.update(world.time - starttime) + if(!user || !target) + . = 0 + break + if(uninterruptible) + continue + + if(!user || user.incapacitated() || user.loc != user_loc) + . = 0 + break + + if(target.loc != target_loc || user.get_active_hand() != holding) + . = 0 + break + if (progbar) + qdel(progbar) + +/proc/do_after(mob/user, delay, atom/target = null, needhand = 1, progress = 1) + if(!user) + return 0 + var/atom/target_loc = null + if(target) + target_loc = target.loc + + var/atom/original_loc = user.loc + + var/holding = user.get_active_hand() + + var/holdingnull = 1 //User's hand started out empty, check for an empty hand + if(holding) + holdingnull = 0 //Users hand started holding something, check to see if it's still holding that + + var/datum/progressbar/progbar + if (progress) + progbar = new(user, delay, target) + + var/endtime = world.time + delay + var/starttime = world.time + . = 1 + while (world.time < endtime) + sleep(1) + if (progress) + progbar.update(world.time - starttime) + + if(!user || user.incapacitated() || user.loc != original_loc) + . = 0 + break + + if(target_loc && (!target || target_loc != target.loc)) + . = 0 + break + + if(needhand) + //This might seem like an odd check, but you can still need a hand even when it's empty + //i.e the hand is used to pull some item/tool out of the construction + if(!holdingnull) + if(!holding) + . = 0 + break + if(user.get_active_hand() != holding) + . = 0 + break + + if (progbar) + qdel(progbar) diff --git a/code/_helpers/unsorted.dm b/code/_helpers/unsorted.dm index 8057d65f969..f9a65838975 100644 --- a/code/_helpers/unsorted.dm +++ b/code/_helpers/unsorted.dm @@ -646,47 +646,6 @@ proc/GaussRandRound(var/sigma,var/roundto) else return get_step(ref, base_dir) -/proc/do_mob(var/mob/user, var/mob/target, var/delay = 30, var/numticks = 5, var/needhand = 1) //This is quite an ugly solution but i refuse to use the old request system. - if(!user || !target) return 0 - if(numticks == 0) return 0 - - var/delayfraction = round(delay/numticks) - var/original_user_loc = user.loc - var/original_target_loc = target.loc - var/holding = user.get_active_hand() - - for(var/i = 0, iu4^P)005u_0{{R3dEt5<0000gP)t-skE-z! z5)>{hG&VIm%m6bYAt(O;Gt6c)|CuuY%rgN0Gc#uYW|{wws`1a*B7Oh>00DGTPE!Ct z=GbNc006LhR9JLGWpiV4X>fFDZ*Bkpc$}5fy$ZrG6b0Zpd5X~P(){#qaFG`2U|*p` z8k-EYk_3HygB?ZiZ0BAs-*P!QJN4&bWZh+;Pve8z?(E3ap`hgD=4jI(1tr$F#m0RI zQAd+v_VC*>UA3QzjFQ>;kd~a1o7bz^^Y>}_|0xGp4!8nv1>j1+m4K@NR{?H`ybW+G zz^wqc2HYBO8^CPcvkuXZ_fHy8H$=bs4s(5=rj>009F@L_t(&f$i3@4T3-z zhT(GqaRXez5o85NkOeGm0+Z{l7{G?slG=`;j2`*H&(hxz%=>h2av>Ke_(A{x0RL=N zn6*cTVrvSI4x61RU%i*EwD;20TZhfT7;$0?nCbzvJU|Oz>F5K52MYgyr!C`i*%!Xk#5F) zm~8On1MSmQy4Ai)x8pwaz9IV%007Kr0sFAAIhEH`H_*OGciOjM&b2o9@_~M!eV6XF z@8xf9$UX!B05fv`^M7oUZ;k7zD}5el`>uC-p!W^k-=XhUegMJ Date: Mon, 21 Mar 2016 17:13:37 +0000 Subject: [PATCH 2/6] Updates cryopod to have nicer code no message --- code/game/machinery/cryopod.dm | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/code/game/machinery/cryopod.dm b/code/game/machinery/cryopod.dm index 57d20ca3c2b..6c46ea6ceea 100644 --- a/code/game/machinery/cryopod.dm +++ b/code/game/machinery/cryopod.dm @@ -487,32 +487,33 @@ if(istype(G, /obj/item/weapon/grab)) + var/obj/item/weapon/grab/grab = G if(occupant) user << "\The [src] is in use." return - if(!ismob(G:affecting)) + if(!ismob(grab.affecting)) return - if(!check_occupant_allowed(G:affecting)) + if(!check_occupant_allowed(grab.affecting)) return var/willing = null //We don't want to allow people to be forced into despawning. - var/mob/M = G:affecting + var/mob/M = grab.affecting if(M.client) if(alert(M,"Would you like to enter long-term storage?",,"Yes","No") == "Yes") - if(!M || !G || !G:affecting) return + if(!M || !grab || !grab:affecting) return willing = 1 else willing = 1 if(willing) - visible_message("[user] starts putting [G:affecting:name] into \the [src].", 3) + visible_message("\The [user] starts putting [grab:affecting:name] into \the [src].", 3) if(do_after(user, 20)) - if(!M || !G || !G:affecting) return + if(!M || !grab || !grab:affecting) return M.forceMove(src) From bae4900fc059ff8ddb92d2b5a079009209e0984a Mon Sep 17 00:00:00 2001 From: Yoshax Date: Mon, 21 Mar 2016 17:24:55 +0000 Subject: [PATCH 3/6] Shortens the in-hand check --- code/_helpers/mobs.dm | 17 ++++++----------- 1 file changed, 6 insertions(+), 11 deletions(-) diff --git a/code/_helpers/mobs.dm b/code/_helpers/mobs.dm index a12340dae60..ad0d20f4ed0 100644 --- a/code/_helpers/mobs.dm +++ b/code/_helpers/mobs.dm @@ -201,9 +201,14 @@ Proc for attack log creation, because really why not . = 0 break - if(target.loc != target_loc || user.get_active_hand() != holding) + if(target.loc != target_loc) . = 0 break + + if(user.get_active_hand() != holding) + . = 0 + break + if (progbar) qdel(progbar) @@ -218,10 +223,6 @@ Proc for attack log creation, because really why not var/holding = user.get_active_hand() - var/holdingnull = 1 //User's hand started out empty, check for an empty hand - if(holding) - holdingnull = 0 //Users hand started holding something, check to see if it's still holding that - var/datum/progressbar/progbar if (progress) progbar = new(user, delay, target) @@ -243,12 +244,6 @@ Proc for attack log creation, because really why not break if(needhand) - //This might seem like an odd check, but you can still need a hand even when it's empty - //i.e the hand is used to pull some item/tool out of the construction - if(!holdingnull) - if(!holding) - . = 0 - break if(user.get_active_hand() != holding) . = 0 break From 84799befca537739d7ed5e1b06f296a8f6e703c9 Mon Sep 17 00:00:00 2001 From: PsiOmegaDelta Date: Tue, 1 Mar 2016 08:28:28 +0100 Subject: [PATCH 4/6] Can now toggle the progress bar visibility. Enabled by default. --- code/datums/progressbar.dm | 6 +- .../preference_setup/global/setting_datums.dm | 167 ++++++++++++++++++ 2 files changed, 170 insertions(+), 3 deletions(-) create mode 100644 code/modules/client/preference_setup/global/setting_datums.dm diff --git a/code/datums/progressbar.dm b/code/datums/progressbar.dm index 8ae946d9934..bed0f332752 100644 --- a/code/datums/progressbar.dm +++ b/code/datums/progressbar.dm @@ -33,11 +33,11 @@ if (user.client != client) if (client) client.images -= bar - if (user.client) - user.client.images += bar + shown = 0 + client = user.client progress = Clamp(progress, 0, goal) bar.icon_state = "prog_bar_[round(((progress / goal) * 100), 5)]" - if (!shown) + if (!shown && user.is_preference_enabled(/datum/client_preference/show_progress_bar)) user.client.images += bar shown = 1 diff --git a/code/modules/client/preference_setup/global/setting_datums.dm b/code/modules/client/preference_setup/global/setting_datums.dm new file mode 100644 index 00000000000..21cd7b3ca11 --- /dev/null +++ b/code/modules/client/preference_setup/global/setting_datums.dm @@ -0,0 +1,167 @@ +var/list/_client_preferences +var/list/_client_preferences_by_key +var/list/_client_preferences_by_type + +/proc/get_client_preferences() + if(!_client_preferences) + _client_preferences = list() + for(var/ct in subtypesof(/datum/client_preference)) + var/datum/client_preference/client_type = ct + if(initial(client_type.description)) + _client_preferences += new client_type() + return _client_preferences + +/proc/get_client_preference_by_key(var/preference) + if(!_client_preferences_by_key) + _client_preferences_by_key = list() + for(var/ct in get_client_preferences()) + var/datum/client_preference/client_pref = ct + _client_preferences_by_key[client_pref.key] = client_pref + return _client_preferences_by_key[preference] + +/proc/get_client_preference_by_type(var/preference) + if(!_client_preferences_by_type) + _client_preferences_by_type = list() + for(var/ct in get_client_preferences()) + var/datum/client_preference/client_pref = ct + _client_preferences_by_type[client_pref.type] = client_pref + return _client_preferences_by_type[preference] + +/datum/client_preference + var/description + var/key + var/enabled_by_default = TRUE + var/enabled_description = "Yes" + var/disabled_description = "No" + +/datum/client_preference/proc/may_toggle(var/mob/preference_mob) + return TRUE + +/datum/client_preference/proc/toggled(var/mob/preference_mob, var/enabled) + return + +/********************* +* Player Preferences * +*********************/ + +/datum/client_preference/play_admin_midis + description ="Play admin midis" + key = "SOUND_MIDI" + +/datum/client_preference/play_lobby_music + description ="Play lobby music" + key = "SOUND_LOBBY" + +/datum/client_preference/play_lobby_music/toggled(var/mob/preference_mob, var/enabled) + if(enabled) + preference_mob << sound(ticker.login_music, repeat = 0, wait = 0, volume = 85, channel = 1) + else + preference_mob << sound(null, repeat = 0, wait = 0, volume = 85, channel = 1) + +/datum/client_preference/play_ambiance + description ="Play ambience" + key = "SOUND_AMBIENCE" + +/datum/client_preference/play_ambiance/toggled(var/mob/preference_mob, var/enabled) + if(!enabled) + preference_mob << sound(null, repeat = 0, wait = 0, volume = 0, channel = 1) + preference_mob << sound(null, repeat = 0, wait = 0, volume = 0, channel = 2) + +/datum/client_preference/ghost_ears + description ="Ghost ears" + key = "CHAT_GHOSTEARS" + enabled_description = "All Speech" + disabled_description = "Nearby" + +/datum/client_preference/ghost_sight + description ="Ghost sight" + key = "CHAT_GHOSTSIGHT" + enabled_description = "All Emotes" + disabled_description = "Nearby" + +/datum/client_preference/ghost_radio + description ="Ghost radio" + key = "CHAT_GHOSTRADIO" + enabled_description = "All Chatter" + disabled_description = "Nearby" + +/datum/client_preference/chat_tags + description ="Chat tags" + key = "CHAT_SHOWICONS" + enabled_description = "Show" + disabled_description = "Hide" + +/datum/client_preference/show_typing_indicator + description ="Typing indicator" + key = "SHOW_TYPING" + enabled_description = "Show" + disabled_description = "Hide" + +/datum/client_preference/show_typing_indicator/toggled(var/mob/preference_mob, var/enabled) + if(!enabled) + preference_mob.set_typing_indicator(0) + +/datum/client_preference/show_ooc + description ="OOC chat" + key = "CHAT_OOC" + enabled_description = "Show" + disabled_description = "Hide" + +/datum/client_preference/show_looc + description ="LOOC chat" + key = "CHAT_LOOC" + enabled_description = "Show" + disabled_description = "Hide" + +/datum/client_preference/show_dsay + description ="Dead chat" + key = "CHAT_DEAD" + enabled_description = "Show" + disabled_description = "Hide" + +/datum/client_preference/show_progress_bar + description ="Progress Bar" + key = "SHOW_PROGRESS" + enabled_description = "Show" + disabled_description = "Hide" + +/******************** +* Admin Preferences * +********************/ +/datum/client_preference/admin/may_toggle(var/mob/preference_mob) + return check_rights(R_ADMIN, 0, preference_mob) + +/datum/client_preference/admin/show_attack_logs + description = "Attack Log Messages" + key = "CHAT_ATTACKLOGS" + enabled_description = "Show" + disabled_description = "Hide" + enabled_by_default = FALSE + +/datum/client_preference/admin/show_debug_logs + description = "Debug Log Messages" + key = "CHAT_DEBUGLOGS" + enabled_description = "Show" + disabled_description = "Hide" + enabled_by_default = FALSE + +/datum/client_preference/admin/show_chat_prayers + description = "Chat Prayers" + key = "CHAT_PRAYER" + enabled_description = "Show" + disabled_description = "Hide" + +/datum/client_preference/holder/may_toggle(var/mob/preference_mob) + return preference_mob && preference_mob.client && preference_mob.client.holder + +/datum/client_preference/holder/play_adminhelp_ping + description = "Adminhelps" + key = "SOUND_ADMINHELP" + enabled_description = "Hear" + disabled_description = "Silent" + +/datum/client_preference/holder/hear_radio + description = "Radio chatter" + key = "CHAT_RADIO" + enabled_description = "Show" + disabled_description = "Hide" From 5b225ba765fa00670200bdcf1e9d9b1b3c23bebb Mon Sep 17 00:00:00 2001 From: Yoshax Date: Wed, 30 Mar 2016 00:28:38 +0100 Subject: [PATCH 5/6] Fixes subtype --- code/modules/client/preference_setup/global/setting_datums.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/modules/client/preference_setup/global/setting_datums.dm b/code/modules/client/preference_setup/global/setting_datums.dm index 21cd7b3ca11..629dd3b304a 100644 --- a/code/modules/client/preference_setup/global/setting_datums.dm +++ b/code/modules/client/preference_setup/global/setting_datums.dm @@ -5,7 +5,7 @@ var/list/_client_preferences_by_type /proc/get_client_preferences() if(!_client_preferences) _client_preferences = list() - for(var/ct in subtypesof(/datum/client_preference)) + for(var/ct in subtypes(/datum/client_preference)) var/datum/client_preference/client_type = ct if(initial(client_type.description)) _client_preferences += new client_type() From e51d5f9280c74cdf3ae01b56cf903425cbbbf415 Mon Sep 17 00:00:00 2001 From: Yoshax Date: Wed, 30 Mar 2016 00:29:38 +0100 Subject: [PATCH 6/6] Updates DME --- polaris.dme | 1 + 1 file changed, 1 insertion(+) diff --git a/polaris.dme b/polaris.dme index 4643ec5d632..c0edfa6f9ae 100644 --- a/polaris.dme +++ b/polaris.dme @@ -990,6 +990,7 @@ #include "code\modules\client\preference_setup\global\02_settings.dm" #include "code\modules\client\preference_setup\global\03_pai.dm" #include "code\modules\client\preference_setup\global\04_communicators.dm" +#include "code\modules\client\preference_setup\global\setting_datums.dm" #include "code\modules\client\preference_setup\loadout\loadout.dm" #include "code\modules\client\preference_setup\loadout\loadout_accessories.dm" #include "code\modules\client\preference_setup\loadout\loadout_cosmetics.dm"