Ejemplo n.º 1
0
void CIBlockBuilder::use() {
	//FIXME: errors with keylock???
	if (getOwner()->getMoney() >= CBlock::BlockCosts[m_BlockType]) {//player has enough money
		//get field next to worm
		CVec vec(getOwner()->getRect());
		if (getOwner()->getOrientation() == ORIGHT)
			vec.x += (getOwner()->getRect().w + BLOCKSIZE);//next block
		else
			vec.x -= BLOCKSIZE;

		CBlockKoord pos = vec.toBlockKoord();

		//is field free???
		CBlock* buildingBlock = m_pGame->getBlock(pos);
		if ( (buildingBlock != NULL)
				&& (buildingBlock->getBlockType() == CBlock::AIR)
				&& (g_pPhysics->isEmpty(pos)) ) {
			if (m_pGame->BuildBlock(pos, m_BlockType,
					getOwner()->getWormID(), getOwner()->getTeamID())) {
				getOwner()->changeMoneyBy(-CBlock::BlockCosts[m_BlockType]);
				getOwner()->changePointsBy(1);
				getOwner()->m_BuiltBlocks.push_back(pos);

				g_pLogfile->fTextout("</br >Built BLock: "+CBlock::getBlockTypeString(m_BlockType)+" Costs:%i", CBlock::BlockCosts[m_BlockType]);
			}
		}
	}
}
Ejemplo n.º 2
0
CBlock::BlockType CPhysics::getBlockType(CVec &vec) {
	CBlock* b;
	b= m_pGame->getBlock(vec.toBlockKoord());
	if (b != NULL) //vec existiert tats�chlich!
		return b->getBlockType();
	else
		return CBlock::NORMAL;
}
Ejemplo n.º 3
0
Archivo: Worm.cpp Proyecto: xy124/Spill
void CWorm::ProcessMining() {//HINT Mining without item!
	if (g_pFramework->KeyDown(m_pSettings->KeyMine)) {
		//get Block under Worm!
		CVec vec(getRect());
		vec.x += getRect().w/2;//Block UNDER worm
		CBlockKoord pos = vec.toBlockKoord();
		pos.y++;//Block UNDER worm
		CBlock* miningBlock = m_pGame->getBlock(pos);//returns NULL if for example out of Gameboard
		if (miningBlock != NULL) {
			int miningBlockTeamID = miningBlock->getTeamID();
			int miningBlockBuilderID = miningBlock->getBuilderID();
			if ( ((miningBlockTeamID == NOBODY) || (miningBlockTeamID == m_TeamID))//you can't mine other teams blocks
					&& (miningBlock->getBlockType() != CBlock::AIR) ){
				int newMoney = m_Money + CBlock::BlockCosts[miningBlock->getBlockType()]; //da blocktype sich dann ja ändert... bei buildblock
				if (m_pGame->BuildBlock(pos, CBlock::AIR, m_WormID, m_TeamID)) { //block konnte gebaut werden!:
					m_Money = newMoney;
					m_Points++;
					g_pLogfile->fTextout(BLUE, false, "Mined Block");
					//delete block from playerlist!
					if (miningBlockBuilderID != NOBODY) {
						list<CBlockKoord>::iterator it;
						for (it = m_BuiltBlocks.begin();
							(it != m_BuiltBlocks.end()) && ((*it) != pos);
							++it) /*nothing*/;
						m_BuiltBlocks.erase(it);

						//m_pGame->m_vWorms.at(miningBlockBuilderID)->m_BuiltBlocks.erase();
					}

				}
			}
		} else g_pLogfile->Textout("<br /> Couldn't mine Block because miningBlock == NULL");
	}//Keydown


	//FIXME: use keylock also for useitem keys and so on....
}
Ejemplo n.º 4
0
void CAA_DragonFire::update() {
	if (getLastCollisionX().bIsCollision) {
		CBlockKoord blockKoord;
		CVec vec = CVec(	getRect().x+(m_bOrientation == OLEFT ? -3.0f : getRect().w+3.0f),	//x
							getRect().y + 50.0f);												//y
		blockKoord = vec.toBlockKoord();
		CBlock * pOldBlock = m_pGame->getBlock(blockKoord);
		if ((pOldBlock != NULL) && (pOldBlock->getBlockType() != CBlock::AIR)) {
			m_pGame->BuildBlock(blockKoord, CBlock::AIR, m_WormID, m_TeamID);
		}

		//TODO: save map in xml...


	}

}