mirror of
https://github.com/Citadel-Station-13/Citadel-Station-13-RP.git
synced 2026-08-20 16:37:09 +01:00
90 lines
2.6 KiB
Plaintext
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)
|