pseudo two player implemented

This commit is contained in:
serk 2017-01-21 09:56:00 +01:00
parent c9255d854d
commit 992568fe07
10 changed files with 86 additions and 30 deletions

39
Resources/shader.frag Normal file
View file

@ -0,0 +1,39 @@
uniform vec2 resolution;
uniform float time;
float rand(vec2 n) {
return fract(sin(dot(n, vec2(12.9898, 4.1414))) * 43758.5453);
}
float line(float p, float x, float glow) {
return 1. - pow(abs(p - x), glow);
}
float grid(vec2 uv) {
float glow = 0.05;
float c = line(uv.x, 0.25, glow) + line(uv.x, 0.75, glow)
+ line(uv.x, 0.5, glow)
+ line(uv.x, 0.25, glow) + line(uv.x, 1.0, glow)
+ line(uv.y, 0.25, glow) + line(uv.y, 0.75, glow)
+ line(uv.y, 0.5, glow)
+ line(uv.y, 0.25, glow) + line(uv.y, 1.0, glow);
return c;
}
void main(void) {
vec2 umuv = (gl_FragCoord.xy / resolution.xy - .5) * 2.;
vec2 uv = umuv;
float z = (abs(uv.y ) * .8 + 3.);
uv.y *= 3.;
uv /= z*0.25;
float clampfinite = abs(clamp(umuv.y, -1., 0.)) * pow(z, 1. / 10.);
uv.y += abs(time * 0.1);
float grain = (0.8 + 0.2 * rand(umuv + time));
vec4 color = vec4(255, 120, 153, 255) / 255.;
gl_FragColor = (grid(fract(uv))) * grain * color * clampfinite;
}

View file

@ -2,6 +2,7 @@
Actor::Actor() {}
Actor::Actor(int num) {
animate = true;
this->character = new Character(num);
}
@ -17,3 +18,12 @@ bool Actor::update(float deltaTime, sf::RenderWindow *window) {
}
return this->updateLogic(deltaTime, window);
}
void Actor::hitBy(Compas enemy) const {
if (enemy == compas) std::cout << "dodge" << std::endl;
else std::cout << "hit" << std::endl;
}
Compas Actor::getAttack() const {
return compas;
}

View file

@ -3,15 +3,20 @@
#include "commons.hpp"
#include "character.hpp"
#include "compas.hpp"
class Actor
{
public:
Actor();
Actor(int num);
bool update(float deltaTime, sf::RenderWindow *window);
void draw(sf::RenderWindow *window) ;
void draw(sf::RenderWindow *window);
void hitBy(Compas enemy) const;
Compas getAttack() const;
virtual bool event(sf::Event e) = 0;
protected:
Compas compas;
bool animate;
virtual bool updateLogic(float deltaTime, sf::RenderWindow *window) = 0;
private:

View file

@ -9,9 +9,9 @@ private:
const int numFrames = 4;
const std::string spriteFile = "./Resources/spreadsheet.png";
//POSICIO PLAYER 1
float posX1 = 0, posY1 = 0;
float posX1 = 0, posY1 = 250;
//POSICIO PLAYER 2
float posX2 = 300, posY2 = 0;
float posX2 = 500, posY2 = 250;
//END CONFIG
int magicNumber;

View file

@ -1,7 +1,8 @@
#include "combat.hpp"
Combat::Combat() {
ia = playerOneTurn = true;
ia = true;
attacking = playerOneTurn = true;
player = new Player(0);
enemy = new IaEnemy(1);
initShader();
@ -10,9 +11,10 @@ Combat::Combat() {
Combat::Combat(bool ia) {
this->ia = ia;
player = new Player(0);
playerOneTurn = true;
attacking = playerOneTurn = true;
if (ia) enemy = new IaEnemy(1);
else enemy = new Player(1);
initShader();
}
void Combat::initShader() {
@ -25,7 +27,8 @@ void Combat::initShader() {
void Combat::update(float deltaTime, sf::RenderWindow *window) {
player->update(deltaTime, window);
enemy->update(deltaTime, window);
bool aux = enemy->update(deltaTime, window);
if (ia) enemyManager(aux); //end of player two ia ritm
time += deltaTime;
_shader.setParameter("time", time);
}
@ -37,6 +40,24 @@ void Combat::draw(sf::RenderWindow *window) {
}
void Combat::updateEvents(sf::Event e) {
if (playerOneTurn) playerOneTurn = player->event(e);
else if (!ia) playerOneTurn = !enemy->event(e);
if (playerOneTurn) {
bool aux = player->event(e);
if (!aux) { //end of player one ritm
if (!attacking) player->hitBy(enemy->getAttack());
else playerOneTurn = aux;
attacking = !attacking;
}
}
else if (!ia) {
bool aux = !enemy->event(e);
enemyManager(aux); //end of player two not ia ritm
}
}
void Combat::enemyManager(bool aux) {
if (aux) {
if (!attacking) enemy->hitBy(player->getAttack());
else playerOneTurn = aux;
attacking = !attacking;
}
}

View file

@ -20,7 +20,7 @@ public:
void draw(sf::RenderWindow *window) final override;
void updateEvents(sf::Event e) final override;
private:
bool playerOneTurn, ia;
bool playerOneTurn, ia, attacking;
Actor *player;
Actor *enemy;
float time;
@ -29,7 +29,7 @@ private:
sf::Shader _shader;
void initShader();
void enemyManager(bool aux);
};
#endif // COMBAT_H

View file

@ -14,7 +14,7 @@ class Menu : public Scene{
void draw(sf::RenderWindow *window) final override;
void updateEvents(sf::Event e) final override;
private:
Button _start = Button("./Resources/exit-spreadsheet.png");
Button _start = Button("./Resources/play-spreadsheet.png");
Button _exit = Button("./Resources/exit-spreadsheet.png");
std::vector<Button*> _buttons;
};

View file

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

View file

@ -9,8 +9,6 @@ public:
Player();
Player(int num);
bool event(sf::Event e) final override;
private:
Compas compas;
protected:
bool updateLogic(float deltaTime, sf::RenderWindow *window);

View file

@ -1,15 +0,0 @@
QMAKE_DEFAULT_INCDIRS = \
/usr/include/c++/6 \
/usr/include/x86_64-linux-gnu/c++/6 \
/usr/include/c++/6/backward \
/usr/lib/gcc/x86_64-linux-gnu/6/include \
/usr/local/include \
/usr/lib/gcc/x86_64-linux-gnu/6/include-fixed \
/usr/include/x86_64-linux-gnu \
/usr/include
QMAKE_DEFAULT_LIBDIRS = \
/usr/lib/gcc/x86_64-linux-gnu/6 \
/usr/lib/x86_64-linux-gnu \
/usr/lib \
/lib/x86_64-linux-gnu \
/lib