Jump to content

How Would I Get A Thrown Entity to Circle Around Another One?


gurujive
 Share

Recommended Posts

I have a thrown entity I can summon in for lengths of time, It acts as though it has no gravity.

 

What I would like to do is from that entity have another entity that circulates around it on the horizontal plane.

 

Is there some simple looking code or an example of this anywhere anyone knows of?

 

The purpose of this is to imitate flowing of ocean waves with multiple circulating objects.

Link to comment
Share on other sites

The initial description sounds more like a sun and planets, but whatever...

 

For one object to orbit another, you need to give the orbiter an initial velocity tangential to the hub, then periodically impart a radial impulse toward the hub. Calculating the vector directions will be easy, but calibrating magnitude will take testing.

 

Your orbiter can tick 20 times per second, and you can initialize radius and tangential speed, which tells you how many ticks you have to complete an orbit. Start doing physics calculations for circular motion.

 

And then decide what should happen if anything gets in the way.

The debugger is a powerful and necessary tool in any IDE, so learn how to use it. You'll be able to tell us more and get better help here if you investigate your runtime problems in the debugger before posting.

Link to comment
Share on other sites

Here is an example of what I'm talking about (its definitely not planets):

 

(I can just imagine some awesome floors and stuff, and it would be super easy to set up with some repeaters.)

 

I've been looking at some things, I don't know how I will loop it exactly right now.

But I could summon the entity in, then have it add motion to itself. Then do that at intervals of time.

My question was more related to if there was some kind of multiplication example or something to make the adding motion part easier. Or if I would have to have more intervals of motion being added. Instead of some algorithm drawing the line for me.

 

(I guess I'd just like to know if there is such an algorithm, but then again drawing a circular line around an object by summoning things from the center of it to complete a circle then have something spawn to travel that circle may just be a tad too bit complex/unnecessary)

 

But I find myself in the same predicament with adding motion several times then looping it somehow.

 

It would be simpler to have some kind of algorithm that as it existed an amount of motion would be added in that would allow it to travel around in a circle. But I'm not really technically advanced here... I have something to learn here for certain.

 

And then decide what should happen if anything gets in the way.

ftw:

 

if (!this.worldObj.isRemote)
        {
            this.doBlockCollisions();
        }

Link to comment
Share on other sites

Hi

 

Like the previous answers said, programming a circular motion is easy if you use a bit of trigonometry; look up the "unit circle" for more information.  Your object needs to store the angle, the radius, then convert these to x and z using trig.  Every tick, you just increase the angle.

 

There is a way to make an object circle around a point without using trig, it's based on the fact that the derivative of sine and cosine are also cosine and sine; so if the object is circling around a point at a constant height (constant y) then you can calculate

 

x_velocity_object = A.(z_position_object - z_position_point)

z_velocity_object = A.(x_position_object - x_position_point).

 

Just choose a suitable value for the constant A (the speed), initialise the x_position_object and the z_position_object at the desired starting location (radius from the centre point), and then every tick update the velocity using those calculations.

 

It will perform a circular paths for quite a few rotations, although it may drift eventually due to roundoff errors.

 

-TGG

 

 

 

 

Link to comment
Share on other sites

The picture you showed was a large number of particles moving in circles, and none of them were circling around any of the others. Instead, each circled about a fixed point, and the apparent wave motion there depends on coordinating the phases of the various particles.

 

To simulate this in detail, you would need a field of tile entities (computationally expensive), with each responding both to its neighbors (propagation) and specific external stimuli (stimulation).

 

What is it that you are ultimately trying to achieve?

The debugger is a powerful and necessary tool in any IDE, so learn how to use it. You'll be able to tell us more and get better help here if you investigate your runtime problems in the debugger before posting.

Link to comment
Share on other sites

By the way, if you're uncomfortable with trigonometry (it is even more of a pain in computing if you aren't comfortable with with concept of radians) you can actually do repetitive motion without any actual math.

 

