refactor: restructure the project
This commit is contained in:
105
languages/d/main.d
Normal file
105
languages/d/main.d
Normal file
@@ -0,0 +1,105 @@
|
||||
import std.stdio;
|
||||
import std.datetime;
|
||||
|
||||
struct Image {
|
||||
void* data;
|
||||
int width;
|
||||
int height;
|
||||
int mipmaps;
|
||||
int format;
|
||||
}
|
||||
|
||||
struct Texture2D {
|
||||
uint id;
|
||||
int width;
|
||||
int height;
|
||||
int mipmaps;
|
||||
int format;
|
||||
}
|
||||
|
||||
struct Vector2 {
|
||||
float x;
|
||||
float y;
|
||||
}
|
||||
|
||||
struct Color {
|
||||
ubyte r;
|
||||
ubyte g;
|
||||
ubyte b;
|
||||
ubyte a;
|
||||
}
|
||||
|
||||
extern(C):
|
||||
void InitWindow(int width, int height, const char* title);
|
||||
void CloseWindow();
|
||||
|
||||
void SetTargetFPS(int fps);
|
||||
void SetRandomSeed(uint seed);
|
||||
int GetRandomValue(int min, int max);
|
||||
|
||||
Image LoadImage(const char* file_name);
|
||||
void ImageResize(Image* image, int new_width, int new_height);
|
||||
Texture2D LoadTextureFromImage(Image image);
|
||||
void UnloadImage(Image image);
|
||||
void UnloadTexture(Texture2D texture);
|
||||
|
||||
bool WindowShouldClose();
|
||||
float GetFrameTime();
|
||||
|
||||
void BeginDrawing();
|
||||
void ClearBackground(Color color);
|
||||
void DrawTextureV(Texture2D texture, Vector2 position, Color tint);
|
||||
void EndDrawing();
|
||||
|
||||
const int WINDOW_WIDTH = 800;
|
||||
const int WINDOW_HEIGHT = 600;
|
||||
const int LOGO_HEIGHT = 64;
|
||||
const float LOGO_SPEED = 300;
|
||||
|
||||
const Color BLACK = Color(0, 0, 0, 255);
|
||||
const Color WHITE = Color(255, 255, 255, 255);
|
||||
|
||||
void main() {
|
||||
InitWindow(WINDOW_WIDTH, WINDOW_HEIGHT, "Raylib in D");
|
||||
SetTargetFPS(60);
|
||||
SetRandomSeed(cast(uint)Clock.currStdTime());
|
||||
|
||||
Image logo_image = LoadImage("./d_logo.png");
|
||||
ImageResize(&logo_image, logo_image.width * LOGO_HEIGHT / logo_image.height, LOGO_HEIGHT);
|
||||
Texture2D logo_texture = LoadTextureFromImage(logo_image);
|
||||
UnloadImage(logo_image);
|
||||
|
||||
float x = GetRandomValue(0, WINDOW_WIDTH - logo_texture.width);
|
||||
float y = GetRandomValue(0, WINDOW_HEIGHT - logo_texture.height);
|
||||
|
||||
float dx = LOGO_SPEED * (GetRandomValue(0, 1) ? -1 : 1);
|
||||
float dy = LOGO_SPEED * (GetRandomValue(0, 1) ? -1 : 1);
|
||||
|
||||
while (!WindowShouldClose()) {
|
||||
float delta_time = GetFrameTime();
|
||||
|
||||
x += dx * delta_time;
|
||||
y += dy * delta_time;
|
||||
|
||||
if (x < 0 || (x + logo_texture.width) >= WINDOW_WIDTH - 1)
|
||||
{
|
||||
dx *= -1;
|
||||
x += dx * delta_time;
|
||||
}
|
||||
if (y < 0 || (y + logo_texture.height) >= WINDOW_HEIGHT - 1)
|
||||
{
|
||||
dy *= -1;
|
||||
y += dy * delta_time;
|
||||
}
|
||||
|
||||
BeginDrawing();
|
||||
|
||||
ClearBackground(BLACK);
|
||||
DrawTextureV(logo_texture, Vector2(x, y), WHITE);
|
||||
|
||||
EndDrawing();
|
||||
}
|
||||
|
||||
UnloadTexture(logo_texture);
|
||||
CloseWindow();
|
||||
}
|
||||
Reference in New Issue
Block a user