You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
34 lines
2.6 KiB
Plaintext
34 lines
2.6 KiB
Plaintext
<h2>description </h2>
|
|
<p>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) </p>
|
|
|
|
<h2>structure </h2>
|
|
<p>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. </p>
|
|
|
|
<p>The Clickable has a _ready input event signal looking for "right-click." </p>
|
|
|
|
<p>The inspect menu ("res://UI/InspectMenu/InspectMenu.tscn") is instanced at declaration and added as a child at ready in the UI singleton. </p>
|
|
|
|
<h2>logic </h2>
|
|
<p>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. </p>
|
|
<p>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.</p>
|
|
<p>Only one inspect menu can be open at a time. </p>
|
|
|
|
<h2>challenges/known issues </h2>
|
|
<p>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 <code>rect_global_position = get_global_mouse_position()</code> the line immediately after <code>popup()</code>. </p>
|
|
|
|
<p>The inspect menu retains the largest ever size going forward. I reset the size to 20,20 when clearing previous options. </p>
|
|
|
|
<p>Tangibles and inventory items both have inspect menus, but their code has to be separate. They are too different from each other. </p>
|
|
|
|
<p>It doesn't close the inspect menu if pickup is chosen while item out of range, even after item is picked up. </p>
|
|
|
|
<h2>works for...</h2>
|
|
<ul>
|
|
<li>player✓ </li>
|
|
<li>characters✓ </li>
|
|
<li>characters✓ </li>
|
|
<li>activators✗ </li>
|
|
<li>floor items✗ </li>
|
|
<li>inventory items✗ </li>
|
|
</ul>
|