<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Dragonforge Development</title>
    <description>The latest articles on DEV Community by Dragonforge Development (@dragonforge-dev).</description>
    <link>https://dev.to/dragonforge-dev</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F1750368%2F209080ee-b3a5-4f88-a0e4-2236f1b776ef.png</url>
      <title>DEV Community: Dragonforge Development</title>
      <link>https://dev.to/dragonforge-dev</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/dragonforge-dev"/>
    <language>en</language>
    <item>
      <title>How to Press and Drag to Reposition a Window in Godot</title>
      <dc:creator>Dragonforge Development</dc:creator>
      <pubDate>Wed, 14 Aug 2024 01:20:50 +0000</pubDate>
      <link>https://dev.to/dragonforge-dev/how-to-press-and-drag-to-reposition-a-window-in-godot-1i3l</link>
      <guid>https://dev.to/dragonforge-dev/how-to-press-and-drag-to-reposition-a-window-in-godot-1i3l</guid>
      <description>&lt;p&gt;Ever wanted to create a floating window that stayed on the desktop or phone screen, but could be moved around by pressing and holding? While the process is similar to clicking and dragging a 2D texture, the process is a little different. (Example written for Godot 4.3 RC3 and later.)&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F3i034iptliplwj0rc80s.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F3i034iptliplwj0rc80s.png" alt="A coin rendered in a floating window." width="704" height="641"&gt;&lt;/a&gt;&lt;br&gt;
&lt;strong&gt;A coin rendered in a floating window.&lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Set &lt;strong&gt;Enable Long Click Press As Right Click&lt;/strong&gt; to &lt;strong&gt;True&lt;/strong&gt; in the &lt;strong&gt;Project Settings&lt;/strong&gt;. (&lt;strong&gt;Project Menu -&amp;gt; Project Settings... -&amp;gt; General Tab -&amp;gt; Input Devices -&amp;gt; Pointing&lt;/strong&gt;)&lt;/li&gt;
&lt;li&gt;Create a &lt;strong&gt;Window&lt;/strong&gt; node.&lt;/li&gt;
&lt;li&gt;Set Borderless to True. (Inspector -&amp;gt; Flags)&lt;/li&gt;
&lt;li&gt;Set Transparent to True. (Inspector -&amp;gt; Flags)&lt;/li&gt;
&lt;li&gt;Add the following code to your script:
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight gdscript"&gt;&lt;code&gt;&lt;span class="k"&gt;extends&lt;/span&gt; &lt;span class="n"&gt;Window&lt;/span&gt;
&lt;span class="k"&gt;var&lt;/span&gt; &lt;span class="n"&gt;is_dragging&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="bp"&gt;false&lt;/span&gt;
&lt;span class="k"&gt;var&lt;/span&gt; &lt;span class="n"&gt;mouse_offset&lt;/span&gt;


&lt;span class="k"&gt;func&lt;/span&gt; &lt;span class="nf"&gt;_input&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;event&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;InputEvent&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;-&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;void&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;event&lt;/span&gt; &lt;span class="k"&gt;is&lt;/span&gt; &lt;span class="n"&gt;InputEventMouseButton&lt;/span&gt; &lt;span class="ow"&gt;and&lt;/span&gt; &lt;span class="n"&gt;event&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;button_index&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="n"&gt;MOUSE_BUTTON_RIGHT&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
        &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;event&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;is_pressed&lt;/span&gt;&lt;span class="p"&gt;():&lt;/span&gt;
            &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;get_visible_rect&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;has_point&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;event&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;position&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
                &lt;span class="n"&gt;is_dragging&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="bp"&gt;true&lt;/span&gt;
                &lt;span class="n"&gt;mouse_offset&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;event&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;position&lt;/span&gt;
        &lt;span class="k"&gt;else&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
            &lt;span class="n"&gt;is_dragging&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="bp"&gt;false&lt;/span&gt;
    &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;event&lt;/span&gt; &lt;span class="k"&gt;is&lt;/span&gt; &lt;span class="n"&gt;InputEventMouseMotion&lt;/span&gt; &lt;span class="ow"&gt;and&lt;/span&gt; &lt;span class="n"&gt;is_dragging&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
        &lt;span class="n"&gt;position&lt;/span&gt; &lt;span class="o"&gt;+=&lt;/span&gt; &lt;span class="n"&gt;Vector2i&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;event&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;position&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="n"&gt;mouse_offset&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;That's all there is to it! You can now right-click and drag to move the window on any OS, or long press and then drag, just like you would an app on Android!&lt;/p&gt;

