Mano implementada lo que ha costado nano

parent 16f8e819
No preview for this file type
......@@ -18,7 +18,7 @@ class Historia{
};
private:
Secuencia estadoActual=PreInicio;
Secuencia estadoActual=CajaAbierta;
void limpiarEstado();
void siguienteEstado(Secuencia estado);
......
#include "Mano.h"
#include <string.h>
Mano::Mano() : manos(array<Sprite, 4> {
Sprite("assets/manoAbajo.png"),
Sprite("assets/manoDerecha.png"),
Sprite("assets/manoIzquierda.png"),
Sprite("assets/manoArriba.png"),
}) ,
brazos(array<Sprite, 4> {
Sprite("assets/brazoAbajo.png"),
Sprite("assets/brazoDerecha.png"),
Sprite("assets/brazoIzquierda.png"),
Sprite("assets/brazoArriba.png"),
})
{
}
void Mano::move(Facing direction) {
this->estado = direction;
std::cout<<" move la mano antes Se mueve a " << x << " "<<profundidades<<endl;
cola.push_back(Cola(brazos[estado],x,profundidades));
switch (estado) {
case Frente:
profundidades += 210;
break;
case Derecha:
x += 220;
break;
case Izquierda:
x -= 220;
break;
case Fondo:
profundidades -= 210;
break;
}
cout<<" move la mano despues Se mueve a " << x << " "<<profundidades<<endl;
}
void Mano::renderizar(SDL_Renderer *renderer, int tamx, int tamy) {
cout<<" Renderizar mano Se mueve a " << x << " "<<profundidades<<endl;
manos[estado].renderizar(renderer, x, profundidades, 170, 170, tamx, tamy);
}
void Mano::renderizar_cola(SDL_Renderer *renderer, int tamx, int tamy) {
for (int i = 0; i < cola.size(); i++) {
cola[i].getSprite().renderizar(renderer,cola[i].getX(),cola[i].getProfundidades(),170,170,tamx,tamy);
}
}
void Mano::comprobarColision(Hitbox &hitbox){
if(hitbox.colisiona(x, profundidades)){
cout<<"Esta colisionando la mano"<<endl;
cola.pop_back();
switch (estado) {
case Frente:
profundidades -= 210;
break;
case Derecha:
x -= 220;
break;
case Izquierda:
x += 220;
break;
case Fondo:
profundidades += 210;
break;
}
}
}
bool Mano::comprobarColisionPasiva(Hitbox &hitbox){
if(hitbox.colisiona(x,profundidades)){
return true;
}else return false;
}
void Mano::reiniciar(){
estado=Fondo;
x=870;
profundidades=650;
cola.clear();
}
#pragma once
#include <array>
#include <optional>
#include <SDL2/SDL.h>
#include <chrono>
#include "Sprite.h"
#include "Objeto.h"
#include "Hitbox.h"
#include "Sonido.h"
#include "Personaje.h"
using namespace std;
typedef std::chrono::time_point<std::chrono::system_clock> Instant;
class Mano {
class Cola{
public:
Sprite sprite;
int x;
int profundidades;
Cola(Sprite spr, int _x, int _prof): sprite(spr),x(_x),profundidades(_prof){}
Sprite getSprite(){return sprite;}
int getX(){return x;}
int getProfundidades(){return profundidades;}
};
array<Sprite, 4> manos;
array<Sprite, 4> brazos;
vector<Cola> cola;
Instant momento_ultimo_movimiento = std::chrono::system_clock::now();
Facing estado = Fondo;
int x = 870;
int profundidades = 650;
public:
Mano();
void move(Facing direcion);
void renderizar(SDL_Renderer *renderer, int tamx, int tamy);
void renderizar_cola(SDL_Renderer *renderer, int tamx, int tamy);
void comprobarColision (Hitbox &hitbox);
bool comprobarColisionPasiva (Hitbox &hitbox);
void setX(int x) {
this->x = x;
};
void setZ(int z) {
this->profundidades = z;
};
void reiniciar();
};
......@@ -24,24 +24,60 @@ PantallaCama::PantallaCama() :
hitObs{
Hitbox(500,300,300,200)
},
hitCartera(0,0,0,0),
cancion("assets/LonesomeJourneyByKeysOfMoonMusic.wav",true),
sonidoBoton("assets/SonidoClicar.wav",false)
{
}
void PantallaCama::comprobarColisionesActivas() {
for(int i=0;i<hitObs.size();i++){
mano.comprobarColision(hitObs[i]);
}
for(int i=0;i<colisionesParedes.size();i++){
mano.comprobarColision(colisionesParedes[i]);
}
}
void PantallaCama::comprobarColisionesPasivas() {
if(mano.comprobarColisionPasiva(hitCartera)){
carteraTocada=true;
}
}
void PantallaCama::manejarEntrada(Handle &handle) {
SDL_Event event;
while (SDL_PollEvent(&event)) {
switch (event.type) {
case SDL_KEYDOWN:
switch (event.key.keysym.sym) {
case 13:
break;
}
switch (event.key.keysym.sym) {
case SDLK_LEFT:
if(movimiento)mano.move(Izquierda);
movimiento=false;
break;
case SDLK_RIGHT:
if(movimiento)mano.move(Derecha);
movimiento=false;
break;
case SDLK_UP:
if(movimiento) mano.move(Fondo);
movimiento=false;
break;
case SDLK_DOWN:
if(movimiento)mano.move(Frente);
movimiento=false;
break;
};
comprobarColisionesActivas();
comprobarColisionesPasivas();
break;
case SDL_KEYUP:
movimiento=true;
break;
case SDL_MOUSEBUTTONDOWN:
{
int xRaton=0;
......@@ -53,8 +89,14 @@ void PantallaCama::manejarEntrada(Handle &handle) {
if(atras.colisionaObjeto(xRaton,zRaton)){
sonidoBoton.play();
cancion.pausar();
movimiento=true;
handle.removeme();
}
else if(reiniciar.colisionaObjeto(xRaton,zRaton)){
mano.reiniciar();
movimiento=true;
}
}
break;
......@@ -79,6 +121,8 @@ void PantallaCama::renderizar(SDL_Renderer *renderer, int tamx, int tamy) {
obstaculos[5].renderizar(renderer,870,440,170,170,tamx,tamy);
obstaculos[6].renderizar(renderer,1090,440,170,170,tamx,tamy);
obstaculos[7].renderizar(renderer,1090,250,170,170,tamx,tamy);
mano.renderizar(renderer,tamx,tamy);
mano.renderizar_cola(renderer,tamx,tamy);
atras.renderizar(renderer,tamx,tamy);
......
......@@ -7,11 +7,13 @@
#include "Texto.h"
#include "Fuente.h"
#include "Sonido.h"
#include "Mano.h"
class PantallaCama : public Pantalla {
vector<Sprite> obstaculos;
Sprite cartera;
Hitbox hitCartera;
vector<Hitbox> hitObs;
vector<Hitbox> colisionesParedes;
Objeto atras;
......@@ -20,6 +22,9 @@ class PantallaCama : public Pantalla {
Sprite Fondo1;
Sonido cancion;
Sonido sonidoBoton;
Mano mano;
bool carteraTocada=false;
bool movimiento=true;
......@@ -33,4 +38,8 @@ public:
bool transparente() override {
return false;
};
void comprobarColisionesPasivas();
void comprobarColisionesActivas();
};
......@@ -17,7 +17,7 @@ public:
Sprite(const Sprite &other);
void renderizar(SDL_Renderer *Renderer, int x, int y, int w, int h, int tamx, int tamy,bool centrar = false);
std::string getCamino(){return camino;}
~Sprite();
};
......
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 PantallaMundo.cpp Sonido.cpp Historia.cpp PantallaFecha.cpp PantallaCama.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 Sonido.cpp Historia.cpp PantallaFecha.cpp PantallaCama.cpp Mano.cpp
bin = Executable
......
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