Esempio n. 1
0
tower* spawnTower(gnode * grid,int node_id,int owner,int type){
	tower* t;
	tower_type *ttype=0;
//	printDebug("spawn tower %d on %d by %d\n",type,node_id,owner);
	if (node_id<0 || node_id>=config.gridsize*config.gridsize)
		return 0;
	if (grid[node_id].tower!=0)
		return 0;
	gnode* node=&grid[node_id];
	if (type==BASE)
			ttype=&config.players[owner].base_type;
		else
			ttype=typesTowerGet(type);
	if (ttype==0)
		return 0;

	if((t=newTower())==0){
		perror("newTower spawnTower");
		return 0;
	}
	t->owner=owner;
	t->position=node_id;
	t->type=type;
	t->bit_mask=0;
	t->level=type;//1;
	setMask(t,TOWER_CREATE);
	setTowerBase(t);
	node->tower=t;
	config.players[owner].money -= ttype->cost;
	config.players[owner].stat.towers_built++;//created tower: save to stats
	config.players[owner].stat.xp += ttype->cost; //TODO: use something better
	setMask(&config.players[owner], PLAYER_MONEY);
	return t;
}
Esempio n. 2
0
void Game::placeTower(Coordinate coord, TowerType type) {
  if (map->getCellType(coord) == CellType::PATH)
    return;
  else if (getTower(coord))
    return;
  else {
    auto tower = towerFactory.create(coord, type);
    if (debitCurrency(tower->getPurchasePrice())) {
      towers.push_back(unique_ptr<BaseTower>(tower));
      emit newTower(tower);
    } else
      delete tower;
  }
}