kiou.23 Posted March 31, 2021 Share Posted March 31, 2021 I'm making an projectile item, that when thrown, should bounce around a bit before stopping on the ground. however I'm having a really hard time with the physics of it, I've tried a few things but none of them quite worked. I tried looking at the code for some other entities, such as the ArrowEntity, but it didn't help either. For making the item bounce, I'd probably need the normal at the hit point to be able to "reflect" it's velocity How could I make it so the entity would behave more like a physics object? here's the code for the entity: DSixEntity.java Quote Link to comment Share on other sites More sharing options...
ChampionAsh5357 Posted April 1, 2021 Share Posted April 1, 2021 For the simplest implementation, whenever the projectile interacts with the surface, you'll get the associated face that the surface interacted with. Then, invert the associated component and multiply it with some number between 0-1 to represent to loss of energy. For example, if the associated motion velocity is <3,-1,2> and the ball hits a face on the Y-axis (either UP or DOWN), it will invert the component to <3,1,2>. Let's say we want to have 80% of the energy conserved, then it would be <3,0.8,2>. Of course, you'll need probably a deadzone for the total motion to deal with ridiculously small numbers. If you want to introduce other factors, then I would suggest looking over some bouncing ball physics. Quote Link to comment Share on other sites More sharing options...
kiou.23 Posted April 1, 2021 Author Share Posted April 1, 2021 1 hour ago, ChampionAsh5357 said: For the simplest implementation, whenever the projectile interacts with the surface, you'll get the associated face that the surface interacted with. how do I get the associated face? it doesn't seem that RayTraceResult can tell me that. note: I was/am about to implement the jBullet engine (I might as well since my projectiles have shapes more complex than a cube) Quote Link to comment Share on other sites More sharing options...
ChampionAsh5357 Posted April 1, 2021 Share Posted April 1, 2021 If RayTraceResult#getType returns BLOCK, then you know the ray trace is an instance of BlockRayTraceResult which has a method called #getDirection (or #getFace in MCP) exactly for that. 1 Quote Link to comment Share on other sites More sharing options...
poopoodice Posted April 1, 2021 Share Posted April 1, 2021 You can have a look at this: https://bitbucket.org/pelluciddice/ava/src/25660921a9340d7f3d99f2dc790d4852898c8156/src/main/java/pellucid/ava/entities/BouncingEntity.java#lines-40:65 where in this case a grenade. 1 Quote Link to comment Share on other sites More sharing options...
kiou.23 Posted April 1, 2021 Author Share Posted April 1, 2021 13 hours ago, poopoodice said: You can have a look at this: https://bitbucket.org/pelluciddice/ava/src/25660921a9340d7f3d99f2dc790d4852898c8156/src/main/java/pellucid/ava/entities/BouncingEntity.java#lines-40:65 where in this case a grenade. thanks for the example! but as I've said, since my entities use some more complicated shapes, I think I'm better off using a third-party physics library Quote Link to comment Share on other sites More sharing options...
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.