Instead of math you can take some graph paper and find the points on the path you want and then put those into a List data structure and then cycle through that. I use this a lot in animating entities where calculating the trigonometry is complex or where the motion does not follow a simple equation. This is the same technique that "stop motion" animation uses -- you just put the object in each position and then run them together to make the illusion of motion.

 

Since Minecraft uses 20 ticks per second, if you wanted the circular motion to take 1 second then you need 20 points from a circle in your list.

 

And since you want the motion to be around another entity, you would just add the values from the List to the position you want to orbit around.

 

In most cases of animation, using this method (a List of positions) will give better results and take very little time than trying to calculate the positions.

Check out my tutorials here: http://jabelarminecraft.blogspot.com/

Link to comment
Share on other sites

The picture you showed was a large number of particles moving in circles, and none of them were circling around any of the others. Instead, each circled about a fixed point, and the apparent wave motion there depends on coordinating the phases of the various particles.

 

To simulate this in detail, you would need a field of tile entities (computationally expensive), with each responding both to its neighbors (propagation) and specific external stimuli (stimulation).

 

What is it that you are ultimately trying to achieve?

 

I'm a big fan of making particles do weird things. If I had a field of these things to execute particles at I'd have a bunch of fun with it. Ocean waves of particles.

 

I'd just like to do as many cool things with particles and moving pieces as I possibly can.

Link to comment
Share on other sites

a thing I did once to make an entity circle another entity, was spawn the first, immobile entity, that would rotate its view around every tick.

 

rotationYawHead += 2f;

 

then you can get the vector frow its view

 

Vec3d vec = getVectorForRotation(0, rotationYawHead);

 

and from that vector, you can get the x and z coordinates, + the position of the immobile entity to set the position of the rotating entity.

 

myentity.setPosition(imobileEntity.x+vec.xcoord, [...] );

feel free to devide the vec.xcoord by 5 or any other number to adjust distance to the entity

Link to comment
Share on other sites

Which of course, is the same thing as working out the trig yourself, except it requires an additional entity.

 

Like seriously.  Sine and Cosine are amazing.

Apparently I'm a complete and utter jerk and come to this forum just like to make fun of people, be confrontational, and make your personal life miserable.  If you think this is the case, JUST REPORT ME.  Otherwise you're just going to get reported when you reply to my posts and point it out, because odds are, I was trying to be nice.

 

Exception: If you do not understand Java, I WILL NOT HELP YOU and your thread will get locked.

 

DO NOT PM ME WITH PROBLEMS. No help will be given.

Link to comment
Share on other sites

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.

