Histoirioa gestion correcta de ohjetos

parent 77492d9f
No preview for this file type
......@@ -6,6 +6,7 @@
#include "Objeto.h"
#include "Sprite.h"
#include "Hitbox.h"
#include "Video.h"
void Historia::limpiarEstado(){
for(int i=0;i<colPantallas.size();i++){
......@@ -18,7 +19,13 @@ void Historia::limpiarEstado(){
static void iniciarInicio() {
Sprite sprPlanta("assets/planta.png");
Hitbox hitPlanta(900,700,1200,-1000000000);
Objeto Planta(sprPlanta,sprPlanta,sprPlanta,hitPlanta,1200,400,300,400, normal);
auto funcionPlanta=[](Objeto *Planta)->bool{
Agapito.inventario[Agapito.numObjetos]=*Planta;
Agapito.numObjetos++;
play_video("assets/videoPrueba","es");
return true;
};
Objeto Planta(sprPlanta,sprPlanta,sprPlanta,hitPlanta,1200,400,300,400, normal,funcionPlanta);
getPantalla1()->anadirObjeto(Planta);
}
......
......@@ -18,3 +18,7 @@ void Objeto::renderizar(SDL_Renderer *renderer, int tamx, int tamy){
break;
}
}
bool Objeto::interactuar(){
return funcionInteraccion(this);
}
......@@ -20,13 +20,14 @@ class Objeto {
int y;
int w;
int h;
bool (*funcionInteraccion)(Objeto*);
public:
Hitbox &getHitbox();
Objeto(Sprite sprite_normal_, Sprite sprite_overworld_, Sprite sprite_overworld_highlight_, Hitbox colision_, int _x, int _y, int _w, int _h, State estado_):
Objeto(Sprite sprite_normal_, Sprite sprite_overworld_, Sprite sprite_overworld_highlight_, Hitbox colision_, int _x, int _y, int _w, int _h, State estado_, bool (*_funcionInteraccion)(Objeto*)):
sprite_normal(sprite_normal_), sprite_overworld(sprite_overworld_),
sprite_overworld_highlight(sprite_overworld_highlight_), colision(colision_), x(_x), y(_y), w(_w), h(_h), estado(estado_){}
sprite_overworld_highlight(sprite_overworld_highlight_), colision(colision_), x(_x), y(_y), w(_w), h(_h), estado(estado_), funcionInteraccion(_funcionInteraccion){}
void renderizar(SDL_Renderer *renderer, int tamx, int tamy);
......@@ -40,4 +41,6 @@ public:
void setY(int y) {
this->y = y;
}
bool interactuar();
};
......@@ -17,7 +17,7 @@ PantallaInicio::PantallaInicio() :
Hitbox hitIniciarPartida(1247,649,699,501);
Objeto IniciarPartida(sprIniciarPartida,sprIniciarPartida,sprIniciarPartida,hitIniciarPartida,650,500,600,200,normal);
Objeto IniciarPartida(sprIniciarPartida,sprIniciarPartida,sprIniciarPartida,hitIniciarPartida,650,500,600,200,normal,nullptr);
objetos.push_back(IniciarPartida);
......
......@@ -37,13 +37,14 @@ void PantallaMundo::comprobarColisionesActivas() {
}
void PantallaMundo::comprobarColisionesPasivas() {
bool checkColision=false;
int i=0;
while(!checkColision && i < objetos.size()){
checkColision |= Agapito.comprobarColisionPasiva(objetos[i].getHitbox());
while(!ojo_abierto && i < objetos.size()){
if(Agapito.comprobarColisionPasiva(objetos[i].getHitbox())){
indiceColision=i;
ojo_abierto=true;
}
i++;
}
ojo_abierto = checkColision;
}
void PantallaMundo::manejarEntrada(Handle &handle) {
......@@ -78,10 +79,9 @@ void PantallaMundo::manejarEntrada(Handle &handle) {
zRaton*=(1080.0/handle.getTamY());
cout<<"Raton x "<<xRaton<<" Raton z "<<zRaton<<endl;
if(colisionesInterfaz[0].colisiona(xRaton, zRaton) && ojo_abierto){
Agapito.inventario[Agapito.numObjetos]=objetos[0];
Agapito.numObjetos++;
objetos.pop_back();
play_video("assets/videoPrueba", "es");
if(objetos[indiceColision].interactuar()){
objetos.erase(objetos.begin()+indiceColision);
}
}
}
break;
......
......@@ -20,6 +20,8 @@ class PantallaMundo : public Pantalla {
bool ojo_abierto = false;
std::array<Sprite, 2> Ojo;
int indiceColision;
/// Colisiones al pulsar el ratón en la interfaz
std::array<Hitbox, 4> colisionesInterfaz;
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or sign in to comment