Things now know about items

This commit is contained in:
DocWibbleyWobbley 2014-05-14 22:29:27 +03:00
parent 93c9924d1a
commit e379a979da
5 changed files with 110 additions and 36 deletions

View File

@ -115,7 +115,12 @@ int Enemy::findPlayer(int *xVel, int *yVel)
{ {
if((SDL_GetTicks()-hitTimer_)>=1000) if((SDL_GetTicks()-hitTimer_)>=1000)
{ {
(*player_).hurt(damage_); int tmpdmg=damage_;
for(std::vector<Item*>::iterator it=(*backpack_).begin();it!=(*backpack_).end();it++)
{
tmpdmg+=(*(*it)).eDamage_;
}
(*player_).hurt(tmpdmg);
hitTimer_=SDL_GetTicks(); hitTimer_=SDL_GetTicks();
} }
*xVel=0; *xVel=0;
@ -123,11 +128,16 @@ int Enemy::findPlayer(int *xVel, int *yVel)
} }
else else
{ {
int tmpspd=speed_;
for(std::vector<Item*>::iterator it=(*backpack_).begin();it!=(*backpack_).end();it++)
{
tmpspd+=(*(*it)).eSpeed_;
}
switch(dir) switch(dir)
{ {
case 0: case 0:
*xVel=0; *xVel=0;
*yVel=-speed_; *yVel=-tmpspd;
if((y+*yVel)<(size_/2)) if((y+*yVel)<(size_/2))
{ {
@ -157,8 +167,8 @@ int Enemy::findPlayer(int *xVel, int *yVel)
break; break;
case 1: case 1:
*xVel=speed_/2; *xVel=tmpspd/2;
*yVel=-speed_/2; *yVel=-tmpspd/2;
if((y+*yVel)<(size_/2)) if((y+*yVel)<(size_/2))
{ {
@ -207,7 +217,7 @@ int Enemy::findPlayer(int *xVel, int *yVel)
break; break;
case 2: case 2:
*xVel=speed_; *xVel=tmpspd;
*yVel=0; *yVel=0;
if((x+*xVel)>(map_.getX()-(size_/2))) if((x+*xVel)>(map_.getX()-(size_/2)))
@ -238,8 +248,8 @@ int Enemy::findPlayer(int *xVel, int *yVel)
break; break;
case 3: case 3:
*xVel=speed_/2; *xVel=tmpspd/2;
*yVel=speed_/2; *yVel=tmpspd/2;
if((y+*yVel)>(map_.getY()-(size_/2))) if((y+*yVel)>(map_.getY()-(size_/2)))
{ {
@ -289,7 +299,7 @@ int Enemy::findPlayer(int *xVel, int *yVel)
case 4: case 4:
*xVel=0; *xVel=0;
*yVel=speed_; *yVel=tmpspd;
if((y+*yVel)>(map_.getY()-(size_/2))) if((y+*yVel)>(map_.getY()-(size_/2)))
{ {
@ -319,8 +329,8 @@ int Enemy::findPlayer(int *xVel, int *yVel)
break; break;
case 5: case 5:
*xVel=-speed_/2; *xVel=-tmpspd/2;
*yVel=speed_/2; *yVel=tmpspd/2;
if((x+*xVel)<(size_/2)) if((x+*xVel)<(size_/2))
{ {
@ -370,7 +380,7 @@ int Enemy::findPlayer(int *xVel, int *yVel)
break; break;
case 6: case 6:
*xVel=-speed_; *xVel=-tmpspd;
*yVel=0; *yVel=0;
if((x+*xVel)<(size_/2)) if((x+*xVel)<(size_/2))
@ -401,8 +411,8 @@ int Enemy::findPlayer(int *xVel, int *yVel)
break; break;
case 7: case 7:
*xVel=-speed_/2; *xVel=-tmpspd/2;
*yVel=-speed_/2; *yVel=-tmpspd/2;
if((x+*xVel)<(size_/2)) if((x+*xVel)<(size_/2))
{ {

View File

@ -2,6 +2,7 @@
#define ENTITIES_H_ #define ENTITIES_H_
#include "point.h" #include "point.h"
#include "items.h"
#include "SDL/SDL.h" #include "SDL/SDL.h"
#include <vector> #include <vector>
@ -19,6 +20,8 @@ protected:
int health_; int health_;
int maxHealth_; int maxHealth_;
std::vector<Enemy*> *enemies_; std::vector<Enemy*> *enemies_;
std::vector<Item*> *backpack_;
int money_;
private: private:
void checkDirection(int dir, int *xVel, int *yVel) const; void checkDirection(int dir, int *xVel, int *yVel) const;
@ -33,10 +36,12 @@ public:
obstacles_(NULL), obstacles_(NULL),
health_(100), health_(100),
maxHealth_(100), maxHealth_(100),
enemies_(NULL) enemies_(NULL),
backpack_(NULL),
money_(0)
{} {}
Player(Point origin, Point map, int dir, int size, int speed, std::vector<SDL_Rect> *obstacles, int health, int maxHealth, std::vector<Enemy*> *enemies) Player(Point origin, Point map, int dir, int size, int speed, std::vector<SDL_Rect> *obstacles, int health, int maxHealth, std::vector<Enemy*> *enemies, std::vector<Item*> *backpack, int money = 0)
: origin_(origin.getX(),origin.getY()), : origin_(origin.getX(),origin.getY()),
map_(map.getX(),map.getY()), map_(map.getX(),map.getY()),
direction_(dir), direction_(dir),
@ -45,17 +50,23 @@ public:
obstacles_(obstacles), obstacles_(obstacles),
health_(health), health_(health),
maxHealth_(maxHealth), maxHealth_(maxHealth),
enemies_(enemies) enemies_(enemies),
backpack_(backpack),
money_(money)
{} {}
Point getPosition() const; Point getPosition() const;
int getDirection() const; int getDirection() const;
void move(int dir); void move(int dir);
void init(Point origin, int size, int dir, Point map, std::vector<SDL_Rect> *obstacles, int speed, int health, int maxHealth, std::vector<Enemy*> *enemies); void init(Point origin, int size, int dir, Point map, std::vector<SDL_Rect> *obstacles, int speed, int health, int maxHealth, std::vector<Enemy*> *enemies, std::vector<Item*> *backpack, int money = 0);
void hurt(int val); void hurt(int val);
void heal(int val); void heal(int val);
int getHealth(); int getHealth();
int getSize(); int getSize();
int getMoney();
void transaction(int money);
int getMaxHealth();
void modifyMaxHealth(int modifier);
}; };
class Enemy: public Player { class Enemy: public Player {
@ -65,14 +76,14 @@ class Enemy: public Player {
int damage_; int damage_;
int tolerance_; int tolerance_;
public: public:
Enemy(Point origin, Point map, int dir, int size, int speed, std::vector<SDL_Rect> *obstacles, int health, int maxHealth, std::vector<Enemy*> *enemies, int damage, Player *player) Enemy(Point origin, Point map, int dir, int size, int speed, std::vector<SDL_Rect> *obstacles, int health, int maxHealth, std::vector<Enemy*> *enemies, std::vector<Item*> *backpack, int damage, Player *player, int money = 3)
: Player(origin, map, dir, size, speed, obstacles, health, maxHealth, enemies), : Player(origin, map, dir, size, speed, obstacles, health, maxHealth, enemies, backpack, money),
player_(player), player_(player),
hitTimer_(0), hitTimer_(0),
damage_(damage), damage_(damage),
tolerance_(0) tolerance_(0)
{ {
tolerance_=(size_+(*player_).getSize())*3/4; tolerance_=(size_+(*player_).getSize())*2;
} }
void move(); void move();

View File

@ -4,11 +4,16 @@ void Player::checkDirection(int dir, int *xVel, int *yVel) const
{ {
int x=origin_.getX(); int x=origin_.getX();
int y=origin_.getY(); int y=origin_.getY();
int tmpspd=speed_;
for(std::vector<Item*>::iterator it=(*backpack_).begin();it!=(*backpack_).end();it++)
{
tmpspd+=(*(*it)).pSpeed_;
}
switch(dir) switch(dir)
{ {
case 0: case 0:
*xVel=0; *xVel=0;
*yVel=-speed_; *yVel=-tmpspd;
if((y+*yVel)<(size_/2)) if((y+*yVel)<(size_/2))
{ {
@ -33,8 +38,8 @@ void Player::checkDirection(int dir, int *xVel, int *yVel) const
break; break;
case 1: case 1:
*xVel=speed_/2; *xVel=tmpspd/2;
*yVel=-speed_/2; *yVel=-tmpspd/2;
if((y+*yVel)<(size_/2)) if((y+*yVel)<(size_/2))
{ {
@ -78,7 +83,7 @@ void Player::checkDirection(int dir, int *xVel, int *yVel) const
break; break;
case 2: case 2:
*xVel=speed_; *xVel=tmpspd;
*yVel=0; *yVel=0;
if((x+*xVel)>(map_.getX()-(size_/2))) if((x+*xVel)>(map_.getX()-(size_/2)))
@ -104,8 +109,8 @@ void Player::checkDirection(int dir, int *xVel, int *yVel) const
break; break;
case 3: case 3:
*xVel=speed_/2; *xVel=tmpspd/2;
*yVel=speed_/2; *yVel=tmpspd/2;
if((y+*yVel)>(map_.getY()-(size_/2))) if((y+*yVel)>(map_.getY()-(size_/2)))
{ {
@ -150,7 +155,7 @@ void Player::checkDirection(int dir, int *xVel, int *yVel) const
case 4: case 4:
*xVel=0; *xVel=0;
*yVel=speed_; *yVel=tmpspd;
if((y+*yVel)>(map_.getY()-(size_/2))) if((y+*yVel)>(map_.getY()-(size_/2)))
{ {
@ -175,8 +180,8 @@ void Player::checkDirection(int dir, int *xVel, int *yVel) const
break; break;
case 5: case 5:
*xVel=-speed_/2; *xVel=-tmpspd/2;
*yVel=speed_/2; *yVel=tmpspd/2;
if((x+*xVel)<(size_/2)) if((x+*xVel)<(size_/2))
{ {
@ -221,7 +226,7 @@ void Player::checkDirection(int dir, int *xVel, int *yVel) const
break; break;
case 6: case 6:
*xVel=-speed_; *xVel=-tmpspd;
*yVel=0; *yVel=0;
if((x+*xVel)<(size_/2)) if((x+*xVel)<(size_/2))
@ -247,8 +252,8 @@ void Player::checkDirection(int dir, int *xVel, int *yVel) const
break; break;
case 7: case 7:
*xVel=-speed_/2; *xVel=-tmpspd/2;
*yVel=-speed_/2; *yVel=-tmpspd/2;
if((x+*xVel)<(size_/2)) if((x+*xVel)<(size_/2))
{ {
@ -313,7 +318,7 @@ int Player::getDirection() const
return direction_; return direction_;
} }
void Player::init(Point origin, int size, int dir, Point map, std::vector<SDL_Rect> *obstacles, int speed, int health, int maxHealth, std::vector<Enemy*> *enemies) void Player::init(Point origin, int size, int dir, Point map, std::vector<SDL_Rect> *obstacles, int speed, int health, int maxHealth, std::vector<Enemy*> *enemies, std::vector<Item*> *backpack, int money)
{ {
origin_.setX(origin.getX()); origin_.setX(origin.getX());
origin_.setY(origin.getY()); origin_.setY(origin.getY());
@ -326,6 +331,8 @@ void Player::init(Point origin, int size, int dir, Point map, std::vector<SDL_Re
health_=health; health_=health;
maxHealth_=maxHealth; maxHealth_=maxHealth;
enemies_=enemies; enemies_=enemies;
backpack_=backpack;
money_=money;
} }
void Player::hurt(int val) void Player::hurt(int val)
@ -355,3 +362,34 @@ int Player::getSize()
{ {
return size_; return size_;
} }
int Player::getMoney()
{
return money_;
}
void Player::transaction(int money)
{
money_+=money;
}
int Player::getMaxHealth()
{
return maxHealth_;
}
void Player::modifyMaxHealth(int modifier)
{
maxHealth_+=modifier;
if(modifier>0)
{
health_+=modifier;
}
else
{
if(health_>modifier)
{
health_+=modifier;
}
}
}

View File

@ -1,19 +1,30 @@
#include "weapons.h" #include "weapons.h"
void Weapon::init(int type, int pType, int pSpeed, int rof, int dmg, std::vector<BaseProjectile*> *projectiles) { void Weapon::init(int type, int pType, int pSpeed, int rof, int dmg, std::vector<BaseProjectile*> *projectiles, std::vector<Item*> *backpack) {
type_ = type; type_ = type;
projectileType_ = pType; projectileType_ = pType;
projectileSpeed_ = pSpeed; projectileSpeed_ = pSpeed;
rof_ = rof; rof_ = rof;
damage_ = dmg; damage_ = dmg;
projectiles_ = projectiles; projectiles_ = projectiles;
backpack_ = backpack;
} }
bool Weapon::fire(Player player, Point map, int size, std::vector<SDL_Rect> *obstacles, std::vector<Enemy*> *enemies) { bool Weapon::fire(Player player, Point map, int size, std::vector<SDL_Rect> *obstacles, std::vector<Enemy*> *enemies) {
if((SDL_GetTicks()-rofTimer_)>=(1000/rof_)) if((SDL_GetTicks()-rofTimer_)>=(1000/rof_))
{ {
int tmpdmg=damage_;
for(std::vector<Item*>::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(); 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 true;
} }
return false; return false;

View File

@ -4,6 +4,8 @@
#include "point.h" #include "point.h"
#include "projectiles.h" #include "projectiles.h"
#include "entities.h" #include "entities.h"
#include "items.h"
#include "SDL/SDL.h" #include "SDL/SDL.h"
#include <vector> #include <vector>
@ -15,6 +17,7 @@ class Weapon {
int rof_; int rof_;
int damage_; int damage_;
std::vector<BaseProjectile*> *projectiles_; std::vector<BaseProjectile*> *projectiles_;
std::vector<Item*> *backpack_;
Uint32 rofTimer_; Uint32 rofTimer_;
public: public:
@ -25,10 +28,11 @@ public:
rof_(4), rof_(4),
damage_(0), damage_(0),
projectiles_(NULL), projectiles_(NULL),
backpack_(NULL),
rofTimer_(0) rofTimer_(0)
{} {}
void init(int type, int pType, int pSpeed, int rof, int dmg, std::vector<BaseProjectile*> *projectiles); void init(int type, int pType, int pSpeed, int rof, int dmg, std::vector<BaseProjectile*> *projectiles, std::vector<Item*> *backpack);
bool fire(Player player, Point map, int size, std::vector<SDL_Rect> *obstacles, std::vector<Enemy*> *enemies); bool fire(Player player, Point map, int size, std::vector<SDL_Rect> *obstacles, std::vector<Enemy*> *enemies);
}; };
#endif #endif