本文整理汇总了C++中R_PointToAngle2函数的典型用法代码示例。如果您正苦于以下问题:C++ R_PointToAngle2函数的具体用法?C++ R_PointToAngle2怎么用?C++ R_PointToAngle2使用的例子?那么恭喜您, 这里精选的函数代码示例或许可以为您提供帮助。
在下文中一共展示了R_PointToAngle2函数的20个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于我们的系统推荐出更棒的C++代码示例。
示例1: R_PointToAngle2
//
// R_PointToAngle - wrapper around R_PointToAngle2
//
angle_t
R_PointToAngle
( fixed_t x,
fixed_t y )
{
return R_PointToAngle2 (viewx, viewy, x, y);
}
开发者ID:JohnnyonFlame,项目名称:odamex,代码行数:10,代码来源:r_main.cpp
示例2: A_Tracer2
void A_Tracer2 (AActor *self)
{
AActor *dest;
angle_t exact;
fixed_t dist;
fixed_t slope;
dest = self->tracer;
if (dest == NULL || dest->health <= 0 || self->Speed == 0)
return;
// change angle
exact = R_PointToAngle2 (self->x, self->y, dest->x, dest->y);
if (exact != self->angle)
{
if (exact - self->angle > 0x80000000)
{
self->angle -= TRACEANGLE;
if (exact - self->angle < 0x80000000)
self->angle = exact;
}
else
{
self->angle += TRACEANGLE;
if (exact - self->angle > 0x80000000)
self->angle = exact;
}
}
exact = self->angle >> ANGLETOFINESHIFT;
self->momx = FixedMul (self->Speed, finecosine[exact]);
self->momy = FixedMul (self->Speed, finesine[exact]);
// change slope
dist = P_AproxDistance (dest->x - self->x, dest->y - self->y);
dist /= self->Speed;
if (dist < 1)
{
dist = 1;
}
if (dest->height >= 56*FRACUNIT)
{
slope = (dest->z+40*FRACUNIT - self->z) / dist;
}
else
{
slope = (dest->z + self->height*2/3 - self->z) / dist;
}
if (slope < self->momz)
{
self->momz -= FRACUNIT/8;
}
else
{
self->momz += FRACUNIT/8;
}
}
开发者ID:ddraigcymraeg,项目名称:gzscoredoom,代码行数:60,代码来源:a_spectral.cpp
示例3: R_AlignFlat
BOOL R_AlignFlat (int linenum, int side, int fc)
{
line_t *line = lines + linenum;
sector_t *sec = side ? line->backsector : line->frontsector;
if (!sec)
return false;
fixed_t x = line->v1->x;
fixed_t y = line->v1->y;
angle_t angle = R_PointToAngle2 (x, y, line->v2->x, line->v2->y);
angle_t norm = (angle-ANG90) >> ANGLETOFINESHIFT;
fixed_t dist = -FixedMul (finecosine[norm], x) - FixedMul (finesine[norm], y);
if (side)
{
angle = angle + ANG180;
dist = -dist;
}
if (fc)
{
sec->base_ceiling_angle = 0-angle;
sec->base_ceiling_yoffs = dist & ((1<<(FRACBITS+8))-1);
}
else
{
sec->base_floor_angle = 0-angle;
sec->base_floor_yoffs = dist & ((1<<(FRACBITS+8))-1);
}
return true;
}
开发者ID:JohnnyonFlame,项目名称:odamex,代码行数:35,代码来源:r_plane.cpp
示例4: R_PointToAngle2
//Called while the bot moves after its player->dest mobj
//which can be a weapon/enemy/item whatever.
void FCajunMaster::Roam (AActor *actor, ticcmd_t *cmd)
{
int delta;
if (Reachable(actor, actor->player->dest))
{ // Straight towards it.
actor->player->angle = R_PointToAngle2(actor->x, actor->y, actor->player->dest->x, actor->player->dest->y);
}
else if (actor->movedir < 8) // turn towards movement direction if not there yet
{
actor->player->angle &= (angle_t)(7<<29);
delta = actor->player->angle - (actor->movedir << 29);
if (delta > 0)
actor->player->angle -= ANG45;
else if (delta < 0)
actor->player->angle += ANG45;
}
// chase towards destination.
if (--actor->movecount < 0 || !Move (actor, cmd))
{
NewChaseDir (actor, cmd);
}
}
开发者ID:Xeomuz,项目名称:Doom-Port-Source-Code,代码行数:27,代码来源:b_move.cpp
示例5: A_Punch
void A_Punch(player_t *player, pspdef_t *psp)
{
angle_t angle;
int t, slope, damage = (P_Random(pr_punch)%10+1)<<1;
if (player->powers[pw_strength])
damage *= 10;
angle = player->mo->angle;
// killough 5/5/98: remove dependence on order of evaluation:
t = P_Random(pr_punchangle);
angle += (t - P_Random(pr_punchangle))<<18;
/* killough 8/2/98: make autoaiming prefer enemies */
if (!mbf_features ||
(slope = P_AimLineAttack(player->mo, angle, MELEERANGE, MF_FRIEND),
!linetarget))
slope = P_AimLineAttack(player->mo, angle, MELEERANGE, 0);
P_LineAttack(player->mo, angle, MELEERANGE, slope, damage);
if (!linetarget)
return;
S_StartSound(player->mo, sfx_punch);
// turn to face target
player->mo->angle = R_PointToAngle2(player->mo->x, player->mo->y,
linetarget->x, linetarget->y);
R_SmoothPlaying_Reset(player); // e6y
}
开发者ID:Hitechcomputergeek,项目名称:wiidoom,代码行数:33,代码来源:p_pspr.c
示例6: A_Punch
void A_Punch(player_t* player, pspdef_t* psp)
{
angle_t angle;
int damage;
int slope = 0;
damage = ((P_Random() & 7) + 1) * 3;
if(player->powers[pw_strength])
damage *= 10;
angle = player->mo->angle;
angle += P_RandomShift(18);
slope = P_AimLineAttack(player->mo, angle, 0, MELEERANGE);
P_LineAttack(player->mo, angle, MELEERANGE, slope, damage);
// turn to face target
if(linetarget)
{
S_StartSound(player->mo, sfx_punch);
player->mo->angle = R_PointToAngle2(player->mo->x, player->mo->y,
linetarget->x, linetarget->y);
}
}
开发者ID:alexey-lysiuk,项目名称:doom64ex-osx,代码行数:26,代码来源:p_pspr.c
示例7: R_PointToAngle2
//Called while the bot moves after its dest mobj
//which can be a weapon/enemy/item whatever.
void DBot::Roam (ticcmd_t *cmd)
{
int delta;
if (Reachable(dest))
{ // Straight towards it.
angle = R_PointToAngle2(player->mo->x, player->mo->y, dest->x, dest->y);
}
else if (player->mo->movedir < 8) // turn towards movement direction if not there yet
{
angle &= (angle_t)(7<<29);
delta = angle - (player->mo->movedir << 29);
if (delta > 0)
angle -= ANG45;
else if (delta < 0)
angle += ANG45;
}
// chase towards destination.
if (--player->mo->movecount < 0 || !Move (cmd))
{
NewChaseDir (cmd);
}
}
开发者ID:DaZombieKiller,项目名称:lxDoom,代码行数:27,代码来源:b_move.cpp
示例8: A_Saw
//
// A_Saw
//
void A_Saw(player_t *player, pspdef_t *psp)
{
int damage = 2 * (P_Random() % 10 + 1);
angle_t angle = player->mo->angle + ((P_Random() - P_Random()) << 18);
int slope = P_AimLineAttack(player->mo, angle, MELEERANGE + 1);
// use meleerange + 1 so the puff doesn't skip the flash
P_LineAttack(player->mo, angle, MELEERANGE + 1, slope, damage);
if (!linetarget)
{
S_StartSound(player->mo, sfx_sawful);
return;
}
S_StartSound (player->mo, sfx_sawhit);
// turn to face target
angle = R_PointToAngle2(player->mo->x, player->mo->y, linetarget->x, linetarget->y);
if (angle - player->mo->angle > ANG180)
{
if (angle - player->mo->angle < -ANG90 / 20)
player->mo->angle = angle + ANG90 / 21;
else
player->mo->angle -= ANG90 / 20;
}
else
{
if (angle - player->mo->angle > ANG90 / 20)
player->mo->angle = angle - ANG90 / 21;
else
player->mo->angle += ANG90 / 20;
}
player->mo->flags |= MF_JUSTATTACKED;
}
开发者ID:arneolavhal,项目名称:doomretro,代码行数:37,代码来源:p_pspr.c
示例9: A_Punch
OVERLAY void A_Punch(player_t *player, pspdef_t *psp)
{
angle_t angle;
int t, slope, damage = (P_Random(pr_punch)%10+1)<<1;
if (player->powers[pw_strength])
damage *= 10;
angle = player->mo->angle;
// killough 5/5/98: remove dependence on order of evaluation:
t = P_Random(pr_punchangle);
angle += (t - P_Random(pr_punchangle))<<18;
slope = P_AimLineAttack(player->mo, angle, MELEERANGE);
P_LineAttack(player->mo, angle, MELEERANGE, slope, damage);
if (!linetarget)
return;
S_StartSound(player->mo, sfx_punch);
// turn to face target
player->mo->angle = R_PointToAngle2(player->mo->x, player->mo->y,
linetarget->x, linetarget->y);
}
开发者ID:rlsosborne,项目名称:doom,代码行数:26,代码来源:p_pspr.cpp
示例10: P_AlignFlat
bool P_AlignFlat (int linenum, int side, int fc)
{
line_t *line = lines + linenum;
sector_t *sec = side ? line->backsector : line->frontsector;
if (!sec)
return false;
fixed_t x = line->v1->x;
fixed_t y = line->v1->y;
angle_t angle = R_PointToAngle2 (x, y, line->v2->x, line->v2->y);
angle_t norm = (angle-ANGLE_90) >> ANGLETOFINESHIFT;
fixed_t dist = -DMulScale16 (finecosine[norm], x, finesine[norm], y);
if (side)
{
angle = angle + ANGLE_180;
dist = -dist;
}
sec->SetBase(fc, dist & ((1<<(FRACBITS+8))-1), 0-angle);
return true;
}
开发者ID:AkumaKing,项目名称:Xeu,代码行数:25,代码来源:p_sectors.cpp
示例11: SetBodyAt
angle_t DCajunMaster::FireRox (AActor *bot, AActor *enemy, ticcmd_t *cmd)
{
fixed_t dist;
angle_t ang;
AActor *actor;
int m;
SetBodyAt (bot->x + FixedMul(bot->momx, 5*FRACUNIT),
bot->y + FixedMul(bot->momy, 5*FRACUNIT),
bot->z + (bot->height / 2), 2);
actor = bglobal.body2;
dist = P_AproxDistance (actor->x-enemy->x, actor->y-enemy->y);
if (dist < SAFE_SELF_MISDIST)
return 0;
//Predict.
m = (((dist+1)/FRACUNIT) / GetDefault<ARocket>()->Speed);
SetBodyAt (enemy->x + FixedMul (enemy->momx, (m+2*FRACUNIT)),
enemy->y + FixedMul(enemy->momy, (m+2*FRACUNIT)), ONFLOORZ, 1);
dist = P_AproxDistance(actor->x-bglobal.body1->x, actor->y-bglobal.body1->y);
//try the predicted location
if (P_CheckSight (actor, bglobal.body1, 1)) //See the predicted location, so give a test missile
{
if (SafeCheckPosition (bot, actor->x, actor->y))
{
if (FakeFire (actor, bglobal.body1, cmd) >= SAFE_SELF_MISDIST)
{
ang = R_PointToAngle2 (actor->x, actor->y, bglobal.body1->x, bglobal.body1->y);
return ang;
}
}
}
//Try fire straight.
if (P_CheckSight (actor, enemy, 0))
{
if (FakeFire (bot, enemy, cmd) >= SAFE_SELF_MISDIST)
{
ang = R_PointToAngle2(bot->x, bot->y, enemy->x, enemy->y);
return ang;
}
}
return 0;
}
开发者ID:doomtech,项目名称:zdoom-old,代码行数:45,代码来源:b_func.cpp
示例12: P_WallMomSlide
//
// P_WallMomSlide
// Adjusts the xmove / ymove
// so that the next move will slide along the wall.
//
static void P_WallMomSlide(line_t *ld)
{
int side;
angle_t lineangle;
angle_t moveangle;
angle_t deltaangle;
fixed_t movelen;
fixed_t newlen;
// First check the simple cases.
if(ld->slopetype == ST_HORIZONTAL)
{
tmymove = 0;
return;
}
if(ld->slopetype == ST_VERTICAL)
{
tmxmove = 0;
return;
}
side = P_PointOnLineSide(slidemo->x, slidemo->y, ld);
lineangle = R_PointToAngle2(0, 0, ld->dx, ld->dy);
if(side == 1)
lineangle += ANG180;
moveangle = R_PointToAngle2(0, 0, tmxmove, tmymove);
deltaangle = moveangle - lineangle;
if(deltaangle > ANG180)
deltaangle += ANG180;
lineangle >>= ANGLETOFINESHIFT;
deltaangle >>= ANGLETOFINESHIFT;
movelen = P_ApproxDistance(tmxmove, tmymove);
newlen = FixedMul(movelen, finecosine[deltaangle]);
tmxmove = FixedMul(newlen, finecosine[lineangle]);
tmymove = FixedMul(newlen, finesine[lineangle]);
}
开发者ID:ehershey,项目名称:development,代码行数:47,代码来源:p_mobj.c
示例13: abs
//doesnt check LOS, checks visibility with a set view angle.
//B_Checksight checks LOS (straight line)
//----------------------------------------------------------------------
//Check if mo1 has free line to mo2
//and if mo2 is within mo1 viewangle (vangle) given with normal degrees.
//if these conditions are true, the function returns true.
//GOOD TO KNOW is that the player's view angle
//in doom is 90 degrees infront.
bool DCajunMaster::Check_LOS (AActor *from, AActor *to, angle_t vangle)
{
if (!P_CheckSight (from, to, 2))
return false; // out of sight
if (vangle == ANGLE_MAX)
return true;
if (vangle == 0)
return false; //Looker seems to be blind.
return abs (R_PointToAngle2 (from->x, from->y, to->x, to->y) - from->angle) <= vangle/2;
}
开发者ID:doomtech,项目名称:zdoom-old,代码行数:19,代码来源:b_func.cpp
示例14: A_FiredChase
void A_FiredChase (AActor *actor)
{
int weaveindex = actor->special1;
AActor *target = actor->target;
angle_t ang;
fixed_t dist;
if (actor->reactiontime) actor->reactiontime--;
if (actor->threshold) actor->threshold--;
// Float up and down
actor->z += FloatBobOffsets[weaveindex];
actor->special1 = (weaveindex+2)&63;
// Ensure it stays above certain height
if (actor->z < actor->floorz + (64*FRACUNIT))
{
actor->z += 2*FRACUNIT;
}
if(!actor->target || !(actor->target->flags&MF_SHOOTABLE))
{ // Invalid target
P_LookForPlayers (actor,true);
return;
}
// Strafe
if (actor->special2 > 0)
{
actor->special2--;
}
else
{
actor->special2 = 0;
actor->momx = actor->momy = 0;
dist = P_AproxDistance (actor->x - target->x, actor->y - target->y);
if (dist < FIREDEMON_ATTACK_RANGE)
{
if (pr_firedemonchase() < 30)
{
ang = R_PointToAngle2 (actor->x, actor->y, target->x, target->y);
if (pr_firedemonchase() < 128)
ang += ANGLE_90;
else
ang -= ANGLE_90;
ang >>= ANGLETOFINESHIFT;
actor->momx = finecosine[ang] << 3; //FixedMul (8*FRACUNIT, finecosine[ang]);
actor->momy = finesine[ang] << 3; //FixedMul (8*FRACUNIT, finesine[ang]);
actor->special2 = 3; // strafe time
}
}
}
开发者ID:doomtech,项目名称:zdoom-old,代码行数:52,代码来源:a_firedemon.cpp
示例15: DEFINE_ACTION_FUNCTION
DEFINE_ACTION_FUNCTION(AActor, A_FiredChase)
{
int weaveindex = self->special1;
AActor *target = self->target;
angle_t ang;
fixed_t dist;
if (self->reactiontime) self->reactiontime--;
if (self->threshold) self->threshold--;
// Float up and down
self->z += finesine[weaveindex << BOBTOFINESHIFT] * 8;
self->special1 = (weaveindex + 2) & 63;
// Ensure it stays above certain height
if (self->z < self->floorz + (64*FRACUNIT))
{
self->z += 2*FRACUNIT;
}
if(!self->target || !(self->target->flags&MF_SHOOTABLE))
{ // Invalid target
P_LookForPlayers (self,true, NULL);
return;
}
// Strafe
if (self->special2 > 0)
{
self->special2--;
}
else
{
self->special2 = 0;
self->velx = self->vely = 0;
dist = P_AproxDistance (self->x - target->x, self->y - target->y);
if (dist < FIREDEMON_ATTACK_RANGE)
{
if (pr_firedemonchase() < 30)
{
ang = R_PointToAngle2 (self->x, self->y, target->x, target->y);
if (pr_firedemonchase() < 128)
ang += ANGLE_90;
else
ang -= ANGLE_90;
ang >>= ANGLETOFINESHIFT;
self->velx = finecosine[ang] << 3; //FixedMul (8*FRACUNIT, finecosine[ang]);
self->vely = finesine[ang] << 3; //FixedMul (8*FRACUNIT, finesine[ang]);
self->special2 = 3; // strafe time
}
}
}
开发者ID:DaZombieKiller,项目名称:lxDoom,代码行数:52,代码来源:a_firedemon.cpp
示例16: A_Saw
void A_Saw(player_t *player, pspdef_t *psp)
{
int slope, damage;
angle_t angle;
int t;
CHECK_WEAPON_CODEPOINTER("A_Saw", player);
damage = 2*(P_Random(pr_saw)%10+1);
angle = player->mo->angle;
// killough 5/5/98: remove dependence on order of evaluation:
t = P_Random(pr_saw);
angle += (t - P_Random(pr_saw))<<18;
/* Use meleerange + 1 so that the puff doesn't skip the flash
* killough 8/2/98: make autoaiming prefer enemies */
if (!mbf_features ||
(slope = P_AimLineAttack(player->mo, angle, MELEERANGE+1, MF_FRIEND),
!linetarget))
slope = P_AimLineAttack(player->mo, angle, MELEERANGE+1, 0);
P_LineAttack(player->mo, angle, MELEERANGE+1, slope, damage);
if (!linetarget)
{
S_StartSound(player->mo, sfx_sawful);
return;
}
S_StartSound(player->mo, sfx_sawhit);
// turn to face target
angle = R_PointToAngle2(player->mo->x, player->mo->y,
linetarget->x, linetarget->y);
if (angle - player->mo->angle > ANG180) {
if (angle - player->mo->angle < -ANG90/20)
player->mo->angle = angle + ANG90/21;
else
player->mo->angle -= ANG90/20;
} else {
if (angle - player->mo->angle > ANG90/20)
player->mo->angle = angle - ANG90/21;
else
player->mo->angle += ANG90/20;
}
player->mo->flags |= MF_JUSTATTACKED;
R_SmoothPlaying_Reset(player); // e6y
}
开发者ID:Mistranger,项目名称:prboom-plus,代码行数:50,代码来源:p_pspr.c
示例17: ST_DrawDamageMarkers
static void ST_DrawDamageMarkers(void)
{
damagemarker_t *dmgmarker;
for (dmgmarker = dmgmarkers.next; dmgmarker != &dmgmarkers;
dmgmarker = dmgmarker->next) {
static vtx_t v[3];
player_t *p;
float angle;
byte alpha;
GL_SetState(GLSTATE_BLEND, 1);
GL_SetOrtho(0);
alpha = (dmgmarker->tics << 3);
if (alpha < 0)
alpha = 0;
v[0].x = -8;
v[0].a = alpha;
v[1].x = 8;
v[1].a = alpha;
v[2].y = 4;
v[2].r = 255;
v[2].a = alpha;
p = &players[consoleplayer];
angle = (float)TRUEANGLES(p->mo->angle -
R_PointToAngle2(dmgmarker->source->x,
dmgmarker->source->y,
p->mo->x, p->mo->y));
dglPushMatrix();
dglTranslatef(160, 120, 0);
dglRotatef(angle, 0.0f, 0.0f, 1.0f);
dglTranslatef(0, 16, 0);
dglDisable(GL_TEXTURE_2D);
dglSetVertex(v);
dglTriangle(0, 1, 2);
dglDrawGeometry(3, v);
dglEnable(GL_TEXTURE_2D);
dglPopMatrix();
GL_ResetViewport();
GL_SetState(GLSTATE_BLEND, 0);
}
}
开发者ID:MP2E,项目名称:kexplus,代码行数:49,代码来源:st_stuff.c
示例18: DEFINE_ACTION_FUNCTION
DEFINE_ACTION_FUNCTION(AActor, A_PotteryCheck)
{
int i;
for(i = 0; i < MAXPLAYERS; i++)
{
if (playeringame[i])
{
AActor *pmo = players[i].mo;
if (P_CheckSight (self, pmo) && (abs (R_PointToAngle2 (pmo->x,
pmo->y, self->x, self->y) - pmo->angle) <= ANGLE_45))
{ // Previous state (pottery bit waiting state)
self->SetState (self->state - 1);
return;
}
}
}
}
开发者ID:1Akula1,项目名称:gzdoom,代码行数:18,代码来源:a_hexenspecialdecs.cpp
示例19: A_Saw
void A_Saw(player_t* player, pspdef_t* psp)
{
angle_t angle;
int damage;
int slope = 0;
damage = ((P_Random() & 7) + 1) * 3;
angle = player->mo->angle;
angle += P_RandomShift(18);
// use meleerange + 1 se the puff doesn't skip the flash
slope = P_AimLineAttack(player->mo, angle, 0, MELEERANGE+1);
P_LineAttack(player->mo, angle, MELEERANGE + 1, slope, damage);
if(!linetarget)
{
S_StartSound (player->mo, sfx_saw1);
return;
}
S_StartSound (player->mo, sfx_saw2);
// turn to face target
angle = R_PointToAngle2(player->mo->x, player->mo->y, linetarget->x, linetarget->y);
if(angle - player->mo->angle > ANG180)
{
if(angle - player->mo->angle < -ANG90/20)
player->mo->angle = angle + ANG90/21;
else
player->mo->angle -= ANG90/20;
}
else
{
if(angle - player->mo->angle > ANG90/20)
player->mo->angle = angle - ANG90/21;
else
player->mo->angle += ANG90/20;
}
player->mo->flags |= MF_JUSTATTACKED;
}
开发者ID:alexey-lysiuk,项目名称:doom64ex-osx,代码行数:42,代码来源:p_pspr.c
示例20: A_Punch
//
// A_Punch
//
void A_Punch(player_t *player, pspdef_t *psp)
{
int damage = (P_Random() % 10 + 1) << 1;
angle_t angle = player->mo->angle + ((P_Random() - P_Random()) << 18);
int slope = P_AimLineAttack(player->mo, angle, MELEERANGE);
if (player->powers[pw_strength])
damage *= 10;
P_LineAttack(player->mo, angle, MELEERANGE, slope, damage);
if (!linetarget)
return;
S_StartSound(player->mo, sfx_punch);
// turn to face target
player->mo->angle = R_PointToAngle2(player->mo->x, player->mo->y,
linetarget->x, linetarget->y);
}
开发者ID:arneolavhal,项目名称:doomretro,代码行数:23,代码来源:p_pspr.c
注:本文中的R_PointToAngle2函数示例由纯净天空整理自Github/MSDocs等源码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。 |
请发表评论