PitchTo()
Moderator: GZDoom Developers
- Matt
- Posts: 9696
- Joined: Sun Jan 04, 2004 5:37 pm
- Preferred Pronouns: They/Them
- Operating System Version (Optional): Debian Bullseye
- Location: Gotham City SAR, Wyld-Lands of the Lotus People, Dominionist PetroConfederacy of Saudi Canadia
- Contact:
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.
- Major Cooke
- Posts: 8170
- Joined: Sun Jan 28, 2007 3:55 pm
- Preferred Pronouns: He/Him
- Location: QZDoom Maintenance Team
Re: PitchTo()
Specifically? Towards another actor or towards a point?
- Matt
- Posts: 9696
- Joined: Sun Jan 04, 2004 5:37 pm
- Preferred Pronouns: They/Them
- Operating System Version (Optional): Debian Bullseye
- Location: Gotham City SAR, Wyld-Lands of the Lotus People, Dominionist PetroConfederacy of Saudi Canadia
- Contact:
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.
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.
Re: PitchTo()
"Why walk, if you could ride astride?" Silt Strider chasseur quoteMatt wrote:atan( (pos.z-other.pos.z) / distance2d(other))
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");
}
}
- Major Cooke
- Posts: 8170
- Joined: Sun Jan 28, 2007 3:55 pm
- Preferred Pronouns: He/Him
- Location: QZDoom Maintenance Team
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.
Anyway, Matt, one thing you could do in the mean time is use A_Face and set the angle limit to something non-zero.
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.
So, I think, this is the quickest way to get pitch/slope to some actor.
- Matt
- Posts: 9696
- Joined: Sun Jan 04, 2004 5:37 pm
- Preferred Pronouns: They/Them
- Operating System Version (Optional): Debian Bullseye
- Location: Gotham City SAR, Wyld-Lands of the Lotus People, Dominionist PetroConfederacy of Saudi Canadia
- Contact:
Re: PitchTo()
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.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.
Re: PitchTo()
You can do this via something like this:
You can of course take out the angleTo line if it's unnecessary.
Code: Select all
Vector3 dirTo = vec3To(other).unit();
double angleTo = atan2(dirTo.y, dirTo.x);
double pitchTo = -asin(dirTo.z);
- Major Cooke
- Posts: 8170
- Joined: Sun Jan 28, 2007 3:55 pm
- Preferred Pronouns: He/Him
- Location: QZDoom Maintenance Team
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.
- Matt
- Posts: 9696
- Joined: Sun Jan 04, 2004 5:37 pm
- Preferred Pronouns: They/Them
- Operating System Version (Optional): Debian Bullseye
- Location: Gotham City SAR, Wyld-Lands of the Lotus People, Dominionist PetroConfederacy of Saudi Canadia
- Contact:
Re: PitchTo()
That is correct.
Re: PitchTo()
I've submitted pull request #553 which, if merged, will do what you need. See forum post for an example.
- Graf Zahl
- Lead GZDoom+Raze Developer
- Posts: 49056
- Joined: Sat Jul 19, 2003 10:19 am
- Location: Germany
Re: PitchTo()
I'd rather do this natively for performance reasons.
Re: PitchTo()
Before try to make something like this I wonder does distance(2/3)d more performance wise than cos/sin(arctan(number) )?
Re: PitchTo()
Bumperino. Will this get added natively or will it remain DIY?
- Matt
- Posts: 9696
- Joined: Sun Jan 04, 2004 5:37 pm
- Preferred Pronouns: They/Them
- Operating System Version (Optional): Debian Bullseye
- Location: Gotham City SAR, Wyld-Lands of the Lotus People, Dominionist PetroConfederacy of Saudi Canadia
- Contact:
Re: PitchTo()
Would it even make a performance difference anymore nowadays?