<?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: Emilien Leroy</title>
    <description>The latest articles on DEV Community by Emilien Leroy (@emilienleroy).</description>
    <link>https://dev.to/emilienleroy</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%2F352858%2F4f7df8ed-b1a2-4c76-a717-506bddb3d63e.jpeg</url>
      <title>DEV Community: Emilien Leroy</title>
      <link>https://dev.to/emilienleroy</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/emilienleroy"/>
    <language>en</language>
    <item>
      <title>From Escape the Wave to Pong Why I'm Taking on a New Challenge</title>
      <dc:creator>Emilien Leroy</dc:creator>
      <pubDate>Thu, 23 Mar 2023 14:00:00 +0000</pubDate>
      <link>https://dev.to/emilienleroy/from-escape-the-wave-to-pong-why-im-taking-on-a-new-challenge-39i9</link>
      <guid>https://dev.to/emilienleroy/from-escape-the-wave-to-pong-why-im-taking-on-a-new-challenge-39i9</guid>
      <description>&lt;p&gt;This week marks the start of a new project for me. While my current project, &lt;a href="https://github.com/EmilienLeroy/EscapeTheWave"&gt;Escape The Wave&lt;/a&gt;, is on hold as I'm awaiting visual assets from a friend, I've decided to take on a new challenge. One of the main reasons for starting a new project is that I want to train myself in implementing online multiplayer functionality, something which is currently too complex for me to implement in Escape The Wave.&lt;/p&gt;

&lt;p&gt;For my new game, I've decided to create a simple multiplayer Pong game. The concept of Pong is straightforward, so there isn't much to say about the game itself. This week, I focused on developing the basics of the game, including two-player functionality and a score system.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--J1fOnUXA--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_66%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/3cj6zhvokphrvxlhl7sf.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--J1fOnUXA--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_66%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/3cj6zhvokphrvxlhl7sf.gif" alt="pong" width="320" height="711"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Moving forward, I plan to work on the game's style and design to create a simple yet beautiful game. This will be my focus for next week.&lt;/p&gt;

&lt;p&gt;Overall, I'm excited about this new project and look forward to continuing to develop it. While Escape The Wave is still a priority, I believe that taking on a new challenge will help me grow as a developer and better prepare me for future projects. You can find the repository of this project &lt;a href="https://github.com/EmilienLeroy/DuoPong"&gt;here&lt;/a&gt;.&lt;/p&gt;

</description>
      <category>gamedev</category>
      <category>programming</category>
      <category>godot</category>
      <category>news</category>
    </item>
    <item>
      <title>Optimizing Mob Pathfinding. Improving Game Performance for Smooth Gameplay</title>
      <dc:creator>Emilien Leroy</dc:creator>
      <pubDate>Thu, 16 Mar 2023 14:00:00 +0000</pubDate>
      <link>https://dev.to/emilienleroy/optimizing-mob-pathfinding-improving-game-performance-for-smooth-gameplay-4oa4</link>
      <guid>https://dev.to/emilienleroy/optimizing-mob-pathfinding-improving-game-performance-for-smooth-gameplay-4oa4</guid>
      <description>&lt;p&gt;During this week of development, I focused on improving the performance of my game &lt;a href="https://github.com/EmilienLeroy/EscapeTheWave"&gt;Escape The Wave&lt;/a&gt; when a lot of mobs are searching for the player. This was a challenging task, but I found some effective solutions. &lt;/p&gt;

&lt;p&gt;First, I updated the mob pathfinding by using a NavigationAgent instead of the get_simple_path function of a Navigation node. This new approach allowed my game to have many more mobs on a small map. Previously, in the demo map, I was limited to around 70 mobs, or else the game would become laggy. But with this new technique, I can have more than 500 mobs without any lag on a small map.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--Cz_gj77y--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_66%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/9rtqlvi090baurtd0e3n.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--Cz_gj77y--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_66%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/9rtqlvi090baurtd0e3n.gif" alt="little" width="880" height="396"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;However, this technique alone did not reduce lagging on a large map. To reduce lag on maps larger than a certain size, I had to make some compromises. Not all mobs can constantly search for the player on the map, as this significantly affects the game's performance. To address this, I used a VisibilityNotifier to detect if a mob is displayed on the screen or not. If a mob is displayed on the screen, it will try to reach the player's position. Once the mob is out of the screen, it will keep its current direction without searching for the player. When a mob spawns, it initially does not have any direction to go, which can cause mobs to stack on a single point, creating performance issues when the player is nearby. To prevent this issue, I simply define a random direction for the mob to go in until it crosses the player's path.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s---E09x9b---/c_limit%2Cf_auto%2Cfl_progressive%2Cq_66%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/w3lt5tpnne9dp4d176xg.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s---E09x9b---/c_limit%2Cf_auto%2Cfl_progressive%2Cq_66%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/w3lt5tpnne9dp4d176xg.gif" alt="big" width="880" height="396"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Using these techniques, my game no longer lags when many mobs are searching for the player. Only the displayed enemies try to attack the player, while the others go in a random direction. However, in the game, it appears as if all the mobs are trying to find and attack the player. Sometimes the game may experience slight FPS drops, but they are minimal and do not disrupt gameplay.&lt;/p&gt;

