-
Notifications
You must be signed in to change notification settings - Fork 0
/
index.html
19 lines (18 loc) · 30.1 KB
/
index.html
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
<!DOCTYPE html><html lang="en-us"><head><meta charset="utf-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><meta name="viewport" content="width=device-width,initial-scale=1"><title>Csharp and Game Development Notes</title><meta name="generator" content="Publii Open-Source CMS for Static Site"><script type="text/javascript" async src="https://www.googletagmanager.com/gtag/js?id=G-NT7DGE75CF"></script><script type="text/javascript">window.dataLayer = window.dataLayer || [];
function gtag(){dataLayer.push(arguments);}
gtag('js', new Date());
gtag('config', 'G-NT7DGE75CF' , { 'anonymize_ip': true });</script><link rel="canonical" href="https://pilvimaa.fi/"><link rel="alternate" type="application/atom+xml" href="https://pilvimaa.fi/feed.xml"><link rel="alternate" type="application/json" href="https://pilvimaa.fi/feed.json"><link rel="shortcut icon" href="https://pilvimaa.fi/media/website/favicon.ico" type="image/x-icon"><link rel="stylesheet" href="https://pilvimaa.fi/assets/css/style.css?v=923666099a7fa66b9200889f7a7c7e96"><script type="application/ld+json">{"@context":"http://schema.org","@type":"Organization","name":"Csharp and Game Development Notes","logo":"https://pilvimaa.fi/media/website/Hedgehog.png","url":"https://pilvimaa.fi/"}</script><noscript><style>img[loading] {
opacity: 1;
}</style></noscript><script async src="https://www.googletagmanager.com/gtag/js?id=G-NT7DGE75CF"></script><script>window.dataLayer = window.dataLayer || [];
function gtag(){dataLayer.push(arguments);}
gtag('js', new Date());
gtag('config', 'G-NT7DGE75CF');</script></head><body class="home-template"><header class="top js-header"><a class="logo" href="https://pilvimaa.fi/"><img src="https://pilvimaa.fi/media/website/Hedgehog.png" alt="Csharp and Game Development Notes" width="640" height="397"></a><nav class="navbar js-navbar"><button class="navbar__toggle js-toggle" aria-label="Menu" aria-haspopup="true" aria-expanded="false"><span class="navbar__toggle-box"><span class="navbar__toggle-inner">Menu</span></span></button><ul class="navbar__menu"><li><a href="https://www.starandserpent.com" title="Star and Serpent" target="_blank">Star and Serpent</a></li><li><a href="https://www.starandserpent.com/blog/" title="S.'.S.'. blog" target="_blank">S.'.S.'. Blog</a></li><li><a href="https://github.com/starandserpent" title="S.'.S.'. Github" target="_blank">S.'.S.'. Github</a></li><li><a href="https://github.com/Pilvinen" title="Personal Github" target="_blank">Personal Github</a></li></ul></nav></header><main><div class="hero"><header class="hero__content"><div class="wrapper"><h1>Csharp and Game Development Notes</h1><p><strong>Opinionated personal notes on my discoveries in C#, programming, Godot game engine, and other related topics gathered during my foray into the fascinating world of game development.<br></strong>I write this blog mostly for myself, and rarely at that. It works as a place to hold notes on particularly interesting topics which I might otherwise forget over time. But why hold them to myself. I might as well share them.<br>I am by no means an expert on the subjects I write about. I am merely a life time student of the technical arts.</p></div></header><figure class="hero__image"><div class="hero__image-wrapper"><img src="https://pilvimaa.fi/media/website/New-Space_BG-1080p.png" srcset="https://pilvimaa.fi/media/website/responsive/New-Space_BG-1080p-xs.webp 640w, https://pilvimaa.fi/media/website/responsive/New-Space_BG-1080p-sm.webp 768w, https://pilvimaa.fi/media/website/responsive/New-Space_BG-1080p-md.webp 1024w, https://pilvimaa.fi/media/website/responsive/New-Space_BG-1080p-lg.webp 1366w, https://pilvimaa.fi/media/website/responsive/New-Space_BG-1080p-xl.webp 1600w, https://pilvimaa.fi/media/website/responsive/New-Space_BG-1080p-2xl.webp 1920w" sizes="88vw" loading="eager" width="1920" height="1080" alt=""></div></figure></div><div class="wrapper feed"><article class="feed__item"><figure class="feed__image"><img src="https://pilvimaa.fi/media/posts/21/ProphetOfTheLonelyStar_fi.png" srcset="https://pilvimaa.fi/media/posts/21/responsive/ProphetOfTheLonelyStar_fi-xs.webp 640w, https://pilvimaa.fi/media/posts/21/responsive/ProphetOfTheLonelyStar_fi-sm.webp 768w, https://pilvimaa.fi/media/posts/21/responsive/ProphetOfTheLonelyStar_fi-md.webp 1024w" sizes="(min-width: 600px) calc(4.38vw + 143px), 87.86vw" loading="lazy" height="1080" width="1920" alt=""></figure><div class="feed__content"><header><div class="feed__meta"><img src="https://pilvimaa.fi/media/website/Pilvinen-As_Space_Techno_Wizard.png" loading="lazy" height="1024" width="1024" class="feed__author-thumb" alt="Pilvinen"> <a href="https://pilvimaa.fi/authors/pilvinen/" class="feed__author">Pilvinen</a> <time datetime="2024-09-29T15:51" class="feed__date">September 29, 2024</time></div><h2 class="feed__title"><a href="https://pilvimaa.fi/localizing-godots-default-splash-screen/">Localizing Godot's default Splash Screen</a></h2></header><p>Getting Godot’s default static splash screen localized is a nightmare. One might assume it’s as easy as 1, 2, ,3, just set a remap for it and you’re done, but…</p></div></article><article class="feed__item"><figure class="feed__image"><img src="https://pilvimaa.fi/media/posts/20/SoftwareArchitecture.png" srcset="https://pilvimaa.fi/media/posts/20/responsive/SoftwareArchitecture-xs.webp 640w, https://pilvimaa.fi/media/posts/20/responsive/SoftwareArchitecture-sm.webp 768w, https://pilvimaa.fi/media/posts/20/responsive/SoftwareArchitecture-md.webp 1024w" sizes="(min-width: 600px) calc(4.38vw + 143px), 87.86vw" loading="lazy" height="1024" width="1024" alt="Software Architecture"></figure><div class="feed__content"><header><div class="feed__meta"><img src="https://pilvimaa.fi/media/website/Pilvinen-As_Space_Techno_Wizard.png" loading="lazy" height="1024" width="1024" class="feed__author-thumb" alt="Pilvinen"> <a href="https://pilvimaa.fi/authors/pilvinen/" class="feed__author">Pilvinen</a> <time datetime="2024-09-20T10:56" class="feed__date">September 20, 2024</time></div><h2 class="feed__title"><a href="https://pilvimaa.fi/game-structure-and-software-architecture/">Game Structure and Software Architecture</a></h2></header><p>This is a straightforward simple memo on what all game structure should be like, in the most general sense. It’s for me. It’s not for you. It hasn’t been checked…</p></div></article><article class="feed__item"><figure class="feed__image"><img src="https://pilvimaa.fi/media/posts/19/Database.png" srcset="https://pilvimaa.fi/media/posts/19/responsive/Database-xs.webp 640w, https://pilvimaa.fi/media/posts/19/responsive/Database-sm.webp 768w, https://pilvimaa.fi/media/posts/19/responsive/Database-md.webp 1024w" sizes="(min-width: 600px) calc(4.38vw + 143px), 87.86vw" loading="lazy" height="1024" width="1024" alt="Database"></figure><div class="feed__content"><header><div class="feed__meta"><img src="https://pilvimaa.fi/media/website/Pilvinen-As_Space_Techno_Wizard.png" loading="lazy" height="1024" width="1024" class="feed__author-thumb" alt="Pilvinen"> <a href="https://pilvimaa.fi/authors/pilvinen/" class="feed__author">Pilvinen</a> <time datetime="2024-07-03T01:24" class="feed__date">July 3, 2024</time></div><h2 class="feed__title"><a href="https://pilvimaa.fi/how-to-setup-sqlite-database-with-ef-core-and-godot/">How to setup SQLite database with EF Core and Godot</a></h2></header><p>EF Core is a popular high level object relational mapper (ORM) which can have various databases at the backend. As a database noobie, I recently had a bit of a…</p></div></article><article class="feed__item"><figure class="feed__image"><img src="https://pilvimaa.fi/media/posts/18/bullet_hell.png" srcset="https://pilvimaa.fi/media/posts/18/responsive/bullet_hell-xs.webp 640w, https://pilvimaa.fi/media/posts/18/responsive/bullet_hell-sm.webp 768w, https://pilvimaa.fi/media/posts/18/responsive/bullet_hell-md.webp 1024w" sizes="(min-width: 600px) calc(4.38vw + 143px), 87.86vw" loading="lazy" height="1024" width="1024" alt=""></figure><div class="feed__content"><header><div class="feed__meta"><img src="https://pilvimaa.fi/media/website/Pilvinen-As_Space_Techno_Wizard.png" loading="lazy" height="1024" width="1024" class="feed__author-thumb" alt="Pilvinen"> <a href="https://pilvimaa.fi/authors/pilvinen/" class="feed__author">Pilvinen</a> <time datetime="2024-02-09T11:06" class="feed__date">February 9, 2024</time></div><h2 class="feed__title"><a href="https://pilvimaa.fi/bullet-parenting-trick/">Bullet parenting trick</a></h2></header><p>In Godot if you have a bullet parented to your player, obviously the bullets will move when the player moves. So you need a node outside of your player hierarchy…</p></div></article><article class="feed__item"><figure class="feed__image"><img src="https://pilvimaa.fi/media/posts/17/nothing_to_return-2.png" srcset="https://pilvimaa.fi/media/posts/17/responsive/nothing_to_return-2-xs.webp 640w, https://pilvimaa.fi/media/posts/17/responsive/nothing_to_return-2-sm.webp 768w, https://pilvimaa.fi/media/posts/17/responsive/nothing_to_return-2-md.webp 1024w" sizes="(min-width: 600px) calc(4.38vw + 143px), 87.86vw" loading="lazy" height="1024" width="1024" alt=""></figure><div class="feed__content"><header><div class="feed__meta"><img src="https://pilvimaa.fi/media/website/Pilvinen-As_Space_Techno_Wizard.png" loading="lazy" height="1024" width="1024" class="feed__author-thumb" alt="Pilvinen"> <a href="https://pilvimaa.fi/authors/pilvinen/" class="feed__author">Pilvinen</a> <time datetime="2023-11-23T18:33" class="feed__date">November 23, 2023</time></div><h2 class="feed__title"><a href="https://pilvimaa.fi/what-to-return-when-you-dont-have-anything-to-return/">What to return when you don't have anything to return?</a></h2></header><p>Not finding your data that you are trying to fetch via Guid Id can be handled elegantly either as a case of domain error or just as a regular case…</p></div></article><article class="feed__item"><figure class="feed__image"><img src="https://pilvimaa.fi/media/posts/16/GodotMouseInput.jpeg" srcset="https://pilvimaa.fi/media/posts/16/responsive/GodotMouseInput-xs.webp 640w, https://pilvimaa.fi/media/posts/16/responsive/GodotMouseInput-sm.webp 768w, https://pilvimaa.fi/media/posts/16/responsive/GodotMouseInput-md.webp 1024w" sizes="(min-width: 600px) calc(4.38vw + 143px), 87.86vw" loading="lazy" height="1024" width="1024" alt=""></figure><div class="feed__content"><header><div class="feed__meta"><img src="https://pilvimaa.fi/media/website/Pilvinen-As_Space_Techno_Wizard.png" loading="lazy" height="1024" width="1024" class="feed__author-thumb" alt="Pilvinen"> <a href="https://pilvimaa.fi/authors/pilvinen/" class="feed__author">Pilvinen</a> <time datetime="2023-11-01T21:09" class="feed__date">November 1, 2023</time></div><h2 class="feed__title"><a href="https://pilvimaa.fi/godot-control-node-mouse-input-handling-order/">Godot Control node mouse input handling order</a></h2></header><p>Godot mouse input handling is a source of lot of confusion. The basic idea is that Mouse Filter set to Ignore ignores the element. Stop processes the received event and…</p></div></article><article class="feed__item"><figure class="feed__image"><img src="https://pilvimaa.fi/media/posts/15/csharp_vs_gdscript_godot.png" srcset="https://pilvimaa.fi/media/posts/15/responsive/csharp_vs_gdscript_godot-xs.webp 640w, https://pilvimaa.fi/media/posts/15/responsive/csharp_vs_gdscript_godot-sm.webp 768w, https://pilvimaa.fi/media/posts/15/responsive/csharp_vs_gdscript_godot-md.webp 1024w" sizes="(min-width: 600px) calc(4.38vw + 143px), 87.86vw" loading="lazy" height="1024" width="1024" alt="Confusing schematics"></figure><div class="feed__content"><header><div class="feed__meta"><img src="https://pilvimaa.fi/media/website/Pilvinen-As_Space_Techno_Wizard.png" loading="lazy" height="1024" width="1024" class="feed__author-thumb" alt="Pilvinen"> <a href="https://pilvimaa.fi/authors/pilvinen/" class="feed__author">Pilvinen</a> <time datetime="2023-10-16T18:47" class="feed__date">October 16, 2023</time></div><h2 class="feed__title"><a href="https://pilvimaa.fi/gdscript-vs-c-in-godot-which-language-should-you-use/">GDScript vs. C# in Godot: Which language should you use?</a></h2></header><p>Godot is a powerful and versatile game engine that supports two scripting languages: GDScript and C#. Both languages have their own advantages and disadvantages, so it’s important to choose the…</p></div></article><article class="feed__item"><figure class="feed__image"><img src="https://pilvimaa.fi/media/posts/14/computer_mice_double_click.png" srcset="https://pilvimaa.fi/media/posts/14/responsive/computer_mice_double_click-xs.webp 640w, https://pilvimaa.fi/media/posts/14/responsive/computer_mice_double_click-sm.webp 768w, https://pilvimaa.fi/media/posts/14/responsive/computer_mice_double_click-md.webp 1024w" sizes="(min-width: 600px) calc(4.38vw + 143px), 87.86vw" loading="lazy" height="1024" width="1024" alt="Two mice using a computer mouse"></figure><div class="feed__content"><header><div class="feed__meta"><img src="https://pilvimaa.fi/media/website/Pilvinen-As_Space_Techno_Wizard.png" loading="lazy" height="1024" width="1024" class="feed__author-thumb" alt="Pilvinen"> <a href="https://pilvimaa.fi/authors/pilvinen/" class="feed__author">Pilvinen</a> <time datetime="2023-06-14T02:08" class="feed__date">June 14, 2023</time></div><h2 class="feed__title"><a href="https://pilvimaa.fi/node2d-double-click-detection-in-godot/">Node2D double click detection in Godot</a></h2></header><p>Clicks for Node2D based nodes can easily be detected by using CollisionObject2D‘s input_event signal. To capture the mouse clicks we can add an Area2D node and a CollisionShape2D or CollisionPolygon2D…</p></div></article><article class="feed__item"><figure class="feed__image"><img src="https://pilvimaa.fi/media/posts/13/Spaghetti.jpg" srcset="https://pilvimaa.fi/media/posts/13/responsive/Spaghetti-xs.webp 640w, https://pilvimaa.fi/media/posts/13/responsive/Spaghetti-sm.webp 768w, https://pilvimaa.fi/media/posts/13/responsive/Spaghetti-md.webp 1024w" sizes="(min-width: 600px) calc(4.38vw + 143px), 87.86vw" loading="lazy" height="720" width="960" alt=""></figure><div class="feed__content"><header><div class="feed__meta"><img src="https://pilvimaa.fi/media/website/Pilvinen-As_Space_Techno_Wizard.png" loading="lazy" height="1024" width="1024" class="feed__author-thumb" alt="Pilvinen"> <a href="https://pilvimaa.fi/authors/pilvinen/" class="feed__author">Pilvinen</a> <time datetime="2022-07-29T16:15" class="feed__date">July 29, 2022</time></div><h2 class="feed__title"><a href="https://pilvimaa.fi/implicit-and-explicit-conversion-operators/">Implicit and explicit conversion operators</a></h2></header><p>Implicit and explicit conversion operators allow you to ingegrate your custom types seamlessly with other types by doing implicit or explicit conversions from one type to another. public void SetPositionFromVector3(Vector3…</p></div></article><article class="feed__item"><figure class="feed__image"><img src="https://pilvimaa.fi/media/posts/12/Bugs.jpg" srcset="https://pilvimaa.fi/media/posts/12/responsive/Bugs-xs.webp 640w, https://pilvimaa.fi/media/posts/12/responsive/Bugs-sm.webp 768w, https://pilvimaa.fi/media/posts/12/responsive/Bugs-md.webp 1024w" sizes="(min-width: 600px) calc(4.38vw + 143px), 87.86vw" loading="lazy" height="672" width="960" alt=""></figure><div class="feed__content"><header><div class="feed__meta"><img src="https://pilvimaa.fi/media/website/Pilvinen-As_Space_Techno_Wizard.png" loading="lazy" height="1024" width="1024" class="feed__author-thumb" alt="Pilvinen"> <a href="https://pilvimaa.fi/authors/pilvinen/" class="feed__author">Pilvinen</a> <time datetime="2022-07-24T14:32" class="feed__date">July 24, 2022</time></div><h2 class="feed__title"><a href="https://pilvimaa.fi/unit-testing-private-methods-through-extraction/">Unit testing private methods through extraction</a></h2></header><p>When you use unit tests you have to intentionally write code that is testable. What about private methods? How do you test those? And no, you should NOT change the…</p></div></article><article class="feed__item"><figure class="feed__image"><img src="https://pilvimaa.fi/media/posts/11/Test.jpg" srcset="https://pilvimaa.fi/media/posts/11/responsive/Test-xs.webp 640w, https://pilvimaa.fi/media/posts/11/responsive/Test-sm.webp 768w, https://pilvimaa.fi/media/posts/11/responsive/Test-md.webp 1024w" sizes="(min-width: 600px) calc(4.38vw + 143px), 87.86vw" loading="lazy" height="695" width="960" alt=""></figure><div class="feed__content"><header><div class="feed__meta"><img src="https://pilvimaa.fi/media/website/Pilvinen-As_Space_Techno_Wizard.png" loading="lazy" height="1024" width="1024" class="feed__author-thumb" alt="Pilvinen"> <a href="https://pilvimaa.fi/authors/pilvinen/" class="feed__author">Pilvinen</a> <time datetime="2022-07-18T17:54" class="feed__date">July 18, 2022</time></div><h2 class="feed__title"><a href="https://pilvimaa.fi/getting-godotxunit-up-and-running-with-rider/">Getting GodotXUnit up and Running with Rider</a></h2></header><p>Installation from Github These instructions will explain how to get GodotXUnit integrated to your project and working with Rider. [XunitTestCaseDiscoverer("GodotXUnitApi.Internal.GodotFactDiscoverer", "GodotXUnitApi")] And replace the GodotXUnitApi with your project’s assembly name,…</p></div></article><article class="feed__item"><figure class="feed__image"><img src="https://pilvimaa.fi/media/posts/10/AABB.jpg" srcset="https://pilvimaa.fi/media/posts/10/responsive/AABB-xs.webp 640w, https://pilvimaa.fi/media/posts/10/responsive/AABB-sm.webp 768w, https://pilvimaa.fi/media/posts/10/responsive/AABB-md.webp 1024w" sizes="(min-width: 600px) calc(4.38vw + 143px), 87.86vw" loading="lazy" height="512" width="960" alt=""></figure><div class="feed__content"><header><div class="feed__meta"><img src="https://pilvimaa.fi/media/website/Pilvinen-As_Space_Techno_Wizard.png" loading="lazy" height="1024" width="1024" class="feed__author-thumb" alt="Pilvinen"> <a href="https://pilvimaa.fi/authors/pilvinen/" class="feed__author">Pilvinen</a> <time datetime="2022-07-16T01:15" class="feed__date">July 16, 2022</time></div><h2 class="feed__title"><a href="https://pilvimaa.fi/axis-aligned-bounding-boxes-and-intersections/">Axis Aligned Bounding Boxes and Intersections</a></h2></header><p>Let’s do a quick overview of AABBs and intersections. Axis Aligned Bounding Box is a set of three segments (or 6 numbers). AABBs can be used for fast overlapping tests.</p></div></article><article class="feed__item"><figure class="feed__image"><img src="https://pilvimaa.fi/media/posts/9/Dice.jpg" srcset="https://pilvimaa.fi/media/posts/9/responsive/Dice-xs.webp 640w, https://pilvimaa.fi/media/posts/9/responsive/Dice-sm.webp 768w, https://pilvimaa.fi/media/posts/9/responsive/Dice-md.webp 1024w" sizes="(min-width: 600px) calc(4.38vw + 143px), 87.86vw" loading="lazy" height="327" width="960" alt=""></figure><div class="feed__content"><header><div class="feed__meta"><img src="https://pilvimaa.fi/media/website/Pilvinen-As_Space_Techno_Wizard.png" loading="lazy" height="1024" width="1024" class="feed__author-thumb" alt="Pilvinen"> <a href="https://pilvimaa.fi/authors/pilvinen/" class="feed__author">Pilvinen</a> <time datetime="2022-07-14T20:56" class="feed__date">July 14, 2022</time></div><h2 class="feed__title"><a href="https://pilvimaa.fi/seeded-random-numbers/">Seeded Random Numbers</a></h2></header><p>Sometimes you need pseudo-random numbers which are not dependent on time and which are always reliably identical and given in the same order when ever you re-start the application or…</p></div></article><article class="feed__item"><figure class="feed__image"><img src="https://pilvimaa.fi/media/posts/8/MultiMeshBlocks.png" srcset="https://pilvimaa.fi/media/posts/8/responsive/MultiMeshBlocks-xs.webp 640w, https://pilvimaa.fi/media/posts/8/responsive/MultiMeshBlocks-sm.webp 768w, https://pilvimaa.fi/media/posts/8/responsive/MultiMeshBlocks-md.webp 1024w" sizes="(min-width: 600px) calc(4.38vw + 143px), 87.86vw" loading="lazy" height="1080" width="1920" alt=""></figure><div class="feed__content"><header><div class="feed__meta"><img src="https://pilvimaa.fi/media/website/Pilvinen-As_Space_Techno_Wizard.png" loading="lazy" height="1024" width="1024" class="feed__author-thumb" alt="Pilvinen"> <a href="https://pilvimaa.fi/authors/pilvinen/" class="feed__author">Pilvinen</a> <time datetime="2022-07-13T16:37" class="feed__date">July 13, 2022</time></div><h2 class="feed__title"><a href="https://pilvimaa.fi/godot-multimesh-setasbulkarray-method/">Godot MultiMesh SetAsBulkArray Method</a></h2></header><p>This article tries to bridge the gaps and ambiguities in the official Godot documentation for SetAsBulkArray(). We don’t go over everything. But armed with this information you should be able…</p></div></article><article class="feed__item"><figure class="feed__image"><img src="https://pilvimaa.fi/media/posts/7/Binary.png" srcset="https://pilvimaa.fi/media/posts/7/responsive/Binary-xs.webp 640w, https://pilvimaa.fi/media/posts/7/responsive/Binary-sm.webp 768w, https://pilvimaa.fi/media/posts/7/responsive/Binary-md.webp 1024w" sizes="(min-width: 600px) calc(4.38vw + 143px), 87.86vw" loading="lazy" height="639" width="960" alt=""></figure><div class="feed__content"><header><div class="feed__meta"><img src="https://pilvimaa.fi/media/website/Pilvinen-As_Space_Techno_Wizard.png" loading="lazy" height="1024" width="1024" class="feed__author-thumb" alt="Pilvinen"> <a href="https://pilvimaa.fi/authors/pilvinen/" class="feed__author">Pilvinen</a> <time datetime="2022-07-11T14:45" class="feed__date">July 11, 2022</time></div><h2 class="feed__title"><a href="https://pilvimaa.fi/inheritance-with-constructors/">Inheritance with Constructors</a></h2></header><p>Here we call the constructor of the base class A and pass the id as a parameter to initialize _id in the constructor of A class. By doing this way…</p></div></article><article class="feed__item"><figure class="feed__image"><img src="https://pilvimaa.fi/media/posts/6/TriangleRuler.png" srcset="https://pilvimaa.fi/media/posts/6/responsive/TriangleRuler-xs.webp 640w, https://pilvimaa.fi/media/posts/6/responsive/TriangleRuler-sm.webp 768w, https://pilvimaa.fi/media/posts/6/responsive/TriangleRuler-md.webp 1024w" sizes="(min-width: 600px) calc(4.38vw + 143px), 87.86vw" loading="lazy" height="642" width="1280" alt="360 degrees in a circle"></figure><div class="feed__content"><header><div class="feed__meta"><img src="https://pilvimaa.fi/media/website/Pilvinen-As_Space_Techno_Wizard.png" loading="lazy" height="1024" width="1024" class="feed__author-thumb" alt="Pilvinen"> <a href="https://pilvimaa.fi/authors/pilvinen/" class="feed__author">Pilvinen</a> <time datetime="2021-08-27T12:13" class="feed__date">August 27, 2021</time></div><h2 class="feed__title"><a href="https://pilvimaa.fi/vectors/">Introduction to vectors</a></h2></header><p>I'm going to talk a little bit about vectors from my own and from game development perspective. It's by no means complete or definitive description of what vectors are or…</p></div></article><article class="feed__item"><figure class="feed__image"><img src="https://pilvimaa.fi/media/posts/5/circles-1428521_1920.jpg" srcset="https://pilvimaa.fi/media/posts/5/responsive/circles-1428521_1920-xs.webp 640w, https://pilvimaa.fi/media/posts/5/responsive/circles-1428521_1920-sm.webp 768w, https://pilvimaa.fi/media/posts/5/responsive/circles-1428521_1920-md.webp 1024w" sizes="(min-width: 600px) calc(4.38vw + 143px), 87.86vw" loading="lazy" height="1357" width="1920" alt=""></figure><div class="feed__content"><header><div class="feed__meta"><img src="https://pilvimaa.fi/media/website/Pilvinen-As_Space_Techno_Wizard.png" loading="lazy" height="1024" width="1024" class="feed__author-thumb" alt="Pilvinen"> <a href="https://pilvimaa.fi/authors/pilvinen/" class="feed__author">Pilvinen</a> <time datetime="2021-07-16T01:20" class="feed__date">July 16, 2021</time></div><h2 class="feed__title"><a href="https://pilvimaa.fi/data-oriented-design/">Data Oriented Design</a></h2></header><p>A few notes on Data Oriented Design. - Study the data access patterns to determine where performance bottlenecks are. - Group things together that are used together. - Avoid creating…</p></div></article><article class="feed__item"><figure class="feed__image"><img src="https://pilvimaa.fi/media/posts/4/work-731198_1920.jpg" srcset="https://pilvimaa.fi/media/posts/4/responsive/work-731198_1920-xs.webp 640w, https://pilvimaa.fi/media/posts/4/responsive/work-731198_1920-sm.webp 768w, https://pilvimaa.fi/media/posts/4/responsive/work-731198_1920-md.webp 1024w" sizes="(min-width: 600px) calc(4.38vw + 143px), 87.86vw" loading="lazy" height="1280" width="1920" alt=""></figure><div class="feed__content"><header><div class="feed__meta"><img src="https://pilvimaa.fi/media/website/Pilvinen-As_Space_Techno_Wizard.png" loading="lazy" height="1024" width="1024" class="feed__author-thumb" alt="Pilvinen"> <a href="https://pilvimaa.fi/authors/pilvinen/" class="feed__author">Pilvinen</a> <time datetime="2021-05-23T15:58" class="feed__date">May 23, 2021</time></div><h2 class="feed__title"><a href="https://pilvimaa.fi/notes-on-why-oop-is-bad-and-how-to-solve-it/">Notes on why OOP is bad (and how to solve it)</a></h2></header><p>These are my study notes on a controversial video published on YouTube in 2016 by Brian Will called "Object-Oriented Programming is Bad". The video addresses many of the concerns I've…</p></div></article><article class="feed__item"><figure class="feed__image"><img src="https://pilvimaa.fi/media/posts/3/Radians.png" srcset="https://pilvimaa.fi/media/posts/3/responsive/Radians-xs.webp 640w, https://pilvimaa.fi/media/posts/3/responsive/Radians-sm.webp 768w, https://pilvimaa.fi/media/posts/3/responsive/Radians-md.webp 1024w" sizes="(min-width: 600px) calc(4.38vw + 143px), 87.86vw" loading="lazy" height="1080" width="1920" alt="Radians and other units"></figure><div class="feed__content"><header><div class="feed__meta"><img src="https://pilvimaa.fi/media/website/Pilvinen-As_Space_Techno_Wizard.png" loading="lazy" height="1024" width="1024" class="feed__author-thumb" alt="Pilvinen"> <a href="https://pilvimaa.fi/authors/pilvinen/" class="feed__author">Pilvinen</a> <time datetime="2021-01-07T20:33" class="feed__date">January 7, 2021</time></div><h2 class="feed__title"><a href="https://pilvimaa.fi/radians-to-degrees-made-simple/">Radians to degrees made simple</a></h2></header><p>I was thinking about radians today and how they are annoying and unintuitive to deal with. After thinking about it for a while I realized that when you look at…</p></div></article><article class="feed__item"><figure class="feed__image"><img src="https://pilvimaa.fi/media/posts/2/Binary-1920x1280.jpg" srcset="https://pilvimaa.fi/media/posts/2/responsive/Binary-1920x1280-xs.webp 640w, https://pilvimaa.fi/media/posts/2/responsive/Binary-1920x1280-sm.webp 768w, https://pilvimaa.fi/media/posts/2/responsive/Binary-1920x1280-md.webp 1024w" sizes="(min-width: 600px) calc(4.38vw + 143px), 87.86vw" loading="lazy" height="1280" width="1920" alt="Binary"></figure><div class="feed__content"><header><div class="feed__meta"><img src="https://pilvimaa.fi/media/website/Pilvinen-As_Space_Techno_Wizard.png" loading="lazy" height="1024" width="1024" class="feed__author-thumb" alt="Pilvinen"> <a href="https://pilvimaa.fi/authors/pilvinen/" class="feed__author">Pilvinen</a> <time datetime="2020-10-28T23:12" class="feed__date">October 28, 2020</time></div><h2 class="feed__title"><a href="https://pilvimaa.fi/binary-addition/">Binary addition</a></h2></header><p>Let's take a look at how binary addition can be done by using bitwise operations. Why would we want to do this? Simply because we can. And also because it's…</p></div></article><article class="feed__item"><figure class="feed__image"><img src="https://pilvimaa.fi/media/posts/1/Array_flattening.png" srcset="https://pilvimaa.fi/media/posts/1/responsive/Array_flattening-xs.webp 640w, https://pilvimaa.fi/media/posts/1/responsive/Array_flattening-sm.webp 768w, https://pilvimaa.fi/media/posts/1/responsive/Array_flattening-md.webp 1024w" sizes="(min-width: 600px) calc(4.38vw + 143px), 87.86vw" loading="lazy" height="720" width="1281" alt="Array flattening"></figure><div class="feed__content"><header><div class="feed__meta"><img src="https://pilvimaa.fi/media/website/Pilvinen-As_Space_Techno_Wizard.png" loading="lazy" height="1024" width="1024" class="feed__author-thumb" alt="Pilvinen"> <a href="https://pilvimaa.fi/authors/pilvinen/" class="feed__author">Pilvinen</a> <time datetime="2020-10-28T16:42" class="feed__date">October 28, 2020</time></div><h2 class="feed__title"><a href="https://pilvimaa.fi/array-flattening/">Array flattening</a></h2></header><p>One dimensional arrays, or flat arrays as they are sometimes called, have desirable properties. They are fast. They are simple to access and to iterate through. They can easily be assigned…</p></div></article></div></main><footer class="footer"><div class="wrapper"><div class="footer__copyright"><p><a href="https://www.starandserpent.com" target="_blank" rel="noopener noreferrer">https://www.starandserpent.com</a></p></div><button onclick="backToTopFunction()" id="backToTop" class="footer__bttop" aria-label="Back to top" title="Back to top"><svg width="20" height="20"><use xlink:href="https://pilvimaa.fi/assets/svg/svg-map.svg#toparrow"/></svg></button></div></footer><script defer="defer" src="https://pilvimaa.fi/assets/js/scripts.min.js?v=ffcbea6c02c8178d10092962b235a5b0"></script><script>window.publiiThemeMenuConfig={mobileMenuMode:'sidebar',animationSpeed:300,submenuWidth: 'auto',doubleClickTime:500,mobileMenuExpandableSubmenus:true,relatedContainerForOverlayMenuSelector:'.top'};</script><script>var images = document.querySelectorAll('img[loading]');
for (var i = 0; i < images.length; i++) {
if (images[i].complete) {
images[i].classList.add('is-loaded');
} else {
images[i].addEventListener('load', function () {
this.classList.add('is-loaded');
}, false);
}
}</script></body></html>