add players no full game

This commit is contained in:
serk 2017-01-21 05:33:17 +01:00
commit bee83068a4
11 changed files with 67 additions and 38 deletions

View file

@ -1,15 +1,18 @@
#include "actor.hpp"
Actor::Actor() {}
Actor::Actor(int num) {
this->character = new Character(num);
}
void Actor::draw(sf::RenderWindow *window) {
window->draw(character);
window->draw(*character);
}
bool Actor::update(float deltaTime, sf::RenderWindow *window) {
character.update(deltaTime);
character->update(deltaTime);
if (animate) {
character.setState(PlayerState::attacking);
character->setState(PlayerState::attacking);
animate = false;
}
return this->updateLogic(deltaTime, window);

View file

@ -7,6 +7,7 @@ class Actor
{
public:
Actor();
Actor(int num);
bool update(float deltaTime, sf::RenderWindow *window);
void draw(sf::RenderWindow *window) ;
virtual bool event(sf::Event e) = 0;
@ -14,7 +15,7 @@ protected:
bool animate;
virtual bool updateLogic(float deltaTime, sf::RenderWindow *window) = 0;
private:
Character character;
Character *character;
};
#endif // ENEMY_H

View file

@ -1,36 +1,34 @@
#include "character.hpp"
Character::Character(){
sf::Texture texture;
Character::Character(int player){
playerNum = player;
ASSERT(texture.loadFromFile(spriteFile));
height = texture.getSize().y;
width = texture.getSize().x;
next = 0;
height = texture.getSize().y/5;
width = texture.getSize().x/5;
next = timestamp = indexX = indexY = 0;
setTexture(texture);
sf::IntRect rect = sf::IntRect(indexX*width, indexY*height, width, height);
setTextureRect(rect);
actualState = previousState = PlayerState::idle;
if (playerNum == 0){
setPosition(posX1, posY1);
}
else{
setPosition(posX2, posY2);
}
}
void Character::update(float deltaTime){
timestamp += deltaTime;
if (timestamp >= frameTime){
timestamp = 0;
if (actualState == previousState){
if (actualState == PlayerState::idle){
indexX = (indexX+1)%numFrames;
}
else if (actualState == PlayerState::attacking){
if (indexX == width){
indexX = 0;
actualState = PlayerState::idle;
}
}
if (actualState == PlayerState::attacking and indexX >= 3){
setState(PlayerState::idle);
}
else {
indexX = 0;
if (actualState == PlayerState::idle)
actualState = PlayerState::attacking;
else if (actualState == PlayerState::attacking)
actualState = PlayerState::idle;
indexX = (indexX+1)%4;
}
sf::IntRect rect = sf::IntRect(indexX*width, indexY*height, width, height);
@ -38,3 +36,16 @@ void Character::update(float deltaTime){
}
}
void Character::setState(PlayerState::playerState state){
previousState = actualState;
actualState = state;
if (state == PlayerState::idle){
indexX = 0;
indexY = 0;
}
else{
indexX = 0;
indexY = 1;
}
}

View file

@ -8,16 +8,21 @@ private:
const double frameTime = 0.2;
const int numFrames = 4;
const std::string spriteFile = "./Resources/spreadsheet.png";
//POSICIO PLAYER 1
float posX1 = 0, posY1 = 0;
//POSICIO PLAYER 2
float posX2 = 300, posY2 = 0;
//END CONFIG
sf::Texture texture;
int indexX, indexY, width, height;
int posX, posY;
int playerNum;
PlayerState::playerState actualState, previousState;
float timestamp, next;
public:
Character();
Character(int player);
void update(float deltaTime);
void setState(PlayerState::playerState state);

View file

@ -2,15 +2,17 @@
Combat::Combat() {
ia = playerOneTurn = true;
enemy = new IaEnemy();
player = new Player(0);
enemy = new IaEnemy(1);
initShader();
}
Combat::Combat(bool ia) {
this->ia = ia;
player = new Player(0);
playerOneTurn = true;
if (ia) enemy = new IaEnemy();
else enemy = new Player();
if (ia) enemy = new IaEnemy(1);
else enemy = new Player(1);
}
void Combat::initShader() {
@ -22,19 +24,19 @@ void Combat::initShader() {
}
void Combat::update(float deltaTime, sf::RenderWindow *window) {
if (playerOneTurn) player.update(deltaTime, window);
else if (ia) playerOneTurn = enemy->update(deltaTime, window);
player->update(deltaTime, window);
enemy->update(deltaTime, window);
time += deltaTime;
_shader.setParameter("time", time);
}
void Combat::draw(sf::RenderWindow *window) {
player.draw(window);
player->draw(window);
enemy->draw(window);
window->draw(_background, &_shader);
}
void Combat::updateEvents(sf::Event e) {
if (playerOneTurn) playerOneTurn = player.event(e);
if (playerOneTurn) playerOneTurn = player->event(e);
else if (!ia) playerOneTurn = !enemy->event(e);
}

View file

@ -21,7 +21,7 @@ public:
void updateEvents(sf::Event e) final override;
private:
bool playerOneTurn, ia;
Player player;
Actor *player;
Actor *enemy;
float time;
sf::Texture _text;

View file

@ -1,7 +1,7 @@
#include "iaenemy.hpp"
IaEnemy::IaEnemy() {}
IaEnemy::IaEnemy() : Actor(1) {}
IaEnemy::IaEnemy(int numplayer): Actor(numplayer) {}
bool IaEnemy::updateLogic(float deltaTime, sf::RenderWindow *window) {
//some playe return true
return true;

View file

@ -6,6 +6,7 @@
class IaEnemy : public Actor {
public:
IaEnemy();
IaEnemy(int player);
bool event(sf::Event e) final override;
protected:
bool updateLogic(float deltaTime, sf::RenderWindow *window);

View file

@ -1,6 +1,11 @@
#include "player.hpp"
Player::Player() {
Player::Player(int num) : Actor(num) {
animate = false;
compas = Compas();
}
Player::Player() : Actor(1) {
animate = false;
compas = Compas();
}

View file

@ -7,6 +7,7 @@
class Player : public Actor {
public:
Player();
Player(int num);
bool event(sf::Event e) final override;
private:
Compas compas;