Texture implementation
This commit is contained in:
parent
a0ed188138
commit
fc35d1c9a5
|
@ -1,2 +1,4 @@
|
||||||
*.swp
|
*.swp
|
||||||
*.o
|
*.o
|
||||||
|
*.swo
|
||||||
|
*.swn
|
||||||
|
|
13
Makefile
13
Makefile
|
@ -1,23 +1,23 @@
|
||||||
#-*- Makefile -*-
|
#-*- Makefile -*-
|
||||||
|
|
||||||
OBJS = main.o player.o dt.o block.o entity.o camera.o
|
OBJS = main.o player.o dt.o block.o entity.o camera.o texture.o
|
||||||
|
|
||||||
CC = g++
|
CC = g++
|
||||||
|
|
||||||
COMPILER_FLAGS = -w
|
COMPILER_FLAGS = -w
|
||||||
|
|
||||||
LINKER_FLAGS = -lSDL2 -std=gnu++11 -lSDL2_image
|
LINKER_FLAGS = -lSDL2_image -lSDL2 -std=gnu++11
|
||||||
|
|
||||||
OBJ_NAME = bin/main
|
OBJ_NAME = main
|
||||||
|
|
||||||
|
|
||||||
all: $(OBJS)
|
all: $(OBJS)
|
||||||
$(CC) $(OBJS) $(COMPLER_FLAGS) $(LINKER_FLAGS) -o $(OBJ_NAME)
|
$(CC) $(OBJS) $(COMPLER_FLAGS) $(LINKER_FLAGS) -o $(OBJ_NAME)
|
||||||
|
|
||||||
main.o: main.cpp
|
main.o: main.cpp texture.o
|
||||||
$(CC) -c main.cpp $(LINKER_FLAGS)
|
$(CC) -c main.cpp $(LINKER_FLAGS)
|
||||||
|
|
||||||
player.o: player.cpp player.h entity.o
|
player.o: player.cpp player.h entity.o texture.o
|
||||||
$(CC) -c player.cpp -lm $(LINKER_FLAGS)
|
$(CC) -c player.cpp -lm $(LINKER_FLAGS)
|
||||||
|
|
||||||
dt.o: dt.cpp dt.h
|
dt.o: dt.cpp dt.h
|
||||||
|
@ -31,3 +31,6 @@ entity.o: entity.cpp entity.h
|
||||||
|
|
||||||
camera.o: camera.cpp camera.h
|
camera.o: camera.cpp camera.h
|
||||||
$(CC) -c camera.cpp
|
$(CC) -c camera.cpp
|
||||||
|
|
||||||
|
texture.o: texture.cpp texture.h
|
||||||
|
$(CC) -c -lSDL2_image texture.cpp
|
||||||
|
|
6
main.cpp
6
main.cpp
|
@ -2,7 +2,6 @@
|
||||||
|
|
||||||
#include<iostream>
|
#include<iostream>
|
||||||
#include<SDL2/SDL.h>
|
#include<SDL2/SDL.h>
|
||||||
//#include<SDL2/SDL_image.h>
|
|
||||||
#include"player.h"
|
#include"player.h"
|
||||||
#include"block.h"
|
#include"block.h"
|
||||||
#include"camera.h"
|
#include"camera.h"
|
||||||
|
@ -28,7 +27,6 @@ bool loadMedia(){
|
||||||
|
|
||||||
void init(){
|
void init(){
|
||||||
SDL_Init(SDL_INIT_VIDEO);
|
SDL_Init(SDL_INIT_VIDEO);
|
||||||
//IMG_Init(IMG_INIT_JPG);
|
|
||||||
gWindow = SDL_CreateWindow("Platform Test!",SDL_WINDOWPOS_CENTERED,SDL_WINDOWPOS_CENTERED,SCREEN_WIDTH,SCREEN_HEIGHT,SDL_WINDOW_SHOWN);
|
gWindow = SDL_CreateWindow("Platform Test!",SDL_WINDOWPOS_CENTERED,SDL_WINDOWPOS_CENTERED,SCREEN_WIDTH,SCREEN_HEIGHT,SDL_WINDOW_SHOWN);
|
||||||
gRenderer = SDL_CreateRenderer(gWindow,-1,SDL_RENDERER_ACCELERATED | SDL_RENDERER_PRESENTVSYNC);
|
gRenderer = SDL_CreateRenderer(gWindow,-1,SDL_RENDERER_ACCELERATED | SDL_RENDERER_PRESENTVSYNC);
|
||||||
SDL_SetRenderDrawColor(gRenderer,0xFF,0xFF,0xFF,0xFF);
|
SDL_SetRenderDrawColor(gRenderer,0xFF,0xFF,0xFF,0xFF);
|
||||||
|
@ -40,7 +38,6 @@ void close(){
|
||||||
gWindow = NULL;
|
gWindow = NULL;
|
||||||
gRenderer = NULL;
|
gRenderer = NULL;
|
||||||
|
|
||||||
//IMG_Quit();
|
|
||||||
SDL_Quit();
|
SDL_Quit();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -68,13 +65,12 @@ int main(int argc, char* args[]){
|
||||||
quit = true;
|
quit = true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
SDL_SetRenderDrawColor(gRenderer,0,0,0,0xFF);
|
SDL_SetRenderDrawColor(gRenderer,0,0,100,0xFF);
|
||||||
SDL_RenderClear(gRenderer);
|
SDL_RenderClear(gRenderer);
|
||||||
|
|
||||||
camera.update(posweg.getRectangle().x,posweg.getRectangle().y);
|
camera.update(posweg.getRectangle().x,posweg.getRectangle().y);
|
||||||
|
|
||||||
posweg.print(camera.getPosX());
|
posweg.print(camera.getPosX());
|
||||||
std::cout << posweg.getRectangle().x << std::endl;
|
|
||||||
|
|
||||||
wallA.print(camera.getPosX());
|
wallA.print(camera.getPosX());
|
||||||
wallB.print(camera.getPosX());
|
wallB.print(camera.getPosX());
|
||||||
|
|
46
player.cpp
46
player.cpp
|
@ -8,7 +8,10 @@ void Player::print(int cameraX){
|
||||||
cameraFix.x -= cameraX;
|
cameraFix.x -= cameraX;
|
||||||
|
|
||||||
SDL_SetRenderDrawColor(*renderer,0xFF,0,0,0xFF);
|
SDL_SetRenderDrawColor(*renderer,0xFF,0,0,0xFF);
|
||||||
SDL_RenderFillRect(*renderer, &cameraFix);
|
ply.render(&cameraFix,currentFrame,renderer);
|
||||||
|
if(ifRunning)ply.render(&cameraFix,&plyFrame[5],renderer);
|
||||||
|
|
||||||
|
currentFrame = &plyFrame[0];
|
||||||
|
|
||||||
oldPosX = posX;
|
oldPosX = posX;
|
||||||
oldPosY = posY;
|
oldPosY = posY;
|
||||||
|
@ -25,7 +28,35 @@ void Player::init(int x,int y, int w, int h, SDL_Renderer** render){
|
||||||
renderer = render;
|
renderer = render;
|
||||||
|
|
||||||
oldPosX = posX;
|
oldPosX = posX;
|
||||||
oldPosY = posY; };
|
oldPosY = posY;
|
||||||
|
|
||||||
|
loadMedia();
|
||||||
|
|
||||||
|
currentFrame = &plyFrame[0];
|
||||||
|
};
|
||||||
|
|
||||||
|
bool Player::loadMedia(){
|
||||||
|
bool success = true;
|
||||||
|
|
||||||
|
if(!ply.loadTexture("textures/player.png",renderer)){
|
||||||
|
std::cout << "Failed to load ply texture" << std::endl;
|
||||||
|
success = false;
|
||||||
|
}
|
||||||
|
else{
|
||||||
|
int frame = 0;
|
||||||
|
for(int row = 0;row < 2;row++){
|
||||||
|
for(int column = 0;column < 3;column++){
|
||||||
|
plyFrame[frame].w=szW;
|
||||||
|
plyFrame[frame].h=szH;
|
||||||
|
plyFrame[frame].x=szW*column;
|
||||||
|
plyFrame[frame].y=szH*row;
|
||||||
|
frame++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return success;
|
||||||
|
}
|
||||||
|
|
||||||
int Player::intVelX(){
|
int Player::intVelX(){
|
||||||
return static_cast<int>(velocityX);
|
return static_cast<int>(velocityX);
|
||||||
|
@ -42,6 +73,7 @@ void Player::move(){
|
||||||
int dur = 4; //Divide transition time
|
int dur = 4; //Divide transition time
|
||||||
int speed = 200; //Horizontal movement speed
|
int speed = 200; //Horizontal movement speed
|
||||||
float run = 1.5; //Running speed multiplication
|
float run = 1.5; //Running speed multiplication
|
||||||
|
ifRunning = false;
|
||||||
//static bool isRunning = false;
|
//static bool isRunning = false;
|
||||||
|
|
||||||
int gravity = 800; //Gravity force
|
int gravity = 800; //Gravity force
|
||||||
|
@ -50,7 +82,9 @@ void Player::move(){
|
||||||
//Check keyboard current state
|
//Check keyboard current state
|
||||||
if(currentKeyStates[SDL_SCANCODE_LEFT]) direction += -1;
|
if(currentKeyStates[SDL_SCANCODE_LEFT]) direction += -1;
|
||||||
if(currentKeyStates[SDL_SCANCODE_RIGHT]) direction += 1;
|
if(currentKeyStates[SDL_SCANCODE_RIGHT]) direction += 1;
|
||||||
if(!currentKeyStates[SDL_SCANCODE_LSHIFT] and !isRunning) run = 1;
|
if(!currentKeyStates[SDL_SCANCODE_LSHIFT] and !isRunning){
|
||||||
|
run = 1;
|
||||||
|
}
|
||||||
if(run!=1) dur /= 1;
|
if(run!=1) dur /= 1;
|
||||||
|
|
||||||
//Set velocity
|
//Set velocity
|
||||||
|
@ -87,6 +121,8 @@ void Player::move(){
|
||||||
if(isRunning == false) run = 1;
|
if(isRunning == false) run = 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if(run!=1) ifRunning = true;
|
||||||
|
|
||||||
//Get the position and update the velY with gravity
|
//Get the position and update the velY with gravity
|
||||||
velocityY -= gravity * dt;
|
velocityY -= gravity * dt;
|
||||||
float x = velocityX * dt * run;
|
float x = velocityX * dt * run;
|
||||||
|
@ -163,11 +199,13 @@ int Player::check(SDL_Rect rectA){
|
||||||
ground = true;
|
ground = true;
|
||||||
collision = 2;
|
collision = 2;
|
||||||
velocityY = 0;
|
velocityY = 0;
|
||||||
|
currentFrame = &plyFrame[1];
|
||||||
}
|
}
|
||||||
//Bottom collision
|
//Bottom collision
|
||||||
else if(posY == b2Y){
|
else if(posY == b2Y){
|
||||||
collision = 3;
|
collision = 3;
|
||||||
topCollision = true;
|
topCollision = true;
|
||||||
|
currentFrame = &plyFrame[3];
|
||||||
if(velocityY > 0)
|
if(velocityY > 0)
|
||||||
velocityY -= static_cast<int>(velocityY);
|
velocityY -= static_cast<int>(velocityY);
|
||||||
}
|
}
|
||||||
|
@ -178,12 +216,14 @@ int Player::check(SDL_Rect rectA){
|
||||||
//Left collision
|
//Left collision
|
||||||
if(posX + szW == bX){
|
if(posX + szW == bX){
|
||||||
collision = 4;
|
collision = 4;
|
||||||
|
currentFrame = &plyFrame[2];
|
||||||
if(velocityX > 0)
|
if(velocityX > 0)
|
||||||
velocityX -= static_cast<int>(velocityX);
|
velocityX -= static_cast<int>(velocityX);
|
||||||
}
|
}
|
||||||
//Right collision
|
//Right collision
|
||||||
else if(posX == b2X){
|
else if(posX == b2X){
|
||||||
collision = 5;
|
collision = 5;
|
||||||
|
currentFrame = &plyFrame[4];
|
||||||
if(velocityX < 0)
|
if(velocityX < 0)
|
||||||
velocityX -= static_cast<int>(velocityX);
|
velocityX -= static_cast<int>(velocityX);
|
||||||
}
|
}
|
||||||
|
|
11
player.h
11
player.h
|
@ -5,9 +5,10 @@
|
||||||
|
|
||||||
#include<SDL2/SDL.h>
|
#include<SDL2/SDL.h>
|
||||||
#include<iostream>
|
#include<iostream>
|
||||||
|
#include<cmath>
|
||||||
#include"dt.h"
|
#include"dt.h"
|
||||||
#include"entity.h"
|
#include"entity.h"
|
||||||
#include<cmath>
|
#include"texture.h"
|
||||||
|
|
||||||
class Entity;
|
class Entity;
|
||||||
|
|
||||||
|
@ -16,9 +17,9 @@ class Player: public Entity{
|
||||||
void print(int cameraX);
|
void print(int cameraX);
|
||||||
int check(SDL_Rect rectB);
|
int check(SDL_Rect rectB);
|
||||||
void init(int x, int y,int w, int h,SDL_Renderer** render);
|
void init(int x, int y,int w, int h,SDL_Renderer** render);
|
||||||
//SDL_Rect getRectangle();
|
|
||||||
private:
|
private:
|
||||||
int* coll;
|
int* coll;
|
||||||
|
bool loadMedia();
|
||||||
void move();
|
void move();
|
||||||
int intVelX();
|
int intVelX();
|
||||||
SDL_Renderer** renderer;
|
SDL_Renderer** renderer;
|
||||||
|
@ -29,7 +30,13 @@ class Player: public Entity{
|
||||||
float velocityX = 0;
|
float velocityX = 0;
|
||||||
float velocityY = 0;
|
float velocityY = 0;
|
||||||
bool isRunning = false;
|
bool isRunning = false;
|
||||||
|
bool ifRunning = false;
|
||||||
int oldPosX, oldPosY;
|
int oldPosX, oldPosY;
|
||||||
|
|
||||||
|
PosuTexture ply;
|
||||||
|
SDL_Rect* currentFrame;
|
||||||
|
const static int plyNum = 6;
|
||||||
|
SDL_Rect plyFrame[plyNum];
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -0,0 +1,75 @@
|
||||||
|
#include"texture.h"
|
||||||
|
|
||||||
|
PosuTexture::PosuTexture(){
|
||||||
|
//Initialize variables
|
||||||
|
texture = NULL;
|
||||||
|
szW = 0;
|
||||||
|
szH = 0;
|
||||||
|
|
||||||
|
IMG_Init(IMG_INIT_JPG);
|
||||||
|
//Set renderer
|
||||||
|
}
|
||||||
|
|
||||||
|
PosuTexture::~PosuTexture(){
|
||||||
|
//Deallocate
|
||||||
|
free();
|
||||||
|
}
|
||||||
|
|
||||||
|
bool PosuTexture::loadTexture(std::string path,SDL_Renderer** renderer){
|
||||||
|
//Get rid of preexisting texture
|
||||||
|
free();
|
||||||
|
|
||||||
|
//Load image at specified path
|
||||||
|
SDL_Surface* loadedSurface = IMG_Load( path.c_str() );
|
||||||
|
|
||||||
|
if(loadedSurface == NULL)
|
||||||
|
std::cout << "Couldn't load " << path.c_str() << std::endl;
|
||||||
|
else{
|
||||||
|
//Create texture from surface pixels
|
||||||
|
texture = SDL_CreateTextureFromSurface
|
||||||
|
(*renderer,loadedSurface);
|
||||||
|
|
||||||
|
if(texture == NULL){
|
||||||
|
std::cout << "Couldn't to create texture from "
|
||||||
|
<< path.c_str() << std::endl;
|
||||||
|
}
|
||||||
|
else{
|
||||||
|
//Get image dimensions
|
||||||
|
szW = loadedSurface->w;
|
||||||
|
szH = loadedSurface->h;
|
||||||
|
}
|
||||||
|
//Get rid of old loaded surface
|
||||||
|
SDL_FreeSurface(loadedSurface);
|
||||||
|
}
|
||||||
|
|
||||||
|
return texture != NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
void PosuTexture::free(){
|
||||||
|
//Free texture if it exists
|
||||||
|
if(texture != NULL){
|
||||||
|
SDL_DestroyTexture(texture);
|
||||||
|
texture = NULL;
|
||||||
|
szW = 0;
|
||||||
|
szH = 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void PosuTexture::render(SDL_Rect* quad,SDL_Rect* frame,SDL_Renderer** renderer){
|
||||||
|
//Set clip rendering dimensions
|
||||||
|
/*if(frame != NULL){
|
||||||
|
quad.w = frame->w;
|
||||||
|
quad.h = frame->h;
|
||||||
|
}*/
|
||||||
|
|
||||||
|
//Render to screen
|
||||||
|
SDL_RenderCopy(*renderer,texture,frame,quad);
|
||||||
|
}
|
||||||
|
|
||||||
|
int PosuTexture::getWidth(){
|
||||||
|
return szW;
|
||||||
|
}
|
||||||
|
|
||||||
|
int PosuTexture::getHeight(){
|
||||||
|
return szH;
|
||||||
|
}
|
|
@ -0,0 +1,25 @@
|
||||||
|
//Texture management class header
|
||||||
|
|
||||||
|
#ifndef __TEXTURE_H_INCLUDED__
|
||||||
|
#define __TEXTURE_H_INCLUDED__
|
||||||
|
|
||||||
|
#include<SDL2/SDL.h>
|
||||||
|
#include<SDL2/SDL_image.h>
|
||||||
|
#include<iostream>
|
||||||
|
#include<string>
|
||||||
|
|
||||||
|
class PosuTexture{
|
||||||
|
public:
|
||||||
|
PosuTexture();
|
||||||
|
~PosuTexture();
|
||||||
|
bool loadTexture(std::string path,SDL_Renderer** renderer);
|
||||||
|
void free();
|
||||||
|
void render(SDL_Rect* quad,SDL_Rect* frame,SDL_Renderer** renderer);
|
||||||
|
int getWidth();
|
||||||
|
int getHeight();
|
||||||
|
private:
|
||||||
|
SDL_Texture* texture;
|
||||||
|
int szW, szH;
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif
|
Binary file not shown.
After Width: | Height: | Size: 38 KiB |
Loading…
Reference in New Issue