Exemplo n.º 1
0
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;
}
Exemplo n.º 2
0
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();
}
Exemplo n.º 3
0
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 );
        }
    }
}