diff options
| -rw-r--r-- | GameLogic/stm32/main.c | 392 | 
1 files changed, 245 insertions, 147 deletions
| diff --git a/GameLogic/stm32/main.c b/GameLogic/stm32/main.c index edabde5..666992f 100644 --- a/GameLogic/stm32/main.c +++ b/GameLogic/stm32/main.c @@ -21,7 +21,7 @@  /* Private includes ----------------------------------------------------------*/
  /* USER CODE BEGIN Includes */
 -
 +#include <stdbool.h>
  /* USER CODE END Includes */
  /* Private typedef -----------------------------------------------------------*/
 @@ -45,6 +45,58 @@ TIM_HandleTypeDef htim3;  /* USER CODE BEGIN PV */
 +static int8_t buttonDPAD[] = {0,0,0,0}; //1left 2right 3down 4up
 +
 +struct playerData{
 +	uint16_t posX;
 +	uint16_t posY;
 +	uint8_t radius;
 +	uint8_t rotation; //45 degrees steps 0 == right 2 == down 4 == left 6 == up
 +	uint8_t directionX; //direction where its looking at in case no input;
 +	int8_t speed;	//10 default L/R MODifier
 +	bool inAir;
 +
 +};
 +
 +struct playerData player1;
 +
 +uint8_t tileMap[30][40] =
 +  {
 +		  {1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1 },
 +		  {1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1 },
 +		  {1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1 },
 +		  {1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1 },
 +		  {1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1 },
 +		  {1,1,1,1,1,1,1,1,1,1 ,0,0,0,0,0,0,0,0,0,0 ,0,0,0,0,0,0,0,0,0,0 ,1,1,1,1,1,1,1,1,1,1 },
 +		  {1,1,1,1,1,1,1,1,1,1 ,0,0,0,0,0,0,0,0,0,0 ,0,0,0,0,0,0,0,0,0,0 ,1,1,1,1,1,1,1,1,1,1 },
 +		  {1,1,1,1,1,1,1,1,1,1 ,0,0,0,0,0,0,0,0,0,0 ,0,0,0,0,0,0,0,0,0,0 ,1,1,1,1,1,1,1,1,1,1 },
 +		  {1,1,1,1,1,1,1,1,1,1 ,0,0,0,0,0,0,0,0,0,0 ,0,0,0,0,0,0,0,0,0,0 ,1,1,1,1,1,1,1,1,1,1 },
 +		  {1,1,1,1,1,1,1,1,1,1 ,0,0,0,0,0,0,0,0,0,0 ,0,0,0,0,0,0,0,0,0,0 ,1,1,1,1,1,1,1,1,1,1 },
 +		  {1,1,1,1,1,1,1,1,1,1 ,0,0,0,0,0,0,0,0,0,0 ,0,0,0,0,0,0,0,0,0,0 ,1,1,1,1,1,1,1,1,1,1 },
 +		  {1,1,1,1,1,1,1,1,1,1 ,0,0,0,0,0,0,0,0,0,0 ,0,0,0,0,0,0,0,0,0,0 ,1,1,1,1,1,1,1,1,1,1 },
 +		  {1,1,1,1,1,1,1,1,1,1 ,0,0,0,0,0,0,0,0,0,0 ,0,0,0,0,0,0,0,0,0,0 ,1,1,1,1,1,1,1,1,1,1 },
 +		  {1,1,1,1,1,1,1,1,1,1 ,0,0,0,0,0,0,0,0,0,0 ,0,0,0,0,0,0,0,0,0,0 ,1,1,1,1,1,1,1,1,1,1 },
 +		  {1,1,1,1,1,1,1,1,1,1 ,0,0,0,0,0,0,0,0,0,0 ,0,0,0,0,0,0,0,0,0,0 ,1,1,1,1,1,1,1,1,1,1 },
 +		  {1,1,1,1,1,1,1,1,1,1 ,0,0,0,0,0,0,0,0,0,0 ,0,0,0,0,0,0,0,0,0,0 ,1,1,1,1,1,1,1,1,1,1 },
 +		  {1,1,1,1,1,1,1,1,1,1 ,0,0,0,0,0,0,0,0,0,0 ,0,0,0,0,0,0,0,0,0,0 ,1,1,1,1,1,1,1,1,1,1 },
 +		  {1,1,1,1,1,1,1,1,1,1 ,0,0,0,0,0,0,0,0,0,0 ,0,0,0,0,0,0,0,0,0,0 ,1,1,1,1,1,1,1,1,1,1 },
 +		  {1,1,1,1,1,1,1,1,1,1 ,0,0,0,0,0,0,0,0,0,0 ,0,0,0,0,0,0,0,0,0,0 ,1,1,1,1,1,1,1,1,1,1 },
 +		  {1,1,1,1,1,1,1,1,1,1 ,0,0,0,0,0,0,0,0,0,0 ,0,0,0,0,0,0,0,0,0,0 ,1,1,1,1,1,1,1,1,1,1 },
 +		  {1,1,1,1,1,1,1,1,1,1 ,0,0,0,0,0,0,0,0,0,0 ,0,0,0,0,0,0,0,0,0,0 ,1,1,1,1,1,1,1,1,1,1 },
 +		  {1,1,1,1,1,1,1,1,1,1 ,0,0,0,0,0,0,0,0,0,0 ,0,0,0,0,0,0,0,0,0,0 ,1,1,1,1,1,1,1,1,1,1 },
 +		  {1,1,1,1,1,1,1,1,1,1 ,0,0,0,0,0,0,0,0,0,0 ,0,0,0,0,0,0,0,0,0,0 ,1,1,1,1,1,1,1,1,1,1 },
 +		  {1,1,1,1,1,1,1,1,1,1 ,0,0,0,0,0,0,0,0,0,0 ,0,0,0,0,0,0,0,0,0,0 ,1,1,1,1,1,1,1,1,1,1 },
 +		  {1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1 },
 +		  {1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1 },
 +		  {1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1 },
 +		  {1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1 },
 +		  {1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1 },
 +		  {1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1 }
 +
 +
 +
 +  };
 +
  /* USER CODE END PV */
  /* Private function prototypes -----------------------------------------------*/
 @@ -53,12 +105,15 @@ static void MX_GPIO_Init(void);  static void MX_SPI1_Init(void);
  static void MX_TIM3_Init(void);
  /* USER CODE BEGIN PFP */
 -
 +void buttonRead();
 +void playerMovement();
 +void sendData(uint8_t, uint16_t);
  /* USER CODE END PFP */
  /* Private user code ---------------------------------------------------------*/
  /* USER CODE BEGIN 0 */
 +
  /* USER CODE END 0 */
  /**
 @@ -93,50 +148,15 @@ int main(void)    MX_TIM3_Init();
    /* USER CODE BEGIN 2 */
    // correct byte for led control
 -  uint16_t pos_x = 310; //0b0000 0001 0011 0110
 -  uint16_t pos_y = 210;
 +  uint16_t pos_x; //0b0000 0001 0011 0110
 +  uint16_t pos_y;
    uint8_t left = 0;
    uint8_t right = 0;
    uint8_t up = 0;
    uint8_t down = 0;
 -  uint8_t tileMap[30][40] =
 -  {
 -		  {1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1 },
 -		  {1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1 },
 -		  {1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1 },
 -		  {1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1 },
 -		  {1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1 },
 -		  {1,1,1,1,1,1,1,1,1,1 ,0,0,0,0,0,0,0,0,0,0 ,0,0,0,0,0,0,0,0,0,0 ,1,1,1,1,1,1,1,1,1,1 },
 -		  {1,1,1,1,1,1,1,1,1,1 ,0,0,0,0,0,0,0,0,0,0 ,0,0,0,0,0,0,0,0,0,0 ,1,1,1,1,1,1,1,1,1,1 },
 -		  {1,1,1,1,1,1,1,1,1,1 ,0,0,0,0,0,0,0,0,0,0 ,0,0,0,0,0,0,0,0,0,0 ,1,1,1,1,1,1,1,1,1,1 },
 -		  {1,1,1,1,1,1,1,1,1,1 ,0,0,0,0,0,0,0,0,0,0 ,0,0,0,0,0,0,0,0,0,0 ,1,1,1,1,1,1,1,1,1,1 },
 -		  {1,1,1,1,1,1,1,1,1,1 ,0,0,0,0,0,0,0,0,0,0 ,0,0,0,0,0,0,0,0,0,0 ,1,1,1,1,1,1,1,1,1,1 },
 -		  {1,1,1,1,1,1,1,1,1,1 ,0,0,0,0,0,0,0,0,0,0 ,0,0,0,0,0,0,0,0,0,0 ,1,1,1,1,1,1,1,1,1,1 },
 -		  {1,1,1,1,1,1,1,1,1,1 ,0,0,0,0,0,0,0,0,0,0 ,0,0,0,0,0,0,0,0,0,0 ,1,1,1,1,1,1,1,1,1,1 },
 -		  {1,1,1,1,1,1,1,1,1,1 ,0,0,0,0,0,0,0,0,0,0 ,0,0,0,0,0,0,0,0,0,0 ,1,1,1,1,1,1,1,1,1,1 },
 -		  {1,1,1,1,1,1,1,1,1,1 ,0,0,0,0,0,0,0,0,0,0 ,0,0,0,0,0,0,0,0,0,0 ,1,1,1,1,1,1,1,1,1,1 },
 -		  {1,1,1,1,1,1,1,1,1,1 ,0,0,0,0,0,0,0,0,0,0 ,0,0,0,0,0,0,0,0,0,0 ,1,1,1,1,1,1,1,1,1,1 },
 -		  {1,1,1,1,1,1,1,1,1,1 ,0,0,0,0,0,0,0,0,0,0 ,0,0,0,0,0,0,0,0,0,0 ,1,1,1,1,1,1,1,1,1,1 },
 -		  {1,1,1,1,1,1,1,1,1,1 ,0,0,0,0,0,0,0,0,0,0 ,0,0,0,0,0,0,0,0,0,0 ,1,1,1,1,1,1,1,1,1,1 },
 -		  {1,1,1,1,1,1,1,1,1,1 ,0,0,0,0,0,0,0,0,0,0 ,0,0,0,0,0,0,0,0,0,0 ,1,1,1,1,1,1,1,1,1,1 },
 -		  {1,1,1,1,1,1,1,1,1,1 ,0,0,0,0,0,0,0,0,0,0 ,0,0,0,0,0,0,0,0,0,0 ,1,1,1,1,1,1,1,1,1,1 },
 -		  {1,1,1,1,1,1,1,1,1,1 ,0,0,0,0,0,0,0,0,0,0 ,0,0,0,0,0,0,0,0,0,0 ,1,1,1,1,1,1,1,1,1,1 },
 -		  {1,1,1,1,1,1,1,1,1,1 ,0,0,0,0,0,0,0,0,0,0 ,0,0,0,0,0,0,0,0,0,0 ,1,1,1,1,1,1,1,1,1,1 },
 -		  {1,1,1,1,1,1,1,1,1,1 ,0,0,0,0,0,0,0,0,0,0 ,0,0,0,0,0,0,0,0,0,0 ,1,1,1,1,1,1,1,1,1,1 },
 -		  {1,1,1,1,1,1,1,1,1,1 ,0,0,0,0,0,0,0,0,0,0 ,0,0,0,0,0,0,0,0,0,0 ,1,1,1,1,1,1,1,1,1,1 },
 -		  {1,1,1,1,1,1,1,1,1,1 ,0,0,0,0,0,0,0,0,0,0 ,0,0,0,0,0,0,0,0,0,0 ,1,1,1,1,1,1,1,1,1,1 },
 -		  {1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1 },
 -		  {1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1 },
 -		  {1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1 },
 -		  {1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1 },
 -		  {1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1 },
 -		  {1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1 }
 -
 -
 -  };
    uint8_t pos_x_bit[2];
    uint8_t pos_y_bit[2];
 @@ -144,11 +164,17 @@ int main(void)    int tileX;
    int tileY;
 -
 -
 -
 -
 -
 +//  struct playerData player1;
 + //int buttons[] = {GPIO_PIN_4,GPIO_PIN_5,GPIO_PIN_6,GPIO_PIN_8}; // 1 left // 2 right // 3 up // 4 down
 +
 +/// init struct
 +  player1.posX = 31000; //0b0000 0001 0011 0110
 +  player1.posY = 21000;
 +  player1.radius = 8;
 +  player1.speed = 1;
 +  player1.directionX = 1;
 +  player1.rotation = 8;
 +  player1.inAir = false;
    /* USER CODE END 2 */
    /* Infinite loop */
 @@ -156,113 +182,19 @@ int main(void)    while (1)
    {
 -		//shift int into 2 8bit u_int
 -		pos_x_bit[1] = pos_x & 0xff;
 -		pos_x_bit[0] = (pos_x >> 8);
 -		pos_y_bit[1] = pos_y & 0xff;
 -		pos_y_bit[0] = (pos_y >> 8);
 -		// simplify coor for tilemap
 -		tileX = pos_x / 20;
 -		tileY = pos_y / 16;
 +		buttonRead();
 +		playerMovement();
 -		//read buttons 4 times
 -		if(HAL_GPIO_ReadPin(GPIOB, GPIO_PIN_4) == 1)
 -		{
 -			left++;
 -		}
 -		else
 -		{
 -			left = 0;
 -		}
 -		if(HAL_GPIO_ReadPin(GPIOB, GPIO_PIN_5) == 1)
 -		 {
 -			right++;
 -		 }
 -		else
 -		{
 -			right = 0;
 -		}
 -		if(HAL_GPIO_ReadPin(GPIOB, GPIO_PIN_6) == 1)
 -		{
 -			up++;
 -		}
 -		else
 -		{
 -			up = 0;
 -		}
 -		if(HAL_GPIO_ReadPin(GPIOB, GPIO_PIN_8) == 1)
 -		{
 -			down++;
 -		}
 -		else
 -		{
 -			down = 0;
 -		}
 -		// compare position x/y with tilemap for collision
 -		if(left > 10)
 -		{
 -			if(tileMap[tileY][tileX] == 1)
 -			{
 -				left = 0;
 -			}
 -			else
 -			{
 -				pos_x--;
 -			}
 -			left = 0;
 -		}
 -		if(right > 10)
 -		{
 -			if(tileMap[tileY][tileX+1] == 1)
 -			{
 -				right = 0;
 -			}
 -			else
 -			{
 -				pos_x++;
 -			}
 -			right = 0;
 -		}
 -		if(up > 10)
 -		{
 -			if(tileMap[tileY+1][tileX] == 1)
 -			{
 -				up = 0;
 -			}
 -			else
 -			{
 -				pos_y++;
 -			}
 -		up = 0;
 -		}
 -		if(down > 10)
 -		{
 -			if( tileMap[tileY][tileX] == 1)
 -			{
 -				down = 0;
 -			}
 -			else
 -			{
 -				pos_y--;
 -			}
 -			down = 0;
 -		}
 -		// send data via SPI
 -		data_send[0] = 0b00000000; // first byte is address
 -		data_send[1] = pos_y_bit[0] ;
 -		data_send[2] = pos_y_bit[1];
 -		HAL_GPIO_WritePin(GPIOA, GPIO_PIN_9, GPIO_PIN_RESET);
 -		HAL_SPI_Transmit(&hspi1, data_send, 3, HAL_MAX_DELAY); //3*8 bit
 -		HAL_GPIO_WritePin(GPIOA, GPIO_PIN_9, GPIO_PIN_SET);
 -		data_send[0] = 0b01000000; // first byte is address
 -		data_send[1] = pos_x_bit[0] ;
 -		data_send[2] = pos_x_bit[1];
 -		HAL_GPIO_WritePin(GPIOA, GPIO_PIN_9, GPIO_PIN_RESET);
 -		HAL_SPI_Transmit(&hspi1, data_send, 3, HAL_MAX_DELAY); //3*8 bit
 -		HAL_GPIO_WritePin(GPIOA, GPIO_PIN_9, GPIO_PIN_SET);
 +
 +		// send data via SPI //adjust map size
 +		pos_x = player1.posX / 100;
 +		pos_y = player1.posY / 100;
 +
 +		sendData(0b01000000,pos_x);
 +		sendData(0b00000000,pos_y);
      /* USER CODE END WHILE */
 @@ -424,7 +356,173 @@ static void MX_GPIO_Init(void)  }
  /* USER CODE BEGIN 4 */
 +void sendData(uint8_t address, uint16_t data)
 +{
 +			uint8_t bitData[3];
 +			bitData[2] = data & 0xff;
 +			bitData[1] = (data >> 8);
 +			bitData[0] = address; // first byte is address
 +
 +
 +
 +			HAL_GPIO_WritePin(GPIOA, GPIO_PIN_9, GPIO_PIN_RESET);
 +			HAL_SPI_Transmit(&hspi1, bitData, 3, 100); //2*8 bit data
 +			HAL_GPIO_WritePin(GPIOA, GPIO_PIN_9, GPIO_PIN_SET);
 +
 +}
 +
 +/*
 +#define GPIO_PIN_0                 ((uint16_t)0x0001U)   Pin 0 selected
 +#define GPIO_PIN_1                 ((uint16_t)0x0002U)   Pin 1 selected
 +#define GPIO_PIN_2                 ((uint16_t)0x0004U)   Pin 2 selected
 +#define GPIO_PIN_3                 ((uint16_t)0x0008U)   Pin 3 selected
 +#define GPIO_PIN_4                 ((uint16_t)0x0010U)   Pin 4 selected
 +#define GPIO_PIN_5                 ((uint16_t)0x0020U)   Pin 5 selected
 +#define GPIO_PIN_6                 ((uint16_t)0x0040U)   Pin 6 selected
 +#define GPIO_PIN_7                 ((uint16_t)0x0080U)   Pin 7 selected
 +#define GPIO_PIN_8                 ((uint16_t)0x0100U)   Pin 8 selected
 +#define GPIO_PIN_9                 ((uint16_t)0x0200U)   Pin 9 selected
 +#define GPIO_PIN_10                ((uint16_t)0x0400U)   Pin 10 selected
 +#define GPIO_PIN_11                ((uint16_t)0x0800U)   Pin 11 selected
 +#define GPIO_PIN_12                ((uint16_t)0x1000U)   Pin 12 selected
 +#define GPIO_PIN_13                ((uint16_t)0x2000U)   Pin 13 selected
 +#define GPIO_PIN_14                ((uint16_t)0x4000U)   Pin 14 selected
 +#define GPIO_PIN_15                ((uint16_t)0x8000U)   Pin 15 selected
 +#define GPIO_PIN_All               ((uint16_t)0xFFFFU)   All pins selected
 +*/
 +
 +void buttonRead()
 +{
 +	//int buttons[] = {GPIO_PIN_4,GPIO_PIN_5,GPIO_PIN_6,GPIO_PIN_8}; // 1 left // 2 right // 3 down // 4 up  8-6-4-5
 +	uint16_t buttons[] = {0x0100U,0x0040U,0x0010U,0x0020U}; // 1 left // 2 right // 3 down // 4 up
 +
 +	for(int i = 0; i < 4; i++)
 +	{
 +		if(HAL_GPIO_ReadPin(GPIOB, buttons[i]) == 1)
 +		{
 +			if((i+2) % 2 == 0)
 +			{
 +				buttonDPAD[i] = 1;
 +			}
 +			else
 +			{
 +				buttonDPAD[i] = -1;
 +			}
 +		}
 +		else
 +		{
 +			buttonDPAD[i] = 0;
 +		}
 +	}
 +}
 +
 +void playerMovement()
 +{
 +
 +	int8_t directionX = 0; // -1 = L || 1 == R
 +	int8_t directionY = 0; // -1 = D || 1 == U
 +
 +	uint8_t i,j;
 +	uint8_t rotation = 0; // 0-7
 +	//temp var for testing
 +
 +
 +
 +	// direction calc
 +	directionX = buttonDPAD[0] + buttonDPAD[1];
 +	directionY = buttonDPAD[2] + buttonDPAD[3];
 +
 +	//rotation calc
 +	for(i = -1; i < 2;i++)
 +	{
 +		for(j = -1; j < 2; j++)
 +		{
 +			if(directionX == i)
 +			{
 +				if(directionY == j)
 +				{
 +					if(i != 0 && j != 0) //dont update when player idle
 +					{
 +						player1.rotation = rotation;
 +					}
 +				}
 +			}
 +		rotation++;
 +		}
 +	}
 +	//direction calc
 +	if(directionX != 0) //update direction if player is not idle
 +	{
 +		player1.directionX = directionX;
 +	}
 +	//collision map x-axis
 +
 +	//tile calc including radius and direction for background coliision
 +
 +	uint16_t tileColX;
 +	uint16_t tileColY = ( player1.posY / 100) / 16; ;
 +
 +	// remaining space between grid and exact
 +	uint8_t modTileX;
 +	uint8_t modTileY;
 +
 +
 +
 +	if(player1.inAir == false && directionX != 0)
 +	{
 +		if(directionX == 1)
 +		{
 +			tileColX = ( ( player1.posX / 100) + player1.radius ) / 20;
 +			modTileX = ( player1.posX + ( 100 * player1.radius ) ) % 2000;
 +		}
 +		else if(directionX == -1)
 +		{
 +			tileColX = ( ( player1.posX / 100) - player1.radius ) / 20;
 +			modTileX = ( player1.posX - ( 100 * player1.radius ) ) % 2000;
 +		}
 +
 +			if(tileMap[tileColY][tileColX + directionX] != 1)
 +			{
 +				player1.posX = player1.posX + (directionX * player1.speed); // NEW x set
 +			}
 +
 +			else if(tileMap[tileColY][tileColX + directionX] == 1)
 +			{
 +				if(modTileX < player1.speed)
 +				{
 +					player1.posX = player1.posX + (directionX * modTileX); // NEW x set
 +				}
 +				else
 +				{
 +					player1.posX = player1.posX + (directionX * player1.speed); // NEW x set
 +				}
 +			}
 +
 +	}
 +	else //if in air different all borders have to be checked
 +	{
 +
 +	}
 +
 +	//collision map floor (y-axis) (falling)
 +	// if falling no jump press (implement)
 +	/*
 +	tileColY = (( player1.posY / 100) + player1.radius) / 16; //bottom of player box
 +	modTileY = 1;
 +	if(tileMap[tileColY+1][tileColX] != 1) //rework after jumping
 +	{
 +		player1.posY = player1.posY + 5 ;// NEW y set //makew var gravity
 +		//playerStat = falling; //for later use of graphics/sound
 +	}
 +	*/
 +	//else if(tileMap[])
 +
 +
 +
 +
 +
 +}
  /* USER CODE END 4 */
  /**
 |