&lt;p&gt;In conclusion, improving game performance can be a challenging task, especially when dealing with multiple mobs searching for the player. However, by using a NavigationAgent and a VisibilityNotifier, it is possible to significantly increase the number of mobs on a small map without causing lag. Additionally, by defining a random direction for mobs to go in when they spawn, it is possible to prevent stacking and performance issues when the player is nearby. These techniques have helped to make the game smoother and more enjoyable for players.&lt;/p&gt;

</description>
      <category>godot</category>
      <category>gamedev</category>
      <category>news</category>
      <category>programming</category>
    </item>
    <item>
      <title>Island Escapades Updates on the Development of Escape The Wave</title>
      <dc:creator>Emilien Leroy</dc:creator>
      <pubDate>Thu, 09 Mar 2023 14:00:00 +0000</pubDate>
      <link>https://dev.to/emilienleroy/island-escapades-updates-on-the-development-of-escape-the-wave-1p2a</link>
      <guid>https://dev.to/emilienleroy/island-escapades-updates-on-the-development-of-escape-the-wave-1p2a</guid>
      <description>&lt;p&gt;Game development can be both challenging and exciting. It requires a lot of effort and creativity to come up with a game that is both engaging and enjoyable. In this devlog, I will be sharing my progress on my new game &lt;a href="https://github.com/EmilienLeroy/EscapeTheWave"&gt;Escape The Wave&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Adding Escape Element
&lt;/h2&gt;

&lt;p&gt;This week, I worked on adding the escape element to the game, which emits a signal when the player enters into the zone. The idea is to allow players to escape from the island they are stranded on. To achieve this, I created a new node and added it to the procedural map using a function that gave me the border of the island. Once I got a random position based on the island's border, I added it to the map.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--AEaZ4-ME--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_66%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/5n5yi1r0cgxapxz9nrds.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--AEaZ4-ME--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_66%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/5n5yi1r0cgxapxz9nrds.gif" alt="escape" width="880" height="396"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--CLWkZlwG--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_66%2Cw_880/https://cdn.hashnode.com/res/hashnode/image/upload/v1678042250806/50b4e34f-6bfc-40e1-8594-eccaf7cb8c5c.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--CLWkZlwG--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_66%2Cw_880/https://cdn.hashnode.com/res/hashnode/image/upload/v1678042250806/50b4e34f-6bfc-40e1-8594-eccaf7cb8c5c.gif" alt="map" width="880" height="396"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Solving Map Issues
&lt;/h2&gt;

&lt;p&gt;However, sometimes the island would have small archipelagos that could result in the escape being out of the main island's reach, making it impossible for the player to access it. To fix this, I created a function with the help of Chat GPT that removes all the unconnected islands. This allowed the escape to be always on the island.&lt;/p&gt;

&lt;p&gt;But another issue arose when the wall could block the access to the escape. At the moment, I am waiting for assets for the game, so I haven't fixed this problem yet. I plan to work on it once I have implemented the assets. In addition to this, I also improved the loading time of the map when its size is too large.&lt;/p&gt;

&lt;h2&gt;
  
  
  Mob Spawns and Level System
&lt;/h2&gt;

&lt;p&gt;Lastly, I added mob spawns on the island using a random position on the island. I also added a level system, where once the player enters the escape, they go to the next level. The next level will have a bigger map and more mobs, increasing the game's difficulty.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--SbpPO9QB--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_66%2Cw_880/https://cdn.hashnode.com/res/hashnode/image/upload/v1678042271457/19e536b9-1c87-495b-9660-a5908cb1f67d.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--SbpPO9QB--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_66%2Cw_880/https://cdn.hashnode.com/res/hashnode/image/upload/v1678042271457/19e536b9-1c87-495b-9660-a5908cb1f67d.gif" alt="level" width="880" height="396"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Conclusion
&lt;/h2&gt;

&lt;p&gt;In conclusion, game development is a never-ending process of tweaking and improving. With every step forward, new challenges arise, but with perseverance and determination, they can be overcome. Escape The Wave is still a work in progress, and I can't wait to see how it evolves in the coming weeks.&lt;/p&gt;

