You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
82 lines
1.7 KiB
82 lines
1.7 KiB
#include "enemybase.h"
|
|
#include <QtMath> // for qSqrt and qPow
|
|
|
|
EnemyBase::EnemyBase(GameObject *parent)
|
|
: GameObject{parent}
|
|
{}
|
|
|
|
EnemyBase::~EnemyBase()
|
|
{
|
|
|
|
}
|
|
|
|
EnemyBase::EnemyBase(Player* _player, int _HP, int _AttackPoint, qreal _Speed,int _exp)
|
|
{
|
|
mPlayer = _player;
|
|
mHP = _HP;
|
|
mAttackPoint = _AttackPoint;
|
|
mSpeed = _Speed;
|
|
expDropped = _exp;
|
|
}
|
|
|
|
void EnemyBase::setMirrorPixmap()
|
|
{
|
|
//:/roles/img/roles/chimera1.png
|
|
QString address = ":/roles/img/roles/chimera";
|
|
address += QString::number(mNo);
|
|
if(mMoveDir == mFaceDir) return;
|
|
if(mMoveDir && !mFaceDir)
|
|
{
|
|
address += "-mir";
|
|
mFaceDir = 1;
|
|
}
|
|
else mFaceDir = 0;
|
|
address += ".png";
|
|
this->setPixmap(QPixmap(address));
|
|
|
|
}
|
|
|
|
void EnemyBase::getHurt(int _attack)
|
|
{
|
|
mHP -= _attack;
|
|
if(mPlayer->getBloodAttack())
|
|
{
|
|
mHP *= pow(0.95,mPlayer->getBloodAttack());
|
|
}
|
|
if(mPlayer->getRecessionIndex())
|
|
{
|
|
int times = mPlayer->getRecessionIndex()*10;
|
|
for(int i=0;i<times;i++)
|
|
enemyMove(1);
|
|
}
|
|
}
|
|
|
|
|
|
|
|
void EnemyBase::enemyMove(bool dir)
|
|
{
|
|
QPointF playerPos = mPlayer->getCenterPos();
|
|
QPointF moveDir = playerPos - this->getCenterPos();
|
|
qreal _x = moveDir.x();
|
|
qreal _y = moveDir.y();
|
|
_x = QString::number(_x,'f',2).toDouble();
|
|
_y = QString::number(_y,'f',2).toDouble();
|
|
if(_x >= 0) setDir(1);
|
|
else setDir(0);
|
|
qreal _r = qSqrt(qPow(_x,2) + qPow(_y,2));
|
|
if(_r == 0) return;
|
|
//保留两位小数
|
|
_r = QString::number(_r,'f',2).toDouble();
|
|
qreal vx = _x/_r * mSpeed;
|
|
qreal vy = _y/_r * mSpeed;
|
|
if(!dir)
|
|
this->moveBy(vx,vy);
|
|
else
|
|
this->moveBy(-vx/mSpeed,-vy/mSpeed);
|
|
}
|
|
|
|
void EnemyBase::startSkill()
|
|
{
|
|
|
|
}
|