Day 39 complete.

This commit is contained in:
igor
2026-04-24 14:08:11 -07:00
parent 0149719030
commit 536c2664fe
4 changed files with 45 additions and 17 deletions
+27 -3
View File
@@ -97,10 +97,17 @@ static void DrawBitmap(game_offscreen_buffer *Buffer, loaded_bitmap *Bitmap, F32
S32 Width = Buffer->Width;
S32 Height = Buffer->Height;
if(MinX < 0)
S32 SourceOffsetX = 0;
if(MinX < 0) {
SourceOffsetX = -MinX;
MinX = 0;
if(MinY < 0)
}
S32 SourceOffsetY = 0;
if(MinY < 0) {
SourceOffsetY = -MinY;
MinY = 0;
}
if(MaxX > Width)
MaxX = Width;
@@ -108,6 +115,7 @@ static void DrawBitmap(game_offscreen_buffer *Buffer, loaded_bitmap *Bitmap, F32
MaxY = Height;
U32 *SourceRow = Bitmap->Pixels + Bitmap->Width*(Bitmap->Height - 1);
SourceRow += -Bitmap->Width*SourceOffsetY + SourceOffsetX;
U8 *DestRow = ((U8 *)Buffer->Memory + MinX*Buffer->BytesPerPixel + MinY*Buffer->Pitch);
for(S32 Y = MinY; Y < MaxY; Y++) {
U32 *Dest = (U32 *)DestRow;
@@ -461,6 +469,22 @@ void UpdateAndRender(thread_context *Thread, game_memory *Memory, game_input *In
}
GameState->PlayerP = NewPlayerP;
}
GameState->CameraP.AbsTileZ = GameState->PlayerP.AbsTileZ;
tile_map_difference Diff = SubtractInF32(TileMap, &GameState->PlayerP, &GameState->CameraP);
if(Diff.dX > (9.0f*TileMap->TileSideInMeters)) {
GameState->CameraP.AbsTileX += 17;
}
if(Diff.dX < -(9.0f*TileMap->TileSideInMeters)) {
GameState->CameraP.AbsTileX -= 17;
}
if(Diff.dY > (5.0f*TileMap->TileSideInMeters)) {
GameState->CameraP.AbsTileY += 9;
}
if(Diff.dY < -(5.0f*TileMap->TileSideInMeters)) {
GameState->CameraP.AbsTileY -= 9;
}
}
}
@@ -510,7 +534,7 @@ void UpdateAndRender(thread_context *Thread, game_memory *Memory, game_input *In
F32 PlayerG = 0.0f;
F32 PlayerB = 0.0f;
F32 PlayerGroundPointX = ScreenCenterX + MetersToPixels*Diff.dX;
F32 PlayerGroundPointY = ScreenCenterY + MetersToPixels*Diff.dY;
F32 PlayerGroundPointY = ScreenCenterY - MetersToPixels*Diff.dY;
F32 PlayerLeft = PlayerGroundPointX - 0.5f * MetersToPixels*PlayerWidth;
F32 PlayerTop = PlayerGroundPointY - MetersToPixels*PlayerHeight;
DrawRectangle(Buffer, PlayerLeft, PlayerTop, PlayerLeft + MetersToPixels*PlayerWidth, PlayerTop + MetersToPixels*PlayerHeight, PlayerR, PlayerG, PlayerB);