PocketEmpires/CameraOld.c

176 lines
4.1 KiB
C

/* *************************************
* Includes
* *************************************/
#include "Camera.h"
#include "Gfx.h"
#include "Pad.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);
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;
ptrCamera->locked = false;
}
TYPE_COLLISION_BLOCK CameraApplyCoordinatesToCoordinates( TYPE_CAMERA* ptrCamera,
uint16_t x,
uint16_t y )
{
TYPE_COLLISION_BLOCK cb = {0};
cb.x = x + ptrCamera->X_Offset;
cb.y = y + ptrCamera->Y_Offset;
return cb;
}
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() != false)
{
if (PadButtonPressed(PAD_LEFT) != false)
{
if (ptrCamera->X_Speed < 0)
{
ptrCamera->X_Speed += 2;
}
else if (ptrCamera->X_Speed < MAX_CAMERA_SPEED)
{
ptrCamera->X_Speed++;
}
}
if (PadButtonPressed(PAD_UP) != false)
{
if (ptrCamera->Y_Speed < 0)
{
ptrCamera->Y_Speed += 2;
}
else if (ptrCamera->Y_Speed < MAX_CAMERA_SPEED)
{
ptrCamera->Y_Speed++;
}
}
if (PadButtonPressed(PAD_DOWN) != false)
{
if (ptrCamera->Y_Speed > 0)
{
ptrCamera->Y_Speed -= 2;
}
else if (ptrCamera->Y_Speed > -MAX_CAMERA_SPEED)
{
ptrCamera->Y_Speed--;
}
}
if (PadButtonPressed(PAD_RIGHT) != false)
{
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) )
{
ptrCamera->X_Speed = 0;
}
if ( (PadButtonPressed(PAD_UP) == false)
&&
(PadButtonPressed(PAD_DOWN) == false) )
{
ptrCamera->Y_Speed = 0;
}
}
void CameraHandler(TYPE_CAMERA* ptrCamera)
{
if (ptrCamera->locked != false)
{
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);
}
if ((ptrCamera->X_Offset + ptrCamera->X_Speed) < 0)
{
ptrCamera->X_Offset += ptrCamera->X_Speed;
if (ptrCamera->X_Offset == 0)
{
ptrCamera->X_Speed = 0;
}
}
else
{
ptrCamera->X_Offset = 0;
ptrCamera->X_Speed = 0;
}
if ((ptrCamera->Y_Offset + ptrCamera->Y_Speed) < 0)
{
ptrCamera->Y_Offset += ptrCamera->Y_Speed;
if (ptrCamera->Y_Offset == 0)
{
ptrCamera->Y_Speed = 0;
}
}
else
{
ptrCamera->Y_Offset = 0;
ptrCamera->Y_Speed = 0;
}
}
void CameraSetLock(TYPE_CAMERA* ptrCamera, bool value)
{
ptrCamera->locked = value;
}