本文整理汇总了C++中GetAngle函数的典型用法代码示例。如果您正苦于以下问题:C++ GetAngle函数的具体用法?C++ GetAngle怎么用?C++ GetAngle使用的例子?那么恭喜您, 这里精选的函数代码示例或许可以为您提供帮助。
在下文中一共展示了GetAngle函数的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: meanVal
void CKinectProc::BatchAngel(double *data,double *outputData,int height,int width,int channel)
{
int lineWidth = channel * width;
for (int i = 0; i < height; ++i)
{
vector<double> meanVal(channel,0);
GetBodyCenter(data + i*lineWidth,width,channel,meanVal);
std::cout<<"BodyNo:"<<i<<". "<<" body center ok!"<<std::endl;
for (int j = 0; j < width; ++j)
{
vector<double> val(channel,0);
GetAngle(data + i*lineWidth + j * channel,&meanVal[0],channel,val);
for (int k = 0; k < channel; ++k)
{
outputData[i*lineWidth + j * channel + k] = val[k];
}
//val.clear();
}
std::cout<<"BodyNo:"<<i<<". "<<" Angle ok!"<<std::endl;
//meanVal.clear();
}
}
示例2: GetAngle
void Encoder::Load(physics::ModelPtr model, sdf::ElementPtr sdf) {
this->model = model;
// Parse SDF properties
joint = model->GetJoint(sdf->Get<std::string>("joint"));
if (sdf->HasElement("topic")) {
topic = sdf->Get<std::string>("topic");
} else {
topic = "~/" + sdf->GetAttribute("name")->GetAsString();
}
if (sdf->HasElement("units")) {
radians = sdf->Get<std::string>("units") != "degrees";
} else {
radians = true;
}
zero = GetAngle();
stopped = true;
stop_value = 0;
gzmsg << "Initializing encoder: " << topic << " joint=" << joint->GetName()
<< " radians=" << radians << std::endl;
// Connect to Gazebo transport for messaging
std::string scoped_name =
model->GetWorld()->GetName() + "::" + model->GetScopedName();
boost::replace_all(scoped_name, "::", "/");
node = transport::NodePtr(new transport::Node());
node->Init(scoped_name);
command_sub = node->Subscribe(topic + "/control", &Encoder::Callback, this);
pos_pub = node->Advertise<msgs::Float64>(topic + "/position");
vel_pub = node->Advertise<msgs::Float64>(topic + "/velocity");
// Connect to the world update event.
// This will trigger the Update function every Gazebo iteration
updateConn = event::Events::ConnectWorldUpdateBegin(
boost::bind(&Encoder::Update, this, _1));
}
示例3: switch
void EDGE_MODULE::Mirror( wxPoint aCentre, bool aMirrorAroundXAxis )
{
// Mirror an edge of the footprint. the layer is not modified
// This is a footprint shape modification.
switch( GetShape() )
{
case S_ARC:
SetAngle( -GetAngle() );
//Fall through
default:
case S_SEGMENT:
if( aMirrorAroundXAxis )
{
MIRROR( m_Start0.y, aCentre.y );
MIRROR( m_End0.y, aCentre.y );
}
else
{
MIRROR( m_Start0.x, aCentre.x );
MIRROR( m_End0.x, aCentre.x );
}
break;
case S_POLYGON:
// polygon corners coordinates are always relative to the
// footprint position, orientation 0
for( unsigned ii = 0; ii < m_PolyPoints.size(); ii++ )
{
if( aMirrorAroundXAxis )
MIRROR( m_PolyPoints[ii].y, aCentre.y );
else
MIRROR( m_PolyPoints[ii].x, aCentre.x );
}
}
SetDrawCoord();
}
示例4: GetMomentum
/**\brief Accelerates the ship.
* \sa Model::GetAcceleration
*/
void Ship::Accelerate( void ) {
Trig *trig = Trig::Instance();
Coordinate momentum = GetMomentum();
float angle = static_cast<float>(trig->DegToRad( GetAngle() ));
float speed = shipStats.GetMaxSpeed()*engineBooster;
float acceleration = (shipStats.GetForceOutput() *engineBooster ) / shipStats.GetMass();
momentum += Coordinate( trig->GetCos( angle ) * acceleration * Timer::GetDelta(),
-1 * trig->GetSin( angle ) * acceleration * Timer::GetDelta() );
momentum.EnforceMagnitude(speed);
SetMomentum( momentum );
status.isAccelerating = true;
// Play engine sound
float engvol = OPTION(float,"options/sound/engines");
Coordinate offset = GetWorldPosition() - Camera::Instance()->GetFocusCoordinate();
if ( this->GetDrawOrder() == DRAW_ORDER_SHIP )
engvol = engvol * NON_PLAYER_SOUND_RATIO ;
this->engine->GetSound()->SetVolume( engvol );
this->engine->GetSound()->PlayNoRestart( offset );
}
示例5: switch
void EDGE_MODULE::Flip(const wxPoint& aCentre )
{
wxPoint pt;
switch( GetShape() )
{
case S_ARC:
SetAngle( -GetAngle() );
//Fall through
default:
case S_SEGMENT:
pt = GetStart();
pt.y -= aCentre.y;
pt.y = -pt.y;
pt.y += aCentre.y;
SetStart( pt );
pt = GetEnd();
pt.y -= aCentre.y;
pt.y = -pt.y;
pt.y += aCentre.y;
SetEnd( pt );
NEGATE( m_Start0.y );
NEGATE( m_End0.y );
break;
case S_POLYGON:
// polygon corners coordinates are always relative to the
// footprint position, orientation 0
for( unsigned ii = 0; ii < m_PolyPoints.size(); ii++ )
NEGATE( m_PolyPoints[ii].y );
}
SetLayer( FlipLayer( GetLayer() ) );
}
示例6: assert
std::string
Simbox::getStormHeader(int cubetype, int nx, int ny, int nz, bool flat, bool ascii) const
{
if(flat == false)
assert(topName_ != "");
std::string header;
if(ascii == false)
header = "storm_petro_binary\n";
else
header = "storm_petro_ascii\n";
header += "0 "+NRLib::ToString(cubetype) +" "+ NRLib::ToString(RMISSING,6)+"\n";
header += "FFTGrid\n";
if(flat == false)
header += NRLib::ToString(GetXMin(),6) +" "+ NRLib::ToString(GetLX(),6) +" "+ NRLib::ToString(GetYMin(),6) +" "+ NRLib::ToString(GetLY(),6) +" "+ topName_ +" "+ botName_ +" 0.0 0.0\n";
else
header += NRLib::ToString(GetXMin(),6) +" "+ NRLib::ToString(GetLX(),6) +" "+ NRLib::ToString(GetYMin(),6) +" "+ NRLib::ToString(GetLY(),6) +" 0.0 "+ NRLib::ToString(GetLZ(),6)+" 0.0 0.0\n";
header += NRLib::ToString(GetLZ(),6) +" "+ NRLib::ToString(GetAngle()*180/NRLib::Pi,6)+"\n\n";
header += NRLib::ToString(nx) +" "+ NRLib::ToString(ny) +" "+ NRLib::ToString(nz)+"\n";
std::string strHeader(header);
return(strHeader);
}
示例7: GetAngle
void ribi::QtPathArrowItem::paint(QPainter *painter, const QStyleOptionGraphicsItem *, QWidget *)
{
painter->setRenderHint(QPainter::Antialiasing);
if (this->isSelected() || this->hasFocus())
{
painter->setPen(m_focus_pen);
}
else
{
painter->setPen(m_pen);
}
{
//Draw the lines
painter->drawLine(m_tail_pos,m_mid_pos[0]);
const std::size_t max = m_mid_pos.size() - 1; //-1, because the line goes to the next index
for (std::size_t i = 0; i!= max; ++i)
{
painter->drawLine(m_mid_pos[i],m_mid_pos[i+1]);
}
painter->drawLine(m_mid_pos[ m_mid_pos.size() - 1 ],m_head_pos);
}
const double sz = 10.0; //pixels
if (m_tail)
{
const double pi = boost::math::constants::pi<double>();
const double dx = m_mid_pos[0].x() - m_tail_pos.x();
const double dy = m_mid_pos[0].y() - m_tail_pos.y();
double angle = GetAngle(dx,dy);
if (dy >= 0.0) angle = (1.0 * pi) + angle;
//const QPointF m_tail_pos(m_tail_x,m_tail_y);
const QPointF p1
= m_tail_pos + QPointF(
std::sin(angle + pi + (pi * 0.1)) * sz,
-std::cos(angle + pi + (pi * 0.1)) * sz);
const QPointF p2
= m_tail_pos + QPointF(
std::sin(angle + pi - (pi * 0.1)) * sz,
-std::cos(angle + pi - (pi * 0.1)) * sz);
painter->drawPolygon(QPolygonF() << m_tail_pos << p1 << p2);
}
if (m_head)
{
const double pi = boost::math::constants::pi<double>();
const double dx = m_head_pos.x() - m_mid_pos[m_mid_pos.size() - 1].x();
const double dy = m_head_pos.y() - m_mid_pos[m_mid_pos.size() - 1].y();
double angle = GetAngle(dx,dy);
if (dy >= 0.0) angle = (1.0 * pi) + angle;
const QPointF p1
= m_head_pos + QPointF(
std::sin(angle + 0.0 + (pi * 0.1)) * sz,
-std::cos(angle + 0.0 + (pi * 0.1)) * sz);
const QPointF p2
= m_head_pos + QPointF(
std::sin(angle + 0.0 - (pi * 0.1)) * sz,
-std::cos(angle + 0.0 - (pi * 0.1)) * sz);
painter->drawPolygon(QPolygonF() << m_head_pos << p1 << p2);
}
}
示例8: WinMain
//.........这里部分代码省略.........
{
multiplier = 5.0f;
}
if(Length(acceleration) > 0)
{
acceleration = Normalize(acceleration) * multiplier;
}
}
acceleration = acceleration - (entity->velocity * 0.05f);
Vector2 new_velocity = (acceleration * timestep) + entity->velocity;
Vector2 new_position = (acceleration * 0.5f * timestep * timestep) + (new_velocity * timestep) + GetCenter(entity->bounds);
Rect2 collision_box = RectPosSize(new_position.x, new_position.y, GetWidth(entity->bounds), GetHeight(entity->bounds));
bool intersects = false;
for(int j = 0; j < entities.count; j++)
{
if(j != i)
{
Entity *other_entity = entities.entities + j;
intersects = intersects || Intersect(other_entity->bounds, collision_box);
}
}
if(!intersects)
{
entity->velocity = new_velocity;
entity->bounds = RectPosSize(new_position.x, new_position.y, GetWidth(entity->bounds), GetHeight(entity->bounds));
}
else
{
entity->velocity = V2(0, 0);
}
switch(entity->type)
{
case EntityType_Box:
{
DrawRectangle(entity->bounds.min.x, entity->bounds.min.y,
GetWidth(entity->bounds), GetHeight(entity->bounds),
backbuffer, V4(1.0f, 0.0f, 0.0f, 1.0f));
}
break;
case EntityType_Player:
{
float angle = GetAngle(entity->velocity);
Direction direction = AngleToDirection(angle);
Vector4 color = V4(1.0f, 1.0f, 1.0f, 0.0f);
if(direction == Direction_Up)
{
color = V4(1.0f, 0.0f, 0.0f, 1.0f);
}
else if(direction == Direction_Down)
{
color = V4(1.0f, 1.0f, 0.0f, 1.0f);
}
else if(direction == Direction_Left)
{
color = V4(0.0f, 1.0f, 1.0f, 1.0f);
}
else if(direction == Direction_Right)
{
color = V4(0.0f, 1.0f, 0.0f, 1.0f);
}
char output[255];
sprintf(output, "%f\n", angle);
OutputDebugStringA(output);
DrawRectangle(300,
300,
10, 10,
backbuffer, color);
DrawRectangle(entity->bounds.min.x,
entity->bounds.min.y,
GetWidth(entity->bounds), GetHeight(entity->bounds),
backbuffer, intersects ? V4(0.5f, 0.0f, 0.0f, 0.5f) : V4(0.5f, 0.5f, 0.5f, 0.5f));
DrawBitmap(entity->bounds.min.x,
entity->bounds.min.y,
GetWidth(entity->bounds), GetHeight(entity->bounds),
backbuffer, player_head);
}
break;
}
}
}
StretchDIBits(window_context,
0, 0, backbuffer.width, backbuffer.height,
0, 0, backbuffer.width, backbuffer.height,
backbuffer.pixels, &bitmap_info, DIB_RGB_COLORS, SRCCOPY);
}
return 0;
}
示例9: GetAngle
bool Shooter::IsAtAngle(){
bool ontarget=angle_pid->OnTarget();
GetAngle();
return ontarget;
}
示例10: GetAngle
/**
*@brief ÒÑ֪бÂÊ»ñµÃœÇ¶È
*@param rake [in] бÂÊ
*@return œÇ¶ÈÊý
*/
float CalHOT::GetRakeAngle(float rake)
{
return GetAngle(GetRakeRadian(rake));
}
示例11: vec4
void CPlayers::RenderPlayer(
const CNetObj_Character *pPrevChar,
const CNetObj_Character *pPlayerChar,
const CNetObj_PlayerInfo *pPrevInfo,
const CNetObj_PlayerInfo *pPlayerInfo
)
{
CNetObj_Character Prev;
CNetObj_Character Player;
Prev = *pPrevChar;
Player = *pPlayerChar;
CNetObj_PlayerInfo pInfo = *pPlayerInfo;
CTeeRenderInfo RenderInfo = m_pClient->m_aClients[pInfo.m_ClientId].m_RenderInfo;
// check for teamplay modes
bool IsTeamplay = false;
bool NewTick = m_pClient->m_NewTick;
if(m_pClient->m_Snap.m_pGameobj)
IsTeamplay = (m_pClient->m_Snap.m_pGameobj->m_Flags&GAMEFLAG_TEAMS) != 0;
// check for ninja
if (Player.m_Weapon == WEAPON_NINJA)
{
// change the skin for the player to the ninja
int Skin = m_pClient->m_pSkins->Find("x_ninja");
if(Skin != -1)
{
if(IsTeamplay)
RenderInfo.m_Texture = m_pClient->m_pSkins->Get(Skin)->m_ColorTexture;
else
{
RenderInfo.m_Texture = m_pClient->m_pSkins->Get(Skin)->m_OrgTexture;
RenderInfo.m_ColorBody = vec4(1,1,1,1);
RenderInfo.m_ColorFeet = vec4(1,1,1,1);
}
}
}
// set size
RenderInfo.m_Size = 64.0f;
float IntraTick = Client()->IntraGameTick();
if(Player.m_Health < 0) // dont render dead players
return;
float Angle = mix((float)Prev.m_Angle, (float)Player.m_Angle, IntraTick)/256.0f;
//float angle = 0;
if(pInfo.m_Local && Client()->State() != IClient::STATE_DEMOPLAYBACK)
{
// just use the direct input if it's local player we are rendering
Angle = GetAngle(m_pClient->m_pControls->m_MousePos);
}
else
{
/*
float mixspeed = Client()->FrameTime()*2.5f;
if(player.attacktick != prev.attacktick) // shooting boosts the mixing speed
mixspeed *= 15.0f;
// move the delta on a constant speed on a x^2 curve
float current = g_GameClient.m_aClients[info.cid].angle;
float target = player.angle/256.0f;
float delta = angular_distance(current, target);
float sign = delta < 0 ? -1 : 1;
float new_delta = delta - 2*mixspeed*sqrt(delta*sign)*sign + mixspeed*mixspeed;
// make sure that it doesn't vibrate when it's still
if(fabs(delta) < 2/256.0f)
angle = target;
else
angle = angular_approach(current, target, fabs(delta-new_delta));
g_GameClient.m_aClients[info.cid].angle = angle;*/
}
// use preditect players if needed
if(pInfo.m_Local && g_Config.m_ClPredict && Client()->State() != IClient::STATE_DEMOPLAYBACK)
{
if(!m_pClient->m_Snap.m_pLocalCharacter || (m_pClient->m_Snap.m_pLocalCharacter->m_Health < 0) || (m_pClient->m_Snap.m_pGameobj && m_pClient->m_Snap.m_pGameobj->m_GameOver))
{
}
else
{
// apply predicted results
m_pClient->m_PredictedChar.Write(&Player);
m_pClient->m_PredictedPrevChar.Write(&Prev);
IntraTick = Client()->PredIntraGameTick();
NewTick = m_pClient->m_NewPredictedTick;
}
}
vec2 Direction = GetDirection((int)(Angle*256.0f));
vec2 Position = mix(vec2(Prev.m_X, Prev.m_Y), vec2(Player.m_X, Player.m_Y), IntraTick);
vec2 Vel = mix(vec2(Prev.m_VelX/256.0f, Prev.m_VelY/256.0f), vec2(Player.m_VelX/256.0f, Player.m_VelY/256.0f), IntraTick);
m_pClient->m_pFlow->Add(Position, Vel*100.0f, 10.0f);
//.........这里部分代码省略.........
示例12: EnforcedGhostCorr
// 이 함수.. 오브젝트 서브 클래스로 분리 예정..
void CMover::ProcessMove()
{
if( m_pActMover->IsSit() )
return;
EnforcedGhostCorr(); // 고스트의 강제 동기가 필요하다면 실행
ApproachGhostAngle(); // 고스트의 목표 각도로의 점진적인 각도의 변경
if( IsEmptyDest() )
return;
if( m_pActMover->IsActAttack() )
return;
D3DXVECTOR3 vPos = GetPos();
D3DXVECTOR3 vDestPos = m_vDestPos;
if( !IsEmptyDestPos() ) // 좌표
{
bool bPositiveX = ( (vPos.x - vDestPos.x) > 0.0f );
bool bPositiveZ = ( (vPos.z - vDestPos.z) > 0.0f );
#ifdef __BS_FIX_ARRIVEPOS_ALGO // 마우스 목적좌표 이동시 절대축과 같은경우 중간에 멈추는 현상이 있었다.
if( ( bPositiveX != m_bPositiveX || bPositiveZ != m_bPositiveZ ) )
{
if( IsActiveMover( ) )
{
D3DXVECTOR3 kDir = vPos - vDestPos ;
D3DXVec3Normalize( &kDir, &kDir );
D3DXVECTOR3 kMyDir;
AngleToVectorXZ( &kMyDir, GetAngle(), 1.0f );
D3DXVec3Normalize( &kMyDir, &kMyDir );
float fAngle = D3DXVec3Dot( &kDir, &kMyDir );
if( fAngle > 0.0f )
{
OnArriveAtPos( );
return;
}
}
else
{
OnArriveAtPos( );
return;
}
}
#else
if( ( bPositiveX != m_bPositiveX || bPositiveZ != m_bPositiveZ ) )
{
OnArriveAtPos(); // 좌표에 도착했을 때의 처리
return;
}
#endif
}
else // 오브젝트
{
CCtrl* pObj = prj.GetCtrl( m_idDest );
if( IsValidObj( pObj ) == FALSE )
{
SendActMsg( OBJMSG_STAND );
return;
}
vDestPos = pObj->GetPos();
if( m_pActMover->IsFly() )
{
BOOL bRangeObj = pObj->IsRangeObj( this, m_fArrivalRange );
if( bRangeObj == TRUE )
{
ClearDestObj(); // 그외는 목표에 도착하면 멈춤.
#ifdef __WORLDSERVER
OnArrive( pObj->GetId(), 0 );
#endif // __WORLDSERVER
}
}
else
{
if( pObj->IsRangeObj( this, m_fArrivalRange ) ) // 3D 충돌에 실패했지만
{
ProcessMoveArrival( pObj );
return;
}
}
}
// 공중 추적
if( m_pActMover->IsFly() )
{
if( m_uRemnantCorrFrm > 0 )
{
D3DXVECTOR3 v = vDestPos - vPos;
m_pActMover->m_fDistance = D3DXVec3Length( &v );
SendActMsg( OBJMSG_TURNMOVE, (int)GetDegree( vDestPos, vPos ), (int)GetDegreeX( vDestPos, vPos ), 0 );
m_uRemnantCorrFrm--;
}
}
else
{
if( m_uRemnantCorrFrm > 0 )
//.........这里部分代码省略.........
示例13: color
void QtArrowItem::paint(QPainter *painter, const QStyleOptionGraphicsItem *, QWidget *)
{
painter->setRenderHint(QPainter::Antialiasing);
if (this->isSelected())
{
const QColor color(255,0,0);
QPen pen;
pen.setColor(color);
pen.setWidth(3);
painter->setPen(pen);
QBrush brush;
brush.setColor(color);
brush.setStyle(Qt::SolidPattern);
painter->setBrush(brush);
}
else
{
const QColor color(0,0,0);
QPen pen;
pen.setColor(color);
pen.setWidth(1);
painter->setPen(pen);
QBrush brush;
brush.setColor(color);
brush.setStyle(Qt::SolidPattern);
painter->setBrush(brush);
}
painter->drawLine(this->line());
//The angle from tail to head
double angle = GetAngle(line().dx(),line().dy());
if (line().dy() >= 0.0) angle = (1.0 * boost::math::constants::pi<double>()) + angle;
const double sz = 10.0; //pixels
if (m_tail)
{
const QPointF p0 = this->line().p1();
const QPointF p1
= p0 + QPointF(
std::sin(angle + boost::math::constants::pi<double>() + (boost::math::constants::pi<double>() * 0.1)) * sz,
-std::cos(angle + boost::math::constants::pi<double>() + (boost::math::constants::pi<double>() * 0.1)) * sz);
const QPointF p2
= p0 + QPointF(
std::sin(angle + boost::math::constants::pi<double>() - (boost::math::constants::pi<double>() * 0.1)) * sz,
-std::cos(angle + boost::math::constants::pi<double>() - (boost::math::constants::pi<double>() * 0.1)) * sz);
painter->drawPolygon(QPolygonF() << p0 << p1 << p2);
}
if (m_head)
{
const QPointF p0 = this->line().p2();
const QPointF p1
= p0 + QPointF(
std::sin(angle + 0.0 + (boost::math::constants::pi<double>() * 0.1)) * sz,
-std::cos(angle + 0.0 + (boost::math::constants::pi<double>() * 0.1)) * sz);
const QPointF p2
= p0 + QPointF(
std::sin(angle + 0.0 - (boost::math::constants::pi<double>() * 0.1)) * sz,
-std::cos(angle + 0.0 - (boost::math::constants::pi<double>() * 0.1)) * sz);
painter->drawPolygon(QPolygonF() << p0 << p1 << p2);
}
}
示例14: Client
void CPlayers::RenderPlayer(
const CNetObj_Character *pPrevChar,
const CNetObj_Character *pPlayerChar,
const CNetObj_PlayerInfo *pPrevInfo,
const CNetObj_PlayerInfo *pPlayerInfo
)
{
CNetObj_Character Prev;
CNetObj_Character Player;
Prev = *pPrevChar;
Player = *pPlayerChar;
CNetObj_PlayerInfo pInfo = *pPlayerInfo;
CTeeRenderInfo RenderInfo = m_aRenderInfo[pInfo.m_ClientID];
bool NewTick = m_pClient->m_NewTick;
// set size
RenderInfo.m_Size = 64.0f;
float IntraTick = Client()->IntraGameTick();
float Angle = mix((float)Prev.m_Angle, (float)Player.m_Angle, IntraTick)/256.0f;
//float angle = 0;
if(pInfo.m_Local && Client()->State() != IClient::STATE_DEMOPLAYBACK)
{
// just use the direct input if it's local player we are rendering
Angle = GetAngle(m_pClient->m_pControls->m_MousePos);
}
else
{
/*
float mixspeed = Client()->FrameTime()*2.5f;
if(player.attacktick != prev.attacktick) // shooting boosts the mixing speed
mixspeed *= 15.0f;
// move the delta on a constant speed on a x^2 curve
float current = g_GameClient.m_aClients[info.cid].angle;
float target = player.angle/256.0f;
float delta = angular_distance(current, target);
float sign = delta < 0 ? -1 : 1;
float new_delta = delta - 2*mixspeed*sqrt(delta*sign)*sign + mixspeed*mixspeed;
// make sure that it doesn't vibrate when it's still
if(fabs(delta) < 2/256.0f)
angle = target;
else
angle = angular_approach(current, target, fabs(delta-new_delta));
g_GameClient.m_aClients[info.cid].angle = angle;*/
}
// use preditect players if needed
if(pInfo.m_Local && g_Config.m_ClPredict && Client()->State() != IClient::STATE_DEMOPLAYBACK)
{
if(!m_pClient->m_Snap.m_pLocalCharacter || (m_pClient->m_Snap.m_pGameInfoObj && m_pClient->m_Snap.m_pGameInfoObj->m_GameStateFlags&GAMESTATEFLAG_GAMEOVER))
{
}
else
{
// apply predicted results
m_pClient->m_PredictedChar.Write(&Player);
m_pClient->m_PredictedPrevChar.Write(&Prev);
IntraTick = Client()->PredIntraGameTick();
NewTick = m_pClient->m_NewPredictedTick;
}
}
vec2 Direction = GetDirection((int)(Angle*256.0f));
vec2 Position = mix(vec2(Prev.m_X, Prev.m_Y), vec2(Player.m_X, Player.m_Y), IntraTick);
vec2 Vel = mix(vec2(Prev.m_VelX/256.0f, Prev.m_VelY/256.0f), vec2(Player.m_VelX/256.0f, Player.m_VelY/256.0f), IntraTick);
m_pClient->m_pFlow->Add(Position, Vel*100.0f, 10.0f);
RenderInfo.m_GotAirJump = Player.m_Jumped&2?0:1;
// detect events
if(NewTick)
{
// detect air jump
if(!RenderInfo.m_GotAirJump && !(Prev.m_Jumped&2))
m_pClient->m_pEffects->AirJump(Position);
}
bool Stationary = Player.m_VelX <= 1 && Player.m_VelX >= -1;
bool InAir = !Collision()->CheckPoint(Player.m_X, Player.m_Y+16);
bool WantOtherDir = (Player.m_Direction == -1 && Vel.x > 0) || (Player.m_Direction == 1 && Vel.x < 0);
// evaluate animation
float WalkTime = fmod(absolute(Position.x), 100.0f)/100.0f;
CAnimState State;
State.Set(&g_pData->m_aAnimations[ANIM_BASE], 0);
if(InAir)
State.Add(&g_pData->m_aAnimations[ANIM_INAIR], 0, 1.0f); // TODO: some sort of time here
else if(Stationary)
State.Add(&g_pData->m_aAnimations[ANIM_IDLE], 0, 1.0f); // TODO: some sort of time here
//.........这里部分代码省略.........
示例15: switch
//.........这里部分代码省略.........
} else
{
SendActMsg( OBJMSG_LOOKUP );
}
if( ++m_nMoveEventCnt > SEC1 * 5 )
{
m_nMoveEventCnt = 0;
m_nMoveEvent = 99;
SendActMsg( OBJMSG_STOP_LOOK );
SendActMsg( OBJMSG_STOP_TURN );
SendActMsg( OBJMSG_STOP );
SetAngleX( 0 ); // 수평으로 맞춤.
}
break;
case 99:
break;
}
} else // movePattern 1
if( m_nMovePattern == 2 ) // 비행 패턴 2
{
switch( m_nMoveEvent )
{
case 0:
m_nMoveEvent ++;
m_nMoveEventCnt = 0;
// break; // break 넣지 말것.
case 1: // S - 1 구간중 직진 코스
SendActMsg( OBJMSG_FORWARD );
if( ++m_nMoveEventCnt > SEC1 ) // 1초가 지나면 급 우회전.
{
FLOAT fAngle = GetAngle();
SetAngle( fAngle + 135.0f );
m_nMoveEventCnt = 0;
m_nMoveEvent ++;
}
break;
case 2: // 1구간중 우/하로 이동
SendActMsg( OBJMSG_FORWARD );
if( ++m_nMoveEventCnt > SEC1 * 2 ) // 2초간 직진하다가 다시 좌로 90도 회전.
{
FLOAT fAngle = GetAngle();
SetAngle( fAngle - 90.0f );
m_nMoveEventCnt = 0;
m_nMoveEvent ++;
SendActMsg( OBJMSG_STOP_LOOK );
SendActMsg( OBJMSG_STOP_TURN );
SendActMsg( OBJMSG_STOP );
SetAngleX( 0 ); // 수평으로 맞춤.
}
break;
case 3: // 1구간중 3번째 구간
SendActMsg( OBJMSG_FORWARD );
if( ++m_nMoveEventCnt > SEC1 * 2 )
{
FLOAT fAngle = GetAngle();
SetAngle( fAngle - 45.0f );
m_nMoveEventCnt = 0;
m_nMoveEvent ++;
SendActMsg( OBJMSG_STOP_LOOK );
SendActMsg( OBJMSG_STOP_TURN );
SetAngleX( 0 ); // 수평으로 맞춤.