</description>
      <category>programming</category>
      <category>opensource</category>
      <category>gamedev</category>
      <category>godot</category>
    </item>
    <item>
      <title>Introducing Procedural Generation For My Game</title>
      <dc:creator>Emilien Leroy</dc:creator>
      <pubDate>Thu, 02 Mar 2023 14:00:00 +0000</pubDate>
      <link>https://dev.to/emilienleroy/introducing-procedural-generation-for-my-game-49dm</link>
      <guid>https://dev.to/emilienleroy/introducing-procedural-generation-for-my-game-49dm</guid>
      <description>&lt;p&gt;In this week's devlog for my new game &lt;a href="https://github.com/EmilienLeroy/EscapeTheWave" rel="noopener noreferrer"&gt;Escape The Wave&lt;/a&gt;, I focused on the procedural generation of the map. It was a challenging but instructive process, and with the help of ChatGPT and a lot of research, I was able to successfully generate a map for my game!&lt;/p&gt;

&lt;h2&gt;
  
  
  Exploring Procedural Generation Methods
&lt;/h2&gt;

&lt;p&gt;The objective of my game is to generate an island with randomly placed walls that have spaces for the player to pass through. To achieve this, I first researched various procedural generation methods. The first method I tried was perlin noise, which uses noise values to determine the position of each tile. While this method was easy to implement, it didn't allow me to control the form of the generated map to match my specific needs for the walls.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fbu6ss8mj7i96e863iqfz.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fbu6ss8mj7i96e863iqfz.gif" alt="noise1" width="1600" height="720"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F4f2bzzn46h8jx1jbvqmk.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F4f2bzzn46h8jx1jbvqmk.gif" alt="noise2" width="1600" height="720"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Next, I experimented with the walker algorithm, which is often used to create dungeon-like environments by creating rooms and links between them. I attempted to use this method to generate walls, but the result was inconclusive.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Flowss7kt5lp9jrxi78he.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Flowss7kt5lp9jrxi78he.gif" alt="walker" width="1600" height="720"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Developing a Custom Algorithm
&lt;/h2&gt;

&lt;p&gt;Ultimately, I decided to create my own algorithm inspired by the two previous methods. I began by creating a 2D array with a predefined size, filling it with zeros to represent water. Then, I added an island by placing a circle in the center of the array with a radius equal to one-quarter of the array size. I filled this circle with ones to represent grass. To improve the form of the island, which initially resembled a simple circle, I used perlin noise and added water depending on the noise value. To ensure that the island did not become an archipelago, I applied the noise only on the border of the circle. &lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fygjd6vwnhjfaadfdp6o3.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fygjd6vwnhjfaadfdp6o3.gif" alt="island" width="720" height="324"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Finally, I added walls with a simple pattern, removing the middle of any wall larger than six tiles to ensure that the player could pass through all walls.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fyqvglv2fe3esp1903txg.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fyqvglv2fe3esp1903txg.gif" alt="map" width="720" height="324"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;You can find the full algo &lt;a href="https://github.com/EmilienLeroy/EscapeTheWave/blob/4c86896b3c7923159a6795f52652288af4f32f20/entities/world/world.gd" rel="noopener noreferrer"&gt;here&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  Conclusion
&lt;/h2&gt;

&lt;p&gt;Overall, the procedural generation of the map was a challenging but rewarding process. I am excited to continue developing my new game and to see how the generated map will enhance the player's experience.&lt;/p&gt;

</description>
    </item>
    <item>
      <title>Enemies, Health Regeneration, and Scene Updates</title>
      <dc:creator>Emilien Leroy</dc:creator>
      <pubDate>Thu, 23 Feb 2023 14:00:00 +0000</pubDate>
      <link>https://dev.to/emilienleroy/enemies-health-regeneration-and-scene-updates-1700</link>
      <guid>https://dev.to/emilienleroy/enemies-health-regeneration-and-scene-updates-1700</guid>
      <description>&lt;p&gt;Hi everybody! It's the third week of the development of my new game, &lt;a href="https://github.com/EmilienLeroy/EscapeTheWave"&gt;Escape The Wave&lt;/a&gt;. I'm excited to share some of the new features I've added to the game.&lt;/p&gt;

&lt;h2&gt;
  
  
  Enemies can attack the player
&lt;/h2&gt;

&lt;p&gt;One of the most significant updates to the game is that enemies can now attack the player. This feature adds a new level of difficulty to the game, making it even more challenging. When an enemy is near the player, the player will lose some of their life. If the player loses all of their life, the game is over.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--0l_RnwaY--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_66%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/z0qwpsse832xdhxosrb2.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--0l_RnwaY--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_66%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/z0qwpsse832xdhxosrb2.gif" alt="attacks" width="880" height="396"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Life item added
&lt;/h2&gt;

&lt;p&gt;To balance out the increased difficulty, I've added a life item to the game. This item allows the player to regain some of their life when they touch it. Currently, I've added the life item statically to the game, but in the future, it will spawn randomly on the map.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--KCoyQVxP--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_66%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/8wqg29neadu7jusuizr5.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--KCoyQVxP--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_66%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/8wqg29neadu7jusuizr5.gif" alt="Life" width="880" height="396"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Home and Score Scenes Added
&lt;/h2&gt;

