Advertisement
sbloom85

dasher

Jan 23rd, 2023
68
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 4.37 KB | Gaming | 0 0
  1. /*
  2. * Dapper Dasher
  3. * Project on GameDev.TV
  4. * Scott Bloom
  5. */
  6.  
  7. #include "raylib.h"
  8.  
  9. struct AnimData
  10. {
  11.     Rectangle rec;
  12.     Vector2 pos;
  13.     int frame;
  14.     float updateTime;
  15.     float runningTime;
  16. };
  17.  
  18. bool isOnGround(AnimData data, int windowHeight)
  19. {
  20.     return data.pos.y >= windowHeight - data.rec.height;
  21. }
  22.  
  23. AnimData updateAnimData(AnimData data, float deltaTime, int maxFrame)
  24. {
  25.     // Update runningtime
  26.     data.runningTime += deltaTime;
  27.     if (data.runningTime >= data.updateTime)
  28.     {
  29.         data.runningTime = 0.0;
  30.  
  31.         // Update animation frame
  32.         data.rec.x = data.frame * data.rec.width;
  33.         data.frame++;
  34.  
  35.         if (data.frame > maxFrame)
  36.         {
  37.             data.frame = 0;
  38.         }
  39.     }
  40.     return data;
  41. }
  42.  
  43. int main()
  44. {
  45.     // Set Window Dimensions
  46.     int windowDimensions[2];
  47.         windowDimensions[0] = 1920;
  48.         windowDimensions[1] = 1080;
  49.  
  50.     // Initialize Window
  51.     InitWindow(windowDimensions[0], windowDimensions[1], "Dapper Dasher!");
  52.  
  53.     // Acceleration due to gravity, (pixels/frame/frame)
  54.     const int gravity = 1'000;
  55.  
  56.    // Create Nebula
  57.    Texture2D nebula = LoadTexture("textures/12_nebula_spritesheet.png");
  58.    AnimData nebulaData[10];
  59.    int nebulaSize = sizeof(nebulaData) / sizeof (nebulaData[0]);
  60.  
  61.    for (int i = 0; i < nebulaSize; i++)
  62.    {
  63.        nebulaData[i].rec.width = nebula.width / 8;
  64.        nebulaData[i].rec.height = nebula.height / 8;
  65.        nebulaData[i].rec.x = 0;
  66.        nebulaData[i].rec.y = 0;
  67.        nebulaData[i].pos.x = windowDimensions[0] + i * 300;
  68.        nebulaData[i].pos.y = windowDimensions[1] - nebula.height / 8;
  69.        nebulaData[i].frame = 0;
  70.        nebulaData[i].runningTime = 0.0;
  71.        nebulaData[i].updateTime = 0.0;        
  72.    }
  73.    
  74.    // Nebula velocity, px/s
  75.    int nebVelocity = -600;
  76.  
  77.    // Create Scarfy
  78.    Texture2D scarfy = LoadTexture("textures/scarfy.png");
  79.    AnimData scarfyData;
  80.    scarfyData.rec.width = scarfy.width / 6;
  81.    scarfyData.rec.height = scarfy.height;
  82.    scarfyData.rec.x = 0;
  83.    scarfyData.rec.y = 0;
  84.    scarfyData.pos.x = windowDimensions[0] / 2 - scarfyData.rec.width / 2;
  85.    scarfyData.pos.y = windowDimensions[1] - scarfyData.rec.height;
  86.    scarfyData.frame = 0;
  87.    scarfyData.updateTime = 1.0 / 12.0;
  88.    scarfyData.runningTime = 0.0;
  89.  
  90.    // Jump force and check for jump
  91.    const int jumpForce = -600;
  92.    const int maxJumps = 2;
  93.    int jumpCount = 0;
  94.    // bool isJumping = false;
  95.  
  96.    int velocity = 0;
  97.  
  98.    SetTargetFPS(60);
  99.    
  100.    while (!WindowShouldClose())
  101.    {
  102.        BeginDrawing();
  103.        ClearBackground(WHITE);
  104.  
  105.        // Delta Time (time since last frame)
  106.        const float dT = GetFrameTime();
  107.  
  108.        // Begin Game Logic
  109.  
  110.        // BEGIN NEBULA STUFF
  111.        // Update nebRunningTime
  112.        for (int i; i < nebulaSize; i++)
  113.        {
  114.            nebulaData[i] = updateAnimData(nebulaData[i], dT, 7);
  115.        }
  116.  
  117.        // Update nebula position
  118.        for (int i = 0; i < nebulaSize; i++)
  119.        {
  120.            nebulaData[i].pos.x += nebVelocity * dT;
  121.        }
  122.        // END NEBULA STUFF
  123.  
  124.        // BEGIN SCARFY STUFF
  125.        // Ground check
  126.        if (isOnGround(scarfyData, windowDimensions[1]))
  127.        {
  128.            // Rectangle is on ground
  129.            velocity = 0;
  130.            jumpCount = 0;
  131.        }
  132.        else
  133.        {
  134.            // Apply gravity
  135.            velocity += gravity * dT;
  136.        }
  137.  
  138.        // Check for jumping
  139.        if (IsKeyPressed(KEY_SPACE) && jumpCount < maxJumps)
  140.        {
  141.            velocity = 0;
  142.            velocity += jumpForce;
  143.            jumpCount++;
  144.        }
  145.  
  146.        // Update position
  147.        scarfyData.pos.y += velocity * dT;
  148.  
  149.        // Update runningTime
  150.        if (isOnGround(scarfyData, windowDimensions[1]))
  151.        {
  152.            scarfyData = updateAnimData(scarfyData, dT, 5);
  153.        }
  154.        // END SCARFY STUFF
  155.  
  156.        // BEGIN DRAWING
  157.        for (int i = 0; i < nebulaSize; i++)
  158.        {
  159.            DrawTextureRec(nebula, nebulaData[i].rec, nebulaData[i].pos, WHITE);
  160.        }
  161.  
  162.        // Draw Scarfy
  163.        DrawTextureRec(scarfy, scarfyData.rec, scarfyData.pos, WHITE);
  164.        // END DRAWING
  165.        
  166.        // End Game Logic
  167.  
  168.        EndDrawing();
  169.    }
  170.    UnloadTexture(nebula);
  171.    UnloadTexture(scarfy);
  172.    CloseWindow();
  173. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement