Files
Bubberstation/code/modules/modular_computers/computers/item/laptop.dm
T
cdda52aba9 add laptop interact on RMB click, screentips (#88612)
## About The Pull Request

<!-- Describe The Pull Request. Please be sure every change is
documented or this can delay review and even discourage maintainers from
merging your PR! -->

Modular computer laptops can now be interacted with RMB when open, or
opened with RMB when closed.
Also screentips for  this added.
It was inteded for laptops to be interactable when open. but didn't work
because old code was not adjusted for attack chains.


## Why It's Good For The Game

Laptop usage is more user friendly :D

<details>
<summary>Demonstration :D</summary>


![image](https://github.com/user-attachments/assets/59b125af-2c2a-4948-a0ba-1289005a03fa)

</details>

## Changelog

🆑
fix: modular computer laptops can now be interacted with RMB, instead of
picked up
qol: modular computer laptops can now be interacted with RMB when open,
or opened with RMB when closed. Also screentips for this added
/🆑

---------

Co-authored-by: SyncIt21 <110812394+SyncIt21@users.noreply.github.com>
2024-12-21 22:32:57 +01:00

133 lines
3.4 KiB
Plaintext

/obj/item/modular_computer/laptop
name = "laptop"
desc = "A portable laptop computer."
icon = 'icons/obj/devices/modular_laptop.dmi'
icon_state = "laptop-closed"
icon_state_powered = "laptop"
icon_state_unpowered = "laptop-off"
icon_state_menu = "menu"
hardware_flag = PROGRAM_LAPTOP
max_idle_programs = 3
w_class = WEIGHT_CLASS_NORMAL
interaction_flags_mouse_drop = NEED_HANDS
// No running around with open laptops in hands.
item_flags = SLOWS_WHILE_IN_HAND
drag_slowdown = 0
screen_on = FALSE // Starts closed
var/start_open = TRUE // unless this var is set to 1
var/icon_state_closed = "laptop-closed"
var/w_class_open = WEIGHT_CLASS_BULKY
var/slowdown_open = 1
/obj/item/modular_computer/laptop/examine(mob/user)
. = ..()
if(screen_on)
. += span_notice("Alt-click to close it.")
/obj/item/modular_computer/laptop/add_context(atom/source, list/context, obj/item/held_item, mob/living/user)
. = ..()
if(screen_on)
context[SCREENTIP_CONTEXT_ALT_LMB] = "Close"
context[SCREENTIP_CONTEXT_RMB] = "Interact"
else
context[SCREENTIP_CONTEXT_RMB] = "Open"
return CONTEXTUAL_SCREENTIP_SET
/obj/item/modular_computer/laptop/Initialize(mapload)
. = ..()
if(start_open && !screen_on)
toggle_open()
/obj/item/modular_computer/laptop/update_icon_state()
if(!screen_on)
icon_state = icon_state_closed
return
return ..()
/obj/item/modular_computer/laptop/update_overlays()
if(!screen_on)
cut_overlays()
return
return ..()
/obj/item/modular_computer/laptop/attack_self(mob/user)
if(!screen_on)
try_toggle_open(user)
else
return ..()
/obj/item/modular_computer/laptop/verb/open_computer()
set name = "Toggle Open"
set category = "Object"
set src in view(1)
try_toggle_open(usr)
/obj/item/modular_computer/laptop/mouse_drop_dragged(atom/over_object, mob/user, src_location, over_location, params)
if(over_object == user || over_object == src)
try_toggle_open(user)
return
if(istype(over_object, /atom/movable/screen/inventory/hand))
var/atom/movable/screen/inventory/hand/H = over_object
if(!isturf(loc))
return
user.put_in_hand(src, H.held_index)
/obj/item/modular_computer/laptop/proc/try_toggle_open(mob/living/user)
if(issilicon(user))
return
if(!isturf(loc) && !ismob(loc)) // No opening it in backpack.
return
if(!user.can_perform_action(src))
return
toggle_open(user)
/obj/item/modular_computer/laptop/click_alt(mob/user)
if(!screen_on)
return CLICK_ACTION_BLOCKING
try_toggle_open(user) // Close it.
return CLICK_ACTION_SUCCESS
/obj/item/modular_computer/laptop/attack_hand_secondary(mob/user, list/modifiers)
. = ..()
if(. == SECONDARY_ATTACK_CANCEL_ATTACK_CHAIN)
return
attack_self(user)
return SECONDARY_ATTACK_CANCEL_ATTACK_CHAIN
/obj/item/modular_computer/laptop/proc/toggle_open(mob/living/user=null)
if(screen_on)
to_chat(user, span_notice("You close \the [src]."))
slowdown = initial(slowdown)
update_weight_class(initial(w_class))
drag_slowdown = initial(drag_slowdown)
else
to_chat(user, span_notice("You open \the [src]."))
slowdown = slowdown_open
update_weight_class(w_class_open)
drag_slowdown = slowdown_open
if(isliving(loc))
var/mob/living/localmob = loc
localmob.update_equipment_speed_mods()
localmob.update_pull_movespeed()
screen_on = !screen_on
update_appearance()
/obj/item/modular_computer/laptop/get_messenger_ending()
return "Sent from my UNIX Laptop"
// Laptop frame, starts empty and closed.
/obj/item/modular_computer/laptop/buildable
start_open = FALSE