&lt;p&gt;In addition to these new gameplay elements, I've also worked on the home and score scenes. To make it easier to switch between scenes and pass data between them, I've added a router singleton. The home and score views are currently quite basic, as I haven't defined the theme of the game yet.&lt;/p&gt;

&lt;h2&gt;
  
  
  Invulnerable Frames Added
&lt;/h2&gt;

&lt;p&gt;Finally, I've added some invulnerable frames to the player when they take damage. This means that the player will blink when they're invulnerable, indicating to the user that they cannot take any more damage during this time.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--oDgrVmLT--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_66%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/02tp2n4tvihrutxm9p82.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--oDgrVmLT--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_66%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/02tp2n4tvihrutxm9p82.gif" alt="Frames" width="880" height="396"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  What's next
&lt;/h2&gt;

&lt;p&gt;Overall, I'm happy with the progress I've made in the third week of development. These new features add more depth to the game and make it even more engaging for players. I can't wait to see how the game continues to evolve as I add more elements to it in the coming weeks. Stay tuned for more updates!&lt;/p&gt;

</description>
      <category>programming</category>
      <category>news</category>
      <category>opensource</category>
      <category>showdev</category>
    </item>
    <item>
      <title>Escape the Wave, Week Two Development Update</title>
      <dc:creator>Emilien Leroy</dc:creator>
      <pubDate>Mon, 13 Feb 2023 14:00:00 +0000</pubDate>
      <link>https://dev.to/emilienleroy/escape-the-wave-week-two-development-update-47g4</link>
      <guid>https://dev.to/emilienleroy/escape-the-wave-week-two-development-update-47g4</guid>
      <description>&lt;p&gt;It's the second week of development for the game "&lt;a href="https://github.com/EmilienLeroy/EscapeTheWave" rel="noopener noreferrer"&gt;Escape the Wave&lt;/a&gt;" and this week was focused on creating the base mob for the game. The goal of the game is to escape the waves of enemies that come at you, and this week was dedicated to creating the foundation for these enemies.&lt;/p&gt;

&lt;h2&gt;
  
  
  Creating the Base Mob
&lt;/h2&gt;

&lt;p&gt;The first step in creating the base mob was to create a simple red square with some health. This square will serve as the foundation for all future mobs in the game. When a bullet from the player hits the mob, it will lose some health, and when its health reaches zero, it will be removed from the game. This basic mechanic sets the foundation for creating more complex and challenging enemies in the future.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F9npq4pvb8msm2jhtf1c0.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F9npq4pvb8msm2jhtf1c0.gif" alt="mob" width="720" height="324"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Adding the Pathfinding System
&lt;/h2&gt;

&lt;p&gt;The next step was to work on the pathfinding system for the mobs. This system allows the mobs to follow the player, making the game more challenging and engaging. Currently, an old method is used to find the path to the player, which works with a tileset. However, in a future version, this pathfinding system will be improved using the new navigation system in Godot. This will make the pathfinding more sophisticated and accurate, providing a better gaming experience for the player.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fh9cid60ffmfcqa6dw522.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fh9cid60ffmfcqa6dw522.gif" alt="path" width="720" height="324"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Adding the Player Score System
&lt;/h2&gt;

&lt;p&gt;Finally, the player score system was added to the game. Now, when an enemy is killed, the player will earn points towards their score. This score system is simple for now, but it will be improved in the coming weeks to make the game even more engaging and rewarding.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fcrjspe4x4j00xi1464je.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fcrjspe4x4j00xi1464je.gif" alt="score" width="600" height="270"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;In conclusion, this week was a productive one for the development of Escape the Wave. The base mob was created, the pathfinding system was improved, and the player score system was added, providing a solid foundation for creating more challenging enemies and a more engaging gaming experience.&lt;/p&gt;

</description>
      <category>motivation</category>
    </item>
    <item>
      <title>Introducing Escape the Wave. My Exciting New Game!</title>
      <dc:creator>Emilien Leroy</dc:creator>
      <pubDate>Thu, 09 Feb 2023 14:00:00 +0000</pubDate>
      <link>https://dev.to/emilienleroy/introducing-escape-the-wave-my-exciting-new-game-17ao</link>
      <guid>https://dev.to/emilienleroy/introducing-escape-the-wave-my-exciting-new-game-17ao</guid>
      <description>&lt;p&gt;Last week, I officially released my first game, &lt;a href="https://github.com/EmilienLeroy/FallingSquare/"&gt;Falling Square&lt;/a&gt;, which marked a great milestone for me. However, the serious work now begins. This week, I'm starting development on my second game, &lt;a href="https://github.com/EmilienLeroy/EscapeTheWave"&gt;Escape the Wave&lt;/a&gt;. It will be a simple shooting game with some surprises (which I'll keep secret for now). The game will be available on Android and iOS, like my first game, and may also be available on Windows, Linux, and macOS.&lt;/p&gt;

