Files
9885763e3d hand refactor (#5677)
Co-authored-by: silicons <no@you.cat>
2024-11-20 09:25:57 +01:00

90 lines
2.6 KiB
Plaintext

//* This file is explicitly licensed under the MIT license. *//
//* Copyright (c) 2024 Citadel Station Developers *//
//* Rendering *//
/datum/inventory/proc/remove_slot_renders()
var/list/transformed = list()
for(var/slot_id in rendered_normal_overlays)
transformed += rendered_normal_overlays[slot_id]
owner.cut_overlay(transformed)
/datum/inventory/proc/reapply_slot_renders()
// try not to dupe
remove_slot_renders()
var/list/transformed = list()
for(var/slot_id in rendered_normal_overlays)
transformed += rendered_normal_overlays[slot_id]
owner.add_overlay(transformed)
/**
* just update if a slot is visible
*/
/datum/inventory/proc/update_slot_visible(slot_id, cascade = TRUE)
// resolve item
var/obj/item/target = owner.item_by_slot_id(slot_id)
// first, cascade incase we early-abort later
if(cascade)
var/datum/inventory_slot/slot = resolve_inventory_slot(slot_id)
slot.cascade_render_visibility(owner, target)
// check existing
if(isnull(rendered_normal_overlays[slot_id]))
return
// remove overlay first incase it's already there
owner.cut_overlay(rendered_normal_overlays[slot_id])
// check if slot should render
var/datum/inventory_slot/slot = resolve_inventory_slot(slot_id)
if(!slot.should_render(owner, target))
return
// add overlay if it should
owner.add_overlay(rendered_normal_overlays[slot_id])
/**
* redo a slot's render
*/
/datum/inventory/proc/update_slot_render(slot_id, cascade = TRUE)
var/datum/inventory_slot/slot = resolve_inventory_slot(slot_id)
var/obj/item/target = owner.item_by_slot_id(slot_id)
// first, cascade incase we early-abort later
if(cascade)
slot.cascade_render_visibility(owner, target)
if(!slot.should_render(owner, target))
remove_slot_render(slot_id)
return
if(isnull(target))
remove_slot_render(slot_id)
return
var/bodytype = BODYTYPE_DEFAULT
if(ishuman(owner))
var/mob/living/carbon/human/casted_human = owner
bodytype = casted_human.species.get_effective_bodytype(casted_human, target, slot_id)
var/rendering_results = slot.render(owner, target, bodytype)
if(islist(rendering_results)? !length(rendering_results) : isnull(rendering_results))
remove_slot_render(slot_id)
return
set_slot_render(slot_id, rendering_results)
/datum/inventory/proc/remove_slot_render(slot_id)
if(isnull(rendered_normal_overlays[slot_id]))
return
owner.cut_overlay(rendered_normal_overlays[slot_id])
rendered_normal_overlays -= slot_id
/datum/inventory/proc/set_slot_render(slot_id, overlay)
if(!isnull(rendered_normal_overlays[slot_id]))
owner.cut_overlay(rendered_normal_overlays[slot_id])
rendered_normal_overlays[slot_id] = overlay
owner.add_overlay(overlay)