Commit 1cbd5419 by Jaime de la Chica Bergillos

El gran merge

parents 4acaccbe 81d1e59e
#include "ColeccionPantallas.h"
#include "Personaje.h"
#include "PantallaPrincipal.h"
#include "PantallaPrincipal2.h"
#include "PantallaInicio.h"
Personaje Agapito;
PantallaPrincipal pant;
PantallaPrincipal2 pant2;
PantallaInicio pant3;
vector<shared_ptr<Pantalla>> colPantallas={make_shared<PantallaPrincipal>(pant),make_shared<PantallaPrincipal2>(pant2),
make_shared<PantallaInicio>(pant3)};
vector<shared_ptr<Pantalla>> colPantallas={
make_shared<PantallaPrincipal>(pant),
make_shared<PantallaPrincipal2>(pant2),
make_shared<PantallaInicio>(pant3)
};
#pragma once
#include <vector>
#include <memory>
#include "Personaje.h"
#include "GestorPantallas.h"
using namespace std;
extern vector<shared_ptr<Pantalla>> colPantallas;
\ No newline at end of file
extern Personaje Agapito;
extern vector<shared_ptr<Pantalla>> colPantallas;
No preview for this file type
......@@ -2,10 +2,12 @@
#include <SDL2/SDL_render.h>
void Handle::reemplazamePor(shared_ptr<Pantalla> pant){
pant->init();
gestor.pantallas[idPantalla] =pant;
}
void Handle::addPantalla(shared_ptr<Pantalla> pant){
pant->init();
gestor.pantallas.push_back(pant);
}
......
......@@ -49,6 +49,10 @@ class Pantalla{
virtual void manejarEntrada(Handle &) = 0;
virtual void renderizar(SDL_Renderer*, int tamx, int tamy) = 0;
virtual bool transparente() = 0;
/// Se llama cuando se introduce a la pila
virtual void init() {};
virtual ~Pantalla() {};
};
#include "PantallaPrincipal.h"
#include "PantallaPrincipal2.h"
#include "ColeccionPantallas.h"
#include "Video.h"
PantallaMundo::PantallaMundo(const char *fondo, Hitbox colisionCambioPantalla, size_t siguientePantalla, std::array<int, 2> posicionInicioPersonaje) :
Fondo1(fondo),
colisionCambioPantalla(colisionCambioPantalla),
siguientePantalla(siguientePantalla),
fuente1("assets/OpenSans-Italic.ttf", 100),
interfaz("assets/InterfazPrincipal.png"),
Ojo({
Sprite("assets/ojoAbierto.png"),
Sprite("assets/ojoCerrado.png")
}),
colisionesInterfaz({
Hitbox(1630,1248,997,839),
Hitbox(1630,1248,997,839),
Hitbox(1630,1248,997,839),
Hitbox(1630,1248,997,839)
}),
posicion_inicio_personaje(posicionInicioPersonaje)
{};
void PantallaMundo::comprobarColisionSiguientePantalla(Handle &handle) {
if(Agapito.comprobarColisionPasiva(colisionCambioPantalla)){
handle.reemplazamePor(colPantallas[siguientePantalla]);
}
}
void PantallaMundo::comprobarColisionesActivas() {
for(int i=0;i<colisionesActivas.size();i++){
Agapito.comprobarColision(colisionesActivas[i]);
}
}
void PantallaMundo::comprobarColisionesPasivas() {
bool checkColision=false;
int i=0;
while(!checkColision && i < objetos.size()){
checkColision |= Agapito.comprobarColisionPasiva(objetos[i].getHitbox());
i++;
}
ojo_abierto = checkColision;
}
void PantallaMundo::manejarEntrada(Handle &handle) {
SDL_Event event;
while (SDL_PollEvent(&event)) {
switch (event.type) {
case SDL_KEYDOWN:
switch (event.key.keysym.sym) {
case SDLK_LEFT:
Agapito.move(Izquierda);
break;
case SDLK_RIGHT:
Agapito.move(Derecha);
break;
case SDLK_UP:
Agapito.move(Fondo);
break;
case SDLK_DOWN:
Agapito.move(Frente);
break;
};
comprobarColisionSiguientePantalla(handle);
comprobarColisionesActivas();
comprobarColisionesPasivas();
break;
case SDL_MOUSEBUTTONDOWN:
{
int xRaton=0;
int zRaton=0;
SDL_GetMouseState(&xRaton, &zRaton);
xRaton*=(1920.0/handle.getTamX());
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");
}
}
break;
case SDL_QUIT:
handle.removeAll();
}
}
}
void PantallaMundo::renderizar(SDL_Renderer *renderer, int tamx, int tamy) {
Texto texto(fuente1, "AGAPITO 3D", {255, 255, 255});
Fondo1.renderizar(renderer, 0, 0,1920,1080, tamx, tamy);
Agapito.renderizar(renderer, tamx, tamy);
interfaz.renderizar(renderer, 0, 870, 1920, 216, tamx, tamy);
Ojo[ojo_abierto ? 0 : 1].renderizar(renderer, 1300, 890, 400, 170, tamx, tamy);
for(int i=0;i<objetos.size();i++){
objetos[i].renderizar(renderer, tamx, tamy);
}
Agapito.renderizar_inventario(renderer, tamx, tamy);
texto.renderizar(renderer, 50, 50, tamx, tamy);
}
void PantallaMundo::init() {
Agapito.setX(posicion_inicio_personaje[0]);
Agapito.setZ(posicion_inicio_personaje[1]);
}
#pragma once
#include "GestorPantallas.h"
#include <vector>
#include "Objeto.h"
#include "Sprite.h"
#include "Texto.h"
#include "Fuente.h"
#include "Personaje.h"
class PantallaMundo : public Pantalla {
Fuente fuente1;
Sprite Fondo1;
Hitbox colisionCambioPantalla;
size_t siguientePantalla;
Sprite interfaz;
bool ojo_abierto = false;
std::array<Sprite, 2> Ojo;
/// Colisiones al pulsar el ratón en la interfaz
std::array<Hitbox, 4> colisionesInterfaz;
void comprobarColisionSiguientePantalla(Handle &);
void comprobarColisionesActivas();
void comprobarColisionesPasivas();
std::array<int, 2> posicion_inicio_personaje;
protected:
vector<Objeto> objetos;
vector<Hitbox> colisionesActivas;
PantallaMundo(
const char *fondo,
Hitbox colisionCambioPantalla,
size_t siguientePantalla,
std::array<int, 2> posInicioPersonaje
);
public:
void manejarEntrada(Handle &) override;
void renderizar(SDL_Renderer *, int tamx, int tamy) override;
void init() override;
bool transparente() override {
return false;
};
};
......@@ -5,43 +5,24 @@
PantallaPrincipal::PantallaPrincipal() :
fuente1("assets/OpenSans-Italic.ttf", 100),
Fondo1("assets/fondoHabitacion.jpg"),
colisionCambioPantalla(1500,-1500,2000,1300)
PantallaMundo(
"assets/fondoHabitacion.jpg",
Hitbox(1500,-1500,2000,1300),
1,
{300, 1000}
)
{
Sprite sprPlanta("assets/planta.png");
Sprite sprInterfaz("assets/InterfazPrincipal.png");
Sprite sprOjoAbierto("assets/ojoAbierto.png");
Sprite sprOjoCerrado("assets/ojoCerrado.png");
Hitbox hitPlanta(900,700,1200,-1000000000);
Hitbox hitInterfaz(1920,0,900,700);
Hitbox hitOjo(1630,1248,997,839);
Objeto Ojo(sprOjoCerrado,sprOjoAbierto,sprOjoAbierto,hitOjo,1300,890,400,170,normal);
Objeto Planta(sprPlanta,sprPlanta,sprPlanta,hitPlanta,1200,400,300,400, normal);
Objeto Interfaz(sprInterfaz,sprInterfaz,sprInterfaz,hitInterfaz,0,870,1920,216,normal);
Hitbox hitFondo(1000000,-10000000,300,0);
//Hitbox hitCama(1000, 0, 1200,-10000000);
Hitbox hitDer(1000, 800, 10000000,-10000000);
Hitbox hitIzq(300, 0, 10000000,-10000000);
objetos.push_back(Interfaz);
indice_ojo = objetos.size();
objetos.push_back(Ojo);
objetos.push_back(Planta);
colisionesPasivas.push_back(hitPlanta);
colisionesInterfaz.push_back(hitOjo);
colisionesActivas.push_back(hitFondo);
colisionesActivas.push_back(hitIzq);
colisionesActivas.push_back(hitDer);
......@@ -49,79 +30,4 @@ PantallaPrincipal::PantallaPrincipal() :
}
void PantallaPrincipal::manejarEntrada(Handle &handle) {
SDL_Event event;
while (SDL_PollEvent(&event)) {
switch (event.type) {
case SDL_KEYDOWN:
switch (event.key.keysym.sym) {
case SDLK_LEFT:
Agapito.move(Izquierda);
break;
case SDLK_RIGHT:
Agapito.move(Derecha);
break;
case SDLK_UP:
Agapito.move(Fondo);
break;
case SDLK_DOWN:
Agapito.move(Frente);
break;
}
if(Agapito.comprobarColisionPasiva(colisionCambioPantalla)){
PantallaPrincipal2 pant;
handle.reemplazamePor(colPantallas[1]);
}
for(int i=0;i<colisionesActivas.size();i++){
Agapito.comprobarColision(colisionesActivas[i]);
}
{
bool checkColision=false;
int i=0;
while(!checkColision && i<colisionesPasivas.size()){
checkColision |= Agapito.comprobarColisionPasiva(colisionesPasivas[i]);
i++;
}
if(checkColision){
objetos[indice_ojo].setEstado(overworld);
}else objetos[indice_ojo].setEstado(normal);
}
break;
case SDL_MOUSEBUTTONDOWN:
{
int xRaton=0;
int zRaton=0;
SDL_GetMouseState(&xRaton, &zRaton);
xRaton*=(1920.0/handle.getTamX());
zRaton*=(1080.0/handle.getTamY());
cout<<"Raton x "<<xRaton<<" Raton z "<<zRaton<<endl;
if(colisionesInterfaz[0].colisiona(xRaton, zRaton) && objetos[indice_ojo].getEstado()==overworld){
Agapito.inventario[Agapito.numObjetos]=objetos[2];
Agapito.numObjetos++;
objetos.pop_back();
play_video("assets/videoPrueba", "es");
}
}
break;
case SDL_QUIT:
handle.removeAll();
}
}
}
void PantallaPrincipal::renderizar(SDL_Renderer *renderer, int tamx, int tamy) {
Texto texto(fuente1, "AGAPITO 3D", {255, 255, 255});
Fondo1.renderizar(renderer, 0, 0,1920,1080, tamx, tamy);
Agapito.renderizar(renderer, tamx, tamy);
for(int i=0;i<objetos.size();i++){
objetos[i].renderizar(renderer, tamx, tamy);
}
Agapito.renderizar_inventario(renderer, tamx, tamy);
texto.renderizar(renderer, 50, 50, tamx, tamy);
}
#pragma once
#include "GestorPantallas.h"
#include <vector>
#include "Objeto.h"
#include "Sprite.h"
#include "Texto.h"
#include "Fuente.h"
#include "Personaje.h"
class PantallaPrincipal : public Pantalla {
vector<Objeto> objetos;
vector<Hitbox> colisionesActivas;
vector<Hitbox> colisionesPasivas;
vector<Hitbox> colisionesInterfaz;
Hitbox colisionCambioPantalla;
Fuente fuente1;
Sprite Fondo1;
Personaje Agapito;
int indice_ojo = 0;
#include "PantallaMundo.h"
class PantallaPrincipal : public PantallaMundo {
public:
PantallaPrincipal();
void manejarEntrada(Handle &) override;
void renderizar(SDL_Renderer *, int tamx, int tamy) override;
bool transparente() override {
return false;
};
};
#include "PantallaPrincipal2.h"
#include "PantallaPrincipal.h"
#include "ColeccionPantallas.h"
PantallaPrincipal2::PantallaPrincipal2() :
fuente1("assets/OpenSans-Italic.ttf", 100),
Fondo1("assets/fondoPuerta.jpg"),
colisionCambioPantalla(1500,-1500,2000,1300)
PantallaMundo(
"assets/fondoPuerta.jpg",
Hitbox(1500,-1500,2000,1300),
0,
{300, 1000}
)
{
Sprite sprInterfaz("assets/InterfazPrincipal.png");
Sprite sprOjoAbierto("assets/ojoAbierto.png");
Sprite sprOjoCerrado("assets/ojoCerrado.png");
Hitbox hitInterfaz(1920,0,900,700);
Hitbox hitOjo(1630,1248,997,839);
Objeto Ojo(sprOjoCerrado,sprOjoAbierto,sprOjoAbierto,hitOjo,1300,890,400,170,normal);
Objeto Interfaz(sprInterfaz,sprInterfaz,sprInterfaz,hitInterfaz,0,870,1920,216,normal);
objetos.push_back(Interfaz);
indice_ojo = objetos.size();
objetos.push_back(Ojo);
colisionesInterfaz.push_back(hitOjo);
}
void PantallaPrincipal2::manejarEntrada(Handle &handle) {
SDL_Event event;
while (SDL_PollEvent(&event)) {
switch (event.type) {
case SDL_KEYDOWN:
switch (event.key.keysym.sym) {
case SDLK_LEFT:
Agapito.move(Izquierda);
break;
case SDLK_RIGHT:
Agapito.move(Derecha);
break;
case SDLK_UP:
Agapito.move(Fondo);
break;
case SDLK_DOWN:
Agapito.move(Frente);
break;
}
if(Agapito.comprobarColisionPasiva(colisionCambioPantalla)){
handle.reemplazamePor(colPantallas[0]);
}
for(int i=0;i<colisionesActivas.size();i++){
Agapito.comprobarColision(colisionesActivas[i]);
}
{
bool checkColision=false;
int i=0;
while(!checkColision && i<colisionesPasivas.size()){
checkColision |= Agapito.comprobarColisionPasiva(colisionesPasivas[i]);
i++;
}
if(checkColision){
objetos[indice_ojo].setEstado(overworld);
}else objetos[indice_ojo].setEstado(normal);
}
break;
case SDL_MOUSEBUTTONDOWN:
{
int xRaton=0;
int zRaton=0;
SDL_GetMouseState(&xRaton, &zRaton);
xRaton*=(1920.0/handle.getTamX());
zRaton*=(1080.0/handle.getTamY());
cout<<"Raton x "<<xRaton<<" Raton z "<<zRaton<<endl;
if(colisionesInterfaz[0].colisiona(xRaton, zRaton) && objetos[indice_ojo].getEstado()==overworld){
Agapito.inventario[Agapito.numObjetos]=objetos[2];
objetos.pop_back();
}
}
break;
case SDL_QUIT:
handle.removeAll();
}
}
}
void PantallaPrincipal2::renderizar(SDL_Renderer *renderer, int tamx, int tamy) {
Texto texto(fuente1, "AGAPITO 3D", {255, 255, 255});
Fondo1.renderizar(renderer, 0, 0,1920,1080, tamx, tamy);
Agapito.renderizar(renderer, tamx, tamy);
for(int i=0;i<objetos.size();i++){
objetos[i].renderizar(renderer, tamx, tamy);
}
texto.renderizar(renderer, 50, 50, tamx, tamy);
}
#pragma once
#include "GestorPantallas.h"
#include <vector>
#include "Objeto.h"
#include "Sprite.h"
#include "Texto.h"
#include "Fuente.h"
#include "Personaje.h"
class PantallaPrincipal2 : public Pantalla {
vector<Objeto> objetos;
vector<Hitbox> colisionesActivas;
vector<Hitbox> colisionesPasivas;
vector<Hitbox> colisionesInterfaz;
Hitbox colisionCambioPantalla;
Fuente fuente1;
Sprite Fondo1;
Personaje Agapito;
int indice_ojo = 0;
#include "PantallaMundo.h"
class PantallaPrincipal2 : public PantallaMundo {
public:
PantallaPrincipal2();
void manejarEntrada(Handle &) override;
void renderizar(SDL_Renderer *, int tamx, int tamy) override;
bool transparente() override {
return false;
};
};
\ No newline at end of file
};
......@@ -30,7 +30,7 @@ class Personaje {
int indice_movimiento = 0;
int x = 400;
int x = 600;
int profundidades = 500;
......@@ -48,4 +48,12 @@ public:
void comprobarColision (Hitbox &hitbox);
bool comprobarColisionPasiva (Hitbox &hitbox);
void setX(int x) {
this->x = x;
};
void setZ(int z) {
this->profundidades = z;
};
};
#include "GestorPantallas.h"
#include "PantallaInicio.h"
#include "ColeccionPantallas.h"
#include <memory>
int main(){
GestorPantallas gestor(
colPantallas[2]
);
colPantallas[2]
);
gestor.mainLoop();
return 0;
......
CC = g++
CodeFiles = main.cpp Personaje.cpp Sprite.cpp Objeto.cpp Hitbox.cpp Texto.cpp GestorPantallas.cpp PantallaPrincipal.cpp PantallaPrincipal2.cpp ColeccionPantallas.cpp Video.cpp PantallaInicio.cpp
CodeFiles = main.cpp Personaje.cpp Sprite.cpp Objeto.cpp Hitbox.cpp Texto.cpp GestorPantallas.cpp PantallaPrincipal.cpp PantallaPrincipal2.cpp ColeccionPantallas.cpp Video.cpp PantallaInicio.cpp PantallaMundo.cpp
bin = Executable
objdir = obj
......
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