Watch
2
0
Fork
You've already forked raylib-cs
0

feat: backporting existing raylib-cs examples and new official raylib examples to WASM, adopting raylib's original code style

This commit is contained in:
tiger tiger tiger 2026-07-17 08:22:54 +02:00
commit 732b7aa346
234 changed files with 38999 additions and 10578 deletions

View file

@ -0,0 +1,167 @@
/*******************************************************************************************
*
* raylib [text] example - words alignment
*
* Example complexity rating: [] 1/4
*
* Example originally created with raylib 6.0, last time updated with raylib 6.0
*
* Example contributed by JP Mortiboys (@themushroompirates) and reviewed by Ramon Santamaria (@raysan5)
*
* Example licensed under an unmodified zlib/libpng license, which is an OSI-certified,
* BSD-like license that allows static linking with closed source software
*
* Copyright (c) 2025 JP Mortiboys (@themushroompirates)
*
********************************************************************************************/
using System.Numerics;
using static Raylib_cs.Raylib;
using static Raylib_cs.Raymath; // Required for: Lerp()
namespace Examples.Text;
public partial class WordsAlignment : IExample
{
private const int screenWidth = 800;
private const int screenHeight = 450;
// TextAlignment values: Left/Top = 0, Centre/Middle = 1, Right/Bottom = 2
public string Name => "Text / Words Alignment";
public string Title => "raylib [text] example - words alignment";
// Define the rectangle we will draw the text in
private Rectangle textContainerRect;
// Some text to display the current alignment
private static readonly string[] textAlignNameH = { "Left", "Centre", "Right" };
private static readonly string[] textAlignNameV = { "Top", "Middle", "Bottom" };
// Define the text we're going to draw in the rectangle
private int wordIndex;
private int wordCount;
private string[] words;
// Initialize the font size we're going to use
private int fontSize;
// And of course the font...
private Font font;
// Initialize the alignment variables
private int hAlign;
private int vAlign;
public void Init()
{
// Define the rectangle we will draw the text in
textContainerRect = new Rectangle((float)screenWidth / 2 - (float)screenWidth / 4, (float)screenHeight / 2 - (float)screenHeight / 3, (float)screenWidth / 2, (float)screenHeight * 2 / 3);
// Define the text we're going to draw in the rectangle
wordIndex = 0;
words = "raylib is a simple and easy-to-use library to enjoy videogames programming".Split(' ');
wordCount = words.Length;
// Initialize the font size we're going to use
fontSize = 40;
// And of course the font...
font = GetFontDefault();
// Initialize the alignment variables
hAlign = 1; // TEXT_ALIGN_CENTRE
vAlign = 1; // TEXT_ALIGN_MIDDLE
}
public void Update()
{
// Update
//----------------------------------------------------------------------------------
if (IsKeyPressed(KeyboardKey.Left))
{
if (hAlign > 0) hAlign = hAlign - 1;
}
if (IsKeyPressed(KeyboardKey.Right))
{
hAlign = hAlign + 1;
if (hAlign > 2) hAlign = 2;
}
if (IsKeyPressed(KeyboardKey.Up))
{
if (vAlign > 0) vAlign = vAlign - 1;
}
if (IsKeyPressed(KeyboardKey.Down))
{
vAlign = vAlign + 1;
if (vAlign > 2) vAlign = 2;
}
// One word per second
if (wordCount > 0) wordIndex = (int)GetTime() % wordCount;
else wordIndex = 0;
//----------------------------------------------------------------------------------
// Draw
//----------------------------------------------------------------------------------
BeginDrawing();
ClearBackground(Color.DarkBlue);
DrawText("Use Arrow Keys to change the text alignment", 20, 20, 20, Color.LightGray);
DrawText($"Alignment: Horizontal = {textAlignNameH[hAlign]}, Vertical = {textAlignNameV[vAlign]}", 20, 40, 20, Color.LightGray);
DrawRectangleRec(textContainerRect, Color.Blue);
// Get the size of the text to draw
Vector2 textSize = MeasureTextEx(font, words[wordIndex], fontSize, fontSize * .1f);
// Calculate the top-left text position based on the rectangle and alignment
Vector2 textPos = new Vector2(
textContainerRect.X + Lerp(0.0f, textContainerRect.Width - textSize.X, hAlign * 0.5f),
textContainerRect.Y + Lerp(0.0f, textContainerRect.Height - textSize.Y, vAlign * 0.5f)
);
// Draw the text
DrawTextEx(font, words[wordIndex], textPos, fontSize, fontSize * .1f, Color.RayWhite);
EndDrawing();
//----------------------------------------------------------------------------------
}
public void Unload()
{
}
public static int Main()
{
// Initialization
//--------------------------------------------------------------------------------------
InitWindow(screenWidth, screenHeight, "raylib [text] example - words alignment");
SetTargetFPS(60); // Set our game to run at 60 frames-per-second
//--------------------------------------------------------------------------------------
var game = new WordsAlignment();
game.Init();
// Main game loop
while (!WindowShouldClose()) // Detect window close button or ESC key
{
game.Update();
}
game.Unload();
// De-Initialization
//--------------------------------------------------------------------------------------
CloseWindow(); // Close window and OpenGL context
//--------------------------------------------------------------------------------------
return 0;
}
}