Commit 9ce0ea72 by José Pardo Madera

Merge branch 'Develop' into Texto_feature_branch

Momento historico
parents 66c892ba 91f6f6a5
# Default ignored files
/shelf/
/workspace.xml
# Editor-based HTTP Client requests
/httpRequests/
# Datasource local storage ignored files
/dataSources/
/dataSources.local.xml
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="ExternalStorageConfigurationManager" enabled="true" />
<component name="MakefileSettings">
<option name="linkedExternalProjectsSettings">
<MakefileProjectSettings>
<option name="externalProjectPath" value="$PROJECT_DIR$" />
<option name="version" value="2" />
</MakefileProjectSettings>
</option>
</component>
<component name="MakefileWorkspace" PROJECT_DIR="$PROJECT_DIR$" />
</project>
\ No newline at end of file
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="VcsDirectoryMappings">
<mapping directory="" vcs="Git" />
</component>
</project>
\ No newline at end of file
{
"configurations": [
{
"name": "Win32",
"includePath": [
"${workspaceFolder}/**",
"${vcpkgRoot}/x64-windows/include"
],
"defines": [
"_DEBUG",
"UNICODE",
"_UNICODE"
],
"windowsSdkVersion": "10.0.22621.0",
"compilerPath": "cl.exe",
"cStandard": "c17",
"cppStandard": "c++17",
"intelliSenseMode": "windows-msvc-x64"
}
],
"version": 4
}
\ No newline at end of file
No preview for this file type
#include "Hitbox.h"
bool Hitbox::colisiona(int x, int z){
if(x<=xMaximo && x>=xMinimo && z<=zMaximo && z>=zMinimo){
std::cout<<"Esta colisionando";
return true;
}else return false;
}
\ No newline at end of file
#ifndef HITBOX_H
#define HITBOX_H
#include <iostream>
class Hitbox{
public:
int xMaximo;
int xMinimo;
int zMaximo;
int zMinimo;
bool colisiona(int x, int z);
Hitbox(int xS, int xI, int zS, int zI): xMaximo(xS), xMinimo(xI), zMaximo(zS), zMinimo(zI){}
};
#endif // HITBOX_H
#include "Objeto.h"
Hitbox & Objeto::getHitbox(){
return colision;
}
void Objeto::renderizar(SDL_Renderer *renderer, int tamx, int tamy){
std::cout<<estado<<std::endl;
switch (estado){
case normal:
sprite_normal.renderizar(renderer,x,y,w,h, tamx, tamy);
break;
case overworld:
sprite_overworld.renderizar(renderer,x,y,w,h, tamx, tamy);
break;
case overworld_highlight:
sprite_overworld_highlight.renderizar(renderer,x,y,w,h, tamx, tamy);
break;
}
}
#pragma once
#include "Sprite.h" #include "Sprite.h"
#include "Hitbox.h"
#include <iostream>
enum State {
normal = 0,
overworld = 1,
overworld_highlight = 2
};
class Objeto { class Objeto {
Sprite normal; Sprite sprite_normal;
Sprite overworld; Sprite sprite_overworld;
Sprite overworld_highlight; Sprite sprite_overworld_highlight;
}; Hitbox colision;
\ No newline at end of file State estado=normal;
int x;
int y;
int w;
int h;
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_):
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_){}
void renderizar(SDL_Renderer *renderer, int tamx, int tamy);
};
...@@ -41,7 +41,7 @@ void Personaje::move(Facing direction) { ...@@ -41,7 +41,7 @@ void Personaje::move(Facing direction) {
} }
} }
void Personaje::renderizar(SDL_Renderer *renderer) { void Personaje::renderizar(SDL_Renderer *renderer, int tamx, int tamy) {
auto now = std::chrono::system_clock::now(); auto now = std::chrono::system_clock::now();
auto tiempo_desde_ultimo_movimiento = now.time_since_epoch() - momento_ultimo_movimiento.time_since_epoch(); auto tiempo_desde_ultimo_movimiento = now.time_since_epoch() - momento_ultimo_movimiento.time_since_epoch();
...@@ -52,5 +52,24 @@ void Personaje::renderizar(SDL_Renderer *renderer) { ...@@ -52,5 +52,24 @@ void Personaje::renderizar(SDL_Renderer *renderer) {
indice_movimiento = 0; indice_movimiento = 0;
} }
movimientos[estado][indice_movimiento].renderizar(renderer, x, 100, profundidades, profundidades, true); movimientos[estado][indice_movimiento].renderizar(renderer, x, 100, profundidades, profundidades, tamx, tamy, true);
} }
\ No newline at end of file
void Personaje::comprobarColision(Hitbox &hitbox){
if(hitbox.colisiona(x, profundidades)){
switch (estado) {
case Frente:
profundidades -= 5;
break;
case Derecha:
x -= 10;
break;
case Izquierda:
x += 10;
break;
case Fondo:
profundidades += 5;
break;
}
}
}
...@@ -5,6 +5,7 @@ ...@@ -5,6 +5,7 @@
#include "Sprite.h" #include "Sprite.h"
#include "Objeto.h" #include "Objeto.h"
#include "Hitbox.h"
using namespace std; using namespace std;
...@@ -27,14 +28,16 @@ class Personaje { ...@@ -27,14 +28,16 @@ class Personaje {
Facing estado = Frente; Facing estado = Frente;
int indice_movimiento = 0; int indice_movimiento = 0;
int x = 100;
int profundidades = 100;
public: public:
int x = 100;
int profundidades = 100;
Personaje(); Personaje();
void move(Facing direcion); void move(Facing direcion);
void renderizar(SDL_Renderer *renderer); void renderizar(SDL_Renderer *renderer, int tamx, int tamy);
};
\ No newline at end of file void comprobarColision (Hitbox &hitbox);
};
...@@ -16,15 +16,15 @@ SDL_Texture *Sprite::get_textura(SDL_Renderer *Renderer) { ...@@ -16,15 +16,15 @@ SDL_Texture *Sprite::get_textura(SDL_Renderer *Renderer) {
return texture; return texture;
} }
void Sprite::renderizar(SDL_Renderer *Renderer, int x, int y, int w, int h, bool centrar) { void Sprite::renderizar(SDL_Renderer *Renderer, int x, int y, int w, int h,int tamx, int tamy, bool centrar) {
printf("RENDER TEXTURA %s\n", camino.c_str()); printf("RENDER TEXTURA %s\n", camino.c_str());
texture = get_textura(Renderer); texture = get_textura(Renderer);
SDL_Rect Dest; SDL_Rect Dest;
Dest.x = x; Dest.x = x;
Dest.y = y; Dest.y = y;
Dest.w = w; Dest.w = w;
Dest.h = h; Dest.h = h;
...@@ -41,10 +41,15 @@ void Sprite::renderizar(SDL_Renderer *Renderer, int x, int y, int w, int h, bool ...@@ -41,10 +41,15 @@ void Sprite::renderizar(SDL_Renderer *Renderer, int x, int y, int w, int h, bool
Dest.y -= delta_h / 2; Dest.y -= delta_h / 2;
} }
Dest.x *= (tamx/1920.0);
Dest.y *= (tamy/1080.0);
Dest.w *= (tamx/1920.0);
Dest.h *= (tamy/1080.0);
SDL_RenderCopy(Renderer, texture, nullptr, &Dest); SDL_RenderCopy(Renderer, texture, nullptr, &Dest);
} }
Sprite::~Sprite() { Sprite::~Sprite() {
SDL_DestroyTexture(this->texture); SDL_DestroyTexture(this->texture);
} }
\ No newline at end of file
...@@ -14,7 +14,7 @@ class Sprite { ...@@ -14,7 +14,7 @@ class Sprite {
public: public:
Sprite(std::string camino); Sprite(std::string camino);
void renderizar(SDL_Renderer *Renderer, int x, int y, int w, int h, bool centrar = false); void renderizar(SDL_Renderer *Renderer, int x, int y, int w, int h, int tamx, int tamy,bool centrar = false);
~Sprite(); ~Sprite();
}; };
......
...@@ -7,16 +7,18 @@ SDL_Texture *Texto::get_textura(SDL_Renderer *renderer) { ...@@ -7,16 +7,18 @@ SDL_Texture *Texto::get_textura(SDL_Renderer *renderer) {
return texture; return texture;
} }
void Texto::renderizar(SDL_Renderer *renderer, int x, int y) { void Texto::renderizar(SDL_Renderer *renderer, int x, int y, int tamx, int tamy) {
texture = get_textura(renderer); texture = get_textura(renderer);
SDL_Rect dest; SDL_Rect dest;
dest.x = x;
dest.y = y;
SDL_QueryTexture(texture, nullptr, nullptr, &dest.w, &dest.h); SDL_QueryTexture(texture, nullptr, nullptr, &dest.w, &dest.h);
dest.x = x * (tamx / 1920.0);
dest.y = y - (tamy / 1080.0);
dest.w *= (tamx / 1920.0);
dest.h *= (tamy / 1080.0);
SDL_RenderCopy(renderer, texture, nullptr, &dest); SDL_RenderCopy(renderer, texture, nullptr, &dest);
} }
...@@ -17,7 +17,7 @@ public: ...@@ -17,7 +17,7 @@ public:
surface = TTF_RenderUTF8_Solid(*fuente, texto, fg); surface = TTF_RenderUTF8_Solid(*fuente, texto, fg);
}; };
void renderizar(SDL_Renderer *Renderer, int x, int y); void renderizar(SDL_Renderer *Renderer, int x, int y, int tamx, int tamy);
~Texto() { ~Texto() {
SDL_FreeSurface(surface); SDL_FreeSurface(surface);
......
#include <SDL2/SDL.h> #include <SDL2/SDL.h>
#include "SDL2/SDL_image.h" #include "SDL2/SDL_image.h"
#include "SDL2/SDL_ttf.h" #include "SDL2/SDL_ttf.h"
#include <SDL2/SDL_video.h>
#include <iostream> #include <iostream>
#include "Sprite.h" #include "Sprite.h"
#include "Texto.h" #include "Texto.h"
#include "Fuente.h" #include "Fuente.h"
#include "Personaje.h" #include "Personaje.h"
#include "Objeto.h"
#include <vector>
void blit(SDL_Renderer *Renderer, SDL_Texture *Texture, SDL_Rect *Cut, int x, int y){ void blit(SDL_Renderer *Renderer, SDL_Texture *Texture, SDL_Rect *Cut, int x, int y){
...@@ -27,6 +30,9 @@ void cambiar_buffers(SDL_Renderer *renderer) { ...@@ -27,6 +30,9 @@ void cambiar_buffers(SDL_Renderer *renderer) {
int main(){ int main(){
int tamx=0;
int tamy=0;
if(SDL_Init(SDL_INIT_VIDEO) < 0){ if(SDL_Init(SDL_INIT_VIDEO) < 0){
std::cout << "Error at SDL_Init(SDL_INIT_VIDEO)"<<std::endl; std::cout << "Error at SDL_Init(SDL_INIT_VIDEO)"<<std::endl;
...@@ -54,6 +60,9 @@ int main(){ ...@@ -54,6 +60,9 @@ int main(){
0 0
); );
//SDL_SetWindowFullscreen(Window,SDL_WINDOW_FULLSCREEN_DESKTOP);
SDL_SetWindowResizable(Window, SDL_TRUE);
if(!Window){ if(!Window){
std::cout << "Error creating window" << std::endl; std::cout << "Error creating window" << std::endl;
...@@ -72,16 +81,31 @@ int main(){ ...@@ -72,16 +81,31 @@ int main(){
} }
vector<Objeto*> objetos;
vector<Hitbox*> colisiones;
Fuente opensans("assets/OpenSans-Italic.ttf", 100); Fuente opensans("assets/OpenSans-Italic.ttf", 100);
Texto texto(opensans, "AGAPITO 3D", {255, 255, 255}); Texto texto(opensans, "AGAPITO 3D", {255, 255, 255});
Sprite Fondo1("assets/fondoHabitacion.jpg"); Sprite Fondo1("assets/fondoHabitacion.jpg");
Sprite Planta("assets/planta.png"); Sprite sprPlanta("assets/planta.png");
Hitbox hitPlanta(350,80,450,120);
Hitbox hitCama(10,50,300,300);
Hitbox hitFondo(1000000,-10000000,50,0);
Objeto Planta(sprPlanta,sprPlanta,sprPlanta,hitPlanta,1200,400,300,400, normal);
objetos.push_back(&Planta);
colisiones.push_back(&hitPlanta);
colisiones.push_back(&hitCama);
colisiones.push_back(&hitFondo);
Personaje Agapito; Personaje Agapito;
SDL_Event event; SDL_Event event;
while (true) { while (true) {
SDL_GetWindowSize(Window,&tamx,&tamy);
while (SDL_PollEvent(&event)) { while (SDL_PollEvent(&event)) {
switch (event.type) { switch (event.type) {
case SDL_KEYDOWN: case SDL_KEYDOWN:
...@@ -99,18 +123,24 @@ int main(){ ...@@ -99,18 +123,24 @@ int main(){
Agapito.move(Frente); Agapito.move(Frente);
break; break;
} }
for(int i=0;i<colisiones.size();i++){
Agapito.comprobarColision(*colisiones[i]);
}
break; break;
case SDL_QUIT: case SDL_QUIT:
exit(0); exit(0);
} }
printf("Pito\n");
} }
printf("Buclee\n");
Fondo1.renderizar(Renderer, 0, 0, 1920, 1080); std::cout<<"Dimensiones "<<tamx<<tamy<<endl;
Planta.renderizar(Renderer, 10, 100, 50, 50); Fondo1.renderizar(Renderer, 0, 0,1920,1080, tamx, tamy);
Agapito.renderizar(Renderer); for(int i=0;i<objetos.size();i++){
texto.renderizar(Renderer, 50, 50); objetos[i]->renderizar(Renderer, tamx, tamy);
}
Agapito.renderizar(Renderer, tamx, tamy);
texto.renderizar(Renderer, 50, 50, tamx, tamy);
cambiar_buffers(Renderer); cambiar_buffers(Renderer);
SDL_Delay(5); SDL_Delay(5);
} }
......
CC = g++ CC = g++
CodeFiles = main.cpp Personaje.cpp Sprite.cpp Texto.cpp HeaderFiles = Personaje.h Sprite.h Objeto.h Hitbox.h Texto.h
CodeFiles = main.cpp Personaje.cpp Sprite.cpp Objeto.cpp Hitbox.cpp Texto.cpp
Executable: $(CodeFiles) Executable: $(CodeFiles) $(HeaderFiles)
$(CC) $(CodeFiles) -w -lSDL2 -lSDL2_image -lSDL2_ttf -o Executable $(CC) $(CodeFiles) -w -lSDL2 -lSDL2_image -lSDL2_ttf -o 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