&lt;h2&gt;
  
  
  Virtual Joysticks for Player Movement
&lt;/h2&gt;

&lt;p&gt;I've made my first addition to the game by incorporating the player and their movements. To cater to mobile devices, I've added a virtual joystick that enables users to move the player. I've also added another virtual joystick for rotation. Both virtual joysticks were developed by MarcoFazioRandom and can be found under the name "Virtual-Joystick-Godot" on GitHub at this link: &lt;a href="https://github.com/MarcoFazioRandom/Virtual-Joystick-Godot"&gt;https://github.com/MarcoFazioRandom/Virtual-Joystick-Godot&lt;/a&gt;."&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--_5S-hS1Q--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_66%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/nq0c7mdnves05m6m6glm.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--_5S-hS1Q--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_66%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/nq0c7mdnves05m6m6glm.gif" alt="move" width="880" height="396"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Implementation of Player Shooting Mechanism
&lt;/h2&gt;

&lt;p&gt;Next, I added the bullet and player shooting functionality. Currently, it's just a simple white ball without any textures, but there will likely be various types of bullets with unique effects in the future. To shoot, use the rotation joystick. Rotating the joystick will automatically trigger a shot.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--PjYTOFWG--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_66%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/mrkloxd975ayosup3929.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--PjYTOFWG--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_66%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/mrkloxd975ayosup3929.gif" alt="fire" width="880" height="396"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Addition of First Wall and Camera Implementation
&lt;/h2&gt;

&lt;p&gt;Finally, I've added the first wall using a simple tileset, as well as a camera that follows the player. When a bullet hits a wall, it is automatically destroyed. The camera and wall serve as the first elements in creating a visually appealing and functional environment for the game.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--vt_DfDM3--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_66%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/2bs50ovhko6up55osgm2.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--vt_DfDM3--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_66%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/2bs50ovhko6up55osgm2.gif" alt="walls" width="880" height="396"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  What's next
&lt;/h2&gt;

&lt;p&gt;In the first week of development, I successfully laid the foundation for my new game. Building upon this solid foundation, I plan to add the first enemy in the upcoming week. This will bring the game one step closer to completion and provide players with a new challenge to overcome. I am eager to continue working on this project and can't wait to see how it evolves in the coming weeks.&lt;/p&gt;

</description>
      <category>programming</category>
      <category>gamedev</category>
      <category>opensource</category>
      <category>showdev</category>
    </item>
    <item>
      <title>The tool that revolutionized my workflow. My experience with Vite</title>
      <dc:creator>Emilien Leroy</dc:creator>
      <pubDate>Thu, 02 Feb 2023 14:00:00 +0000</pubDate>
      <link>https://dev.to/emilienleroy/the-tool-that-revolutionized-my-workflow-my-experience-with-vite-a06</link>
      <guid>https://dev.to/emilienleroy/the-tool-that-revolutionized-my-workflow-my-experience-with-vite-a06</guid>
      <description>&lt;p&gt;In my previous post, I shared my &lt;a href="https://blog.emilienleroy.fr/the-framework-that-revolutionized-my-workflow"&gt;experience with TSED&lt;/a&gt;. Today, I want to talk about a tool that has greatly increased my workflow: &lt;a href="https://vitejs.dev/"&gt;ViteJS&lt;/a&gt;. For those unfamiliar, ViteJS is a web application development build tool created by &lt;a href="https://github.com/yyx990803"&gt;Evan You&lt;/a&gt; and his team.&lt;/p&gt;

&lt;p&gt;Before discussing ViteJS, I want to mention the previous build tool I used, Webpack. Webpack has a prominent place in web development and I used it on several projects over the years (and still use it on some legacy projects). However, it is slower than ViteJS due to its bundling process at each change. Even with a cache system, it still lags behind Vite in terms of speed.&lt;/p&gt;

&lt;p&gt;I adopted ViteJS early on (&lt;a href="https://github.com/EmilienLeroy/labs/blob/494f185f26aa34251f27deeebd69d434aa19a4ee/todo-vue3/package.json"&gt;even before its v1.0.0 release&lt;/a&gt;) and it has been one of the most incredible experiences in my developer life. Webpack used to take over 30 seconds to update even small changes, but with ViteJS, these updates take less than a second, just the time it takes to switch to the browser. Speed is one of ViteJS's biggest advantages. This is achieved by not bundling the app during development, but instead using the module script tag to improve module dependencies, which are all served as HTTP endpoints. For the build, Rollup is used to create the final bundle.&lt;/p&gt;

&lt;p&gt;Another key advantage over Webpack is its simple configuration. No complicated setup is required. I can't count the number of hours I spent configuring Webpack, but it was a frustrating experience. Vite supports popular web frameworks with official plugins and has a large collection of plugins maintained by the community. It works seamlessly. I even created a &lt;a href="https://github.com/Kamiapp-fr/vite-plugin-cem"&gt;plugin&lt;/a&gt; for Vite, a simple one for generating a custom-element.json manifest for web components.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="nx"&gt;vue&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;@vitejs/plugin-vue&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;

