本文整理汇总了C++中GetAngle函数的典型用法代码示例。如果您正苦于以下问题:C++ GetAngle函数的具体用法?C++ GetAngle怎么用?C++ GetAngle使用的例子?那么恭喜您, 这里精选的函数代码示例或许可以为您提供帮助。
在下文中一共展示了GetAngle函数的20个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于我们的系统推荐出更棒的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();
}
}
开发者ID:EricWeiYb,项目名称:KinectCPlus,代码行数:22,代码来源:KinectProc.cpp
示例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));
}
开发者ID:PeterMitrano,项目名称:allwpilib,代码行数:38,代码来源:encoder.cpp
示例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();
}
开发者ID:PatMart,项目名称:kicad-source-mirror,代码行数:37,代码来源:class_edge_mod.cpp
示例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 );
}
开发者ID:markettwp,项目名称:Epiar,代码行数:27,代码来源:ship.cpp
示例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() ) );
}
开发者ID:LDavis4559,项目名称:kicad-source-mirror,代码行数:36,代码来源:class_edge_mod.cpp
示例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);
}
开发者ID:CRAVA,项目名称:crava,代码行数:24,代码来源:simbox.cpp
示例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);
}
}
开发者ID:RLED,项目名称:ProjectRichelBilderbeek,代码行数:61,代码来源:qtpatharrowitem.cpp
示例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;
}
开发者ID:ChevDaBeastt,项目名称:CN-GAME-DEV,代码行数:101,代码来源:startup_win32.cpp
示例9: GetAngle
bool Shooter::IsAtAngle(){
bool ontarget=angle_pid->OnTarget();
GetAngle();
return ontarget;
}
开发者ID:FRCTeam159,项目名称:MentorRepository,代码行数:5,代码来源:Shooter.cpp
示例10: GetAngle
/**
*@brief ÒÑ֪бÂÊ»ñµÃœÇ¶È
*@param rake [in] бÂÊ
*@return œÇ¶ÈÊý
*/
float CalHOT::GetRakeAngle(float rake)
{
return GetAngle(GetRakeRadian(rake));
}
开发者ID:wsl0579,项目名称:AtmoCorrect,代码行数:9,代码来源:CalHOT.cpp
示例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);
//.........这里部分代码省略.........
开发者ID:wthnonck,项目名称:tdtw,代码行数:101,代码来源:players.cpp
示例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 )
//.........这里部分代码省略.........
开发者ID:iceberry,项目名称:flyffsf,代码行数:101,代码来源:MoverMove.cpp
示例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);
}
}
开发者ID:richelbilderbeek,项目名称:CppTests,代码行数:62,代码来源:qtarrowitem.cpp
示例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
//.........这里部分代码省略.........
开发者ID:MichelFR,项目名称:Teeworlds-Bot,代码行数:101,代码来源:players.cpp
示例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 ); // 수평으로 맞춤.
开发者ID:iceberry,项目名称:flyffsf,代码行数:67,代码来源:MoverMove.cpp
示例16: PROFILE3
void CMiniMap::Draw()
{
PROFILE3("render minimap");
// The terrain isn't actually initialized until the map is loaded, which
// happens when the game is started, so abort until then.
if(!(GetGUI() && g_Game && g_Game->IsGameStarted()))
return;
CSimulation2* sim = g_Game->GetSimulation2();
CmpPtr<ICmpRangeManager> cmpRangeManager(*sim, SYSTEM_ENTITY);
ENSURE(cmpRangeManager);
// Set our globals in case they hadn't been set before
m_Camera = g_Game->GetView()->GetCamera();
m_Terrain = g_Game->GetWorld()->GetTerrain();
m_Width = (u32)(m_CachedActualSize.right - m_CachedActualSize.left);
m_Height = (u32)(m_CachedActualSize.bottom - m_CachedActualSize.top);
m_MapSize = m_Terrain->GetVerticesPerSide();
m_TextureSize = (GLsizei)round_up_to_pow2((size_t)m_MapSize);
m_MapScale = (cmpRangeManager->GetLosCircular() ? 1.f : 1.414f);
if(!m_TerrainTexture || g_GameRestarted)
CreateTextures();
// only update 2x / second
// (note: since units only move a few pixels per second on the minimap,
// we can get away with infrequent updates; this is slow)
static double last_time;
const double cur_time = timer_Time();
if(cur_time - last_time > 0.5)
{
last_time = cur_time;
if(m_TerrainDirty)
RebuildTerrainTexture();
}
glMatrixMode(GL_PROJECTION);
glPushMatrix();
glLoadIdentity();
glMatrixMode(GL_MODELVIEW);
glPushMatrix();
CMatrix3D matrix = GetDefaultGuiMatrix();
glLoadMatrixf(&matrix._11);
// Disable depth updates to prevent apparent z-fighting-related issues
// with some drivers causing units to get drawn behind the texture
glDepthMask(0);
const float x = m_CachedActualSize.left, y = m_CachedActualSize.bottom;
const float x2 = m_CachedActualSize.right, y2 = m_CachedActualSize.top;
const float z = GetBufferedZ();
const float texCoordMax = (float)(m_MapSize - 1) / (float)m_TextureSize;
const float angle = GetAngle();
// Draw the main textured quad
g_Renderer.BindTexture(0, m_TerrainTexture);
glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_REPLACE);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
DrawTexture(texCoordMax, angle, x, y, x2, y2, z);
// Draw territory boundaries
CTerritoryTexture& territoryTexture = g_Game->GetView()->GetTerritoryTexture();
territoryTexture.BindTexture(0);
glEnable(GL_BLEND);
glMatrixMode(GL_TEXTURE);
glLoadMatrixf(territoryTexture.GetMinimapTextureMatrix());
glMatrixMode(GL_MODELVIEW);
DrawTexture(1.0f, angle, x, y, x2, y2, z);
glMatrixMode(GL_TEXTURE);
glLoadIdentity();
glMatrixMode(GL_MODELVIEW);
glDisable(GL_BLEND);
// Draw the LOS quad in black, using alpha values from the LOS texture
CLOSTexture& losTexture = g_Game->GetView()->GetLOSTexture();
losTexture.BindTexture(0);
glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_COMBINE);
glTexEnvi(GL_TEXTURE_ENV, GL_COMBINE_RGB_ARB, GL_REPLACE);
glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE0_RGB_ARB, GL_PRIMARY_COLOR_ARB);
glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND0_RGB_ARB, GL_SRC_COLOR);
glTexEnvi(GL_TEXTURE_ENV, GL_COMBINE_ALPHA_ARB, GL_REPLACE);
glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE0_ALPHA_ARB, GL_TEXTURE);
glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND0_ALPHA_ARB, GL_ONE_MINUS_SRC_ALPHA);
glEnable(GL_BLEND);
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
glColor3f(0.0f, 0.0f, 0.0f);
glMatrixMode(GL_TEXTURE);
glLoadMatrixf(losTexture.GetMinimapTextureMatrix());
glMatrixMode(GL_MODELVIEW);
DrawTexture(1.0f, angle, x, y, x2, y2, z);
//.........这里部分代码省略.........
开发者ID:stev47,项目名称:0ad,代码行数:101,代码来源:MiniMap.cpp
示例17: GetSeeds
/**
*
* return a vector of seed points for the given rational
*
**/
std::vector<avtVector> GetSeeds( avtPoincareIC *poincare_ic,
avtVector &point1,
avtVector &point2,
double maxDistance )
{
std::vector<avtVector> puncturePoints;
FieldlineLib fieldlib;
fieldlib.getPunctures(poincare_ic->points, avtVector(0, 1, 0), puncturePoints);
unsigned int toroidalWinding = poincare_ic->properties.toroidalWinding;
unsigned int windingGroupOffset = poincare_ic->properties.windingGroupOffset;
// Calculate angle size for each puncture point and find the one
// that forms the largest angle (i.e. flattest portion of the
// surface).
int nSeeds = 0;
double maxAngle = 0;
unsigned int best_index = 0;
unsigned int best_one_less;
unsigned int best_one_more;
bool twoPts = false;
for( int i=0; i<toroidalWinding; ++i )
{
unsigned int one_less = (i-windingGroupOffset+toroidalWinding) % toroidalWinding;
unsigned int one_more = (i+windingGroupOffset+toroidalWinding) % toroidalWinding;
if (one_less == one_more)
{
best_index = i;
best_one_more = one_more;
twoPts = true;
break;
}
if (3 <= RATIONAL_DEBUG)
cerr << "Line: "<<__LINE__<<" wgo: "<<windingGroupOffset<<", ix-1: "<<one_less<<", ix: "<<i<<", ix+1: " <<one_more<<std::endl;
avtVector pt0 = puncturePoints[one_less];
avtVector pt1 = puncturePoints[i];
avtVector pt2 = puncturePoints[one_more];
// Save the maximum angle angle and the index of the puncture point.
double angle = GetAngle( pt0, pt1, pt2 );
if (maxAngle < angle)
{
maxAngle = angle;
best_index = i;
best_one_less = one_less;
best_one_more = one_more;
}
}
// Get circle equation
avtVector pt0,pt1,pt2;
if (twoPts)
{
pt0 = puncturePoints[best_index];
pt2 = puncturePoints[best_one_more];
if (1 <= RATIONAL_DEBUG)
cerr <<"Line: "<<__LINE__<< " 2 Rational Pts:\n"
<<VectorToString(pt0)<<"\n"
<<VectorToString(pt2)<<"\n";
avtVector midpt = pt0 + 0.5 * (pt2-pt0);
avtVector cx = (pt2-pt0).cross(avtVector(0,1,0));
avtVector newpt = midpt + .5*cx;
if (1 <= RATIONAL_DEBUG)
cerr <<"Line: "<<__LINE__<< " 2 New Pts:\n"
<<VectorToString(midpt)<<"\n"
<<VectorToString(newpt)<<"\n";
pt1 = newpt;
}
else
{
// Find the circle that intersects the three punctures points which
// approximates the cross section of the surface.
// Get circle equation
pt0 = puncturePoints[best_one_less];
pt1 = puncturePoints[best_index];
pt2 = puncturePoints[best_one_more];
if (1 <= RATIONAL_DEBUG)
cerr <<"Line: "<<__LINE__<< " Rational Pts:\n"
<<VectorToString(pt0)<<"\n"
<<VectorToString(pt1)<<"\n"
<<VectorToString(pt2)<<"\n";
}
point1 = pt1; //for future reference
point2 = pt2;
//.........这里部分代码省略.........
开发者ID:HarinarayanKrishnan,项目名称:VisIt28RC_Trunk,代码行数:101,代码来源:RationalSurfaceLib.C
示例18: HitTest
long CArc::HitTest(long x, long y)
{
if(m_locked){
return TK_NONE;
}
if(m_lStatus!=ST_NOMAL) return TK_NONE;
CRect rtTemp;
POINT pt;
pt.x=x;
pt.y=y;
rtTemp.SetRect(m_lx1-DELTA,m_ly1-DELTA,m_lx1+DELTA,m_ly1+DELTA);
if(rtTemp.PtInRect(pt)) return TK_LT;
rtTemp.SetRect(m_lx1-DELTA,m_ly2-DELTA,m_lx1+DELTA,m_ly2+DELTA);
if(rtTemp.PtInRect(pt)) return TK_LB;
rtTemp.SetRect(m_lx2-DELTA,m_ly1-DELTA,m_lx2+DELTA,m_ly1+DELTA);
if(rtTemp.PtInRect(pt)) return TK_RT;
rtTemp.SetRect(m_lx2-DELTA,m_ly2-DELTA,m_lx2+DELTA,m_ly2+DELTA);
if(rtTemp.PtInRect(pt)) return TK_RB;
rtTemp.SetRect((m_lx1+m_lx2)/2-DELTA,m_ly1-DELTA,(m_lx1+m_lx2)/2+DELTA,m_ly1+DELTA);
if(rtTemp.PtInRect(pt)) return TK_TM;
rtTemp.SetRect((m_lx1+m_lx2)/2-DELTA,m_ly2-DELTA,(m_lx1+m_lx2)/2+DELTA,m_ly2+DELTA);
if(rtTemp.PtInRect(pt)) return TK_BM;
rtTemp.SetRect(m_lx1-DELTA,(m_ly1+m_ly2)/2-DELTA,m_lx1+DELTA,(m_ly1+m_ly2)/2+DELTA);
if(rtTemp.PtInRect(pt)) return TK_LM;
rtTemp.SetRect(m_lx2-DELTA,(m_ly1+m_ly2)/2-DELTA,m_lx2+DELTA,(m_ly1+m_ly2)/2+DELTA);
if(rtTemp.PtInRect(pt)) return TK_RM;
rtTemp.SetRect(m_lx3-DELTA,m_ly3-DELTA,m_lx3+DELTA,m_ly3+DELTA);
if(rtTemp.PtInRect(pt)) return TK_SP;
rtTemp.SetRect(m_lx4-DELTA,m_ly4-DELTA,m_lx4+DELTA,m_ly4+DELTA);
if(rtTemp.PtInRect(pt)) return TK_EP;
long x1,y1,x2,y2;
if(m_lx1<=m_lx2){
x1=m_lx1;
x2=m_lx2;
}else{
x1=m_lx2;
x2=m_lx1;
}
if(m_ly1<m_ly2){
y1=m_ly1;
y2=m_ly2;
}else{
y1=m_ly2;
y2=m_ly1;
}
CRgn rgnTmp;
if(rgnTmp.CreateEllipticRgn(x1-DELTA,y1-DELTA,x2+DELTA,y2+DELTA)){
if(!rgnTmp.PtInRegion(pt)) return TK_NONE;
x1=x1+DELTA;
y1=y1+DELTA;
x2=x2-DELTA;
y2=y2-DELTA;
if(x1<x2 && y1<y2){
CRgn rgnTmp;
if(rgnTmp.CreateEllipticRgn(x1,y1,x2,y2)){
if(rgnTmp.PtInRegion(pt)) return TK_NONE;
}else{
return TK_NONE;
}
}
double dx=(double)x-((double)m_lx1+(double)m_lx2)/2;
double dy=-(double)y+((double)m_ly1+(double)m_ly2)/2;
double dxs=(double)m_lx3-((double)m_lx1+(double)m_lx2)/2;
double dys=-(double)m_ly3+((double)m_ly1+(double)m_ly2)/2;
double dxe=(double)m_lx4-((double)m_lx1+(double)m_lx2)/2;
double dye=-(double)m_ly4+((double)m_ly1+(double)m_ly2)/2;
double sa=GetAngle(dxs,dys);
double ea=GetAngle(dxe,dye);
double pa=GetAngle(dx,dy);
if(SPE(sa,pa,ea)) return TK_MOV;
}
return TK_NONE;
}
开发者ID:george-kuo,项目名称:GoSysWare,代码行数:86,代码来源:Arc.cpp
示例19: int32
void AreaTrigger::UpdateSplinePosition(uint32 diff)
{
if (_reachedDestination)
return;
if (!HasSplines())
return;
_movementTime += diff;
if (_movementTime >= GetTimeToTarget())
{
_reachedDestination = true;
_lastSplineIndex = int32(_spline->last());
G3D::Vector3 lastSplinePosition = _spline->getPoint(_lastSplineIndex);
GetMap()->AreaTriggerRelocation(this, lastSplinePosition.x, lastSplinePosition.y, lastSplinePosition.z, GetOrientation());
#ifdef TRINITY_DEBUG
DebugVisualizePosition();
#endif
_ai->OnSplineIndexReached(_lastSplineIndex);
_ai->OnDestinationReached();
return;
}
float currentTimePercent = float(_movementTime) / float(GetTimeToTarget());
if (currentTimePercent <= 0.f)
return;
if (GetMiscTemplate()->MoveCurveId)
{
float progress = sDB2Manager.GetCurveValueAt(GetMiscTemplate()->MoveCurveId, currentTimePercent);
if (progress < 0.f || progress > 1.f)
{
TC_LOG_ERROR("entities.areatrigger", "AreaTrigger (Id: %u, SpellMiscId: %u) has wrong progress (%f) caused by curve calculation (MoveCurveId: %u)",
GetTemplate()->Id, GetMiscTemplate()->MiscId, progress, GetMiscTemplate()->MorphCurveId);
}
else
currentTimePercent = progress;
}
int lastPositionIndex = 0;
float percentFromLastPoint = 0;
_spline->computeIndex(currentTimePercent, lastPositionIndex, percentFromLastPoint);
G3D::Vector3 currentPosition;
_spline->evaluate_percent(lastPositionIndex, percentFromLastPoint, currentPosition);
float orientation = GetOrientation();
if (GetTemplate()->HasFlag(AREATRIGGER_FLAG_HAS_FACE_MOVEMENT_DIR))
{
G3D::Vector3 const& nextPoint = _spline->getPoint(lastPositionIndex + 1);
orientation = GetAngle(nextPoint.x, nextPoint.y);
}
GetMap()->AreaTriggerRelocation(this, currentPosition.x, currentPosition.y, currentPosition.z, orientation);
#ifdef TRINITY_DEBUG
DebugVisualizePosition();
#endif
if (_lastSplineIndex != lastPositionIndex)
{
_lastSplineIndex = lastPositionIndex;
_ai->OnSplineIndexReached(_lastSplineIndex);
}
}
开发者ID:Rochet2,项目名称:TrinityCore,代码行数:68,代码来源:AreaTrigger.cpp
-
六六分期app的软件客服如何联系?不知道吗?加qq群【895510560】即可!标题:六六分期
阅读:18297|2023-10-27
-
今天小编告诉大家如何处理win10系统火狐flash插件总是崩溃的问题,可能很多用户都不知
阅读:9687|2022-11-06
-
今天小编告诉大家如何对win10系统删除桌面回收站图标进行设置,可能很多用户都不知道
阅读:8185|2022-11-06
-
今天小编告诉大家如何对win10系统电脑设置节能降温的设置方法,想必大家都遇到过需要
阅读:8554|2022-11-06
-
我们在使用xp系统的过程中,经常需要对xp系统无线网络安装向导设置进行设置,可能很多
阅读:8463|2022-11-06
-
今天小编告诉大家如何处理win7系统玩cf老是与主机连接不稳定的问题,可能很多用户都不
阅读:9400|2022-11-06
-
电脑对日常生活的重要性小编就不多说了,可是一旦碰到win7系统设置cf烟雾头的问题,很
阅读:8435|2022-11-06
-
我们在日常使用电脑的时候,有的小伙伴们可能在打开应用的时候会遇见提示应用程序无法
阅读:7869|2022-11-06
-
今天小编告诉大家如何对win7系统打开vcf文件进行设置,可能很多用户都不知道怎么对win
阅读:8420|2022-11-06
-
今天小编告诉大家如何对win10系统s4开启USB调试模式进行设置,可能很多用户都不知道怎
阅读:7398|2022-11-06
|
请发表评论