Day 39 complete.
This commit is contained in:
+27
-3
@@ -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);
|
||||
|
||||
Reference in New Issue
Block a user