package micdoodle8.mods.galacticraft.core.dimension;
import java.util.HashSet;
import java.util.Set;
import micdoodle8.mods.galacticraft.api.galaxies.CelestialBody;
import micdoodle8.mods.galacticraft.api.vector.Vector3;
import micdoodle8.mods.galacticraft.api.world.IExitHeight;
import micdoodle8.mods.galacticraft.api.world.IOrbitDimension;
import micdoodle8.mods.galacticraft.api.world.ISolarLevel;
import micdoodle8.mods.galacticraft.api.world.IZeroGDimension;
import micdoodle8.mods.galacticraft.core.Constants;
import micdoodle8.mods.galacticraft.core.GalacticraftCore;
import micdoodle8.mods.galacticraft.core.client.CloudRenderer;
import micdoodle8.mods.galacticraft.core.client.SkyProviderOrbit;
import micdoodle8.mods.galacticraft.core.util.ConfigManagerCore;
import net.minecraft.entity.Entity;
import net.minecraft.util.MathHelper;
import net.minecraft.util.ResourceLocation;
import net.minecraftforge.fml.relauncher.Side;
import net.minecraftforge.fml.relauncher.SideOnly;
public class WorldProviderOverworldOrbit extends WorldProviderSpaceStation implements IOrbitDimension, IZeroGDimension, ISolarLevel, IExitHeight
{
Set<Entity> freefallingEntities = new HashSet<Entity>();
@Override
public Vector3 getFogColor()
{
return new Vector3(0, 0, 0);
}
@Override
public Vector3 getSkyColor()
{
return new Vector3(0, 0, 0);
}
@Override
public boolean hasSunset()
{
return false;
}
@Override
public long getDayLength()
{
return 24000L;
}
@Override
public boolean isDaytime()
{
final float a = this.worldObj.getCelestialAngle(0F);
//TODO: adjust this according to size of planet below
return a < 0.42F || a > 0.58F;
}
@Override
@SideOnly(Side.CLIENT)
public float getStarBrightness(float par1)
{
final float var2 = this.worldObj.getCelestialAngle(par1);
float var3 = 1.0F - (MathHelper.cos(var2 * Constants.twoPI) * 2.0F + 0.25F);
if (var3 < 0.0F)
{
var3 = 0.0F;
}
if (var3 > 1.0F)
{
var3 = 1.0F;
}
return var3 * var3 * 0.5F + 0.3F;
}
@Override
public boolean isSkyColored()
{
return false;
}
@Override
public double getHorizon()
{
return 44.0D;
}
@Override
public int getAverageGroundLevel()
{
return 64;
}
@Override
public boolean canCoordinateBeSpawn(int var1, int var2)
{
return true;
}
// @Override
// public String getWelcomeMessage()
// {
// return "Entering Earth Orbit";
// }
//
// @Override
// public String getDepartMessage()
// {
// return "Leaving Earth Orbit";
// }
@Override
public CelestialBody getCelestialBody()
{
return GalacticraftCore.satelliteSpaceStation;
}
@Override
public String getDimensionName()
{
return "Space Station " + this.dimensionId;
}
@Override
public float getGravity()
{
return 0.075F;
}
@Override
public double getMeteorFrequency()
{
return 0;
}
@Override
public double getFuelUsageMultiplier()
{
return 0.5D;
}
@Override
public String getPlanetToOrbit()
{
return "Overworld";
}
@Override
public int getYCoordToTeleportToPlanet()
{
return 30;
}
@Override
public String getSaveFolder()
{
return "DIM_SPACESTATION" + this.dimensionId;
}
@Override
public double getSolarEnergyMultiplier()
{
return ConfigManagerCore.spaceStationEnergyScalar;
}
@Override
public double getYCoordinateToTeleport()
{
return 750;
}
@Override
public boolean canSpaceshipTierPass(int tier)
{
return tier > 0;
}
@Override
public float getFallDamageModifier()
{
return 0.4F;
}
@Override
public String getInternalNameSuffix()
{
return "_orbit";
}
@Override
public boolean inFreefall(Entity entity)
{
return freefallingEntities.contains(entity);
}
@Override
public void setInFreefall(Entity entity)
{
freefallingEntities.add(entity);
}
@Override
public void updateWeather()
{
freefallingEntities.clear();
super.updateWeather();
}
@Override
@SideOnly(Side.CLIENT)
public void setSpinDeltaPerTick(float angle)
{
SkyProviderOrbit skyProvider = ((SkyProviderOrbit)this.getSkyRenderer());
if (skyProvider != null)
skyProvider.spinDeltaPerTick = angle;
}
@Override
@SideOnly(Side.CLIENT)
public float getSkyRotation()
{
SkyProviderOrbit skyProvider = ((SkyProviderOrbit)this.getSkyRenderer());
return skyProvider.spinAngle;
}
@Override
@SideOnly(Side.CLIENT)
public void createSkyProvider()
{
this.setSkyRenderer(new SkyProviderOrbit(new ResourceLocation(Constants.ASSET_PREFIX, "textures/gui/celestialbodies/earth.png"), true, true));
this.setSpinDeltaPerTick(this.getSpinManager().getSpinRate());
if (this.getCloudRenderer() == null)
this.setCloudRenderer(new CloudRenderer());
}
@Override
public int getDungeonSpacing()
{
return 0;
}
}