void RepairHpBar::setHp(int maxHp, int currentHp)
{
    if (maxHp<=0)
    {
        log("maxHp is below zero");
        maxHp=1;
    }
    this->maxHp=maxHp;
    setCurrHp(currentHp);
}
Esempio n. 2
0
void Arrow::removeBullet()
{
	bool isMissed = true;
    auto instance = GameManager::getInstance();
   
	auto bulletRect = Rect(this->getPositionX() +this->getParent()->getPositionX() - this->getContentSize().width /2,
                                this->getPositionY() +this->getParent()->getPositionY() - this->getContentSize().height/2,
								this->sprite->getContentSize().width,
                                this->sprite->getContentSize().height );
	
	auto monsterVector = instance->monsterVector;
    
	for (int j = 0; j < monsterVector.size(); j++)
	{
		auto monster = monsterVector.at(j);
		auto monsterRect = monster->baseSprite->getBoundingBox();
			
		if (monsterRect.intersectsRect(bulletRect) && monster->getAttackBySoldier())
		{
			auto currHp = monster->getCurrHp();

			currHp =  currHp - this->getMaxForce() + monster->getArmor();
                
			if(currHp <= 0){
				currHp = 0;
			}
			monster->setCurrHp( currHp );

			monster->getHpBar()->setPercentage((currHp/monster->getMaxHp())*100);
			monster->getHurt();
            isMissed = false;    
			if(currHp == 0){
				monster->death();
			}
			break;
		}
	}
	if(isMissed){

		sprite->setSpriteFrame(SpriteFrameCache::getInstance()->getSpriteFrameByName("decal_arrow.png"));

		sprite->runAction(Sequence::create(FadeOut::create(1.0f)
										,CallFuncN::create(CC_CALLBACK_0(Bullet::removeFromParent, this))
                                       , NULL));
	}else{
		this->removeFromParent();
	}
}
Esempio n. 3
0
ReinforceSoldier2* ReinforceSoldier2::createReinforceSoldier(Point point)
{
    auto reinforceSoldier = new ReinforceSoldier2();
    if (reinforceSoldier && reinforceSoldier->init())
    {
        reinforceSoldier->setLocation(point);
		reinforceSoldier->setMaxHp(80);
		reinforceSoldier->setCurrHp(80); 
		reinforceSoldier->setForce(10);
		reinforceSoldier->setState(SoldierStateNone);
		reinforceSoldier->birth(point);
        reinforceSoldier->autorelease();
        return reinforceSoldier;
    }
	CC_SAFE_DELETE(reinforceSoldier);
    return NULL;
}
EnemyDisableTower* EnemyDisableTower::createEnemyDisableTower(Vector<Node*> points, int hp)
{
	auto dis = new EnemyDisableTower();
	if (dis && dis->init())
	{
		dis->setPointsVector(points);
		dis->runFollowPoint();  //这里就开始执行行走了
		dis->autorelease();
		dis->setMaxHp(hp);
		dis->setCurrHp(hp);
		return dis;
	}
	else
	{
		delete dis;
		dis = nullptr;
		return nullptr;
	}
}
EnemyTest* EnemyTest::createEnemyTest(Vector<Node*> points, int hp)
{
	auto test = new EnemyTest();
	if (test && test->init())
	{
		test->setPointsVector(points);
		test->runFollowPoint();  //这里就开始执行行走了
		test->autorelease();
		test->setMaxHp(hp);
		test->setCurrHp(hp);
		return test;
	}
	else
	{
		delete test;
		test = nullptr;
		return nullptr;
	}

}
Esempio n. 6
0
Raider* Raider::createMonster(std::vector<Point> points)
{
    auto monster = new Raider();
    if (monster && monster->init())
    {
        monster->setPointsVector(points);
		monster->setMaxHp(160);
		monster->setCurrHp(160);
		monster->setMoney(30);
		monster->setRunSpeed(40);
		monster->setArmor(10);
		monster->setForce(8);
		monster->setAttackBySoldier(true);
        monster->runNextPoint();       
        monster->autorelease();
        return monster;
    }
    CC_SAFE_DELETE(monster);
    return NULL;
}
Esempio n. 7
0
Quetzal* Quetzal::createMonster(std::vector<Point> points)
{
    auto monster = new Quetzal();
    if (monster && monster->init())
    {

        monster->setPointsVector(points);
		monster->setMaxHp(500);
		monster->setCurrHp(500);
		monster->setMoney(20);
		monster->setForce(45);
		monster->setArmor(10);
		monster->setAttackBySoldier(false);
		monster->setRunSpeed(60);
        monster->runNextPoint();       
        monster->autorelease();
        return monster;
    }
    CC_SAFE_DELETE(monster);
    return NULL;
}
Esempio n. 8
0
Gorilla* Gorilla::createMonster(std::vector<Point> points)
{
    auto monster = new Gorilla();
    if (monster && monster->init())
    {

        monster->setPointsVector(points);
		monster->setMaxHp(2500);
		monster->setCurrHp(2500);
		monster->setMoney(500);
		monster->setForce(60);
		monster->setArmor(0);
		monster->setAttackBySoldier(true);
		monster->setRunSpeed(30);
        monster->runNextPoint();       
        monster->autorelease();
        return monster;
    }
    CC_SAFE_DELETE(monster);
    return NULL;
}
Esempio n. 9
0
Wolf* Wolf::createMonster(std::vector<Point> points)
{
    auto monster = new Wolf();
    if (monster && monster->init())
    {

        monster->setPointsVector(points);
		monster->setMaxHp(35);
		monster->setCurrHp(35);
		monster->setRunSpeed(100);
        monster->runNextPoint();      
		monster->setMoney(20);
		monster->setArmor(0);
		monster->setForce(2);
		monster->setAttackBySoldier(true);
        monster->autorelease();
        return monster;
    }
	CC_SAFE_DELETE(monster);
    return NULL;
}
Esempio n. 10
0
Boss_Efreeti* Boss_Efreeti::createMonster(std::vector<Point> points,std::vector<std::vector<std::vector<Point>>> sonpath)
{
    auto monster = new Boss_Efreeti();
    if (monster && monster->init())
    {
        monster->setPointsVector(points);
		monster->setMaxHp(5550);
		monster->setCurrHp(5550);
		monster->setMoney(1500);
		monster->sonPath = sonpath;
		monster->setForce(50);
		monster->setArmor(10);
		monster->setAttackByTower(true);
		monster->setAttackBySoldier(true);
		monster->setRunSpeed(20);
        monster->runNextPoint();       
        monster->autorelease();
        return monster;
    }
    CC_SAFE_DELETE(monster);
    return NULL;
}
Esempio n. 11
0
bool Thief::init()
{
	if (!Sprite::init())
	{
		return false;
	}
    setRunSpeed(9);
    setMaxHp(10);
    setCurrHp(10);
    sprite = Sprite::createWithSpriteFrameName("enemyRight1_1.png");
    this->addChild(sprite);
    animationRight = createAnimation("enemyRight1", 4, 0.1f);
	AnimationCache::getInstance()->addAnimation(animationRight, "runright");
    animationLeft = createAnimation("enemyLeft1", 4, 0.1f);
	AnimationCache::getInstance()->addAnimation(animationLeft, "runleft");
    animationExplode= createAnimation("explode", 6, 0.15f);
	AnimationCache::getInstance()->addAnimation(animationExplode, "explode");
    
    createAndSetHpBar();
	schedule(schedule_selector(EnemyBase::changeDirection), 0.4f);
	return true;
}
Esempio n. 12
0
Tremor* Tremor::createMonster(std::vector<Point> points)
{
    auto monster = new Tremor();
    if (monster && monster->init())
    {

        monster->setPointsVector(points);
		monster->setMaxHp(35);
		monster->setCurrHp(35);
		monster->setMoney(10);
		monster->setForce(4);
		monster->setArmor(0);
		monster->setForce(8);
		monster->setAttackByTower(false);
		monster->setAttackBySoldier(true);
		monster->setRunSpeed(50);
        monster->runNextPoint();       
        monster->autorelease();
        return monster;
    }
    CC_SAFE_DELETE(monster);
    return NULL;
}
Esempio n. 13
0
void PlayLayer::update(float dt)
{
    GameManager *instance = GameManager::getInstance();
    
    auto bulletVector = instance->bulletVector;
    auto enemyVector = instance->enemyVector;
    auto towerVector = instance->towerVector;
    
    if(chooseTowerpanle != NULL )
	{
		auto type = chooseTowerpanle->getChooseTowerType();
		if( type == TowerType::ARROW_TOWER)
        {
			TowerBase* tower = ArrowTower::create();
			tower->setPosition(towerPos);
			this->addChild(tower);
            instance->towerVector.pushBack(tower);
            
			type =  TowerType::ANOTHER;
			chooseTowerpanle->setChooseTowerType(type);
            
		}
	}
    
    Vector<EnemyBase*> enemyNeedToDelete;
	Vector<Sprite*> bulletNeedToDelete;
    // 碰撞检测
    for (int i = 0; i < bulletVector.size(); i++)
	{
		auto  bullet = bulletVector.at(i);
        bullet->boundingBox();
		auto  bulletRect = Rect(bullet->getPositionX()+bullet->getParent()->getPositionX() - bullet->getContentSize().width / 2,
                                bullet->getPositionY() +bullet->getParent()->getPositionY() - bullet->getContentSize().height / 2,
                                bullet->getContentSize().width,
                                bullet->getContentSize().height );
        
		for (int j = 0; j < enemyVector.size(); j++)
		{
			auto enemy = enemyVector.at(j);
			auto enemyRect = enemy->sprite->boundingBox();
            
			if (bulletRect.intersectsRect(enemyRect))
			{
                auto currHp = enemy->getCurrHp();
                currHp--;
                enemy->setCurrHp( currHp );
                
				auto currHpPercentage = enemy->getHpPercentage();
                auto offHp = 100 / enemy->getMaxHp();
				currHpPercentage -= offHp;
                if(currHpPercentage < 0){
                    currHpPercentage = 0;
                }
                enemy->setHpPercentage(currHpPercentage);
				enemy->getHpBar()->setPercentage(currHpPercentage);
                
                if(currHp <= 0)
                {
                    enemyNeedToDelete.pushBack(enemy);
                }
                bulletNeedToDelete.pushBack( bullet);
			}
		}
		for (EnemyBase* enemyTemp : enemyNeedToDelete)
		{
            enemyTemp->enemyExpload();
            instance->enemyVector.eraseObject(enemyTemp);
		}
		enemyNeedToDelete.clear();
	}
	
	for (const auto& bulletTemp : bulletNeedToDelete)
	{
		instance->bulletVector.eraseObject(bulletTemp);
        bulletTemp->removeFromParent();
	}
	bulletNeedToDelete.clear();
}