本文整理汇总了C++中CCharacterCore类的典型用法代码示例。如果您正苦于以下问题:C++ CCharacterCore类的具体用法?C++ CCharacterCore怎么用?C++ CCharacterCore使用的例子?那么, 这里精选的类代码示例或许可以为您提供帮助。
在下文中一共展示了CCharacterCore类的5个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: Evolve
static void Evolve(CNetObj_Character *pCharacter, int Tick)
{
CWorldCore TempWorld;
CCharacterCore TempCore;
mem_zero(&TempCore, sizeof(TempCore));
TempCore.Init(&TempWorld, g_GameClient.Collision());
TempCore.Read(pCharacter);
while(pCharacter->m_Tick < Tick)
{
pCharacter->m_Tick++;
TempCore.Tick(false);
TempCore.Move();
TempCore.Quantize();
}
TempCore.Write(pCharacter);
}
示例2: Evolve
static void Evolve(CNetObj_Character *pCharacter, int Tick, bool PredictFreeze)
{
CWorldCore TempWorld;
CCharacterCore TempCore;
CTeamsCore TempTeams;
mem_zero(&TempCore, sizeof(TempCore));
mem_zero(&TempTeams, sizeof(TempTeams));
TempCore.Init(&TempWorld, g_GameClient.Collision(), &TempTeams);
TempCore.Read(pCharacter);
while(pCharacter->m_Tick < Tick)
{
pCharacter->m_Tick++;
TempCore.Tick(false, false, PredictFreeze);
TempCore.Move();
TempCore.Quantize();
}
TempCore.Write(pCharacter);
}
示例3: OnPredict
void CGameClient::OnPredict()
{
// store the previous values so we can detect prediction errors
CCharacterCore BeforePrevChar = m_PredictedPrevChar;
CCharacterCore BeforeChar = m_PredictedChar;
// we can't predict without our own id or own character
if(m_Snap.m_LocalClientID == -1 || !m_Snap.m_aCharacters[m_Snap.m_LocalClientID].m_Active)
return;
// don't predict anything if we are paused
if(m_Snap.m_pGameInfoObj && m_Snap.m_pGameInfoObj->m_GameStateFlags&GAMESTATEFLAG_PAUSED)
{
if(m_Snap.m_pLocalCharacter)
m_PredictedChar.Read(m_Snap.m_pLocalCharacter);
if(m_Snap.m_pLocalPrevCharacter)
m_PredictedPrevChar.Read(m_Snap.m_pLocalPrevCharacter);
return;
}
// repredict character
CWorldCore World;
World.m_Tuning = m_Tuning;
// search for players
for(int i = 0; i < MAX_CLIENTS; i++)
{
if(!m_Snap.m_aCharacters[i].m_Active || !m_Snap.m_paPlayerInfos[i])
continue;
g_GameClient.m_aClients[i].m_Predicted.Init(&World, Collision(), &m_Teams);
World.m_apCharacters[i] = &g_GameClient.m_aClients[i].m_Predicted;
World.m_apCharacters[i]->m_Id = m_Snap.m_paPlayerInfos[i]->m_ClientID;
g_GameClient.m_aClients[i].m_Predicted.Read(&m_Snap.m_aCharacters[i].m_Cur);
}
// predict
for(int Tick = Client()->GameTick()+1; Tick <= Client()->PredGameTick(); Tick++)
{
// fetch the local
if(Tick == Client()->PredGameTick() && World.m_apCharacters[m_Snap.m_LocalClientID])
m_PredictedPrevChar = *World.m_apCharacters[m_Snap.m_LocalClientID];
// first calculate where everyone should move
for(int c = 0; c < MAX_CLIENTS; c++)
{
if(!World.m_apCharacters[c])
continue;
mem_zero(&World.m_apCharacters[c]->m_Input, sizeof(World.m_apCharacters[c]->m_Input));
if(m_Snap.m_LocalClientID == c)
{
// apply player input
int *pInput = Client()->GetInput(Tick);
if(pInput)
World.m_apCharacters[c]->m_Input = *((CNetObj_PlayerInput*)pInput);
World.m_apCharacters[c]->Tick(true);
}
else
World.m_apCharacters[c]->Tick(false);
}
// move all players and quantize their data
for(int c = 0; c < MAX_CLIENTS; c++)
{
if(!World.m_apCharacters[c])
continue;
World.m_apCharacters[c]->Move();
World.m_apCharacters[c]->Quantize();
}
// check if we want to trigger effects
if(Tick > m_LastNewPredictedTick)
{
m_LastNewPredictedTick = Tick;
m_NewPredictedTick = true;
if(m_Snap.m_LocalClientID != -1 && World.m_apCharacters[m_Snap.m_LocalClientID])
{
vec2 Pos = World.m_apCharacters[m_Snap.m_LocalClientID]->m_Pos;
int Events = World.m_apCharacters[m_Snap.m_LocalClientID]->m_TriggeredEvents;
if(Events&COREEVENT_GROUND_JUMP) g_GameClient.m_pSounds->PlayAndRecord(CSounds::CHN_WORLD, SOUND_PLAYER_JUMP, 1.0f, Pos);
/*if(events&COREEVENT_AIR_JUMP)
{
GameClient.effects->air_jump(pos);
GameClient.sounds->play_and_record(SOUNDS::CHN_WORLD, SOUND_PLAYER_AIRJUMP, 1.0f, pos);
}*/
//if(events&COREEVENT_HOOK_LAUNCH) snd_play_random(CHN_WORLD, SOUND_HOOK_LOOP, 1.0f, pos);
//if(events&COREEVENT_HOOK_ATTACH_PLAYER) snd_play_random(CHN_WORLD, SOUND_HOOK_ATTACH_PLAYER, 1.0f, pos);
if(Events&COREEVENT_HOOK_ATTACH_GROUND) g_GameClient.m_pSounds->PlayAndRecord(CSounds::CHN_WORLD, SOUND_HOOK_ATTACH_GROUND, 1.0f, Pos);
if(Events&COREEVENT_HOOK_HIT_NOHOOK) g_GameClient.m_pSounds->PlayAndRecord(CSounds::CHN_WORLD, SOUND_HOOK_NOATTACH, 1.0f, Pos);
//if(events&COREEVENT_HOOK_RETRACT) snd_play_random(CHN_WORLD, SOUND_PLAYER_JUMP, 1.0f, pos);
}
}
if(Tick == Client()->PredGameTick() && World.m_apCharacters[m_Snap.m_LocalClientID])
//.........这里部分代码省略.........
示例4: vec4
//.........这里部分代码省略.........
OffsetY = -OffsetY;
vec2 DirY(-Dir.y,Dir.x);
vec2 MuzzlePos = p + Dir * g_pData->m_Weapons.m_aId[iw].m_Muzzleoffsetx + DirY * OffsetY;
RenderTools()->DrawSprite(MuzzlePos.x, MuzzlePos.y, g_pData->m_Weapons.m_aId[iw].m_VisualSize);
}
}
}
Graphics()->QuadsEnd();
switch (Player.m_Weapon)
{
case WEAPON_GUN: RenderHand(&RenderInfo, p, Direction, -3*pi/4, vec2(-15, 4)); break;
case WEAPON_SHOTGUN: RenderHand(&RenderInfo, p, Direction, -pi/2, vec2(-5, 4)); break;
case WEAPON_GRENADE: RenderHand(&RenderInfo, p, Direction, -pi/2, vec2(-4, 7)); break;
}
}
//--- Antiping
// Draw shadows of enemy tees
bool LocalPlayerInGame = m_pClient->m_aClients[m_pClient->m_Snap.m_LocalCid].m_Team != -1;
bool CurPlayerIsEnemy =
IsTeamplay == false ||
(IsTeamplay && m_pClient->m_aClients[m_pClient->m_Snap.m_LocalCid].m_Team != m_pClient->m_aClients[pPlayerInfo->m_ClientId].m_Team);
if (g_Config.m_AntiPing &&
g_Config.m_AntiPing != 2 && // if == 2, than we should show only grenage shadows
LocalPlayerInGame && pInfo.m_Local == false && CurPlayerIsEnemy &&
pPlayerChar && pPlayerChar->m_PlayerState == PLAYERSTATE_PLAYING)
{
CCharacterCore ShadowPlayer;
CNetObj_CharacterCore buf;
m_pClient->m_aClients[pPlayerInfo->m_ClientId].m_Predicted.Write(&buf);
CWorldCore world;
ShadowPlayer.m_pWorld = &world;
ShadowPlayer.Reset();
ShadowPlayer.Read(&buf);
CNetObj_CharacterCore next;
ShadowPlayer.Write(&next);
vec2 Prev = m_pClient->m_aClients[pPlayerInfo->m_ClientId].m_PreviousPrediction;
vec2 NextVec = vec2(next.m_X, next.m_Y);
vec2 ShadowPosition = NextVec;
float dist = distance(NextVec, Prev);
if (dist < 0) dist *= -1;
if (dist < 300) // like it should be usual
ShadowPosition = mix(Prev, NextVec, Client()->PredIntraGameTick());
m_pClient->m_aClients[pPlayerInfo->m_ClientId].m_PreviousPrediction = ShadowPosition;
CTeeRenderInfo shadow = RenderInfo;
float color_body_mix = (shadow.m_ColorBody.r + shadow.m_ColorBody.g + shadow.m_ColorBody.b) / 2.5f;
float color_feet_mix = (shadow.m_ColorFeet.r + shadow.m_ColorFeet.g + shadow.m_ColorFeet.b) / 2.5f;
shadow.m_ColorBody.a = 0.25f;
shadow.m_ColorFeet.a = 0.25f;
shadow.m_ColorBody.r = color_body_mix;
shadow.m_ColorBody.g = color_body_mix;
shadow.m_ColorBody.b = color_body_mix;
shadow.m_ColorFeet.r = color_feet_mix;
shadow.m_ColorFeet.g = color_feet_mix;
示例5: OnPredict
void CGameClient::OnPredict()
{
// store the previous values so we can detect prediction errors
CCharacterCore BeforePrevChar = m_PredictedPrevChar;
CCharacterCore BeforeChar = m_PredictedChar;
// we can't predict without our own id or own character
if(m_LocalClientID == -1 || !m_Snap.m_aCharacters[m_LocalClientID].m_Active)
return;
// don't predict anything if we are paused or round/game is over
if(m_Snap.m_pGameData && m_Snap.m_pGameData->m_GameStateFlags&(GAMESTATEFLAG_PAUSED|GAMESTATEFLAG_ROUNDOVER|GAMESTATEFLAG_GAMEOVER))
{
if(m_Snap.m_pLocalCharacter)
m_PredictedChar.Read(m_Snap.m_pLocalCharacter);
if(m_Snap.m_pLocalPrevCharacter)
m_PredictedPrevChar.Read(m_Snap.m_pLocalPrevCharacter);
return;
}
// repredict character
CWorldCore World;
World.m_Tuning = m_Tuning;
// search for players
for(int i = 0; i < MAX_CLIENTS; i++)
{
if(!m_Snap.m_aCharacters[i].m_Active)
continue;
m_aClients[i].m_Predicted.Init(&World, Collision());
World.m_apCharacters[i] = &m_aClients[i].m_Predicted;
m_aClients[i].m_Predicted.Read(&m_Snap.m_aCharacters[i].m_Cur);
}
// predict
for(int Tick = Client()->GameTick()+1; Tick <= Client()->PredGameTick(); Tick++)
{
// fetch the local
if(Tick == Client()->PredGameTick() && World.m_apCharacters[m_LocalClientID])
m_PredictedPrevChar = *World.m_apCharacters[m_LocalClientID];
// first calculate where everyone should move
for(int c = 0; c < MAX_CLIENTS; c++)
{
if(!World.m_apCharacters[c])
continue;
mem_zero(&World.m_apCharacters[c]->m_Input, sizeof(World.m_apCharacters[c]->m_Input));
if(m_LocalClientID == c)
{
// apply player input
const int *pInput = Client()->GetInput(Tick);
if(pInput)
World.m_apCharacters[c]->m_Input = *((const CNetObj_PlayerInput*)pInput);
World.m_apCharacters[c]->Tick(true);
}
else
World.m_apCharacters[c]->Tick(false);
}
// move all players and quantize their data
for(int c = 0; c < MAX_CLIENTS; c++)
{
if(!World.m_apCharacters[c])
continue;
World.m_apCharacters[c]->Move();
World.m_apCharacters[c]->Quantize();
}
// check if we want to trigger effects
if(Tick > m_LastNewPredictedTick)
{
m_LastNewPredictedTick = Tick;
if(m_LocalClientID != -1 && World.m_apCharacters[m_LocalClientID])
ProcessTriggeredEvents(World.m_apCharacters[m_LocalClientID]->m_TriggeredEvents, World.m_apCharacters[m_LocalClientID]->m_Pos);
}
if(Tick == Client()->PredGameTick() && World.m_apCharacters[m_LocalClientID])
m_PredictedChar = *World.m_apCharacters[m_LocalClientID];
}
if(g_Config.m_Debug && g_Config.m_ClPredict && m_PredictedTick == Client()->PredGameTick())
{
CNetObj_CharacterCore Before = {0}, Now = {0}, BeforePrev = {0}, NowPrev = {0};
BeforeChar.Write(&Before);
BeforePrevChar.Write(&BeforePrev);
m_PredictedChar.Write(&Now);
m_PredictedPrevChar.Write(&NowPrev);
if(mem_comp(&Before, &Now, sizeof(CNetObj_CharacterCore)) != 0)
{
Console()->Print(IConsole::OUTPUT_LEVEL_DEBUG, "client", "prediction error");
for(unsigned i = 0; i < sizeof(CNetObj_CharacterCore)/sizeof(int); i++)
if(((int *)&Before)[i] != ((int *)&Now)[i])
{
char aBuf[256];
//.........这里部分代码省略.........