Guest
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

 Share



  • Recently Browsing

    • No registered users viewing this page.
  • Posts

    • I made a huge forge 1.7.10 mod pack but whenever I try to create a singleplayer world I get the error saying "A fatal error has occurred, this connection is terminated." Does anyone know what the issue could be?  Here is my fml-client-latest.log from when it crashes: https://paste.ubuntu.com/p/3rKSJSqnrX/ and here is the list of mods: https://imgur.com/a/AZifMbg    
    • Im trying to host a minecraft server using the curseforge serverpack from FTB Direwolf20 and when I try to start the server I run into an error The Error: Starting server A problem occurred running the Server launcher.java.lang.reflect.InvocationTargetException         at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)         at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)         at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)         at java.lang.reflect.Method.invoke(Unknown Source)         at cpw.mods.fml.relauncher.ServerLaunchWrapper.run(ServerLaunchWrapper.java:43)         at cpw.mods.fml.relauncher.ServerLaunchWrapper.main(ServerLaunchWrapper.java:12) Caused by: java.lang.NoClassDefFoundError: org/apache/logging/log4j/Level         at net.minecraft.launchwrapper.Launch.launch(Launch.java:94)         at net.minecraft.launchwrapper.Launch.main(Launch.java:28)         ... 6 more Caused by: java.lang.ClassNotFoundException: org.apache.logging.log4j.Level         at java.net.URLClassLoader$1.run(Unknown Source)         at java.net.URLClassLoader$1.run(Unknown Source)         at java.security.AccessController.doPrivileged(Native Method)         at java.net.URLClassLoader.findClass(Unknown Source)         at java.lang.ClassLoader.loadClass(Unknown Source)         at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)         at java.lang.ClassLoader.loadClass(Unknown Source)         ... 8 more   I'have tried deleting and downloading the newset version of java wich didnt work and now im using an older version which is the 1.7.0_80 Here is what my Server folder looks like: https://ibb.co/jkbfRY7 Here is what the ServerStart.bat file looks like: @if NOT "%FTB_VERBOSE%"=="yes" ( @echo off ) call settings.bat if NOT EXIST minecraft_server.1.7.10.jar ( goto install ) if NOT EXIST libraries\%LAUNCHWRAPPER% ( goto install ) goto skipinstall :install echo running install script! call FTBInstall.bat :skipinstall REM Check if java in path REM TODO: use %JAVACMD% where java > NUL 2>&1 if %ERRORLEVEL% NEQ 0 ( echo No java binary in path. Can't run server, exiting... pause exit /B ) REM Test JVM REM e.g. 32-bit JVM does not have server\jvm.dll library java -server -version > java-test.log 2>&1 if %ERRORLEVEL% NEQ 0 ( echo Detected following JVM error: echo ======================================= more java-test.log echo ======================================= echo JVM test failed. Can't run server, Exiting... pause exit /B ) if not exist eula.txt ( echo Missing eula.txt. Startup will fail and eula.txt will be created echo Make sure to read eula.txt before playing! goto startserver ) find "eula=false" eula.txt 1 > NUL 2>&1 if %ERRORLEVEL% EQU 0 ( echo Make sure to read eula.txt before playing! Exiting. pause exit /B ) del /f /q autostart.stamp > nul 2>1 :startserver echo Starting server java -server -Xms512M -Xmx2048M -XX:PermSize=256M -XX:+UseParNewGC -XX:+CMSIncrementalPacing -XX:+CMSClassUnloadingEnabled -XX:ParallelGCThreads=2 -XX:MinHeapFreeRatio=5 -XX:MaxHeapFreeRatio=10 -jar FTBServer-1.7.10-1558.jar nogui :server_loop if exist autostart.stamp ( del /f /q autostart.stamp > nul 2>1 echo If you want to completely stop the server process now, press Ctrl+C before the time is up! for /l %%i in (5,-1,1) do ( echo Restarting server in %%i choice /t 1 /d y > nul ) echo Starting server now java -server -Xms512M -Xmx2048M -XX:PermSize=256M -XX:+UseParNewGC -XX:+CMSIncrementalPacing -XX:+CMSClassUnloadingEnabled -XX:ParallelGCThreads=2 -XX:MinHeapFreeRatio=5 -XX:MaxHeapFreeRatio=10 -jar FTBServer-1.7.10-1558.jar nogui echo Server process finished goto :server_loop ) echo Exiting... pause  
    • Made a modpack (Well Rounded Blockheads, in case the modlist on curseforge helps) and server to host it, worked fine until last night. The issue that pops up after some days being up/working is when you leave a world (singleplayer) or shutdown a server, the process hangs and jumps to 8.5gb ram used, eats up CPU usage (50-60% in taskman on a 3800x) and just sits there. If done on a single player world, the game doesnt fully crash, (e.g. if you alt+f4 buttons like save and quit, options stay in the window, are still clickable but they do nothing) Saving seems to still happen, as location/inventory updates if I restart server or client and play the world again.   If I start the currently afflicted server but dont login the server closes properly, its only once I log back in the problem occurs. Its a priv server and I dont have anyone else to test atm so Idk if its a prob with my player or players/area in general. Only recent changes in game are the additions of a pnuematicraft pressure chamber, an enchanting table, and bookshelves from builders crafts and additions.... I've been trying to get help on this all day, so ANY assistance goes a long way, even if its a way to debug this myself >~< Debug/Latest logs
    • Thanks warjort. I was afraid, that this is because they are entities. Now I know where to dig. But what about water, for example? I have checked via debug code, that there is no entity there (appropriate method return null). What is wrong with liquids?
  • Topics

×
×
  • Create New...

Important Information

By using this site, you agree to our Terms of Use.