static void CheckInputsAndUpdateCoins(const CTransaction& tx, CCoinsViewCache& mempoolDuplicate, const int64_t spendheight) { CValidationState state; CAmount txfee = 0; bool fCheckResult = tx.IsCoinBase() || Consensus::CheckTxInputs(tx, state, mempoolDuplicate, spendheight, txfee); assert(fCheckResult); UpdateCoins(tx, mempoolDuplicate, 1000000); }
void ApplyGameTransactions (const std::vector<CTransaction>& vGameTx, const StepResult& stepResult, unsigned nHeight, CValidationState& state, CCoinsViewCache& view, CBlockUndo& undo) { for (unsigned i = 0; i < vGameTx.size (); ++i) { undo.vtxundo.push_back (CTxUndo ()); UpdateCoins (vGameTx[i], state, view, undo.vtxundo.back (), nHeight); } /* Update name db for killed players. */ const PlayerSet& victims = stepResult.GetKilledPlayers (); if (!victims.empty ()) { assert (!vGameTx.empty ()); const CTransaction& txKills = vGameTx.front (); assert (txKills.vout.empty ()); assert (txKills.vin.size () == victims.size ()); BOOST_FOREACH(const PlayerID& name, victims) { const valtype& vchName = ValtypeFromString (name); LogPrint ("names", "Killing player at height %d: %s\n", nHeight, name.c_str ()); CNameTxUndo opUndo; opUndo.fromOldState (vchName, view); undo.vnameundo.push_back (opUndo); CNameData data; data.setDead (nHeight, txKills.GetHash ()); view.SetName (vchName, data, false); } }
void CViewManager::UpdateCoins(const CTransaction &tx, CCoinsViewCache &inputs, int nHeight) { CTxUndo txundo; UpdateCoins(tx, inputs, txundo, nHeight); }
void CPlayer::Update(CMap* Map) { int TilePos = 0; m_VelX = 5; m_VelY = 30; m_bScoreChanged = false; m_bLivesChanged = false; m_bCoinsChanged = false; m_bTouchesGround = false; //x axis first (--) if(m_bRight == true) { if (m_State != "JUMPING") { m_State = "WALKING_RIGHT"; } else { m_State = "JUMPING"; } if(Collision_Ver(m_PosX + m_Width + m_VelX, m_PosY, TilePos, Map) == 1) { m_PosX = (TilePos * Tile.GetSize()) - m_Width; Mix_PlayChannel(-1,cBlockhit,0); } else if (Collision_Ver(m_PosX + m_Width + m_VelX, m_PosY, TilePos, Map) == 2) { m_PosX = (TilePos * Tile.GetSize()) - m_Width; Mix_PlayChannel(-1,cBlockhit,0); } else if (Collision_Ver(m_PosX + m_Width + m_VelX, m_PosY, TilePos, Map) == 3) //Lava { m_VelX = 0; m_bDead = true; m_State = "DYING"; m_Lives -= 1; m_bLivesChanged = true; } else if (Collision_Ver(m_PosX + m_Width + m_VelX, m_PosY, TilePos, Map) == 5) //Coins { m_PosX += m_VelX; m_Score += 100; m_bScoreChanged = true; m_Coins += 1; m_bCoinsChanged = true; Mix_PlayChannel(-1,cCoinCollected,0); Map->SetTileAtPos( (int) (m_PosX / 32), (int) (m_PosY / 32),0,0); } else { m_PosX += m_VelX; } } else if(m_bLeft) { if (m_State != "JUMPING") { m_State = "WALKING_LEFT"; } else { m_State = "JUMPING"; } if(Collision_Ver(m_PosX - m_VelX, m_PosY, TilePos, Map) == 1) { m_PosX = (TilePos + 1)* Tile.GetSize(); Mix_PlayChannel(-1,cBlockhit,0); } else if (Collision_Ver(m_PosX - m_VelX, m_PosY, TilePos, Map) == 2) { m_PosX = (TilePos + 1)* Tile.GetSize(); } else if (Collision_Ver(m_PosX - m_VelX, m_PosY, TilePos, Map) == 3) { m_VelX = 0; m_State = "DYING"; m_Lives -= 1; m_bLivesChanged = true; } else if (Collision_Ver(m_PosX - m_VelX, m_PosY, TilePos, Map) == 5) //Coins { m_PosX -= m_VelX; m_Score += 100; m_bScoreChanged = true; m_Coins += 1; m_bCoinsChanged = true; Mix_PlayChannel(-1,cCoinCollected,0); Map->SetTileAtPos( (int) ((m_PosX - m_VelX) / 32), (int) (m_PosY / 32),0,0); } else if (Collision_Ver(m_PosX, m_PosY, TilePos, Map) == 6) // { m_PosX = (TilePos + 1)* Tile.GetSize(); } else { m_PosX -= m_VelX; } } //then y axis (|) if(m_bIsJumping == true) //up { m_State = "JUMPING"; Mix_PlayChannel(-1,cJump,0); if(Collision_Hor(m_PosX, (m_PosY - m_VelY), TilePos, Map) == 1) { m_PosY = (TilePos + 1)* Tile.GetSize(); m_VelY = 0; m_bLockJump = true; m_bApexReached = true; if (m_bApexReached == true) { m_PosY += m_Gravity; } Mix_PlayChannel(-1,cBlockhit,0); } else if(Collision_Hor(m_PosX, (m_PosY - m_VelY), TilePos, Map) == 2) { m_PosY -= m_VelY; } else if(Collision_Hor(m_PosX, (m_PosY - m_VelY), TilePos, Map) == 3) { m_VelX = 0; m_PosY += m_Gravity; m_State = "DYING"; m_Lives -= 1; m_bLivesChanged = true; } else if(Collision_Hor(m_PosX, (m_PosY - m_VelY), TilePos, Map) == 5) { m_PosY -= m_VelY; m_sScore = ""; m_Score += 100; m_bScoreChanged = true; Mix_PlayChannel(-1,cCoinCollected,0); m_sCoins = ""; m_Coins += 1; m_bCoinsChanged = true; Map->SetTileAtPos( (int) (m_PosX / 32), (int) (m_PosY / 32),0,0); } else if(Collision_Hor(m_PosX, (m_PosY - m_VelY), TilePos, Map) == 6) { m_PosY = (TilePos + 1)* Tile.GetSize(); m_VelY = 0; Mix_PlayChannel(-1,cBlockhit,0); } else if(Collision_Hor(m_PosX, (m_PosY - m_VelY), TilePos, Map) == 7) { m_PosY = (TilePos + 1)* Tile.GetSize(); m_VelY = 0; } else { if (m_bLockJump == false && m_bApexReached == false) { if (m_bOffsetIsSet == false) { m_JumpOffset = m_PosY; m_JumpApex = m_JumpOffset - m_JumpingHeight; m_bOffsetIsSet = true; } if (m_PosY > m_JumpApex) { m_PosY -= m_Gravity; //Move up at same speed like we move down } else if (m_PosY <= m_JumpApex) { m_bApexReached = true; m_bLockJump = true; } } if (m_bApexReached == true) { m_PosY += m_Gravity; } } } else { if(Collision_Hor(m_PosX, (m_PosY + m_Gravity + m_Height), TilePos, Map) == 1) { m_PosY = (TilePos * Tile.GetSize()) - m_Height - m_Gravity; m_VelY = 0; m_bTouchesGround = true; m_bIsJumping = false; m_bLockJump = false; m_bApexReached = false; } else if(Collision_Hor(m_PosX, (m_PosY + m_Gravity + m_Height), TilePos, Map) == 2) { m_PosY = (TilePos * Tile.GetSize()) - m_Height - m_Gravity; m_VelY = 0; m_bTouchesGround = true; m_bIsJumping = false; m_bLockJump = false; m_bApexReached = false; } else if(Collision_Hor(m_PosX, (m_PosY + m_Gravity + m_Height), TilePos, Map) == 3) { m_State = "DYING"; m_Lives -= 1; m_bLockJump = true; m_bApexReached = false; } else if(Collision_Hor(m_PosX, (m_PosY + m_Gravity + m_Height), TilePos, Map) == 5) { m_VelY = m_Gravity; m_Score += 100; m_Coins += 1; Mix_PlayChannel(-1,cCoinCollected,0); Map->SetTileAtPos( (int) (m_PosX / 32), (int) (m_PosY / 32),0,0); m_bLockJump = true; } else if(Collision_Hor(m_PosX, (m_PosY + m_Gravity + m_Height), TilePos, Map) == 6) { m_PosY += m_VelX; } else { m_VelY = m_Gravity; if(m_VelY >= Tile.GetSize()) { m_VelY = Tile.GetSize(); } m_bLockJump = true; } std::cout << "m_bTouchesGround: " << m_bTouchesGround << "\n"; if (m_bTouchesGround == true) { if (m_bRight == true) { m_State = "WALKING_RIGHT"; } else if (m_bLeft == true) { m_State = "WALKING_LEFT"; } } else { m_State = "JUMPING"; } m_PosY += m_VelX; } UpdateScore(); UpdateLives(); UpdateCoins(); HandleStates(); }