Rearranges vorebelly processing steps to make more sense

Makes things happen in a more appropriate order and also fixes bellies not making any sound without a mob inside.
This commit is contained in:
Verkister
2021-07-14 21:51:24 +03:00
parent 2471e13a4f
commit f972d9d868
+44 -42
View File
@@ -16,8 +16,10 @@
var/play_sound //Potential sound to play at the end to avoid code duplication.
var/to_update = FALSE //Did anything update worthy happen?
///////////////////// Prey Loop Refresh/hack //////////////////////
prey_loop()
/////////////////////////// Exit Early ////////////////////////////
var/list/touchable_atoms = contents - items_preserved
if(!length(touchable_atoms))
return
/////////////////////////// Sound Selections ///////////////////////////
var/digestion_noise_chance = 0
@@ -30,10 +32,7 @@
prey_digest = sound(get_sfx("fancy_digest_prey"))
pred_digest = sound(get_sfx("fancy_digest_pred"))
/////////////////////////// Exit Early ////////////////////////////
var/list/touchable_atoms = contents - items_preserved
if(!length(touchable_atoms))
return
///////////////////// Early Non-Mode Handling /////////////////////
var/datum/digest_mode/DM = GLOB.digest_modes["[digest_mode]"]
if(!DM)
@@ -54,45 +53,9 @@
if(hta_returns["to_update"])
to_update = hta_returns["to_update"]
if(!LAZYLEN(touchable_mobs))
return
///////////////////// Early Non-Mode Handling /////////////////////
if(emote_active)
var/list/EL = emote_lists[digest_mode]
if(LAZYLEN(EL) && next_emote <= world.time)
var/living_count = 0
for(var/mob/living/L in contents)
living_count++
next_emote = world.time + (emote_time SECONDS)
for(var/mob/living/M in contents)
if(digest_mode == DM_DIGEST && !M.digestable)
continue // don't give digesty messages to indigestible people
var/raw_message = pick(EL)
var/formatted_message
formatted_message = replacetext(raw_message, "%belly", lowertext(name))
formatted_message = replacetext(formatted_message, "%pred", owner)
formatted_message = replacetext(formatted_message, "%prey", english_list(contents))
formatted_message = replacetext(formatted_message, "%count", contents.len)
formatted_message = replacetext(formatted_message, "%countprey", living_count)
to_chat(M, "<span class='notice'>[formatted_message]</span>")
if(!digestion_noise_chance)
digestion_noise_chance = DM.noise_chance
///////////////////// Time to actually process mobs /////////////////////
for(var/target in touchable_mobs)
var/mob/living/L = target
if(!istype(L))
continue
var/list/returns = DM.process_mob(src, target)
if(istype(returns) && returns["to_update"])
to_update = TRUE
if(istype(returns) && returns["soundToPlay"] && !play_sound)
play_sound = returns["soundToPlay"]
/////////////////////////// Make any noise ///////////////////////////
if(digestion_noise_chance && prob(digestion_noise_chance))
for(var/mob/M in contents)
@@ -114,6 +77,45 @@
if(to_update)
updateVRPanels()
if(!LAZYLEN(touchable_mobs))
return
///////////////////// Prey Loop Refresh/hack //////////////////////
prey_loop()
///////////////////// Time to actually process mobs /////////////////////
for(var/target in touchable_mobs)
var/mob/living/L = target
if(!istype(L))
continue
var/list/returns = DM.process_mob(src, target)
if(istype(returns) && returns["to_update"])
to_update = TRUE
if(istype(returns) && returns["soundToPlay"] && !play_sound)
play_sound = returns["soundToPlay"]
if(emote_active)
var/list/EL = emote_lists[digest_mode]
if(LAZYLEN(EL) && next_emote <= world.time)
var/living_count = 0
for(var/mob/living/L in contents)
living_count++
next_emote = world.time + (emote_time SECONDS)
for(var/mob/living/M in contents)
if(digest_mode == DM_DIGEST && !M.digestable)
continue // don't give digesty messages to indigestible people
var/raw_message = pick(EL)
var/formatted_message
formatted_message = replacetext(raw_message, "%belly", lowertext(name))
formatted_message = replacetext(formatted_message, "%pred", owner)
formatted_message = replacetext(formatted_message, "%prey", english_list(contents))
formatted_message = replacetext(formatted_message, "%count", contents.len)
formatted_message = replacetext(formatted_message, "%countprey", living_count)
to_chat(M, "<span class='notice'>[formatted_message]</span>")
/obj/belly/proc/handle_touchable_atoms(list/touchable_atoms)
var/did_an_item = FALSE // Only do one item per cycle.
var/to_update = FALSE