Empieza Agapito 3d

parent 8cb838ca
File mode changed
#include "Sprite.h"
class Objeto {
Sprite normal;
Sprite overworld;
Sprite overworld_highlight;
};
\ No newline at end of file
#include "Personaje.h"
#include <string.h>
array<array<Sprite, 2>, 4> sprites_constantes = {
Sprite("assets/agapito_idle_delante.png"), Sprite("assets/agapito_mov_delante.png"),
Sprite("assets/agapito_idle_der.png"), Sprite("assets/agapito_mov_der.png"),
Sprite("assets/agapito_idle_izq.png"), Sprite("assets/agapito_mov_izq.png"),
Sprite("assets/agapito_idle_detras.png"), Sprite("assets/agapito_mov_detras.png")
};
Personaje::Personaje() : movimientos(sprites_constantes) {
}
void Personaje::move(Facing direction) {
auto now = std::chrono::system_clock::now();
auto tiempo_desde_ultimo_movimiento = now.time_since_epoch() - momento_ultimo_movimiento.time_since_epoch();
auto milis = std::chrono::duration_cast<std::chrono::milliseconds>(tiempo_desde_ultimo_movimiento);
if (milis.count() > 100 || this->estado != direction) {
indice_movimiento = (indice_movimiento + 1) % movimientos[this->estado].size();
momento_ultimo_movimiento = now;
}
this->estado = direction;
switch (estado) {
case Frente:
profundidades += 5;
break;
case Derecha:
x += 10;
break;
case Izquierda:
x -= 10;
break;
case Fondo:
profundidades -= 5;
break;
}
}
void Personaje::renderizar(SDL_Renderer *renderer) {
auto now = std::chrono::system_clock::now();
auto tiempo_desde_ultimo_movimiento = now.time_since_epoch() - momento_ultimo_movimiento.time_since_epoch();
auto milis = std::chrono::duration_cast<std::chrono::milliseconds>(tiempo_desde_ultimo_movimiento);
if (milis.count() > 1000) {
indice_movimiento = 0;
}
movimientos[estado][indice_movimiento].renderizar(renderer, x, 100, profundidades, profundidades, true);
}
\ No newline at end of file
#include <array>
#include <optional>
#include <SDL2/SDL.h>
#include <chrono>
#include "Sprite.h"
#include "Objeto.h"
using namespace std;
enum Facing {
Frente = 0,
Derecha = 1,
Izquierda = 2,
Fondo = 3,
};
typedef std::chrono::time_point<std::chrono::system_clock> Instant;
class Personaje {
array<optional<Objeto>, 3> inventario;
array<array<Sprite, 2>, 4> movimientos;
Instant momento_ultimo_movimiento = std::chrono::system_clock::now();
Facing estado = Frente;
int indice_movimiento = 0;
int x = 100;
int profundidades = 100;
public:
Personaje();
void move(Facing direcion);
void renderizar(SDL_Renderer *renderer);
};
\ No newline at end of file
#include "Sprite.h"
#include "SDL2/SDL_image.h"
Sprite::Sprite(std::string camino) : camino(camino) {
}
SDL_Texture *Sprite::get_textura(SDL_Renderer *Renderer) {
if (this->texture == nullptr) {
this->texture = IMG_LoadTexture(Renderer, camino.c_str());
if (texture == nullptr) {
printf("IMG_TEXTURE devuelve nulo lol\n");
}
}
return texture;
}
void Sprite::renderizar(SDL_Renderer *Renderer, int x, int y, int w, int h, bool centrar) {
printf("RENDER TEXTURA %s\n", camino.c_str());
texture = get_textura(Renderer);
SDL_Rect Dest;
Dest.x = x;
Dest.y = y;
Dest.w = w;
Dest.h = h;
if (centrar) {
SDL_Rect TamTextura;
SDL_QueryTexture(texture, NULL, NULL, &TamTextura.w, &TamTextura.h);
int delta_w = w - TamTextura.w;
int delta_h = h - TamTextura.h;
Dest.x -= delta_w / 2;
Dest.y -= delta_h / 2;
}
SDL_RenderCopy(Renderer, texture, nullptr, &Dest);
}
Sprite::~Sprite() {
SDL_DestroyTexture(this->texture);
}
\ No newline at end of file
#ifndef SPRITE_H
#define SPRITE_H
#include <string>
#include <optional>
#include <SDL2/SDL.h>
class Sprite {
std::string camino;
SDL_Texture *texture = nullptr;
SDL_Texture *get_textura(SDL_Renderer *Renderer);
public:
Sprite(std::string camino);
void renderizar(SDL_Renderer *Renderer, int x, int y, int w, int h, bool centrar = false);
~Sprite();
};
#endif // SPRITE_H
\ No newline at end of file
No preview for this file type
No preview for this file type
No preview for this file type
#include <SDL2/SDL.h>
#include "SDL2/SDL_image.h"
#include "SDL2/SDL_ttf.h"
#include <iostream>
#include "Sprite.h"
#include "Personaje.h"
void blit(SDL_Renderer *Renderer, SDL_Texture *Texture, SDL_Rect *Cut, int x, int y){
SDL_Rect Dest;
Dest.x = x;
Dest.y = y;
SDL_QueryTexture(Texture, NULL, NULL, &Dest.w, &Dest.h);
SDL_RenderCopy(Renderer, Texture, Cut, &Dest);
}
void cambiar_buffers(SDL_Renderer *renderer) {
SDL_RenderPresent(renderer);
}
int main(){
if(SDL_Init(SDL_INIT_VIDEO) < 0){
std::cout << "Error at SDL_Init(SDL_INIT_VIDEO)"<<std::endl;
std::cout << "Error: " << SDL_GetError() << std::endl;
return -1;
}
if(IMG_Init(IMG_INIT_PNG) < 0){
std::cout << "Error at IMG_Init(IMG_INIT_PNG);"<<std::endl;
std::cout << "Error: " << SDL_GetError() << std::endl;
return -1;
}
SDL_Window *Window = SDL_CreateWindow(
"SDL2 Window",
SDL_WINDOWPOS_CENTERED,SDL_WINDOWPOS_CENTERED,
1920,1080,
0
);
if(!Window){
std::cout << "Error creating window" << std::endl;
std::cout << "Error: " << SDL_GetError() << std::endl;
return -1;
}
SDL_Renderer *Renderer = SDL_CreateRenderer(Window, -1, SDL_RENDERER_ACCELERATED);
if(!Renderer){
std::cout << "Error creating renderer" << std::endl;
std::cout << "Error: " << SDL_GetError() << std::endl;
return -1;
}
Sprite Fondo1("assets/fondoHabitacion.jpg");
Sprite Planta("assets/planta.png");
Personaje Agapito;
SDL_Event event;
while (true) {
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;
}
break;
case SDL_QUIT:
exit(0);
}
printf("Pito\n");
}
printf("Buclee\n");
Fondo1.renderizar(Renderer, 0, 0, 1920, 1080);
Planta.renderizar(Renderer, 10, 100, 50, 50);
Agapito.renderizar(Renderer);
cambiar_buffers(Renderer);
SDL_Delay(5);
}
return 0;
}
CC = g++
CodeFiles = main.cpp Personaje.cpp Sprite.cpp
Executable: $(CodeFiles)
$(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