## PitchTo()

Remember, just because you request it, that doesn't mean you'll get it.

Moderator: Developers

### PitchTo()

This could be done by other means, but it would be nice not to have to do a distance calculation and arctangent lookup in the VM.

Matt
Putting the XD into *xdeath since 2007

Joined: 04 Jan 2004
Location: Gotham City SAR, Wyld-Lands of the Lotus People, Dominionist PetroConfederacy of Saudi Canadia

### Re: PitchTo()

Specifically? Towards another actor or towards a point?

Major Cooke
The road to Hell is paved in the carrion she leaves behind.

Joined: 28 Jan 2007
Discord: Major Cooke#0846

### Re: PitchTo()

AngleTo() is towards an actor but arbitrary point would be nice! (and preferable)

It really is just atan( (pos.z-other.pos.z) / distance2d(other)), but now that I type this out it does seem like quite a few VM instructions.

Matt
Putting the XD into *xdeath since 2007

Joined: 04 Jan 2004
Location: Gotham City SAR, Wyld-Lands of the Lotus People, Dominionist PetroConfederacy of Saudi Canadia

### Re: PitchTo()

Matt wrote:atan( (pos.z-other.pos.z) / distance2d(other))

"Why walk, if you could ride astride?" Silt Strider chasseur quote

Code: Select all
`extend class Actor{   void A_PosAttack()   {      if (target)      {         A_FaceTarget();         double ang = angle;         double slope = AimLineAttack(ang, MISSILERANGE);         A_PlaySound("grunt/attack", CHAN_WEAPON);         ang  += Random2[PosAttack]() * (22.5/256);         int damage = Random[PosAttack](1, 5) * 3;         LineAttack(ang, MISSILERANGE, slope, damage, "Hitscan", "Bulletpuff");      }   }`
Apeirogon
I have a strange sense of humour

Joined: 12 Jun 2017

### Re: PitchTo()

...What was the point of your post?

Anyway, Matt, one thing you could do in the mean time is use A_Face and set the angle limit to something non-zero.

Major Cooke
The road to Hell is paved in the carrion she leaves behind.

Joined: 28 Jan 2007
Discord: Major Cooke#0846

### Re: PitchTo()

All defined in zscript, inside gzdoom pack, hitscan enemy use "aim line attack" to get slope/pitch to it target, not arctangent of distance and positions.
So, I think, this is the quickest way to get pitch/slope to some actor.
Apeirogon
I have a strange sense of humour

Joined: 12 Jun 2017

### Re: PitchTo()

Major Cooke wrote:Anyway, Matt, one thing you could do in the mean time is use A_Face and set the angle limit to something non-zero.
That's pretty much what I'm doing now - storing a backup pitch and angle, calling A_Face, recording the new pitch and resetting the pitch and angle.

Matt
Putting the XD into *xdeath since 2007

Joined: 04 Jan 2004
Location: Gotham City SAR, Wyld-Lands of the Lotus People, Dominionist PetroConfederacy of Saudi Canadia

### Re: PitchTo()

You can do this via something like this:
Code: Select all
`Vector3 dirTo = vec3To(other).unit();double angleTo = atan2(dirTo.y, dirTo.x);double pitchTo = -asin(dirTo.z);`

You can of course take out the angleTo line if it's unnecessary.

Gutawer
User Accounts Assistant

Joined: 16 Apr 2016
Discord: Gutawer#3431

### Re: PitchTo()

He's trying to have this be made done on the engine side to reduce calculations on the VM side, correct me if I'm wrong.

Major Cooke
The road to Hell is paved in the carrion she leaves behind.

Joined: 28 Jan 2007
Discord: Major Cooke#0846

### Re: PitchTo()

That is correct.

Matt
Putting the XD into *xdeath since 2007

Joined: 04 Jan 2004
Location: Gotham City SAR, Wyld-Lands of the Lotus People, Dominionist PetroConfederacy of Saudi Canadia

### Re: PitchTo()

I've submitted pull request #553 which, if merged, will do what you need. See forum post for an example.
argv

Joined: 30 Aug 2016

### Re: PitchTo()

I'd rather do this natively for performance reasons.

Graf Zahl

Joined: 19 Jul 2003
Location: Germany

### Re: PitchTo()

Before try to make something like this I wonder does distance(2/3)d more performance wise than cos/sin(arctan(number) )?
Apeirogon
I have a strange sense of humour

Joined: 12 Jun 2017