Things now know about items
This commit is contained in:
parent
93c9924d1a
commit
e379a979da
@ -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))
|
||||
{
|
||||
|
||||
@ -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();
|
||||
|
||||
@ -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;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -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;
|
||||
|
||||
@ -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
|
||||
|
||||
Loading…
Reference in New Issue
Block a user