Worked on orbit helper/network

This is going to need a ton of work and love to get right. Right now its
not even going to function.
This commit is contained in:
Robert Seifert 2013-06-05 01:50:27 -04:00
parent 1d146a3617
commit 1a4415779c
2 changed files with 103 additions and 42 deletions

View file

@ -1,42 +0,0 @@
package dark.library.math;
import universalelectricity.core.vector.Vector3;
public class OrbitHelper
{
/**
* Get the offset of the center of the circle and object will be if move around the edge of the
* circle so far
*
* @param radus distance of the circle
* @param pos in the circle
* @return change from center of the circle
*/
public Vector3 getRadianPos(float radus, int pos, float spacing)
{
return null;
}
/**
* Gets the spacing in order to to have x number of the same width object orbit a point
*
* @param radus of the circle
* @param width of the object including spacing
* @param number of objects
* @return spacing in radians of the circle
*/
public float getObjectSpacing(double radus, double width, double number)
{
return 0;
}
public Vector3 getCirclePos(int objects, double width, double radius)
{
if (radius < (width + (width / 2)) * objects)
{
radius = (width + width / 2) * objects;
}
float spacing = this.getObjectSpacing(radius, width, objects);
return null;
}
}

View file

@ -0,0 +1,103 @@
package dark.library.math;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map.Entry;
import net.minecraft.entity.Entity;
import universalelectricity.core.vector.Vector3;
public class OrbitNetworkRing
{
float orbitRadius;
Vector3 rotationChange = new Vector3(0, 0, 0);
HashMap<Entity, Integer> orbitMemeber = new HashMap<Entity, Integer>();
public OrbitNetworkRing(HashMap<Entity, Integer> entities)
{
if (entities != null)
{
this.orbitMemeber.putAll(entities);
}
}
public HashMap<Entity, Integer> getOrbitMemebers()
{
if (this.orbitMemeber == null)
{
this.orbitMemeber = new HashMap<Entity, Integer>();
}
return this.orbitMemeber;
}
/**
* Increase the rotation angles of the orbitRing
*
* @param vec - rotation change stored as a vector3
* @param increase - add the vec rotation to current rotation
*/
public void changeRotation(Vector3 vec, boolean increase)
{
Vector3 preRotation = rotationChange.clone();
this.rotationChange = vec;
if (increase)
{
this.rotationChange.add(preRotation);
}
}
/**
* Get the rotation change of the orbit
*/
public Vector3 getRotation()
{
if (this.rotationChange == null)
{
this.rotationChange = new Vector3(0, 0, 0);
}
return this.rotationChange;
}
/**
* Ideal minimal radius needed for the number of objects
*/
public float getMinRadius()
{
float width = 0;
Iterator<Entry<Entity, Integer>> it = this.getOrbitMemebers().entrySet().iterator();
while (it.hasNext())
{
Entity entity = it.next().getKey();
width += entity.width;
}
width = width / this.getOrbitMemebers().size();
return ((width + (width / 2)) * this.getOrbitMemebers().size());
}
/**
*
* @param objectSize - side of the object in the direction it will orbit
* @param radIncrase - increase in radius size
* @param objects - number of the objects in the orbit
* @param pos - position in the orbit
* @return offset distance from orbit center
*
* Note this only gives the offset from the orbit point. This needs to be used to in combo with
* something else to get the orbit point. Then add the result of this to get the pos of the
* object
*/
public Vector3 getOrbitOffset(int pos)
{
float minRadius = this.getMinRadius();
if (this.orbitRadius < minRadius)
{
this.orbitRadius = minRadius;
}
float spacing = this.orbitRadius / this.getOrbitMemebers().size();
double x = this.orbitRadius * Math.cos((spacing * pos) + this.getRotation().y);
double z = this.orbitRadius * Math.sin((spacing * pos) + this.getRotation().y);
return null;
}
}