1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61
|
#include "BlockManager.h"
#include "Terre.h"
#include "Pierre.h"
#include "ImageManager.h"
#include "Camera.h"
#include "WorldManager.h"
#include <SFML/Graphics.hpp>
#include <iostream>
BlockManager::BlockManager(WorldManager *a_worldManager, int const a_tailleX, int const a_tailleY, ImageManager *imageManager, sf::RenderWindow *a_app, Camera *a_camera): worldManager(a_worldManager), tailleX(a_tailleX), tailleY(a_tailleY), app(a_app), camera(a_camera), terre(0), pierre(0)
{
//Toutes les instances des blocks seront créées ici, et auront pour argument imageManager, pour pouvoir l'utiliser afin de charger les images dans leur constructeur, ainsi que le tableau et ses dimensions
terre = new Terre(worldManager, a_tailleX, a_tailleY, imageManager);
pierre = new Pierre(worldManager, a_tailleX, a_tailleY, imageManager);
}
BlockManager::~BlockManager()
{
delete terre;
delete pierre;
}
void BlockManager::blitMap()
{
int switchCondition;
for (int i = camera->getPosX() / 20 - 1 ; i <= (camera->getPosX() + camera->getWidth()) / 20 + 1 ; i++)
{
for (int j = camera->getPosY() / 20 - 1 ; j <= (camera->getPosY() + camera->getHeight()) / 20 + 1 ; j++)
{
switchCondition = worldManager->getWorldTab(i , j); //L'erreur vient ici, au premier passage de la boucle (pour info le monde fait 200 * 100, donc avec les différents paramètres le premier passage donne i = 89 et j = 46 comme je l'ai dit plus haut, jusqu'à i = 111 et j = 53)
switch (switchCondition)
{
case 0:
app->Draw(terre->blitTopLeftSprite(i * 20 - camera->getPosX() , j * 20 - camera->getPosY() , i , j));
app->Draw(terre->blitTopRightSprite(i * 20 - camera->getPosX() + 10 , j * 20 - camera->getPosY() , i , j));
app->Draw(terre->blitBotLeftSprite(i * 20 - camera->getPosX() , j * 20 - camera->getPosY() + 10 , i , j));
app->Draw(terre->blitBotRightSprite(i * 20 - camera->getPosX() + 10 , j * 20 - camera->getPosY() + 10 , i , j));
//C'est un block d'air, donc rien ne se passe
break;
case 1:
app->Draw(terre->blitTopLeftSprite(i * 20 - camera->getPosX() , j * 20 - camera->getPosY() , i , j));
app->Draw(terre->blitTopRightSprite(i * 20 - camera->getPosX() + 10 , j * 20 - camera->getPosY() , i , j));
app->Draw(terre->blitBotLeftSprite(i * 20 - camera->getPosX() , j * 20 - camera->getPosY() + 10 , i , j));
app->Draw(terre->blitBotRightSprite(i * 20 - camera->getPosX() + 10 , j * 20 - camera->getPosY() + 10 , i , j));
break;
case 2:
app->Draw(terre->blitTopLeftSprite(i * 20 - camera->getPosX() , j * 20 - camera->getPosY() , i , j));
app->Draw(terre->blitTopRightSprite(i * 20 - camera->getPosX() + 10 , j * 20 - camera->getPosY() , i , j));
app->Draw(terre->blitBotLeftSprite(i * 20 - camera->getPosX() , j * 20 - camera->getPosY() + 10 , i , j));
app->Draw(terre->blitBotRightSprite(i * 20 - camera->getPosX() + 10 , j * 20 - camera->getPosY() + 10 , i , j));
break;
}
}
}
} |
Partager