package zmaster587.advancedRocketry.api.dimension;
import java.util.Set;
import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.util.ResourceLocation;
import net.minecraft.world.World;
import zmaster587.advancedRocketry.api.IAtmosphere;
import zmaster587.advancedRocketry.api.dimension.solar.StellarBody;
import zmaster587.advancedRocketry.api.satellite.SatelliteBase;
public interface IDimensionProperties {
/**
* @return the DIMID of the planet
*/
public int getId();
/**
* @return the color of the sun as an array of floats represented as {r,g,b}
*/
public float[] getSunColor();
/**
* @return the host star for this planet
*/
public StellarBody getStar();
/**
* @return the name of the planet
*/
public String getName();
/**
* @return the {@link DimensionProperties} of the parent planet
*/
public IDimensionProperties getParentProperties();
/**
* Range 0 < value <= 200
* @return if the planet is a moon, then the distance from the host planet where the earth's moon is 100, higher is farther, if planet, distance from the star, 100 is earthlike, higher value is father
*/
public int getParentOrbitalDistance();
/**
* @return if a planet, the same as getParentOrbitalDistance(), if a moon, the moon's distance from the host star
*/
public int getSolarOrbitalDistance();
/**
* @return true if the planet has moons
*/
public boolean hasChildren();
/**
* @return true if this DIM orbits another
*/
public boolean isMoon();
/**
* @return the default atmosphere of this dimension
*/
public IAtmosphere getAtmosphere();
/**
* @return true if the planet has an atmosphere
*/
public boolean hasAtmosphere();
/**
* @return set of all moons orbiting this planet
*/
public Set<Integer> getChildPlanets();
/**
* sets the gravity multiplier of the object
*/
public void setGravitationalMultiplier(float mult);
/**
* gets the gravity multiplier of the object
*/
public float getGravitationalMultiplier();
/**
* Adds a satellite to this DIM
* @param satellite satellite to add
* @param world world to add the satellite to
*/
public void addSatallite(SatelliteBase satellite, World world);
public void addSatallite(SatelliteBase satellte);
/**
* Returns the satellite with that ID
* @param lng satellite ID
* @return
*/
public SatelliteBase getSatellite(long lng);
/**
* Removes the satellite from orbit around this world
* @param satalliteId ID # for this satellite
* @return reference to the satellite object
*/
public SatelliteBase removeSatellite(long id);
public void writeToNBT(NBTTagCompound nbt);
public void readFromNBT(NBTTagCompound nbt);
public void setParentOrbitalDistance(int distance);
/**
* @return true if the dimension is a gas giant
*/
public boolean isGasGiant();
/**
* @param posY height
* @return density of the atmosphere
*/
public float getAtmosphereDensityAtHeight(double posY);
/**
* @return the integer id of the star
*/
public int getStarId();
/**
* @return density of the atmosphere in the range 0 to 200
*/
public int getAtmosphereDensity();
/**
* @return true if terraforming activity has changed the planet properties
*/
public boolean isTerraformed();
/**
* @return reource location of the planet
*/
public ResourceLocation getPlanetIcon();
/**
* @return the location along the orbit in radians
*/
public double getOrbitTheta();
/**
* @return distance of the planet from sun or moon in the range 0 to 200
*/
public int getOrbitalDist();
/**
* @return depth in the tree planet is. If the planet orbits the star directly, the result is 0, the moon 1, the moon of a moon 2, etc
*/
public int getPathLengthToStar();
/**
* @return id of the parent planet
*/
public int getParentPlanet();
/**
* Set the atmosphere like the terraformer does, can trigger terraform event
* @param i new atmosphere density
*/
public void setAtmosphereDensity(int i);
}