Super. Mais j'ai un autre problèmes.
Enfin deux, mais pour le 2e, on verra après...Voici mon main:
#include "tilemap.h"
#include "perso.h"
#include "Entity.h"
#include "PNJ.h"
#include "Object.h"
#include "Monster.h"
#include "Inventory.h"
#include <SFML/Window.hpp>
#include <SFML/Graphics.hpp>
#include <SFML/System.hpp>
#include <string>
#include <fstream>
#include <QApplication>
#include <QDebug>
using namespace std;
bool RInter(Perso& p, RObject& e, const std::string& texture, Inventory& inv) {
if (p.inter(e) == e.getType()) {
qDebug() << "23";
if (e.inter()) {
qDebug() << "25";
e.changeU(false);
if (!e.load(texture))
return false;
string e_name = e.getName();
if (e_name == "ble") {
qDebug() << "31";
int nb = inv.recupInt(0);
int nbr = nb+1;
inv.modifier(0, nbr, e_name);
}
if (e_name == "orge") {
qDebug() << "37";
int nb = inv.recupInt(1);
int nbr = nb+1;
inv.modifier(1, nbr, e_name);
}
qDebug() << "42";
qDebug() << "";
return true;
}
}
qDebug() << "46";
qDebug() << "";
return false;
}
int main(int argc, char *argv[])
{
// on crée la fenêtre
QApplication app(argc, argv);
//------------------------------------17----8
sf::RenderWindow window(sf::VideoMode(544, 256), "Tilemap");
sf::RenderWindow w;
sf::VideoMode v(400, 200);
int errCode = 0;
sf::Font font;
font.loadFromFile("arial.ttf");
sf::View view = window.getDefaultView();
// on définit le niveau à l'aide de numéro de tuiles
const int level[] ={.........};
// on crée la tilemap avec le niveau précédemment défini
TileMap map;
if (!map.load("tileset.png", sf::Vector2u(32, 32), level, 52, 24)) {
//gestion d'erreur...
}
// ____________________________^ THIS
Perso perso; // v THIS
if (!perso.load("perso.png", 52)) {
//gestion d'erreur...
}
// __________________________^
RObject ble(49, 13, "ble"), \
ble2(47, 13, "ble"), \
ble3(48, 12, "ble"), \
ble4(45, 11, "ble"), \
ble5(44, 12, "ble"), \
ble6(47, 11, "ble");
if (!ble.load("ble.png") \
|| !ble2.load("ble.png") \
|| !ble3.load("ble.png") \
|| !ble4.load("ble.png") \
|| !ble5.load("ble.png") \
|| !ble6.load("ble.png")) {
//...
}
//
RObject orge(47, 14, "orge"), \
orge2(45, 13, "orge"), \
orge3(44, 14, "orge"), \
orge4(49, 11, "orge");
if (!orge.load("orge.png") \
|| !orge2.load("orge.png") \
|| !orge3.load("orge.png") \
|| !orge4.load("orge.png")) {
//...
}
//RObjects = true; A desactiver si on
// ne veut pas faire les interactions.
// RObjects = false pour desactiver
bool RObjects = true;
bool Ble = true;
bool Orge = true;
Inventory Inventaire;
int myInt;
float myFloat;
sf::Sprite mySprite;
sf::Texture myTexture;
while (window.isOpen())
{
// on gère les évènements
sf::Event event;
while (window.pollEvent(event))
{
if(event.type == sf::Event::Closed) {
window.sf::RenderWindow::close();
if (errCode != 0)
w.sf::RenderWindow::close();
return 0;
}
if (event.type == sf::Event::KeyPressed && errCode == 0) // Si on appuie sur une touche
{
if (event.key.code == sf::Keyboard::Right)
perso.deplacer(Perso::Orientation::Droite, level, view);
if (event.key.code == sf::Keyboard::Left)
perso.deplacer(Perso::Orientation::Gauche, level, view);
if (event.key.code == sf::Keyboard::Down)
perso.deplacer(Perso::Orientation::Bas, level, view);
if (event.key.code == sf::Keyboard::Up)
perso.deplacer(Perso::Orientation::Haut, level, view);
if (event.key.code == sf::Keyboard::E) {
if (RObjects) {
if (Ble) {
RInter(perso, ble, "deadBle.png", Inventaire); // E => Interaction
RInter(perso, ble2, "deadBle.png", Inventaire);
RInter(perso, ble3, "deadBle.png", Inventaire);
RInter(perso, ble4, "deadBle.png", Inventaire);
RInter(perso, ble5, "deadBle.png", Inventaire);
RInter(perso, ble6, "deadBle.png", Inventaire);
}
if(Orge) {
RInter(perso, orge, "deadOrge.png", Inventaire);
RInter(perso, orge2, "deadOrge.png", Inventaire);
RInter(perso, orge3, "deadOrge.png", Inventaire);
RInter(perso, orge4, "deadOrge.png", Inventaire);
}
}
}
if (event.key.code == sf::Keyboard::I) {
if (perso.getStatus() == 0)
perso.setStatus(1); //mode inventaire
else
perso.setStatus(0); //mode jeu
}
}
}
window.clear(sf::Color::Green);
if (errCode == 0) {
window.setView(view);
if (perso.getStatus() == 0) {
window.draw(map);
if (RObjects) {
if (Ble) {
if (ble.getAvb())
window.draw(ble);
if (ble2.getAvb())
window.draw(ble2);
if (ble3.getAvb())
window.draw(ble3);
if (ble4.getAvb())
window.draw(ble4);
if (ble5.getAvb())
window.draw(ble5);
if (ble6.getAvb())
window.draw(ble6);
}
if (Orge) {
if (orge.getAvb())
window.draw(orge);
if (orge2.getAvb())
window.draw(orge2);
if (orge3.getAvb())
window.draw(orge3);
if (orge4.getAvb())
window.draw(orge4);
}
}
window.draw(perso);
}
if (perso.getStatus() == 1) {
//Draw Invetory
myInt = 0;
myFloat = 0;
while (Inventaire.recupInt(myInt) > 0) {
string strr = Inventaire.recupStr(myInt);
string str_texture = strr;
str_texture += ".png";
if (myTexture.loadFromFile(str_texture)) {
mySprite.setTexture(myTexture);
int nbrr = Inventaire.recupInt(myInt);
string nbrrr = to_string(nbrr);
sf::Text myText(strr, font, 10);
sf::Text myText2(nbrrr, font, 10);
myText2.move(20.f, 0.f);
myText.move(myFloat, 0.f);
myText2.move(myFloat, 0.f);
mySprite.move(myFloat, 0.f);
window.draw(mySprite);
window.draw(myText);
window.draw(myText2);
}
myFloat += 32;
myInt += 1;
}
}
}
window.display();
}
return 0;
}
Quel gros main...
M'enfin, alors voilà, quand je fais E, n'importe où, et bien tous mes RObjects sont "utilisés" alors qu'ils ne devraient pas !
Par exemple, je suis en 3;3 et le RObject est en 49;13, quand je fais E, le RObject a l'image deadBle.png (ou deadOrge.png pour l'orge) alors qu'il ne devrait pas !
Et cela, pour tous les RObjects...
if (event.key.code == sf::Keyboard::E) {
if (RObjects) {
if (Ble) {
RInter(perso, ble, "deadBle.png", Inventaire); // E => Interaction
RInter(perso, ble2, "deadBle.png", Inventaire);
RInter(perso, ble3, "deadBle.png", Inventaire);
RInter(perso, ble4, "deadBle.png", Inventaire);
RInter(perso, ble5, "deadBle.png", Inventaire);
RInter(perso, ble6, "deadBle.png", Inventaire);
}
if(Orge) {
RInter(perso, orge, "deadOrge.png", Inventaire);
RInter(perso, orge2, "deadOrge.png", Inventaire);
RInter(perso, orge3, "deadOrge.png", Inventaire);
RInter(perso, orge4, "deadOrge.png", Inventaire);
}
}
}
bool RInter(Perso& p, RObject& e, const std::string& texture, Inventory& inv) {
if (p.inter(e) == e.getType()) {
qDebug() << "23";
if (e.inter()) {
qDebug() << "25";
e.changeU(false);
if (!e.load(texture))
return false;
string e_name = e.getName();
if (e_name == "ble") {
qDebug() << "31";
int nb = inv.recupInt(0);
int nbr = nb+1;
inv.modifier(0, nbr, e_name);
}
if (e_name == "orge") {
qDebug() << "37";
int nb = inv.recupInt(1);
int nbr = nb+1;
inv.modifier(1, nbr, e_name);
}
qDebug() << "42";
qDebug() << "";
return true;
}
}
qDebug() << "46";
qDebug() << "";
return false;
}
Donc quand je fais E, la console m'affiche:
23
25
31
42
pour le blé, et pour l'orge:
32
35
37
42
... ?
Ah et voici les fonctions inter...
perso.inter:
int inter(Entity e) {
int eX = e.getX();
int eYY = e.getY();
int eY = mynumx*eYY;
int eXY = eY+eX;
if (e.getType() == 0)
return 0;
if (e.getType() != 0 && eXY == xy)
return e.getType();
else
return 0;
}
RObject.inter:
bool inter() {
if (isStillAvaible && isUsed)
return true;
else
return false;
}
Entity.getType:
int getType() {
return type;
}
RObject hérite de EntityMerci d'avance