Day 45 is complete.
This commit is contained in:
+54
-28
@@ -420,6 +420,7 @@ void UpdateAndRender(thread_context *Thread, game_memory *Memory, game_input *In
|
||||
S32 TileSideInPixels = 60;
|
||||
F32 MetersToPixels = (F32)TileSideInPixels / TileMap->TileSideInMeters;
|
||||
|
||||
tile_map_position OldPlayerP = GameState->PlayerP;
|
||||
for(U32 ControllerIndex = 0; ControllerIndex < ARRAY_SIZE(Input->Controllers); ControllerIndex++) {
|
||||
game_controller_input *Controller = GetController(Input, ControllerIndex);
|
||||
if(Controller->IsAnalog) {
|
||||
@@ -454,12 +455,13 @@ void UpdateAndRender(thread_context *Thread, game_memory *Memory, game_input *In
|
||||
|
||||
ddPlayer = V2Add(ddPlayer, V2Unary(V2Multiply(1.5f, GameState->dPlayerP)));
|
||||
|
||||
tile_map_position NewPlayerP;
|
||||
NewPlayerP = GameState->PlayerP;
|
||||
NewPlayerP.Offset = V2Add(V2Add(V2Multiply(0.5f, V2Multiply(Square(Input->dtForFrame), ddPlayer)), V2Multiply(Input->dtForFrame, GameState->dPlayerP)), NewPlayerP.Offset);
|
||||
tile_map_position NewPlayerP = GameState->PlayerP;
|
||||
v2 PlayerDelta = V2Add(V2Multiply(0.5f, V2Multiply(Square(Input->dtForFrame), ddPlayer)), V2Multiply(Input->dtForFrame, GameState->dPlayerP));
|
||||
NewPlayerP.Offset = V2Add(PlayerDelta, NewPlayerP.Offset);
|
||||
GameState->dPlayerP = V2Add(V2Multiply(Input->dtForFrame, ddPlayer), GameState->dPlayerP);
|
||||
NewPlayerP = RecannonicalizePosition(TileMap, NewPlayerP);
|
||||
|
||||
#if 1
|
||||
tile_map_position PlayerLeft;
|
||||
PlayerLeft = NewPlayerP;
|
||||
PlayerLeft.Offset.X -= 0.5f*PlayerWidth;
|
||||
@@ -503,36 +505,62 @@ void UpdateAndRender(thread_context *Thread, game_memory *Memory, game_input *In
|
||||
|
||||
GameState->dPlayerP = V2Subtract(GameState->dPlayerP, V2Multiply(1*InnerProduct(GameState->dPlayerP, r), r));
|
||||
} else {
|
||||
if(!AreOnSameTile(&GameState->PlayerP, &NewPlayerP)) {
|
||||
U32 NewTileValue = GetTileValueByPos(TileMap, NewPlayerP);
|
||||
|
||||
if(NewTileValue == 3) {
|
||||
NewPlayerP.AbsTileZ++;
|
||||
} else if(NewTileValue == 4) {
|
||||
NewPlayerP.AbsTileZ--;
|
||||
}
|
||||
}
|
||||
GameState->PlayerP = NewPlayerP;
|
||||
}
|
||||
#else
|
||||
U32 MinTileX = 0;
|
||||
U32 MinTileY = 0;
|
||||
U32 OnePastMaxTileX = 0;
|
||||
U32 OnePastMaxTileY = 0;
|
||||
U32 AbsTileZ = GameState->PlayerP.AbsTileZ;
|
||||
tile_map_position BestPlayerP = GameState->PlayerP;
|
||||
F32 BestDistance = LengthSq(PlayerDelta);
|
||||
for(U32 AbsTileY = MinTileY; AbsTileY != OnePastMaxTileY; AbsTileY++) {
|
||||
for(U32 AbsTileX = MinTileX; AbsTileX != OnePastMaxTileX; AbsTileX++) {
|
||||
tile_map_position TestTileP = CenteredTilePoint(AbsTileX, AbsTileY, AbsTileZ);
|
||||
U32 TileValue = GetTileValueByPos(TileMap, TestTileP);
|
||||
if(IsTileValueEmpty(TileValue)) {
|
||||
v2 MinCorner = V2Multiply(-0.5f, (v2){ TileMap->TileSideInMeters, TileMap->TileSideInMeters });
|
||||
v2 MaxCorner = V2Multiply(-0.5f, (v2){ TileMap->TileSideInMeters, TileMap->TileSideInMeters });
|
||||
|
||||
GameState->CameraP.AbsTileZ = GameState->PlayerP.AbsTileZ;
|
||||
|
||||
tile_map_difference Diff = SubtractInF32(TileMap, &GameState->PlayerP, &GameState->CameraP);
|
||||
if(Diff.dXY.X > (9.0f*TileMap->TileSideInMeters)) {
|
||||
GameState->CameraP.AbsTileX += 17;
|
||||
}
|
||||
if(Diff.dXY.X < -(9.0f*TileMap->TileSideInMeters)) {
|
||||
GameState->CameraP.AbsTileX -= 17;
|
||||
}
|
||||
if(Diff.dXY.Y > (5.0f*TileMap->TileSideInMeters)) {
|
||||
GameState->CameraP.AbsTileY += 9;
|
||||
}
|
||||
if(Diff.dXY.Y < -(5.0f*TileMap->TileSideInMeters)) {
|
||||
GameState->CameraP.AbsTileY -= 9;
|
||||
tile_map_difference RelNewPlayerP = SubtractInF32(TileMap, &TestTileP, &NewPlayerP);
|
||||
v2 TestP = ClosestPointInRectangle(MinCorner, MaxCorner, RelNewPlayerP);
|
||||
if(...) {
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
#endif
|
||||
}
|
||||
}
|
||||
|
||||
if(!AreOnSameTile(&OldPlayerP, &GameState->PlayerP)) {
|
||||
U32 NewTileValue = GetTileValueByPos(TileMap, GameState->PlayerP);
|
||||
|
||||
if(NewTileValue == 3) {
|
||||
GameState->PlayerP.AbsTileZ++;
|
||||
} else if(NewTileValue == 4) {
|
||||
GameState->PlayerP.AbsTileZ--;
|
||||
}
|
||||
}
|
||||
|
||||
GameState->CameraP.AbsTileZ = GameState->PlayerP.AbsTileZ;
|
||||
|
||||
tile_map_difference Diff = SubtractInF32(TileMap, &GameState->PlayerP, &GameState->CameraP);
|
||||
if(Diff.dXY.X > (9.0f*TileMap->TileSideInMeters)) {
|
||||
GameState->CameraP.AbsTileX += 17;
|
||||
}
|
||||
if(Diff.dXY.X < -(9.0f*TileMap->TileSideInMeters)) {
|
||||
GameState->CameraP.AbsTileX -= 17;
|
||||
}
|
||||
if(Diff.dXY.Y > (5.0f*TileMap->TileSideInMeters)) {
|
||||
GameState->CameraP.AbsTileY += 9;
|
||||
}
|
||||
if(Diff.dXY.Y < -(5.0f*TileMap->TileSideInMeters)) {
|
||||
GameState->CameraP.AbsTileY -= 9;
|
||||
}
|
||||
Diff = SubtractInF32(TileMap, &GameState->PlayerP, &GameState->CameraP);
|
||||
|
||||
//DrawRectangle(Buffer, 0.0f, 0.0f, (F32)Buffer->Width, (F32)Buffer->Height, 0.0f, 1.0f, 0.0f);
|
||||
|
||||
DrawBitmap(Buffer, &GameState->Backdrop, 0.0f, 0.0f, 0, 0);
|
||||
@@ -571,8 +599,6 @@ void UpdateAndRender(thread_context *Thread, game_memory *Memory, game_input *In
|
||||
}
|
||||
}
|
||||
|
||||
tile_map_difference Diff = SubtractInF32(TileMap, &GameState->PlayerP, &GameState->CameraP);
|
||||
|
||||
F32 PlayerR = 1.0f;
|
||||
F32 PlayerG = 0.0f;
|
||||
F32 PlayerB = 0.0f;
|
||||
|
||||
Reference in New Issue
Block a user