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]); } } } }
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; }
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.... }
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... } }