[Added] PitchTo()

Moderator: GZDoom Developers

PitchTo()

Postby Matt » Wed Mar 07, 2018 6:24 pm

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.
User avatar
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()

Postby Major Cooke » Wed Mar 07, 2018 6:56 pm

Specifically? Towards another actor or towards a point?
User avatar
Major Cooke
QZDoom Maintenance Team
 
Joined: 28 Jan 2007

Re: PitchTo()

Postby Matt » Wed Mar 07, 2018 7:16 pm

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.
User avatar
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()

Postby Apeirogon » Thu Mar 08, 2018 4:24 pm

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

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

Code: Select allExpand view
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");
      }
   }
User avatar
Apeirogon
I have a strange sense of humour
 
Joined: 12 Jun 2017

Re: PitchTo()

Postby Major Cooke » Thu Mar 08, 2018 5:02 pm

...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.
User avatar
Major Cooke
QZDoom Maintenance Team
 
Joined: 28 Jan 2007

Re: PitchTo()

Postby Apeirogon » Fri Mar 09, 2018 7:33 am

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.
User avatar
Apeirogon
I have a strange sense of humour
 
Joined: 12 Jun 2017

Re: PitchTo()

Postby Matt » Mon Mar 12, 2018 1:49 pm

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.
User avatar
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()

Postby Gutawer » Mon Mar 12, 2018 3:04 pm

You can do this via something like this:
Code: Select allExpand view
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.
User avatar
Gutawer
User Accounts Assistant
 
Joined: 16 Apr 2016
Discord: Gutawer#3431

Re: PitchTo()

Postby Major Cooke » Mon Mar 12, 2018 3:59 pm

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.
User avatar
Major Cooke
QZDoom Maintenance Team
 
Joined: 28 Jan 2007

Re: PitchTo()

Postby Matt » Tue Mar 13, 2018 12:05 am

That is correct.
User avatar
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()

Postby argv » Mon Aug 20, 2018 6:40 pm

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()

Postby Graf Zahl » Tue Aug 21, 2018 12:23 am

I'd rather do this natively for performance reasons.
User avatar
Graf Zahl
Lead GZDoom+Raze Developer
Lead GZDoom+Raze Developer
 
Joined: 19 Jul 2003
Location: Germany

Re: PitchTo()

Postby Apeirogon » Thu Aug 30, 2018 3:30 am

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

Re: PitchTo()

Postby Accensus » Sun May 17, 2020 4:50 am

Bumperino. Will this get added natively or will it remain DIY?
User avatar
Accensus
Vector, locked in.
 
Joined: 11 Feb 2016
Location: Somalia
Operating System: Windows 10/8.1/8/201x 64-bit
OS Test Version: No (Using Stable Public Version)
Graphics Processor: nVidia with Vulkan support

Re: PitchTo()

Postby Matt » Mon May 18, 2020 8:15 pm

Would it even make a performance difference anymore nowadays?
User avatar
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

Next

Return to Closed Feature Suggestions

Who is online

Users browsing this forum: No registered users and 1 guest