Exemplo n.º 1
0
void AttackPaddle::shootBullet()
{
    sf::Vector2f bulletSize = {10,14};
    std::pair<int,std::shared_ptr<Bullet>> newElem;

    try
    {
        // Spacebar 를 한번 누르면 insert 가 다수 되기 때문에
        // 시간을 계산해서 일정시간 내에 많이 눌렸어도 한번으로
        // 계산하도록 해야 한다.
        if(sf::Keyboard::isKeyPressed(sf::Keyboard::Key::Space))
        {
            sf::Time t = clock.getElapsedTime();

            if( t.asMilliseconds() > 100 )
            {
                std::shared_ptr<Bullet> newBullet(new Bullet(bulletSize,Center()));
                newElem = std::make_pair(++bulletKey,newBullet);

                bullets.insert(newElem);

                clock.restart();
            }
        }
    }
    catch(std::bad_alloc& e)
    {
        std::cerr << "bullet mem alloc fail." << std::endl;
    }
}
Exemplo n.º 2
0
void EnemyList::updateAllEnemies(double playerX, double playerY, double deltaT)
{
	explosionList.removeExplosions();
	enemyBullets.remove(playerX, playerY);
	this->playerShipX = playerX;
	this->playerShipY = playerY;
	if (enemyBullets.getSize() > 0)
	{
		enemyBullets.updataAllBullets(deltaT);
	}
	
	for (unsigned int i = 0; i < enemyList.size(); i++)
	{
		enemyList[i].updateCompShip(playerX, playerY, deltaT);

		if (enemyList[i].enemyType == 1 && enemyList[i].readyToSpawn())
		{
			double tAngle = atan2(enemyList[i].dy, enemyList[i].dx);
			std::cout << tAngle << std::endl;
			CompShip compShip1(0, (enemyList[i].compX + cos(tAngle)), enemyList[i].compY + sin(tAngle), enemyTextureID);
			enemyList.push_back(compShip1);
		}

		if (enemyList[i].enemyType == 0 && enemyList[i].readyToFire())
		{
			Bullet newBullet(enemyList[i].getCompX(), enemyList[i].getCompY(), playerX, playerY, 0, enemyBulletTextureID);
			enemyBullets.add(newBullet);
			Bullet newBullet1(enemyList[i].getCompX(), enemyList[i].getCompY(), playerX, playerY, 1, enemyBulletTextureID);
			enemyBullets.add(newBullet1);
		}
		else if (enemyList[i].enemyType == 1 && enemyList[i].readyToFire())
		{
			Bullet newBullet(enemyList[i].getCompX(), enemyList[i].getCompY(), playerX, playerY, 0, enemyBulletTextureID);
			enemyBullets.add(newBullet);
			Bullet newBullet1(enemyList[i].getCompX(), enemyList[i].getCompY(), playerX, playerY, 1, enemyBulletTextureID);
			enemyBullets.add(newBullet1);
		}
	}
	explosionList.updateAllExplosions(deltaT);
}
Exemplo n.º 3
0
void addBullet(Ship* ship) {
	int i = newBullet();
	if (i <0) {
		puts("No bullets left!");
		return;
	}
	bullets[i].xPos=ship->xPos;
	bullets[i].yPos=ship->yPos;
	bullets[i].yVel=ship->yVel-sin(getRadians(ship->angle))*6;
	bullets[i].xVel=ship->xVel-cos(getRadians(ship->angle))*6;
	bullets[i].active = true;

}
Exemplo n.º 4
0
int tickAttackTower(gnode* grid,tower* t){
	tower_type *type;
	if (t->type==BASE)
		return 0;
	type=typesTowerGet(t->type);
	if (type==0){
		t->health=-1;
		return 0;
	}
	if (t->target==0){
		//find near npc
		int x=idtox(t->position);
		int y=idtoy(t->position);
		int i,j,k;
		int yid,xid;
		npc* tmp;
		for (i=0;i<type->distanse;i++)
			for(j=0;j<config.area_size[i];j++)
				if (((xid=x+config.area_array[i][j].x)>=0 && x+config.area_array[i][j].x<config.gridsize) &&
						((yid=y+config.area_array[i][j].y)>=0 && y+config.area_array[i][j].y<config.gridsize))
					for (k=0;k<MAX_GROUPS;k++)
						if (k!=config.players[t->owner].group)
							for(tmp=grid[to2d(xid,yid)].npcs[k];
									tmp!=0;tmp=tmp->next)
								if (canSee(grid,&(vec){x+0.5,y+0.5},&tmp->position)>0)
									if(sqr(x+0.5-(tmp->position.x))+sqr(y+0.5-(tmp->position.y))<=sqr(type->distanse)){
										t->target=tmp;
										setMask(t,TOWER_TARGET);
										if (rand()%100<60)
											return 0;
									}
	}else{
		if (t->target->id==0)
			return 0;
		if(rand()%100<8){
			t->target=0;
			return 0;
		}
		if (sqr(t->target->position.x-getGridx(t->position))+
				sqr(t->target->position.y-getGridy(t->position))>
				sqr(type->distanse)){
			t->target=0;
			return 0;
		}
//		printDebug("\t|%d %d\n",t->attack_count,type->attack_speed);
		if (t->attack_count>=type->attack_speed){
				t->attack_count=0;
				bullet* b;//set params of bullet
				if ((b=newBullet())==0){
					perror("newBullet tickAttackBullet");
					return -1;
				}
				vec position={getGridx(t->position),getGridy(t->position)};
				// getTargetPos(vec *pos, vec *dir, float v, vec * $pos, float $v){
//				vec* target=getTargetPos(&t->target->position,
//									&t->target->direction,
//									config.npc_types[t->target->type].move_speed,
//									&position,
//									config.bullet_types[type->bullet_type].speed
//									);
				memcpy(&b->position,&position,sizeof(vec));
				memcpy(&b->source,&position,sizeof(vec));
				//memcpy(&b->destination,target,sizeof(vec));
//				printDebug("aaaa = %g|%g {%g|%g}\n",target->x,target->y,t->target->position.x,t->target->position.y);
				b->ntarget=t->target;
				b->destination.x=t->target->position.x;
				b->destination.y=t->target->position.y;
				b->max_dist=type->distanse;
				b->type=type->bullet_type;
				b->damage=type->damage;
				b->support=type->support;
				b->group=config.players[t->owner].group;
				b->owner=t->owner;
				setMask(b,BULLET_CREATE);
//				b->target=NPC;
				getDir(&b->position,&b->destination,&b->direction);
//				memcpy(&b->effects,&config.npc_types[n->type].effects,sizeof(effects));
			}
	}
	/**/
	return 0;
}