.            ★.        . blessfrey.me ..          ☆        .

blessfrey gdd - inspect

description

Right-click on an tangible entity or inventory item to open a popup inspect menu with all relevant inspect options. Selecting one will execute a method. Examples are 'follow Chloe' (pathfind after Chloe wherever she moves until action is cancelled), 'pick up clover' (item pickup), and 'examine button' (write a descriptive line about her in Helia's thought bubble)


structure

Every tangible entity has an exported dictionary of inspect_options: {index: ['tr_key', 'method']}. For example, {0:['tr_pick up','pickup'],1:['tr_extinguish','extinguish']}. Every tangible appends 'examine' at ready.


The Clickable has a _ready input event signal looking for "right-click."


The inspect menu ("res://UI/InspectMenu/InspectMenu.tscn") is instanced at declaration and added as a child at ready in the UI singleton.


logic

When tangible entity is right-clicked (@ $Body/Sprite/Clickable), the UI enters InspectMenu with its subject set. (The subject setter also sets the player's target.) The "id_pressed" signal is reset for each subject. InspectMenu connects "about_to_show" the first time it's needed and keeps it forever. Before popup(), it resets, adds a label at an offset with the subject's display name, then adds a UI option for each inspect option.


When a selection is made, the "id_pressed" signal calls "id_pressed" on the subject, which calls the method at its inspect_options[pressed_id][1]. So 'examine' calls 'examine,' which is in tangible.gd. Most related methods are on tangible.gd, though they may be at a more specific script.

challenges/known issues

It's not obvious how to get popupmenus to appear at specific coordinates. I get it to appear at the subject's current location by setting rect_global_position = get_global_mouse_position() the line immediately after popup().


The inspect menu retains the largest ever size going forward. I reset the size to 20,20 when clearing previous options.


Tangibles and inventory items both have inspect menus, but their code has to be separate. They are too different from each other.


It doesn't close the inspect menu if pickup is chosen while item out of range, even after item is picked up.


works for...