Day 43 complete.

This commit is contained in:
igor
2026-04-30 21:04:36 -07:00
parent 50fb128698
commit 5f663308d2
4 changed files with 35 additions and 23 deletions
+20 -18
View File
@@ -411,37 +411,40 @@ void UpdateAndRender(thread_context *Thread, game_memory *Memory, game_input *In
game_controller_input *Controller = GetController(Input, ControllerIndex); game_controller_input *Controller = GetController(Input, ControllerIndex);
if(Controller->IsAnalog) { if(Controller->IsAnalog) {
} else { } else {
v2 dPlayer; v2 ddPlayer; // accerlation
memset(&dPlayer, 0, sizeof(dPlayer)); memset(&ddPlayer, 0, sizeof(ddPlayer));
if(Controller->MoveUp.EndedDown) { if(Controller->MoveUp.EndedDown) {
dPlayer.Y = 1.0f; ddPlayer.Y = 1.0f;
GameState->FacingDirection = 1; GameState->FacingDirection = 1;
} }
if(Controller->MoveDown.EndedDown) { if(Controller->MoveDown.EndedDown) {
dPlayer.Y = -1.0f; ddPlayer.Y = -1.0f;
GameState->FacingDirection = 3; GameState->FacingDirection = 3;
} }
if(Controller->MoveLeft.EndedDown) { if(Controller->MoveLeft.EndedDown) {
dPlayer.X = -1.0f; ddPlayer.X = -1.0f;
GameState->FacingDirection = 2; GameState->FacingDirection = 2;
} }
if(Controller->MoveRight.EndedDown) { if(Controller->MoveRight.EndedDown) {
dPlayer.X = 1.0f; ddPlayer.X = 1.0f;
GameState->FacingDirection = 0; GameState->FacingDirection = 0;
} }
F32 PlayerSpeed = 2.0f; if((ddPlayer.X != 0.0f) && (ddPlayer.Y != 0.0f))
if(Controller->ActionUp.EndedDown) ddPlayer = V2Multiply(0.7071067811865475244f, ddPlayer);
PlayerSpeed = 10.0f;
dPlayer = vector_multiply(PlayerSpeed, dPlayer);
if((dPlayer.X != 0.0f) && (dPlayer.Y != 0.0f)) F32 PlayerSpeed = 10.0f;
dPlayer = vector_multiply(0.7071067811865475244f, dPlayer); if(Controller->ActionUp.EndedDown)
PlayerSpeed = 20.0f;
ddPlayer = V2Multiply(PlayerSpeed, ddPlayer);
ddPlayer = V2Add(ddPlayer, V2Unary(V2Multiply(1.5f, GameState->dPlayerP)));
tile_map_position NewPlayerP; tile_map_position NewPlayerP;
NewPlayerP = GameState->PlayerP; 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); NewPlayerP = RecannonicalizePosition(TileMap, NewPlayerP);
tile_map_position PlayerLeft; 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 TileSide = { 0.5f*(F32)TileSideInPixels, 0.5f*(F32)TileSideInPixels };
v2 Center = { ScreenCenterX - MetersToPixels*GameState->CameraP.Offset.X + (F32)RelColumn*(F32)TileSideInPixels, v2 Center = { ScreenCenterX - MetersToPixels*GameState->CameraP.Offset.X + (F32)RelColumn*(F32)TileSideInPixels,
ScreenCenterY + MetersToPixels*GameState->CameraP.Offset.Y - (F32)RelRow*(F32)TileSideInPixels }; ScreenCenterY + MetersToPixels*GameState->CameraP.Offset.Y - (F32)RelRow*(F32)TileSideInPixels };
v2 Min = vector_subtract(Center, TileSide); v2 Min = V2Subtract(Center, TileSide);
v2 Max = vector_add(Center, TileSide); v2 Max = V2Add(Center, TileSide);
DrawRectangle(Buffer, Min, Max, Gray, Gray, Gray); 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, v2 PlayerLeftTop = { PlayerGroundPointX - 0.5f * MetersToPixels*PlayerWidth,
PlayerGroundPointY - MetersToPixels*PlayerHeight }; PlayerGroundPointY - MetersToPixels*PlayerHeight };
v2 PlayerWidthHeight = { PlayerWidth, 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]; hero_bitmaps *Bitmap = &GameState->HeroBitmaps[GameState->FacingDirection];
DrawBitmap(Buffer, &Bitmap->Torso, PlayerGroundPointX, PlayerGroundPointY, Bitmap->AlignX, Bitmap->AlignY); 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, static void RenderWeirdGradient(game_offscreen_buffer *Buffer, S32 XOffset, S32 YOffset)
S32 YOffset)
{ {
S32 Width, Height, Y; S32 Width, Height, Y;
U8 *Row; U8 *Row;
+1
View File
@@ -183,6 +183,7 @@ typedef struct game_state {
tile_map_position CameraP; tile_map_position CameraP;
tile_map_position PlayerP; tile_map_position PlayerP;
v2 dPlayerP; // velocity
loaded_bitmap Backdrop; loaded_bitmap Backdrop;
+13 -4
View File
@@ -16,7 +16,7 @@ v2 V2(F32 X, F32 Y)
return Result; return Result;
} }
v2 vector_multiply(F32 A, v2 B) v2 V2Multiply(F32 A, v2 B)
{ {
v2 Result; v2 Result;
@@ -26,7 +26,7 @@ v2 vector_multiply(F32 A, v2 B)
return Result; return Result;
} }
v2 vector_unary(v2 A) v2 V2Unary(v2 A)
{ {
v2 Result; v2 Result;
@@ -36,7 +36,7 @@ v2 vector_unary(v2 A)
return Result; return Result;
} }
v2 vector_add(v2 A, v2 B) v2 V2Add(v2 A, v2 B)
{ {
v2 Result; v2 Result;
@@ -46,7 +46,7 @@ v2 vector_add(v2 A, v2 B)
return Result; return Result;
} }
v2 vector_subtract(v2 A, v2 B) v2 V2Subtract(v2 A, v2 B)
{ {
v2 Result; v2 Result;
@@ -56,4 +56,13 @@ v2 vector_subtract(v2 A, v2 B)
return Result; return Result;
} }
F32 Square(F32 A)
{
F32 Result;
Result = A * A;
return Result;
}
#endif #endif
+1 -1
View File
@@ -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) }; v2 dTileXY = { ((F32)A->AbsTileX - (F32)B->AbsTileX), ((F32)A->AbsTileY - (F32)B->AbsTileY) };
F32 dTileZ = (F32)A->AbsTileZ - (F32)B->AbsTileZ; 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 . . . // TODO: Incomplete . . .
Result.dZ = TileMap->TileSideInMeters*dTileZ; Result.dZ = TileMap->TileSideInMeters*dTileZ;