From e379a979da877685f0c9189702606dfb9c5a4d85 Mon Sep 17 00:00:00 2001 From: DocWibbleyWobbley Date: Wed, 14 May 2014 22:29:27 +0300 Subject: [PATCH] Things now know about items --- source/enemy.cpp | 36 ++++++++++++++++---------- source/entities.h | 25 +++++++++++++----- source/player.cpp | 64 ++++++++++++++++++++++++++++++++++++---------- source/weapons.cpp | 15 +++++++++-- source/weapons.h | 6 ++++- 5 files changed, 110 insertions(+), 36 deletions(-) diff --git a/source/enemy.cpp b/source/enemy.cpp index 38e1baa..d1cf35d 100644 --- a/source/enemy.cpp +++ b/source/enemy.cpp @@ -115,7 +115,12 @@ int Enemy::findPlayer(int *xVel, int *yVel) { if((SDL_GetTicks()-hitTimer_)>=1000) { - (*player_).hurt(damage_); + int tmpdmg=damage_; + for(std::vector::iterator it=(*backpack_).begin();it!=(*backpack_).end();it++) + { + tmpdmg+=(*(*it)).eDamage_; + } + (*player_).hurt(tmpdmg); hitTimer_=SDL_GetTicks(); } *xVel=0; @@ -123,11 +128,16 @@ int Enemy::findPlayer(int *xVel, int *yVel) } else { + int tmpspd=speed_; + for(std::vector::iterator it=(*backpack_).begin();it!=(*backpack_).end();it++) + { + tmpspd+=(*(*it)).eSpeed_; + } switch(dir) { case 0: *xVel=0; - *yVel=-speed_; + *yVel=-tmpspd; if((y+*yVel)<(size_/2)) { @@ -157,8 +167,8 @@ int Enemy::findPlayer(int *xVel, int *yVel) break; case 1: - *xVel=speed_/2; - *yVel=-speed_/2; + *xVel=tmpspd/2; + *yVel=-tmpspd/2; if((y+*yVel)<(size_/2)) { @@ -207,7 +217,7 @@ int Enemy::findPlayer(int *xVel, int *yVel) break; case 2: - *xVel=speed_; + *xVel=tmpspd; *yVel=0; if((x+*xVel)>(map_.getX()-(size_/2))) @@ -238,8 +248,8 @@ int Enemy::findPlayer(int *xVel, int *yVel) break; case 3: - *xVel=speed_/2; - *yVel=speed_/2; + *xVel=tmpspd/2; + *yVel=tmpspd/2; if((y+*yVel)>(map_.getY()-(size_/2))) { @@ -289,7 +299,7 @@ int Enemy::findPlayer(int *xVel, int *yVel) case 4: *xVel=0; - *yVel=speed_; + *yVel=tmpspd; if((y+*yVel)>(map_.getY()-(size_/2))) { @@ -319,8 +329,8 @@ int Enemy::findPlayer(int *xVel, int *yVel) break; case 5: - *xVel=-speed_/2; - *yVel=speed_/2; + *xVel=-tmpspd/2; + *yVel=tmpspd/2; if((x+*xVel)<(size_/2)) { @@ -370,7 +380,7 @@ int Enemy::findPlayer(int *xVel, int *yVel) break; case 6: - *xVel=-speed_; + *xVel=-tmpspd; *yVel=0; if((x+*xVel)<(size_/2)) @@ -401,8 +411,8 @@ int Enemy::findPlayer(int *xVel, int *yVel) break; case 7: - *xVel=-speed_/2; - *yVel=-speed_/2; + *xVel=-tmpspd/2; + *yVel=-tmpspd/2; if((x+*xVel)<(size_/2)) { diff --git a/source/entities.h b/source/entities.h index 6cd3fd0..79fc98d 100644 --- a/source/entities.h +++ b/source/entities.h @@ -2,6 +2,7 @@ #define ENTITIES_H_ #include "point.h" +#include "items.h" #include "SDL/SDL.h" #include @@ -19,6 +20,8 @@ protected: int health_; int maxHealth_; std::vector *enemies_; + std::vector *backpack_; + int money_; private: void checkDirection(int dir, int *xVel, int *yVel) const; @@ -33,10 +36,12 @@ public: obstacles_(NULL), health_(100), maxHealth_(100), - enemies_(NULL) + enemies_(NULL), + backpack_(NULL), + money_(0) {} - Player(Point origin, Point map, int dir, int size, int speed, std::vector *obstacles, int health, int maxHealth, std::vector *enemies) + Player(Point origin, Point map, int dir, int size, int speed, std::vector *obstacles, int health, int maxHealth, std::vector *enemies, std::vector *backpack, int money = 0) : origin_(origin.getX(),origin.getY()), map_(map.getX(),map.getY()), direction_(dir), @@ -45,17 +50,23 @@ public: obstacles_(obstacles), health_(health), maxHealth_(maxHealth), - enemies_(enemies) + enemies_(enemies), + backpack_(backpack), + money_(money) {} Point getPosition() const; int getDirection() const; void move(int dir); - void init(Point origin, int size, int dir, Point map, std::vector *obstacles, int speed, int health, int maxHealth, std::vector *enemies); + void init(Point origin, int size, int dir, Point map, std::vector *obstacles, int speed, int health, int maxHealth, std::vector *enemies, std::vector *backpack, int money = 0); void hurt(int val); void heal(int val); int getHealth(); int getSize(); + int getMoney(); + void transaction(int money); + int getMaxHealth(); + void modifyMaxHealth(int modifier); }; class Enemy: public Player { @@ -65,14 +76,14 @@ class Enemy: public Player { int damage_; int tolerance_; public: - Enemy(Point origin, Point map, int dir, int size, int speed, std::vector *obstacles, int health, int maxHealth, std::vector *enemies, int damage, Player *player) - : Player(origin, map, dir, size, speed, obstacles, health, maxHealth, enemies), + Enemy(Point origin, Point map, int dir, int size, int speed, std::vector *obstacles, int health, int maxHealth, std::vector *enemies, std::vector *backpack, int damage, Player *player, int money = 3) + : Player(origin, map, dir, size, speed, obstacles, health, maxHealth, enemies, backpack, money), player_(player), hitTimer_(0), damage_(damage), tolerance_(0) { - tolerance_=(size_+(*player_).getSize())*3/4; + tolerance_=(size_+(*player_).getSize())*2; } void move(); diff --git a/source/player.cpp b/source/player.cpp index 02884f8..683a866 100644 --- a/source/player.cpp +++ b/source/player.cpp @@ -4,11 +4,16 @@ void Player::checkDirection(int dir, int *xVel, int *yVel) const { int x=origin_.getX(); int y=origin_.getY(); + int tmpspd=speed_; + for(std::vector::iterator it=(*backpack_).begin();it!=(*backpack_).end();it++) + { + tmpspd+=(*(*it)).pSpeed_; + } switch(dir) { case 0: *xVel=0; - *yVel=-speed_; + *yVel=-tmpspd; if((y+*yVel)<(size_/2)) { @@ -33,8 +38,8 @@ void Player::checkDirection(int dir, int *xVel, int *yVel) const break; case 1: - *xVel=speed_/2; - *yVel=-speed_/2; + *xVel=tmpspd/2; + *yVel=-tmpspd/2; if((y+*yVel)<(size_/2)) { @@ -78,7 +83,7 @@ void Player::checkDirection(int dir, int *xVel, int *yVel) const break; case 2: - *xVel=speed_; + *xVel=tmpspd; *yVel=0; if((x+*xVel)>(map_.getX()-(size_/2))) @@ -104,8 +109,8 @@ void Player::checkDirection(int dir, int *xVel, int *yVel) const break; case 3: - *xVel=speed_/2; - *yVel=speed_/2; + *xVel=tmpspd/2; + *yVel=tmpspd/2; if((y+*yVel)>(map_.getY()-(size_/2))) { @@ -150,7 +155,7 @@ void Player::checkDirection(int dir, int *xVel, int *yVel) const case 4: *xVel=0; - *yVel=speed_; + *yVel=tmpspd; if((y+*yVel)>(map_.getY()-(size_/2))) { @@ -175,8 +180,8 @@ void Player::checkDirection(int dir, int *xVel, int *yVel) const break; case 5: - *xVel=-speed_/2; - *yVel=speed_/2; + *xVel=-tmpspd/2; + *yVel=tmpspd/2; if((x+*xVel)<(size_/2)) { @@ -221,7 +226,7 @@ void Player::checkDirection(int dir, int *xVel, int *yVel) const break; case 6: - *xVel=-speed_; + *xVel=-tmpspd; *yVel=0; if((x+*xVel)<(size_/2)) @@ -247,8 +252,8 @@ void Player::checkDirection(int dir, int *xVel, int *yVel) const break; case 7: - *xVel=-speed_/2; - *yVel=-speed_/2; + *xVel=-tmpspd/2; + *yVel=-tmpspd/2; if((x+*xVel)<(size_/2)) { @@ -313,7 +318,7 @@ int Player::getDirection() const return direction_; } -void Player::init(Point origin, int size, int dir, Point map, std::vector *obstacles, int speed, int health, int maxHealth, std::vector *enemies) +void Player::init(Point origin, int size, int dir, Point map, std::vector *obstacles, int speed, int health, int maxHealth, std::vector *enemies, std::vector *backpack, int money) { origin_.setX(origin.getX()); origin_.setY(origin.getY()); @@ -326,6 +331,8 @@ void Player::init(Point origin, int size, int dir, Point map, std::vector0) + { + health_+=modifier; + } + else + { + if(health_>modifier) + { + health_+=modifier; + } + } +} diff --git a/source/weapons.cpp b/source/weapons.cpp index ccedc74..aab1a36 100644 --- a/source/weapons.cpp +++ b/source/weapons.cpp @@ -1,19 +1,30 @@ #include "weapons.h" -void Weapon::init(int type, int pType, int pSpeed, int rof, int dmg, std::vector *projectiles) { +void Weapon::init(int type, int pType, int pSpeed, int rof, int dmg, std::vector *projectiles, std::vector *backpack) { type_ = type; projectileType_ = pType; projectileSpeed_ = pSpeed; rof_ = rof; damage_ = dmg; projectiles_ = projectiles; + backpack_ = backpack; } bool Weapon::fire(Player player, Point map, int size, std::vector *obstacles, std::vector *enemies) { if((SDL_GetTicks()-rofTimer_)>=(1000/rof_)) { + int tmpdmg=damage_; + for(std::vector::iterator it=(*backpack_).begin();it!=(*backpack_).end();it++) + { + switch(type_) + { + case 0: tmpdmg+=(*(*it)).pDamage_; + case 1: tmpdmg+=(*(*it)).sDamage_; + case 2: tmpdmg+=(*(*it)).mDamage_; + } + } rofTimer_=SDL_GetTicks(); - (*projectiles_).push_back(new BaseProjectile(player, damage_, map, size, projectileType_, obstacles, projectileSpeed_, enemies)); + (*projectiles_).push_back(new BaseProjectile(player, tmpdmg, map, size, projectileType_, obstacles, projectileSpeed_, enemies)); return true; } return false; diff --git a/source/weapons.h b/source/weapons.h index 7ae1954..6e15431 100644 --- a/source/weapons.h +++ b/source/weapons.h @@ -4,6 +4,8 @@ #include "point.h" #include "projectiles.h" #include "entities.h" +#include "items.h" + #include "SDL/SDL.h" #include @@ -15,6 +17,7 @@ class Weapon { int rof_; int damage_; std::vector *projectiles_; + std::vector *backpack_; Uint32 rofTimer_; public: @@ -25,10 +28,11 @@ public: rof_(4), damage_(0), projectiles_(NULL), + backpack_(NULL), rofTimer_(0) {} - void init(int type, int pType, int pSpeed, int rof, int dmg, std::vector *projectiles); + void init(int type, int pType, int pSpeed, int rof, int dmg, std::vector *projectiles, std::vector *backpack); bool fire(Player player, Point map, int size, std::vector *obstacles, std::vector *enemies); }; #endif