int CHudHealth::MsgFunc_Damage( const char *pszName, int iSize, void *pbuf ) { BEGIN_READ( pbuf, iSize ); int armor = READ_BYTE(); // armor int damageTaken = READ_BYTE(); // health long bitsDamage = READ_LONG(); // damage bits vec3_t vecFrom; for( int i = 0; i < 3; i++ ) vecFrom[i] = READ_COORD(); UpdateTiles( gHUD.m_flTime, bitsDamage ); // Actually took damage? if( damageTaken > 0 || armor > 0 ) { CalcDamageDirection( vecFrom ); if( gMobileEngfuncs && damageTaken > 0 ) { float time = damageTaken * 4.0f; if( time > 200.0f ) time = 200.0f; gMobileEngfuncs->pfnVibrate( time, 0 ); } } return 1; }
static void DoLayers() { /* ---- */ /* Open */ /* ---- */ XML_TKEM xml( gArgs.GetXML(), flog ); TiXmlElement* layer = xml.GetFirstLayer(); /* ------------------------- */ /* Kill layers outside range */ /* ------------------------- */ TiXmlNode* lyrset = layer->Parent(); TiXmlElement* next; for( ; layer; layer = next ) { // next layer0 before deleting anything next = layer->NextSiblingElement(); int z = atoi( layer->Attribute( "z" ) ); if( z < gArgs.zmin || z > gArgs.zmax ) lyrset->RemoveChild( layer ); } /* --------------------------- */ /* Copies for remaining layers */ /* --------------------------- */ layer = lyrset->FirstChild( "t2_layer" )->ToElement(); for( ; layer; layer = layer->NextSiblingElement() ) { int z = atoi( layer->Attribute( "z" ) ); gArgs.NewLayer( z ); UpdateTiles( layer ); } /* ---- */ /* Save */ /* ---- */ xml.Save( "xmltmp.txt", true ); /* ------------------ */ /* Rename version two */ /* ------------------ */ gArgs.RenameXML(); }
int CHudHealth::MsgFunc_Damage(const char *pszName, int iSize, void *pbuf) { BEGIN_READ(pbuf, iSize); int armor = READ_BYTE(); // armor int damageTaken = READ_BYTE(); // health long bitsDamage = READ_LONG(); // damage bits vec3_t vecFrom; for(int i = 0; i < 3; i++) vecFrom[i] = READ_COORD(); UpdateTiles(gHUD.m_flTime, bitsDamage); // Actually took damage? if(damageTaken > 0 || armor > 0) CalcDamageDirection(vecFrom); return 1; }
void StateMenu::UpdatePlay( const double delta_time ) { switch( m_SubState_Play ) { case PlayState::INITPLAYER : { m_PlayMode = PLAYMODE::H_VS_C; InitHexagonTile(); m_TempNumberDraw = nullptr; GenerateNumbers(); m_Player_A.Color = HEXACOLOR::PLAYER_A; m_Player_B.Color = HEXACOLOR::PLAYER_B; m_SubState_Play = PlayState::WAITPLAYER; } break; case PlayState::WAITPLAYER: { int ret[7]; // 1 pointed tile, 6 neighbor UpdateTiles( delta_time , ret ); if( m_PlayMode == PLAYMODE::H_VS_C ) { if( m_PlayerTurn == PlayerType::B ) { steady_clock::time_point _time_now = steady_clock::now(); double _delta_time_seconds = ( duration_cast<milliseconds>(_time_now - m_TimePoint01).count() ) ; if( 2000 < _delta_time_seconds) { // // get answer from AI Player* playernow; if( m_PlayerTurn == PlayerType::B ) { playernow = &m_Player_B; } else { playernow = &m_Player_A; } playernow->NumberIndex = playernow->NumberIndex + 1; m_AI_Answer = SolveTargetTile( playernow->GetNextNumber() ); m_SubState_Play = PlayState::EXECUTE; } } // } else if( m_PlayMode == PLAYMODE::H_VS_N ) { // TODO: // get answer from the-thing in network // if answer is available & valid : // --m_SubState_Play = PlayState::EXECUTE; // } else if( m_PlayMode == PLAYMODE::C_VS_C ) { // TODO: // get answer from AI // } } break; case PlayState::EXECUTE: { int ret[7]; // 1 pointed tile, 6 neighbor UpdateTiles( delta_time , ret ); if( ret[0] != -1 ) { if( m_HexTiles[ ret[0] ]->Color == HEXACOLOR::NETRAL || m_HexTiles[ ret[0] ]->Color == HEXACOLOR::HOVER ) { Player* playernow; if( m_PlayerTurn == PlayerType::B ) { playernow = &m_Player_B; } else { m_Player_A.NumberIndex = m_Player_A.NumberIndex+1; playernow = &m_Player_A; } // pointed tile m_HexTiles[ ret[0] ]->Color = playernow->Color; m_HexTiles[ ret[0] ]->Number = playernow->GetNextNumber(); // neighbor for(unsigned int i=1; i<7; i++) { if( ret[i] >=0 && ret[i]<(m_HexaColCount * m_HexaRowCount) ) { if( m_HexTiles[ ret[0] ]->Number > m_HexTiles[ ret[i] ]->Number ) { if( !(m_HexTiles[ ret[i] ]->Color == HEXACOLOR::NETRAL || m_HexTiles[ ret[i] ]->Color == HEXACOLOR::HOVER) ) m_HexTiles[ ret[i] ]->Color = playernow->Color; } } } // check if game finished // todo : // change turn if( m_PlayerTurn == PlayerType::B ) { m_PlayerTurn = PlayerType::A; m_AnimGreenPop->SetAnimLoop(XDAnimObject::ANIMLOOP::ONCE); } else { m_PlayerTurn = PlayerType::B; m_AnimBluePop->SetAnimLoop(XDAnimObject::ANIMLOOP::ONCE); m_TimePoint01 = steady_clock::now(); } } } m_SubState_Play = PlayState::WAITPLAYER; } break; case PlayState::GAMEOVER: { } break; } unsigned int index =0; for(int j=0; j<m_HexaColCount; j++) { for(int i=0; i<m_HexaRowCount; i++) { m_HexTiles[ index++ ]->Update( delta_time ); } } }