From 5f663308d243b6304d27069821015da797d5e821 Mon Sep 17 00:00:00 2001 From: igor Date: Thu, 30 Apr 2026 21:04:36 -0700 Subject: [PATCH] Day 43 complete. --- handmade.c | 38 ++++++++++++++++++++------------------ handmade.h | 1 + handmade_math.h | 17 +++++++++++++---- handmade_tile.c | 2 +- 4 files changed, 35 insertions(+), 23 deletions(-) diff --git a/handmade.c b/handmade.c index 9f2ed4a..74db243 100644 --- a/handmade.c +++ b/handmade.c @@ -411,37 +411,40 @@ void UpdateAndRender(thread_context *Thread, game_memory *Memory, game_input *In game_controller_input *Controller = GetController(Input, ControllerIndex); if(Controller->IsAnalog) { } else { - v2 dPlayer; - memset(&dPlayer, 0, sizeof(dPlayer)); + v2 ddPlayer; // accerlation + memset(&ddPlayer, 0, sizeof(ddPlayer)); if(Controller->MoveUp.EndedDown) { - dPlayer.Y = 1.0f; + ddPlayer.Y = 1.0f; GameState->FacingDirection = 1; } if(Controller->MoveDown.EndedDown) { - dPlayer.Y = -1.0f; + ddPlayer.Y = -1.0f; GameState->FacingDirection = 3; } if(Controller->MoveLeft.EndedDown) { - dPlayer.X = -1.0f; + ddPlayer.X = -1.0f; GameState->FacingDirection = 2; } if(Controller->MoveRight.EndedDown) { - dPlayer.X = 1.0f; + ddPlayer.X = 1.0f; GameState->FacingDirection = 0; } - F32 PlayerSpeed = 2.0f; - if(Controller->ActionUp.EndedDown) - PlayerSpeed = 10.0f; - dPlayer = vector_multiply(PlayerSpeed, dPlayer); + if((ddPlayer.X != 0.0f) && (ddPlayer.Y != 0.0f)) + ddPlayer = V2Multiply(0.7071067811865475244f, ddPlayer); - if((dPlayer.X != 0.0f) && (dPlayer.Y != 0.0f)) - dPlayer = vector_multiply(0.7071067811865475244f, dPlayer); + F32 PlayerSpeed = 10.0f; + if(Controller->ActionUp.EndedDown) + PlayerSpeed = 20.0f; + ddPlayer = V2Multiply(PlayerSpeed, ddPlayer); + + ddPlayer = V2Add(ddPlayer, V2Unary(V2Multiply(1.5f, GameState->dPlayerP))); tile_map_position NewPlayerP; NewPlayerP = GameState->PlayerP; - NewPlayerP.Offset = vector_add(NewPlayerP.Offset, vector_multiply(Input->dtForFrame, dPlayer)); + NewPlayerP.Offset = V2Add(V2Add(V2Multiply(0.5f, V2Multiply(Square(Input->dtForFrame), ddPlayer)), V2Multiply(Input->dtForFrame, GameState->dPlayerP)), NewPlayerP.Offset); + GameState->dPlayerP = V2Add(V2Multiply(Input->dtForFrame, ddPlayer), GameState->dPlayerP); NewPlayerP = RecannonicalizePosition(TileMap, NewPlayerP); tile_map_position PlayerLeft; @@ -516,8 +519,8 @@ void UpdateAndRender(thread_context *Thread, game_memory *Memory, game_input *In v2 TileSide = { 0.5f*(F32)TileSideInPixels, 0.5f*(F32)TileSideInPixels }; v2 Center = { ScreenCenterX - MetersToPixels*GameState->CameraP.Offset.X + (F32)RelColumn*(F32)TileSideInPixels, ScreenCenterY + MetersToPixels*GameState->CameraP.Offset.Y - (F32)RelRow*(F32)TileSideInPixels }; - v2 Min = vector_subtract(Center, TileSide); - v2 Max = vector_add(Center, TileSide); + v2 Min = V2Subtract(Center, TileSide); + v2 Max = V2Add(Center, TileSide); DrawRectangle(Buffer, Min, Max, Gray, Gray, Gray); } } @@ -533,7 +536,7 @@ void UpdateAndRender(thread_context *Thread, game_memory *Memory, game_input *In v2 PlayerLeftTop = { PlayerGroundPointX - 0.5f * MetersToPixels*PlayerWidth, PlayerGroundPointY - MetersToPixels*PlayerHeight }; v2 PlayerWidthHeight = { PlayerWidth, PlayerHeight }; - DrawRectangle(Buffer, PlayerLeftTop, vector_add(PlayerLeftTop, vector_multiply(MetersToPixels, PlayerWidthHeight)), PlayerR, PlayerG, PlayerB); + DrawRectangle(Buffer, PlayerLeftTop, V2Add(PlayerLeftTop, V2Multiply(MetersToPixels, PlayerWidthHeight)), PlayerR, PlayerG, PlayerB); hero_bitmaps *Bitmap = &GameState->HeroBitmaps[GameState->FacingDirection]; DrawBitmap(Buffer, &Bitmap->Torso, PlayerGroundPointX, PlayerGroundPointY, Bitmap->AlignX, Bitmap->AlignY); @@ -544,8 +547,7 @@ void UpdateAndRender(thread_context *Thread, game_memory *Memory, game_input *In } /* -static void RenderWeirdGradient(game_offscreen_buffer *Buffer, S32 XOffset, - S32 YOffset) +static void RenderWeirdGradient(game_offscreen_buffer *Buffer, S32 XOffset, S32 YOffset) { S32 Width, Height, Y; U8 *Row; diff --git a/handmade.h b/handmade.h index 766ff8b..08dc75f 100644 --- a/handmade.h +++ b/handmade.h @@ -183,6 +183,7 @@ typedef struct game_state { tile_map_position CameraP; tile_map_position PlayerP; + v2 dPlayerP; // velocity loaded_bitmap Backdrop; diff --git a/handmade_math.h b/handmade_math.h index e8d9c02..94ce4a5 100644 --- a/handmade_math.h +++ b/handmade_math.h @@ -16,7 +16,7 @@ v2 V2(F32 X, F32 Y) return Result; } -v2 vector_multiply(F32 A, v2 B) +v2 V2Multiply(F32 A, v2 B) { v2 Result; @@ -26,7 +26,7 @@ v2 vector_multiply(F32 A, v2 B) return Result; } -v2 vector_unary(v2 A) +v2 V2Unary(v2 A) { v2 Result; @@ -36,7 +36,7 @@ v2 vector_unary(v2 A) return Result; } -v2 vector_add(v2 A, v2 B) +v2 V2Add(v2 A, v2 B) { v2 Result; @@ -46,7 +46,7 @@ v2 vector_add(v2 A, v2 B) return Result; } -v2 vector_subtract(v2 A, v2 B) +v2 V2Subtract(v2 A, v2 B) { v2 Result; @@ -56,4 +56,13 @@ v2 vector_subtract(v2 A, v2 B) return Result; } +F32 Square(F32 A) +{ + F32 Result; + + Result = A * A; + + return Result; +} + #endif diff --git a/handmade_tile.c b/handmade_tile.c index f28ff6a..f7dbaad 100644 --- a/handmade_tile.c +++ b/handmade_tile.c @@ -143,7 +143,7 @@ static tile_map_difference SubtractInF32(tile_map *TileMap, tile_map_position *A v2 dTileXY = { ((F32)A->AbsTileX - (F32)B->AbsTileX), ((F32)A->AbsTileY - (F32)B->AbsTileY) }; F32 dTileZ = (F32)A->AbsTileZ - (F32)B->AbsTileZ; - Result.dXY = vector_add(vector_multiply(TileMap->TileSideInMeters, dTileXY), vector_subtract(A->Offset, B->Offset)); + Result.dXY = V2Add(V2Multiply(TileMap->TileSideInMeters, dTileXY), V2Subtract(A->Offset, B->Offset)); // TODO: Incomplete . . . Result.dZ = TileMap->TileSideInMeters*dTileZ;