&lt;span class="k"&gt;export&lt;/span&gt; &lt;span class="k"&gt;default&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="na"&gt;plugins&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;vue&lt;/span&gt;&lt;span class="p"&gt;()],&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;blockquote&gt;
&lt;p&gt;For example, it's super easy to configure a vue app using vitejs. &lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;As someone who has used both ViteJS and Webpack, I can attest to the superiority of ViteJS in many ways. Its lightning-fast update speeds and effortless configuration make it a joy to work with, compared to the headaches of configuring Webpack. The support for popular web frameworks and the wealth of community-maintained plugins only add to its appeal. I have even created a plugin myself, which further highlights the ease of customization. I highly recommend ViteJS to any web developer seeking a hassle-free and efficient build tool.&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>productivity</category>
      <category>opensource</category>
      <category>vite</category>
    </item>
    <item>
      <title>My First Mobile Game: Falling Square is Officially Out on App Store and Play Store</title>
      <dc:creator>Emilien Leroy</dc:creator>
      <pubDate>Wed, 25 Jan 2023 19:00:54 +0000</pubDate>
      <link>https://dev.to/emilienleroy/my-first-mobile-game-falling-square-is-officially-out-on-app-store-and-play-store-5943</link>
      <guid>https://dev.to/emilienleroy/my-first-mobile-game-falling-square-is-officially-out-on-app-store-and-play-store-5943</guid>
      <description>&lt;p&gt;I am excited to announce that my first mobile game, Falling Square, is officially out on the &lt;a href="https://apps.apple.com/us/app/falling-square-game/id1665452389" rel="noopener noreferrer"&gt;App Store&lt;/a&gt; and &lt;a href="https://play.google.com/store/apps/details?id=fr.emilienleroy.fallingsquare&amp;amp;hl=fr&amp;amp;gl=US" rel="noopener noreferrer"&gt;Play Store&lt;/a&gt;! Falling Square is a fun and challenging game that is easy to pick up and play, but difficult to master.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fte2gib5gnvklvlgykpr2.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fte2gib5gnvklvlgykpr2.gif" alt="Falling Square" width="1024" height="1024"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;In Falling Square, the goal is to touch the square before it leaves the screen. The game starts with a single square falling from the top of the screen, and the player must tap the square before it reaches the bottom of the screen. As the player progresses through the game, more squares will fall at a faster pace, making the game more challenging.&lt;/p&gt;

&lt;p&gt;The game also features a life system, where the player starts with three lives. If the player misses a square, they will lose a life. If the player loses all their lives, it's game over. The game features simple yet challenging gameplay, colorful graphics, and a catchy soundtrack. The game is available for free on both the &lt;a href="https://apps.apple.com/us/app/falling-square-game/id1665452389" rel="noopener noreferrer"&gt;App Store&lt;/a&gt; and &lt;a href="https://play.google.com/store/apps/details?id=fr.emilienleroy.fallingsquare&amp;amp;hl=fr&amp;amp;gl=US" rel="noopener noreferrer"&gt;Play Store&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Overall, Falling Square is a fun and addictive game that is perfect for anyone looking for a new mobile game to play. I hope you enjoy it as much as I enjoyed creating it!&lt;/p&gt;

&lt;p&gt;Links:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://apps.apple.com/us/app/falling-square-game/id1665452389" rel="noopener noreferrer"&gt;App Store&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://play.google.com/store/apps/details?id=fr.emilienleroy.fallingsquare&amp;amp;hl=fr&amp;amp;gl=US" rel="noopener noreferrer"&gt;Play Store&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/EmilienLeroy/FallingSquare" rel="noopener noreferrer"&gt;Github&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>tooling</category>
      <category>productivity</category>
    </item>
    <item>
      <title>Join the beta test for Falling Square on iOS</title>
      <dc:creator>Emilien Leroy</dc:creator>
      <pubDate>Wed, 18 Jan 2023 14:00:00 +0000</pubDate>
      <link>https://dev.to/emilienleroy/join-the-beta-test-for-falling-square-on-ios-45jo</link>
      <guid>https://dev.to/emilienleroy/join-the-beta-test-for-falling-square-on-ios-45jo</guid>
      <description>&lt;p&gt;Hello everyone,&lt;/p&gt;

&lt;p&gt;I am excited to announce that the iOS version of Falling Square is currently in testing. You can download it on TestFlight using this direct &lt;a href="https://testflight.apple.com/join/FDwsjAQR" rel="noopener noreferrer"&gt;link&lt;/a&gt;. I welcome any feedback from players. Your input will help me to make the game even better for everyone. I'm thrilled to bring this game to iOS users and can't wait for you to try it out. So, download the game now and let us know what you think!&lt;/p&gt;