&lt;p&gt;Like this? Feel free to show your appreciation:&lt;br&gt;
&lt;a href="https://www.buymeacoffee.com/dragonforge.dev" rel="noopener noreferrer"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--n7XsGLsY--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://cdn.buymeacoffee.com/buttons/v2/default-blue.png" alt="Buy Me A Coffee" width="545" height="153"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Want to learn more Godot? Interested in making an RPG? Take our course &lt;a href="https://www.dragonforge.dev/godot-make-a-professional-rpg" rel="noopener noreferrer"&gt;Godot: Learn To Be A Professional Game Developer by Making a 3D RPG From Scratch&lt;/a&gt;.&lt;/p&gt;

</description>
      <category>godot</category>
      <category>gdscript</category>
      <category>godotengine</category>
    </item>
    <item>
      <title>How to Create a Fine-grained Personal Access Token (PAT) on GitHub</title>
      <dc:creator>Dragonforge Development</dc:creator>
      <pubDate>Sat, 20 Jul 2024 01:32:09 +0000</pubDate>
      <link>https://dev.to/dragonforge-dev/how-to-create-a-fine-grained-personal-access-token-pat-on-github-11c8</link>
      <guid>https://dev.to/dragonforge-dev/how-to-create-a-fine-grained-personal-access-token-pat-on-github-11c8</guid>
      <description>&lt;p&gt;While developing in Godot, and using the GitHub plugin, it was very difficult to figure out how to create a fine-grained PAT on GitHub. In fact, searches on it mostly turned up people complaining about how difficult it was. It the process of making a course on learning professional development skills while making a game, we ended up writing down the steps. We added it to the Godot GitHub Plugin Wiki, and thought it might be helpful here too.&lt;/p&gt;

&lt;p&gt;If you're wondering why you'd use a PAT - don't. An SSH key is a better solution. It's more secure than having to copy and paste a text string you have to put &lt;em&gt;somewhere&lt;/em&gt;. But, if you know you need a PAT, here's how to make one that limits the risks.&lt;/p&gt;

&lt;h2&gt;
  
  
  How to Make a Fine-grained Personal Access Token (PAT)
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;Click your profile photo.&lt;/li&gt;
&lt;li&gt;Select &lt;strong&gt;Settings&lt;/strong&gt;. (Near the bottom).&lt;/li&gt;
&lt;li&gt;Click &lt;strong&gt;&amp;lt;&amp;gt; Developer Settings&lt;/strong&gt; in the left sidebar. (It’s the last option.)&lt;/li&gt;
&lt;li&gt;Click &lt;strong&gt;Personal access tokens&lt;/strong&gt; in the left sidebar.&lt;/li&gt;
&lt;li&gt;Click &lt;strong&gt;Fine-grained token&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Click &lt;strong&gt;Generate new token&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Name&lt;/strong&gt; it whatever project(s) for which you are making it.&lt;/li&gt;
&lt;li&gt;Set the &lt;strong&gt;Expiration&lt;/strong&gt; for as long as you like. (We don’t recommend over 90 days).&lt;/li&gt;
&lt;li&gt;Make a note to yourself in the &lt;strong&gt;Description&lt;/strong&gt; field. (You'll be glad you did this in a month.)&lt;/li&gt;
&lt;li&gt;Select &lt;strong&gt;Only select repositories&lt;/strong&gt; under &lt;strong&gt;Repository access&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Click the &lt;strong&gt;Select Repositories&lt;/strong&gt; dropdown button that just appeared. 12. Select your repo(s). (You can add as many as you like.)&lt;/li&gt;
&lt;li&gt;Open &lt;strong&gt;Repository permissions&lt;/strong&gt; under the &lt;strong&gt;Permissions&lt;/strong&gt; header.&lt;/li&gt;
&lt;li&gt;Select &lt;strong&gt;Read and Write&lt;/strong&gt; from the &lt;strong&gt;Contents&lt;/strong&gt; dropdown.&lt;/li&gt;
&lt;li&gt;Click the green &lt;strong&gt;Generate token&lt;/strong&gt; button at the bottom of the page.&lt;/li&gt;
&lt;li&gt;Copy your token and store it somewhere secure. &lt;em&gt;You cannot come back to Git to see what it is later, and will have to make a new one if you lose this one.&lt;/em&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;You now have a PAT limited to only the repos you selected, and just has basic read access to metadata, and read/write access to code. This is all the access 99% of people need from the command line on their computer.&lt;/p&gt;

</description>
    </item>
  </channel>
</rss>
