This commit is contained in:
huaqo-games
2025-01-27 21:56:10 +01:00
parent c4c2a3373a
commit 1c25a89c94
10 changed files with 59 additions and 88 deletions
BIN
View File
Binary file not shown.
BIN
View File
Binary file not shown.
Binary file not shown.

After

Width:  |  Height:  |  Size: 517 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 228 B

BIN
View File
Binary file not shown.

After

Width:  |  Height:  |  Size: 846 B

Binary file not shown.
BIN
View File
Binary file not shown.

After

Width:  |  Height:  |  Size: 2.9 KiB

BIN
View File
Binary file not shown.
BIN
View File
Binary file not shown.
+58 -87
View File
@@ -1,112 +1,96 @@
#include <raylib.h> #include <raylib.h>
#include <raymath.h>
typedef struct Vector2 getDirection(){
{ Vector2 direction = {0.0f, 0.0f};
float x; if (IsKeyDown(KEY_RIGHT) || IsKeyDown(KEY_D)){ direction = Vector2Add(direction, {1.0f , 0.0f}); }
float y; if (IsKeyDown(KEY_LEFT) || IsKeyDown(KEY_A)){ direction = Vector2Add(direction, {-1.0f, 0.0f}); }
int count; if (IsKeyDown(KEY_DOWN) || IsKeyDown(KEY_S)){ direction = Vector2Add(direction, {0.0f, 1.0f}); }
} SpriteSet; if (IsKeyDown(KEY_UP) || IsKeyDown(KEY_W)){ direction = Vector2Add(direction, {0.0f, -1.0f}); }
if (Vector2Length(direction) > 0.0f) { direction = Vector2Normalize(direction); }
return direction;
}
int main() int main()
{ {
int screenWidth = 1280; int screenWidth = 1280;
int screenHeight = 720; int screenHeight = 720;
InitWindow(screenWidth, screenHeight, "Father and Son"); InitWindow(screenWidth, screenHeight, "Lazy Bee");
SetTargetFPS(60); SetTargetFPS(60);
// Initialize Tiles // Init Audio
Texture2D tileTexture = LoadTexture("assets/tileset.png"); InitAudioDevice();
Music music = LoadMusicStream("assets/beez.mp3");
PlayMusicStream(music);
// Init Tiles
Texture2D tileTexture = LoadTexture("assets/grass.png");
Vector2 tileFrameSize = {16.0f, 16.0f}; Vector2 tileFrameSize = {16.0f, 16.0f};
Rectangle tileSourceRec = { tileFrameSize.x, tileFrameSize.y, tileFrameSize.x, tileFrameSize.y};
Rectangle tileSourceRec = { tileFrameSize.x * 11 + 11, tileFrameSize.y * 10 + 10, tileFrameSize.x, tileFrameSize.y}; // Init Character
Texture2D characterTexture = LoadTexture("assets/character_bee.png");
Vector2 charFrameSize = {16.0f, 16.0f};
// Initialize Background Rectangle charSourceRec = {0.0f, 0.0f, charFrameSize.x, charFrameSize.y};
// Texture2D backTexture = LoadTexture("assets/map.png");
// Vector2 backFrameSize = {639.0f, 271.0f};
// Rectangle backSourceRec = {0.0f, 0.0f, backFrameSize.x, backFrameSize.y};
// Rectangle backDestRec = {0.0f, 0.0f, backFrameSize.x, backFrameSize.y};
// Vector2 backOrigin = {0.0f, 0.0f};
// Initialize Character
Texture2D characterTexture = LoadTexture("assets/character.png");
Vector2 charFrameSize = {32.0f, 32.0f};
SpriteSet idle = {0.0f, 0.0f, 2};
SpriteSet walkingDown = {0.0f, 96.0f, 4};
SpriteSet walkingRight = {0.0f, 128.0f, 4};
SpriteSet walkingUp = {0.0f, 160.0f, 4};
SpriteSet current = idle;
Rectangle charSourceRec = {idle.x, idle.y, charFrameSize.x, charFrameSize.y};
Vector2 charPosition = {0.0f, 0.0f}; Vector2 charPosition = {0.0f, 0.0f};
Vector2 charOrigin = {charFrameSize.x / 2.0f, charFrameSize.y / 2.0f}; Vector2 charOrigin = {charFrameSize.x / 2.0f, charFrameSize.y / 2.0f};
float charRotation = 0.0f;
// Init Character Animation
int currentFrame = 0; int currentFrame = 0;
int framesCounter = 0; int framesCounter = 0;
int framesSpeed = 4; int framesSpeed = 10;
// Initialize Camera // Init Camera
Camera2D camera = { 0 }; Camera2D camera = { 0 };
camera.target = charPosition; camera.target = charPosition;
camera.offset = (Vector2){screenWidth / 2.0f, screenHeight / 2.0f}; camera.offset = (Vector2){screenWidth / 2.0f, screenHeight / 2.0f};
camera.rotation = 0.0f; camera.rotation = 0.0f;
camera.zoom = 10.0f; camera.zoom = 10.0f;
// Init hive
Texture2D hiveTexture = LoadTexture("assets/hive.png");
Vector2 hiveFrameSize = {32.0f,32.0f};
Rectangle hiveSourceRec = {0.0f, 0.0f, hiveFrameSize.x, hiveFrameSize.y};
Vector2 hivePosition = {0.0f,0.0f};
Rectangle hiveDestRec = {hivePosition.x, hivePosition.y, hiveFrameSize.x, hiveFrameSize.y};
Vector2 hiveOrigin = {hiveFrameSize.x / 2.0f, hiveFrameSize.y / 2.0f};
while (!WindowShouldClose()) while (!WindowShouldClose())
{ {
// Update Character UpdateMusicStream(music);
if (IsKeyDown(KEY_RIGHT))
{
current = walkingRight; // Update Char Movement
charSourceRec.width = charFrameSize.x; Vector2 direction = getDirection();
charPosition.x += 0.5f; Vector2 targetPosition = Vector2Add(charPosition, Vector2Scale(direction, 100.0f * GetFrameTime()));
} charPosition = {Lerp(charPosition.x, targetPosition.x, 0.3f),Lerp(charPosition.y, targetPosition.y, 0.3f)};
else if (IsKeyDown(KEY_LEFT))
{ // Update Char Rotation
current = walkingRight; if (Vector2Length(direction) > 0.0f) {
charSourceRec.width = -charFrameSize.x; float targetRotation = atan2(direction.y, direction.x) * (180.0f / PI) + 90.0f;
charPosition.x -= 0.5f; charRotation = Lerp(charRotation, targetRotation, 0.1f);
}
else if (IsKeyDown(KEY_DOWN))
{
current = walkingDown;
charSourceRec.width = charFrameSize.x;
charPosition.y += 0.5f;
}
else if (IsKeyDown(KEY_UP))
{
current = walkingUp;
charSourceRec.width = charFrameSize.x;
charPosition.y -= 0.5f;
}
else
{
current = idle;
charSourceRec.width = charFrameSize.x;
} }
// Update Char Animation
framesCounter++; framesCounter++;
if (framesCounter >= (60 / framesSpeed)) if (framesCounter >= (60 / framesSpeed))
{ {
framesCounter = 0; framesCounter = 0;
currentFrame++; currentFrame++;
if (currentFrame >= current.count) if (currentFrame >= 4)
currentFrame = 0; currentFrame = 0;
charSourceRec.y = currentFrame * charFrameSize.y;
charSourceRec.x = current.x + currentFrame * charFrameSize.x;
charSourceRec.y = current.y;
} }
// Update Camera // Update Char Camera
camera.target = charPosition; camera.target = charPosition;
// Render // Render
BeginDrawing(); BeginDrawing();
ClearBackground(RAYWHITE); ClearBackground(BLACK);
BeginMode2D(camera);
BeginMode2D(camera); // Activate 2D camera
// Render Tiles // Render Tiles
float left = camera.target.x - (screenWidth / 2.0f / camera.zoom); float left = camera.target.x - (screenWidth / 2.0f / camera.zoom);
@@ -129,37 +113,24 @@ int main()
} }
} }
// Render Background // Render Hive
// DrawTexturePro(backTexture, backSourceRec, backDestRec, backOrigin, 0.0f, WHITE); DrawTexturePro(hiveTexture, hiveSourceRec, hiveDestRec, hiveOrigin, 0.0f, WHITE);
// Render Character // Render Character
Rectangle charDestRec = {charPosition.x, charPosition.y, charFrameSize.x, charFrameSize.y}; Rectangle charDestRec = {charPosition.x, charPosition.y, charFrameSize.x, charFrameSize.y};
DrawTexturePro(characterTexture, charSourceRec, charDestRec, charOrigin, 0.0f, WHITE); DrawTexturePro(characterTexture, charSourceRec, charDestRec, charOrigin, charRotation, WHITE);
EndMode2D(); EndMode2D();
// Render Debug
EndDrawing(); EndDrawing();
} }
// Unload Character // Unload Character
UnloadTexture(characterTexture); UnloadTexture(characterTexture);
UnloadTexture(tileTexture); UnloadTexture(tileTexture);
// UnloadTexture(backTexture); UnloadMusicStream(music);
CloseAudioDevice();
CloseWindow(); CloseWindow();
return 0; return 0;
} }
/*
DrawRectangleLines(charDestRec.x, charDestRec.y, charFrameSize.x, charFrameSize.y, GREEN);
DrawRectangleLines(charPosition.x, charPosition.y, charFrameSize.x, charFrameSize.y, GREEN);
DrawRectangleLines(camera.offset.x, camera.offset.y, charFrameSize.x, charFrameSize.y, RED);
DrawRectangleLines(camera.target.x, camera.target.y, charFrameSize.x, charFrameSize.y, RED);
DrawText(TextFormat("charDestRec: %f, %f", charDestRec.x, charDestRec.y),10,10,20,GREEN);
DrawText(TextFormat("charSourceRec: %f, %f", charSourceRec.x, charSourceRec.y),10,30,20,GREEN);
DrawFPS(screenWidth - 30, 10);
*/