&lt;p&gt;Falling Square is a fast-paced and highly addictive mobile game that will put your reflexes to the test. The goal of the game is to touch the squares that are falling from the top of the screen before they leave the screen. The game is simple, yet challenging, and it requires quick reflexes.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fcf1r7rva6zo3k5pb7dkb.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fcf1r7rva6zo3k5pb7dkb.gif" alt="game" width="1024" height="1024"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Download link: &lt;a href="https://testflight.apple.com/join/FDwsjAQR" rel="noopener noreferrer"&gt;https://testflight.apple.com/join/FDwsjAQR&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Thank you for reading this article!&lt;/p&gt;

</description>
      <category>github</category>
      <category>opensource</category>
      <category>bug</category>
    </item>
    <item>
      <title>The framework that revolutionized my workflow.</title>
      <dc:creator>Emilien Leroy</dc:creator>
      <pubDate>Thu, 12 Jan 2023 14:00:00 +0000</pubDate>
      <link>https://dev.to/emilienleroy/the-framework-that-revolutionized-my-workflow-4lcg</link>
      <guid>https://dev.to/emilienleroy/the-framework-that-revolutionized-my-workflow-4lcg</guid>
      <description>&lt;p&gt;As a developer, it's always important to find ways to streamline the development process and save time. For the past two years, I've been using &lt;a href="https://tsed.io/"&gt;Ts.ED&lt;/a&gt; as the framework for all of my applications and it's been a game-changer. Not only has it allowed me to gain back lost development time, but it's also been the foundation for my open-source project &lt;a href="https://github.com/EmilienLeroy/HighScore"&gt;HighScore&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Abstraction
&lt;/h2&gt;

&lt;p&gt;One of the key features of the Ts.ED framework is its abstraction layer, which allows developers to use Express, Koa, or any other HTTP server of their choice. This gives developers the freedom to leverage the vast number of third-party Node.js modules available for the underlying platform, enabling them to build highly customized and feature-rich applications. The abstraction layer provided by Ts.ED makes it easy to integrate with various databases and APIs, and to add additional functionality to your applications. &lt;/p&gt;

&lt;h2&gt;
  
  
  Decorators
&lt;/h2&gt;

&lt;p&gt;Another standout feature of Ts.ED is the implementation of decorators, which makes it easy to describe controllers and services within the framework. The decorators provided by Ts.ED allows developers to clearly define the functionality of their controllers and services, making it easy to understand and maintain their code. Additionally, the dependency injection system in Ts.ED makes it simple to access services from any file, further streamlining the development process.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;Get&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;@tsed/schema&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;Controller&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;@tsed/di&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;PathParams&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;@tsed/platform-params&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="kr"&gt;interface&lt;/span&gt; &lt;span class="nx"&gt;Calendar&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nl"&gt;id&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kr"&gt;string&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kr"&gt;string&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="p"&gt;@&lt;/span&gt;&lt;span class="nd"&gt;Controller&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;/calendars&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="k"&gt;export&lt;/span&gt; &lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nx"&gt;CalendarCtrl&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="p"&gt;@&lt;/span&gt;&lt;span class="nd"&gt;Get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;/:id&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
  &lt;span class="k"&gt;async&lt;/span&gt; &lt;span class="kd"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(@&lt;/span&gt;&lt;span class="nd"&gt;PathParams&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;id&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="nx"&gt;id&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kr"&gt;string&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt; &lt;span class="nb"&gt;Promise&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;Calendar&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="nx"&gt;id&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
      &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;test&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;
    &lt;span class="p"&gt;};&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;blockquote&gt;
&lt;p&gt;A simple example of controller using Ts.ED !&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  Documentation
&lt;/h2&gt;

&lt;p&gt;Another advantage of Ts.ED is its extensive documentation and support. The Ts.ED team has done a great job of providing detailed documentation on how to use the framework and its various features, as well as maintaining an active community of users who are willing to help answer questions and offer support. This has made it easy for me to get up and running with Ts.ED, and troubleshoot any issues that have arisen along the way.&lt;/p&gt;

&lt;h2&gt;
  
  
  Third-party
&lt;/h2&gt;

&lt;p&gt;The Ts.ED team has already created implementations for a wide range of popular modules, such as Swagger, Mongoose, and Socket.io. This allows developers to easily integrate these tools into their Ts.ED projects, saving time and effort. For a complete list of the available integrations, see the Ts.ED documentation. I have also personally contributed to the development of the Terminus package for Ts.ED. These integrations demonstrate the commitment of the Ts.ED team to support a diverse and growing ecosystem of tools and resources for developers.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--fWdsadSB--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/6w2pqyrq3mbojxbq8joq.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--fWdsadSB--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/6w2pqyrq3mbojxbq8joq.png" alt="plugin" width="880" height="547"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;A list of modules available on Ts.ED !&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  The team
&lt;/h2&gt;

