Añadida la clase item_tracker
This commit is contained in:
87
source/item_tracker.cpp
Normal file
87
source/item_tracker.cpp
Normal file
@@ -0,0 +1,87 @@
|
|||||||
|
#include "item_tracker.h"
|
||||||
|
|
||||||
|
// Constructor
|
||||||
|
Item_tracker::Item_tracker()
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
// Destructor
|
||||||
|
Item_tracker::~Item_tracker()
|
||||||
|
{
|
||||||
|
list.clear();
|
||||||
|
}
|
||||||
|
|
||||||
|
// Comprueba si el objeto ya ha sido cogido
|
||||||
|
bool Item_tracker::hasBeenPicked(std::string name, SDL_Point pos)
|
||||||
|
{
|
||||||
|
bool success = false;
|
||||||
|
|
||||||
|
// Primero busca si ya hay una entrada con ese nombre
|
||||||
|
const int index = findByName(name);
|
||||||
|
if (index != -1)
|
||||||
|
{
|
||||||
|
// Luego busca si existe ya una entrada con esa posición
|
||||||
|
if (findByPos(index, pos) != -1)
|
||||||
|
{
|
||||||
|
success = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return success;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Añade el objeto a la lista de objetos cogidos
|
||||||
|
void Item_tracker::addItem(std::string name, SDL_Point pos)
|
||||||
|
{
|
||||||
|
// Comprueba si el objeto no ha sido recogido con anterioridad
|
||||||
|
if (!hasBeenPicked(name, pos))
|
||||||
|
{
|
||||||
|
// Primero busca si ya hay una entrada con ese nombre
|
||||||
|
const int index = findByName(name);
|
||||||
|
if (index != -1)
|
||||||
|
{
|
||||||
|
list[index].pos.push_back(pos);
|
||||||
|
}
|
||||||
|
|
||||||
|
// En caso contrario crea la entrada
|
||||||
|
else
|
||||||
|
{
|
||||||
|
item_tracker_t item;
|
||||||
|
item.name = name;
|
||||||
|
item.pos.push_back(pos);
|
||||||
|
list.push_back(item);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Busca una entrada en la lista por nombre
|
||||||
|
int Item_tracker::findByName(std::string name)
|
||||||
|
{
|
||||||
|
const int c = -1;
|
||||||
|
|
||||||
|
for (int i = 0; i < list.size(); i++)
|
||||||
|
{
|
||||||
|
if (list[i].name == name)
|
||||||
|
{
|
||||||
|
return i;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return c;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Busca una entrada en la lista por posición
|
||||||
|
int Item_tracker::findByPos(int index, SDL_Point pos)
|
||||||
|
{
|
||||||
|
const int c = -1;
|
||||||
|
|
||||||
|
for (int i = 0; i < list[index].pos.size(); i++)
|
||||||
|
{
|
||||||
|
if ((list[index].pos[i].x == pos.x) && (list[index].pos[i].y == pos.y))
|
||||||
|
{
|
||||||
|
return i;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return c;
|
||||||
|
}
|
||||||
42
source/item_tracker.h
Normal file
42
source/item_tracker.h
Normal file
@@ -0,0 +1,42 @@
|
|||||||
|
#pragma once
|
||||||
|
#include "ifdefs.h"
|
||||||
|
#include "utils.h"
|
||||||
|
#include <string>
|
||||||
|
#include <vector>
|
||||||
|
|
||||||
|
#ifndef ITEM_TRACKER_H
|
||||||
|
#define ITEM_TRACKER_H
|
||||||
|
|
||||||
|
struct item_tracker_t
|
||||||
|
{
|
||||||
|
std::string name; // Nombre de la habitación donde se encuentra el objeto
|
||||||
|
std::vector<SDL_Point> pos; // Lista de objetos cogidos de la habitación
|
||||||
|
};
|
||||||
|
|
||||||
|
// Clase Item_tracker
|
||||||
|
class Item_tracker
|
||||||
|
{
|
||||||
|
private:
|
||||||
|
std::vector<item_tracker_t> list; // Lista con todos los objetos recogidos
|
||||||
|
|
||||||
|
// Busca una entrada en la lista por nombre
|
||||||
|
int findByName(std::string name);
|
||||||
|
|
||||||
|
// Busca una entrada en la lista por posición
|
||||||
|
int findByPos(int index, SDL_Point pos);
|
||||||
|
|
||||||
|
public:
|
||||||
|
// Constructor
|
||||||
|
Item_tracker();
|
||||||
|
|
||||||
|
// Destructor
|
||||||
|
~Item_tracker();
|
||||||
|
|
||||||
|
// Comprueba si el objeto ya ha sido cogido
|
||||||
|
bool hasBeenPicked(std::string name, SDL_Point pos);
|
||||||
|
|
||||||
|
// Añade el objeto a la lista de objetos cogidos
|
||||||
|
void addItem(std::string name, SDL_Point pos);
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif
|
||||||
@@ -170,26 +170,6 @@ bool Map::load(std::string file_path)
|
|||||||
}
|
}
|
||||||
|
|
||||||
} while (line != "[/actors]");
|
} while (line != "[/actors]");
|
||||||
/*actor_t actor;
|
|
||||||
actor.asset = asset;
|
|
||||||
actor.renderer = renderer;
|
|
||||||
|
|
||||||
do
|
|
||||||
{
|
|
||||||
std::getline(file, line);
|
|
||||||
|
|
||||||
// Encuentra la posición del caracter '='
|
|
||||||
int pos = line.find("=");
|
|
||||||
// Procesa las dos subcadenas
|
|
||||||
if (!setActor(&actor, line.substr(0, pos), line.substr(pos + 1, line.length())))
|
|
||||||
{
|
|
||||||
printf("Warning: file %s\n, unknown parameter \"%s\"\n", filename.c_str(), line.substr(0, pos).c_str());
|
|
||||||
success = false;
|
|
||||||
}
|
|
||||||
} while (line != "[/actor]");
|
|
||||||
|
|
||||||
// Añade el enemigo al vector de enemigos
|
|
||||||
actors.push_back(new ActorMovingPlatform(actor));*/
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// En caso contrario se parsea el fichero para buscar las variables y los valores
|
// En caso contrario se parsea el fichero para buscar las variables y los valores
|
||||||
|
|||||||
Reference in New Issue
Block a user