aboutsummaryrefslogtreecommitdiff
path: root/Source/Camera.c
diff options
context:
space:
mode:
authorXavier ASUS <xavi92psx@gmail.com>2018-11-25 18:02:18 +0100
committerXavier ASUS <xavi92psx@gmail.com>2018-11-25 18:02:18 +0100
commit64dbf5cdd5c16ab6ccdadcfd66949aba5b8fa1e2 (patch)
treed408c06ac5573c35eaee8fd451114fd73acde2f8 /Source/Camera.c
parent135a1e93cb9b3a859c4269a94ababe33b3558f9a (diff)
downloadairport-64dbf5cdd5c16ab6ccdadcfd66949aba5b8fa1e2.tar.gz
Bugfix: minutes were not being retrieved from PLT files.
Game.c: parking slots cannot be selected if an aircraft in STATE_PARKED state is on it. Other fixes and improvements. Added some tiles from TILESET2.TIM
Diffstat (limited to 'Source/Camera.c')
-rw-r--r--Source/Camera.c45
1 files changed, 42 insertions, 3 deletions
diff --git a/Source/Camera.c b/Source/Camera.c
index 9c05f27..e23a54f 100644
--- a/Source/Camera.c
+++ b/Source/Camera.c
@@ -21,6 +21,11 @@
static int32_t Camera_Max_X_Offset;
static int32_t Camera_Max_Y_Offset;
+static int32_t Camera_Max_X_Limit;
+static int32_t Camera_Min_X_Limit;
+//~ static int32_t Camera_Min_Y_Limit;
+//~ static int32_t Camera_Max_Y_Limit;
+
/* *************************************
* Local Prototypes
* *************************************/
@@ -38,6 +43,13 @@ void CameraInit(TYPE_PLAYER* const ptrPlayer)
Camera_Max_X_Offset = GameGetLevelColumns() << TILE_SIZE_BIT_SHIFT;
Camera_Max_Y_Offset = GameGetLevelColumns() * TILE_SIZE_H;
+
+ Camera_Min_X_Limit = -Camera_Max_X_Offset;
+ Camera_Max_X_Limit = GameGetLevelColumns() << (TILE_SIZE_BIT_SHIFT - 1);
+ Camera_Max_X_Limit += Camera_Max_X_Limit >> 1;
+
+ DEBUG_PRINT_VAR(Camera_Min_X_Limit);
+ DEBUG_PRINT_VAR(Camera_Max_X_Limit);
}
void CameraApplyCoordinatesToSprite(TYPE_PLAYER* const ptrPlayer, GsSprite* spr)
@@ -167,11 +179,38 @@ void CameraHandler(TYPE_PLAYER* const ptrPlayer)
CameraUpdateSpeed(ptrPlayer);
}
- ptrPlayer->Camera.X_Offset += ptrPlayer->Camera.X_Speed;
+ bool limitAchieved = false;
+
+ if (ptrPlayer->Camera.X_Offset < 0)
+ {
+ if ((ptrPlayer->Camera.X_Offset + ptrPlayer->Camera.X_Speed) <= Camera_Min_X_Limit)
+ {
+ DEBUG_PRINT_VAR(ptrPlayer->Camera.X_Offset);
+ if (ptrPlayer->Camera.X_Speed < 0)
+ {
+ limitAchieved = true;
+ ptrPlayer->Camera.X_Speed = 0;
+ }
+ }
+ }
+ else if ((ptrPlayer->Camera.X_Offset + ptrPlayer->Camera.X_Speed) >= Camera_Max_X_Limit)
+ {
+ if (ptrPlayer->Camera.X_Speed > 0)
+ {
+ limitAchieved = true;
+ ptrPlayer->Camera.X_Speed = 0;
+ }
+ }
+
+ if (limitAchieved == false)
+ {
+ ptrPlayer->Camera.X_Offset += ptrPlayer->Camera.X_Speed;
+ }
+
ptrPlayer->Camera.Y_Offset += ptrPlayer->Camera.Y_Speed;
- //DEBUG_PRINT_VAR(ptrPlayer->Camera.X_Offset);
- //DEBUG_PRINT_VAR(ptrPlayer->Camera.Y_Offset);
+ //~ DEBUG_PRINT_VAR(ptrPlayer->Camera.X_Offset);
+ //~ DEBUG_PRINT_VAR(ptrPlayer->Camera.Y_Offset);
}
bool CameraSpecialConditions(TYPE_PLAYER* const ptrPlayer)