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)
{
(*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();
}
*xVel=0;
@ -123,11 +128,16 @@ int Enemy::findPlayer(int *xVel, int *yVel)
}
else
{
int tmpspd=speed_;
for(std::vector<Item*>::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))
{

View File

@ -2,6 +2,7 @@
#define ENTITIES_H_
#include "point.h"
#include "items.h"
#include "SDL/SDL.h"
#include <vector>
@ -19,6 +20,8 @@ protected:
int health_;
int maxHealth_;
std::vector<Enemy*> *enemies_;
std::vector<Item*> *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<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()),
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<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 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<SDL_Rect> *obstacles, int health, int maxHealth, std::vector<Enemy*> *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<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, backpack, money),
player_(player),
hitTimer_(0),
damage_(damage),
tolerance_(0)
{
tolerance_=(size_+(*player_).getSize())*3/4;
tolerance_=(size_+(*player_).getSize())*2;
}
void move();

View File

@ -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<Item*>::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<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_.setY(origin.getY());
@ -326,6 +331,8 @@ void Player::init(Point origin, int size, int dir, Point map, std::vector<SDL_Re
health_=health;
maxHealth_=maxHealth;
enemies_=enemies;
backpack_=backpack;
money_=money;
}
void Player::hurt(int val)
@ -355,3 +362,34 @@ int Player::getSize()
{
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"
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;
projectileType_ = pType;
projectileSpeed_ = pSpeed;
rof_ = rof;
damage_ = dmg;
projectiles_ = projectiles;
backpack_ = backpack;
}
bool Weapon::fire(Player player, Point map, int size, std::vector<SDL_Rect> *obstacles, std::vector<Enemy*> *enemies) {
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();
(*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;

View File

@ -4,6 +4,8 @@
#include "point.h"
#include "projectiles.h"
#include "entities.h"
#include "items.h"
#include "SDL/SDL.h"
#include <vector>
@ -15,6 +17,7 @@ class Weapon {
int rof_;
int damage_;
std::vector<BaseProjectile*> *projectiles_;
std::vector<Item*> *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<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);
};
#endif