Commit 8e1513af by Tecnicos

Implementación básica de hitbox

parent 8a27233b
# 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
#include "Hitbox.h"
bool Hitbox::colisiona(int x, int y){
if(x>xSuperiorDer && x<xInferiorIzq && y>ySuperiorDer && y<yInferiorIzq){
return true;
}else return false;
}
\ No newline at end of file
class Hitbox{
int xSuperiorDer;
int xInferiorIzq;
int ySuperiorDer;
int yInferiorIzq;
bool colisiona(int x, int y);
Hitbox(int xSD, int xII, int ySD, int yII): xSuperiorDer(xSD), xInferiorIzq(xII), ySuperiorDer(ySD), yInferiorIzq(yII){}
int getxSuperiorDer(){return xSuperiorDer;}
int getySuperiorDer(){return ySuperiorDer;}
int getxInferiorIzq(){return xInferiorIzq;}
int getyInferiorIzq(){return yInferiorIzq;}
};
\ No newline at end of file
#include "Objeto.h"
Hitbox & Objeto::getHitbox(){
return colisiones;
}
void Objeto::renderizar(SDL_Renderer *renderer){
switch (Estado){
normal:
normal.renderizar(renderer, colision.getxSuperiorDer(), colision.getySuperiorDer(),
colision.getxInferiorIzq()-colision.getxSuperiorDer(),colision.getyInferiorIzq()-colision.getySuperiorDer());
break;
overworld:
overworld.renderizar(renderer, colision.getxSuperiorDer(), colision.getySuperiorDer(),
colision.getxInferiorIzq()-colision.getxSuperiorDer(),colision.getyInferiorIzq()-colision.getySuperiorDer());
break;
overworld_highlight:
overworld_highlight.renderizar(renderer, colision.getxSuperiorDer(), colision.getySuperiorDer(),
colision.getxInferiorIzq()-colision.getxSuperiorDer(),colision.getyInferiorIzq()-colision.getySuperiorDer());
break;
}
}
\ No newline at end of file
#include "Sprite.h"
#include "Hitbox.h"
enum State {
normal = 0,
overworld = 1,
overworld_highlight = 2
};
class Objeto {
Sprite normal;
Sprite overworld;
Sprite overworld_highlight;
Hitbox colision;
State estado=normal;
Hitbox &getHitbox();
Objeto(Sprite normal_, Sprite overworld_, Sprite overworld_highlight_, Hitbox colision_): normal(normal_), overworld(overworld_),
overworld_highlight(overworld_highlight_), colision(colision_){}
void renderizar(SDL_Renderer *renderer);
};
\ No newline at end of file
......@@ -53,4 +53,23 @@ void Personaje::renderizar(SDL_Renderer *renderer) {
}
movimientos[estado][indice_movimiento].renderizar(renderer, x, 100, profundidades, profundidades, true);
}
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;
}
}
}
\ No newline at end of file
......@@ -5,6 +5,7 @@
#include "Sprite.h"
#include "Objeto.h"
#include "Hitbox.h"
using namespace std;
......@@ -37,4 +38,6 @@ public:
void move(Facing direcion);
void renderizar(SDL_Renderer *renderer);
void comprobarColision (Hitbox *hitbox);
};
\ No newline at end of file
......@@ -4,6 +4,8 @@
#include <iostream>
#include "Sprite.h"
#include "Personaje.h"
#include "Objeto.h"
#include <vector>
void blit(SDL_Renderer *Renderer, SDL_Texture *Texture, SDL_Rect *Cut, int x, int y){
......@@ -64,9 +66,16 @@ int main(){
}
vector<*Objeto> objetos;
Sprite Fondo1("assets/fondoHabitacion.jpg");
Sprite Planta("assets/planta.png");
Sprite sprPlanta("assets/planta.png");
Hitbox hitPlanta(10,50,110,100);
Objeto Planta(sprPlanta,sprPlanta,sprPlanta,hitPlanta);
objetos.add(&Planta);
Personaje Agapito;
......@@ -89,6 +98,9 @@ int main(){
Agapito.move(Frente);
break;
}
for(int i=0;i<objetos.size();i++){
Agapito.comprobarColision(objetos[i]->getColision());
}
break;
case SDL_QUIT:
exit(0);
......@@ -98,7 +110,9 @@ int main(){
printf("Buclee\n");
Fondo1.renderizar(Renderer, 0, 0, 1920, 1080);
Planta.renderizar(Renderer, 10, 100, 50, 50);
for(int i=0;i<objetos.size();i++){
objetos[i]->renderizar(Renderer);
}
Agapito.renderizar(Renderer);
cambiar_buffers(Renderer);
SDL_Delay(5);
......
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