summaryrefslogtreecommitdiff
path: root/Camera.c
diff options
context:
space:
mode:
authorXaviDCR92 <xavi.dcr@gmail.com>2017-03-07 20:57:09 +0100
committerXaviDCR92 <xavi.dcr@gmail.com>2017-03-07 20:57:09 +0100
commit8ec41b4410aba535008daf991ea59a8740951d44 (patch)
tree01ee0846f579d9d139ee46a6a43f67ba522c7196 /Camera.c
downloadpocketempires-8ec41b4410aba535008daf991ea59a8740951d44.tar.gz
+ Initial commit. Added source, sprites and final executable.
Diffstat (limited to 'Camera.c')
-rw-r--r--Camera.c150
1 files changed, 150 insertions, 0 deletions
diff --git a/Camera.c b/Camera.c
new file mode 100644
index 0000000..ba99741
--- /dev/null
+++ b/Camera.c
@@ -0,0 +1,150 @@
+/* *************************************
+ * Includes
+ * *************************************/
+
+#include "Camera.h"
+
+/* *************************************
+ * Defines
+ * *************************************/
+
+#define SPEED_CALCULATION_TIME 3
+#define MAX_CAMERA_SPEED 5
+#define MIN_CAMERA_SPEED 1
+
+/* *************************************
+ * Local Prototypes
+ * *************************************/
+
+static void CameraUpdateSpeed(TYPE_CAMERA * ptrCamera);
+static bool CameraSpecialConditions(TYPE_CAMERA * ptrCamera);
+
+void CameraInit(TYPE_CAMERA * ptrCamera)
+{
+ ptrCamera->X_Offset = 0;
+ ptrCamera->Y_Offset = 0;
+ ptrCamera->X_Speed = 0;
+ ptrCamera->Y_Speed = 0;
+ ptrCamera->Speed_Timer = SPEED_CALCULATION_TIME;
+}
+
+void CameraApplyCoordinatesToSprite(TYPE_CAMERA * ptrCamera,
+ TYPE_SPRITE * spr,
+ uint16_t x,
+ uint16_t y )
+{
+ spr->x = (uint8_t)(x + ptrCamera->X_Offset);
+ spr->y = (uint8_t)(y + ptrCamera->Y_Offset);
+}
+
+void CameraUpdateSpeed(TYPE_CAMERA * ptrCamera)
+{
+ if(PadDirectionKeyPressed() == true)
+ {
+ if(PadButtonPressed(PAD_LEFT) == true)
+ {
+ if(ptrCamera->X_Speed < 0)
+ {
+ ptrCamera->X_Speed += 2;
+ }
+ else if(ptrCamera->X_Speed < MAX_CAMERA_SPEED)
+ {
+ ptrCamera->X_Speed++;
+ }
+ }
+
+ if(PadButtonPressed(PAD_UP) == true)
+ {
+ if(ptrCamera->Y_Speed < 0)
+ {
+ ptrCamera->Y_Speed += 2;
+ }
+ else if(ptrCamera->Y_Speed < MAX_CAMERA_SPEED)
+ {
+ ptrCamera->Y_Speed++;
+ }
+ }
+
+ if(PadButtonPressed(PAD_DOWN) == true)
+ {
+ if(ptrCamera->Y_Speed > 0)
+ {
+ ptrCamera->Y_Speed -= 2;
+ }
+ else if(ptrCamera->Y_Speed > -MAX_CAMERA_SPEED)
+ {
+ ptrCamera->Y_Speed--;
+ }
+ }
+
+ if(PadButtonPressed(PAD_RIGHT) == true)
+ {
+ if(ptrCamera->X_Speed > 0)
+ {
+ ptrCamera->X_Speed -= 2;
+ }
+ else if(ptrCamera->X_Speed > -MAX_CAMERA_SPEED)
+ {
+ ptrCamera->X_Speed--;
+ }
+ }
+ }
+
+ if( (PadButtonPressed(PAD_LEFT) == false)
+ &&
+ (PadButtonPressed(PAD_RIGHT) == false) )
+ {
+ if(ptrCamera->X_Speed > 0)
+ {
+ ptrCamera->X_Speed--;
+ }
+ else if(ptrCamera->X_Speed < 0)
+ {
+ ptrCamera->X_Speed++;
+ }
+ }
+
+ if( (PadButtonPressed(PAD_UP) == false)
+ &&
+ (PadButtonPressed(PAD_DOWN) == false) )
+ {
+ if(ptrCamera->Y_Speed > 0)
+ {
+ ptrCamera->Y_Speed--;
+ }
+ else if(ptrCamera->Y_Speed < 0)
+ {
+ ptrCamera->Y_Speed++;
+ }
+ }
+}
+
+void CameraHandler(TYPE_CAMERA * ptrCamera)
+{
+
+ if(CameraSpecialConditions(ptrCamera) == true)
+ {
+ ptrCamera->X_Speed = 0;
+ ptrCamera->Y_Speed = 0;
+ return;
+ }
+
+ if(ptrCamera->Speed_Timer < SPEED_CALCULATION_TIME)
+ {
+ ptrCamera->Speed_Timer++;
+ }
+ else
+ {
+ ptrCamera->Speed_Timer = 0;
+ CameraUpdateSpeed(ptrCamera);
+ }
+
+ ptrCamera->X_Offset += ptrCamera->X_Speed;
+ ptrCamera->Y_Offset += ptrCamera->Y_Speed;
+}
+
+bool CameraSpecialConditions(TYPE_CAMERA * ptrCamera)
+{
+
+ return false;
+}