&lt;p&gt;The Ts.ED framework is primarily maintained by &lt;a href="https://twitter.com/RomainLenzotti"&gt;Romain Lenzotti&lt;/a&gt;, who does an incredible job keeping the framework up-to-date and reliable. One of the standout features of Ts.ED is its frequent releases, which ensure that the framework is continuously improving and addressing any potential issues. This is a major advantage for a framework like Ts.ED, as it helps to ensure that it stays current and relevant in the fast-paced world of web development.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--D2jhFjvf--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/150qub8q6jzffp7ga2p7.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--D2jhFjvf--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/150qub8q6jzffp7ga2p7.png" alt="Team" width="880" height="775"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Conclusion
&lt;/h2&gt;

&lt;p&gt;In conclusion, there are many compelling reasons to consider using Ts.ED for your next project. Its simplicity and ease of use, extensive documentation and support, and reliable performance make it a standout choice for web development. As someone who has personally used the framework to build applications I highly recommend giving Ts.ED a try. Whether you are a beginner or an experienced developer, Ts.ED has something to offer and can help you to streamline your workflow and build better applications.&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>opensource</category>
      <category>productivity</category>
      <category>typescript</category>
    </item>
    <item>
      <title>Maximizing Your Leaderboards with Highscore's New Category System and Meta Field</title>
      <dc:creator>Emilien Leroy</dc:creator>
      <pubDate>Wed, 04 Jan 2023 14:00:00 +0000</pubDate>
      <link>https://dev.to/emilienleroy/maximizing-your-leaderboards-with-highscores-new-category-system-and-meta-field-1h9m</link>
      <guid>https://dev.to/emilienleroy/maximizing-your-leaderboards-with-highscores-new-category-system-and-meta-field-1h9m</guid>
      <description>&lt;p&gt;Hi everyone! Before the holiday, I released a new version of &lt;a href="https://github.com/EmilienLeroy/HighScore/"&gt;Highscore&lt;/a&gt;, an open-source leaderboard for indie game developers. This release includes a new category system and some additional small features. If you're not familiar with &lt;a href="https://github.com/EmilienLeroy/HighScore/"&gt;Highscore&lt;/a&gt;, it's a great tool for indie game developers to track and compare the scores of their games. I hope you'll check it out and let us know what you think!&lt;/p&gt;

&lt;h2&gt;
  
  
  Category system
&lt;/h2&gt;

&lt;p&gt;One of the main features of this release is the new category system, which allows you to create an unlimited number of leaderboards using a single field for the score. To use it, simply add the &lt;code&gt;category&lt;/code&gt; field with the name of the desired category. Scores submitted with a category will not appear on the main leaderboard, but you can now retrieve all scores for a specific category by including the &lt;code&gt;category&lt;/code&gt; field in your request. This is a great way to track scores for different groups or categories within your game or application.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--BCv0-5J9--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_66%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/ld0rzuevb604j5088tn2.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--BCv0-5J9--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_66%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/ld0rzuevb604j5088tn2.gif" alt="category" width="718" height="432"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  The meta field
&lt;/h2&gt;

&lt;p&gt;This release also introduces a new field called the &lt;code&gt;meta&lt;/code&gt; field in the score model. This field allows you to pass in any object with your data, with no restrictions on what you can include. For example, you could use this field to attach additional stats or metadata to a score, such as the number of turns taken or the difficulty level of the game. The &lt;code&gt;meta&lt;/code&gt; field is a flexible and powerful way to add more context and information to your scores, and can be used to tailor your leaderboards to your specific needs.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--h6Qg4V_j--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_66%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/13mopjz8k4mis96wg5ru.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--h6Qg4V_j--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_66%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/13mopjz8k4mis96wg5ru.gif" alt="meta" width="718" height="432"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Privacy policy view
&lt;/h2&gt;

&lt;p&gt;Highscore now includes a default privacy policy that can be customized using environment variables. You can view the privacy policy by accessing the endpoint &lt;code&gt;/privacy&lt;/code&gt;. Using the environment variables, you can configure the country, email, and website information included in the policy. By providing a clear and transparent privacy policy, you can help build trust with your users and ensure that their personal information is protected.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--jfw0HXHZ--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/czmo05zh24ieh0jipq7a.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--jfw0HXHZ--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/czmo05zh24ieh0jipq7a.png" alt="privacy" width="880" height="696"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  What's next
&lt;/h2&gt;

&lt;p&gt;The next release of &lt;a href="https://github.com/EmilienLeroy/HighScore/"&gt;Highscore&lt;/a&gt; is expected to include a new achievement system, which will allow you to add goals and milestones to your game. In addition, we will be adding websocket events, which will allow you to listen when new scores are added.  We hope these new features will be useful and help you get even more out of Highscore. &lt;/p&gt;

&lt;p&gt;Thanks for reading!&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>opensource</category>
      <category>github</category>
      <category>news</category>
    </item>
  </channel>
</rss>
