Interacción con los objetos del inventario

parent f86bfd35
No preview for this file type
...@@ -34,11 +34,11 @@ static Objeto generarObjetoCalendario() { ...@@ -34,11 +34,11 @@ static Objeto generarObjetoCalendario() {
return Calendario; return Calendario;
} }
static Objeto generarObjectoCartera(bool (*function)(Objeto *, Handle&)) { static Objeto generarObjetoCartera(bool (*funcion)(Objeto *, Handle&)) {
Sprite sprCartera("assets/cartera.png"); Sprite sprCartera("assets/cartera.png");
Hitbox hitCartera(0, 0, 0, 0); // Trivial, solo esta en el inventario Hitbox hitCartera(0, 0, 0, 0); // Trivial, solo esta en el inventario
Objeto Cartera(sprCartera, sprCartera, sprCartera, hitCartera, 400, 150, 150, 250, normal, nullptr); Objeto Cartera(sprCartera, sprCartera, sprCartera, hitCartera, 400, 150, 150, 250, normal, funcion);
return Cartera; return Cartera;
} }
...@@ -54,6 +54,16 @@ static Objeto generarObjetoPuerta() { ...@@ -54,6 +54,16 @@ static Objeto generarObjetoPuerta() {
return Puerta; return Puerta;
} }
static Objeto generarObjetoCarne() {
Sprite sprCarne("assets/carne.png");
Hitbox hitCarne(0, 0, 0, 0); // Trivial, solo esta en el inventario
Objeto Carne(sprCarne, sprCarne, sprCarne, hitCarne, 400, 150, 150, 250, normal, nullptr);
return Carne;
}
static void iniciarInicio() { static void iniciarInicio() {
play_video("assets/Encerrado", "es"); play_video("assets/Encerrado", "es");
auto funcionPantalla=[](Objeto *Pantalla, Handle &handle)->bool{ auto funcionPantalla=[](Objeto *Pantalla, Handle &handle)->bool{
...@@ -73,6 +83,9 @@ static void iniciarInicio() { ...@@ -73,6 +83,9 @@ static void iniciarInicio() {
getPantalla1()->anadirObjeto(Pantalla); getPantalla1()->anadirObjeto(Pantalla);
getPantalla1()->anadirObjeto(Calendario); getPantalla1()->anadirObjeto(Calendario);
getPantalla2()->anadirObjeto(Puerta); getPantalla2()->anadirObjeto(Puerta);
Agapito.inventario[0] = generarObjetoCartera(nullptr);
Agapito.numObjetos = 1;
} }
...@@ -105,6 +118,8 @@ static void iniciarCalendarioVisto(){ ...@@ -105,6 +118,8 @@ static void iniciarCalendarioVisto(){
getPantalla1()->anadirHook(funcionComprobarPantallaMinimizada); getPantalla1()->anadirHook(funcionComprobarPantallaMinimizada);
Agapito.inventario[0] = generarObjetoCartera(nullptr);
Agapito.numObjetos = 1;
} }
...@@ -124,6 +139,14 @@ static void iniciarCalendarioQuitado(){ ...@@ -124,6 +139,14 @@ static void iniciarCalendarioQuitado(){
getPantalla2()->anadirObjeto(Puerta); getPantalla2()->anadirObjeto(Puerta);
auto funcionCartera=[](Objeto *Pantalla, Handle &handle) -> bool {
getPantallaFecha()->setTieneCarne(true);
Agapito.inventario[0] = generarObjetoCarne();
return false;
};
Agapito.inventario[0] = generarObjetoCartera(funcionCartera);
Agapito.numObjetos = 1;
} }
static void iniciarPuzlePantallaResuelto(){ static void iniciarPuzlePantallaResuelto(){
......
...@@ -20,10 +20,13 @@ void Objeto::renderizar(SDL_Renderer *renderer, int tamx, int tamy){ ...@@ -20,10 +20,13 @@ void Objeto::renderizar(SDL_Renderer *renderer, int tamx, int tamy){
} }
bool Objeto::interactuar(Handle& handle){ bool Objeto::interactuar(Handle& handle){
return funcionInteraccion(this, handle); if (funcionInteraccion != nullptr) {
return funcionInteraccion(this, handle);
}
return false;
} }
bool Objeto::colisionaObjeto(int x, int z){ bool Objeto::colisionaObjeto(int x, int z){
return colision.colisiona(x,z); return colision.colisiona(x,z);
} }
\ No newline at end of file
...@@ -19,7 +19,7 @@ class PantallaFecha : public Pantalla { ...@@ -19,7 +19,7 @@ class PantallaFecha : public Pantalla {
Sprite Fondo1; Sprite Fondo1;
int combinacionActual[4]; int combinacionActual[4];
int combinacionBuena[4]; int combinacionBuena[4];
bool AgapitoTieneCarne; bool AgapitoTieneCarne = false;
...@@ -33,4 +33,8 @@ public: ...@@ -33,4 +33,8 @@ public:
bool transparente() override { bool transparente() override {
return false; return false;
}; };
};
\ No newline at end of file void setTieneCarne(bool tieneCarne) {
AgapitoTieneCarne = tieneCarne;
}
};
...@@ -16,10 +16,10 @@ PantallaMundo::PantallaMundo(const char *fondo, Hitbox colisionCambioPantalla, s ...@@ -16,10 +16,10 @@ PantallaMundo::PantallaMundo(const char *fondo, Hitbox colisionCambioPantalla, s
Sprite("assets/ojoCerrado.png") Sprite("assets/ojoCerrado.png")
}), }),
colisionesInterfaz({ colisionesInterfaz({
Hitbox(1630,1248,997,839), Hitbox(1630, 1248, 997, 839),
Hitbox(1630,1248,997,839), Hitbox( 320, 80, 1050, 900),
Hitbox(1630,1248,997,839), Hitbox( 666, 415, 1050, 900),
Hitbox(1630,1248,997,839) Hitbox(1015, 780, 1050, 900)
}), }),
posicion_inicio_personaje(posicionInicioPersonaje) posicion_inicio_personaje(posicionInicioPersonaje)
{}; {};
...@@ -79,11 +79,22 @@ void PantallaMundo::manejarEntrada(Handle &handle) { ...@@ -79,11 +79,22 @@ void PantallaMundo::manejarEntrada(Handle &handle) {
xRaton*=(1920.0/handle.getTamX()); xRaton*=(1920.0/handle.getTamX());
zRaton*=(1080.0/handle.getTamY()); zRaton*=(1080.0/handle.getTamY());
cout<<"Raton x "<<xRaton<<" Raton z "<<zRaton<<endl; cout<<"Raton x "<<xRaton<<" Raton z "<<zRaton<<endl;
// Activar el ojo si esta abierto
if(colisionesInterfaz[0].colisiona(xRaton, zRaton) && ojo_abierto){ if(colisionesInterfaz[0].colisiona(xRaton, zRaton) && ojo_abierto){
// Se llama a la funcion de interacion del objeto
if(objetos[indiceColision].interactuar(handle)){ if(objetos[indiceColision].interactuar(handle)){
// Si devuelve true se elimina
objetos.erase(objetos.begin()+indiceColision); objetos.erase(objetos.begin()+indiceColision);
} }
} }
// Colisiones con los objetos del inventario
for (int i = 0; i < Agapito.numObjetos; i++) {
if (colisionesInterfaz[i + 1].colisiona(xRaton, zRaton)) {
Agapito.inventario[i]->interactuar(handle);
}
}
} }
break; break;
case SDL_QUIT: case SDL_QUIT:
......
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