示例#1
0
void CModAPI_Component_Items::OnRender()
{
    if(Client()->State() < IClient::STATE_ONLINE)
        return;

    int Num = Client()->SnapNumItems(IClient::SNAP_CURRENT);
    for(int i = 0; i < Num; i++)
    {
        IClient::CSnapItem Item;
        const void *pData = Client()->SnapGetItem(IClient::SNAP_CURRENT, i, &Item);

        switch(Item.m_Type)
        {
        case NETOBJTYPE_MODAPI_SPRITE:
        {
            const void *pPrev = Client()->SnapFindItem(IClient::SNAP_PREV, Item.m_Type, Item.m_ID);
            if(pPrev)
                RenderModAPISprite((const CNetObj_ModAPI_Sprite *)pPrev, (const CNetObj_ModAPI_Sprite *)pData);
        }
        break;

        case NETOBJTYPE_MODAPI_ANIMATEDSPRITE:
        {
            const void *pPrev = Client()->SnapFindItem(IClient::SNAP_PREV, Item.m_Type, Item.m_ID);
            if(pPrev)
                RenderModAPIAnimatedSprite((const CNetObj_ModAPI_AnimatedSprite *)pPrev, (const CNetObj_ModAPI_AnimatedSprite *)pData);
        }
        break;

        case NETOBJTYPE_MODAPI_SPRITECHARACTER:
        {
            const void *pPrev = Client()->SnapFindItem(IClient::SNAP_PREV, Item.m_Type, Item.m_ID);
            if(pPrev)
                RenderModAPISpriteCharacter((const CNetObj_ModAPI_SpriteCharacter *)pPrev, (const CNetObj_ModAPI_SpriteCharacter *)pData);
        }
        break;

        case NETOBJTYPE_MODAPI_ANIMATEDSPRITECHARACTER:
        {
            const void *pPrev = Client()->SnapFindItem(IClient::SNAP_PREV, Item.m_Type, Item.m_ID);
            if(pPrev)
                RenderModAPIAnimatedSpriteCharacter((const CNetObj_ModAPI_AnimatedSpriteCharacter *)pPrev, (const CNetObj_ModAPI_AnimatedSpriteCharacter *)pData);
        }
        break;

        case NETOBJTYPE_MODAPI_LINE:
        {
            RenderModAPILine((const CNetObj_ModAPI_Line *)pData);
        }
        break;

        case NETOBJTYPE_MODAPI_TEXT:
        {
            const void *pPrev = Client()->SnapFindItem(IClient::SNAP_PREV, Item.m_Type, Item.m_ID);
            if(pPrev)
                RenderModAPIText((const CNetObj_ModAPI_Text *)pPrev, (const CNetObj_ModAPI_Text *)pData);
        }
        break;

        case NETOBJTYPE_MODAPI_ANIMATEDTEXT:
        {
            const void *pPrev = Client()->SnapFindItem(IClient::SNAP_PREV, Item.m_Type, Item.m_ID);
            if(pPrev)
                RenderModAPIAnimatedText((const CNetObj_ModAPI_AnimatedText *)pPrev, (const CNetObj_ModAPI_AnimatedText *)pData);
        }
        break;

        case NETOBJTYPE_MODAPI_TEXTCHARACTER:
        {
            const void *pPrev = Client()->SnapFindItem(IClient::SNAP_PREV, Item.m_Type, Item.m_ID);
            if(pPrev)
                RenderModAPITextCharacter((const CNetObj_ModAPI_TextCharacter *)pPrev, (const CNetObj_ModAPI_TextCharacter *)pData);
        }
        break;

        case NETOBJTYPE_MODAPI_ANIMATEDTEXTCHARACTER:
        {
            const void *pPrev = Client()->SnapFindItem(IClient::SNAP_PREV, Item.m_Type, Item.m_ID);
            if(pPrev)
                RenderModAPIAnimatedTextCharacter((const CNetObj_ModAPI_AnimatedTextCharacter *)pPrev, (const CNetObj_ModAPI_AnimatedTextCharacter *)pData);
        }
        break;
        }
    }

    int64 CurrentTime = time_get();
    int64 DeltaTime = CurrentTime - m_LastTime;
    m_LastTime = CurrentTime;

    if(Client()->State() == IClient::STATE_DEMOPLAYBACK)
    {
        const IDemoPlayer::CInfo *pInfo = DemoPlayer()->BaseInfo();
        if(!pInfo->m_Paused)
            UpdateEvents((float)((DeltaTime)/(double)time_freq())*pInfo->m_Speed);
    }
    else
    {
        if(m_pClient->m_Snap.m_pGameData && !(m_pClient->m_Snap.m_pGameData->m_GameStateFlags&GAMESTATEFLAG_PAUSED))
            UpdateEvents((float)((DeltaTime)/(double)time_freq()));
    }
}
示例#2
0
void CItems::OnRender()
{
	if(Client()->State() < IClient::STATE_ONLINE)
		return;

	int Num = Client()->SnapNumItems(IClient::SNAP_CURRENT);
	for(int i = 0; i < Num; i++)
	{
		IClient::CSnapItem Item;
		const void *pData = Client()->SnapGetItem(IClient::SNAP_CURRENT, i, &Item);

		if(Item.m_Type == NETOBJTYPE_PROJECTILE)
		{
			RenderProjectile((const CNetObj_Projectile *)pData, Item.m_ID);
		}
		else if(Item.m_Type == NETOBJTYPE_PICKUP)
		{
			const void *pPrev = Client()->SnapFindItem(IClient::SNAP_PREV, Item.m_Type, Item.m_ID);
			if(pPrev)
				RenderPickup((const CNetObj_Pickup *)pPrev, (const CNetObj_Pickup *)pData);
		}
		else if(Item.m_Type == NETOBJTYPE_LASER)
		{
			RenderLaser((const CNetObj_Laser *)pData);
		}
		//ModAPI
		else if(Item.m_Type == NETOBJTYPE_MODAPI_SPRITE)
		{
			const void *pPrev = Client()->SnapFindItem(IClient::SNAP_PREV, Item.m_Type, Item.m_ID);
			if(pPrev)
				RenderModAPISprite((const CNetObj_ModAPI_Sprite *)pPrev, (const CNetObj_ModAPI_Sprite *)pData);
		}
		else if(Item.m_Type == NETOBJTYPE_MODAPI_SPRITECHARACTER)
		{
			const void *pPrev = Client()->SnapFindItem(IClient::SNAP_PREV, Item.m_Type, Item.m_ID);
			if(pPrev)
				RenderModAPISpriteCharacter((const CNetObj_ModAPI_SpriteCharacter *)pPrev, (const CNetObj_ModAPI_SpriteCharacter *)pData);
		}
		else if(Item.m_Type == NETOBJTYPE_MODAPI_LINE)
		{
			RenderModAPILine((const CNetObj_ModAPI_Line *)pData);
		}
	}

	// render flag
	for(int i = 0; i < Num; i++)
	{
		IClient::CSnapItem Item;
		const void *pData = Client()->SnapGetItem(IClient::SNAP_CURRENT, i, &Item);

		if(Item.m_Type == NETOBJTYPE_FLAG)
		{
			const void *pPrev = Client()->SnapFindItem(IClient::SNAP_PREV, Item.m_Type, Item.m_ID);
			if (pPrev)
			{
				const void *pPrevGameDataFlag = Client()->SnapFindItem(IClient::SNAP_PREV, NETOBJTYPE_GAMEDATAFLAG, m_pClient->m_Snap.m_GameDataFlagSnapID);
				RenderFlag(static_cast<const CNetObj_Flag *>(pPrev), static_cast<const CNetObj_Flag *>(pData),
							static_cast<const CNetObj_GameDataFlag *>(pPrevGameDataFlag), m_pClient->m_Snap.m_pGameDataFlag);
			}
		}
	}
}