예제 #1
0
    public StarData CreateBirthStar(GalaxyData galaxy, int seed)
    {
        StarData starData = new StarData();

        starData.galaxy       = galaxy;
        starData.index        = 0;
        starData.level        = 0.0f;
        starData.id           = 1;
        starData.seed         = seed;
        starData.resourceCoef = 0.6f;
        Random random1 = new Random(seed);
        int    seed1   = random1.Next();
        int    Seed    = random1.Next();

        starData.name         = NameGen.RandomName(seed1);
        starData.overrideName = string.Empty;
        starData.position     = VectorLF3.zero;
        Random random2 = new Random(Seed);
        double r1      = random2.NextDouble();
        double r2      = random2.NextDouble();
        double num1    = random2.NextDouble();
        double rn      = random2.NextDouble();
        double rt      = random2.NextDouble();
        double num2    = random2.NextDouble() * 0.2 + 0.9;
        double num3    = Math.Pow(2.0, random2.NextDouble() * 0.4 - 0.2);
        float  p1      = Mathf.Clamp(this.RandNormal(0.0f, 0.08f, r1, r2), -0.2f, 0.2f);

        starData.mass = Mathf.Pow(2f, p1);
        if ((double)this.specifyBirthStarMass > 0.100000001490116)
        {
            starData.mass = this.specifyBirthStarMass;
        }
        if ((double)this.specifyBirthStarAge > 9.99999974737875E-06)
        {
            starData.age = this.specifyBirthStarAge;
        }
        double d = 2.0 + 0.4 * (1.0 - (double)starData.mass);

        starData.lifetime = (float)(10000.0 * Math.Pow(0.1, Math.Log10((double)starData.mass * 0.5) / Math.Log10(d) + 1.0) * num2);
        starData.age      = (float)(num1 * 0.4 + 0.3);
        if ((double)this.specifyBirthStarAge > 9.99999974737875E-06)
        {
            starData.age = this.specifyBirthStarAge;
        }
        float f = (float)(1.0 - (double)Mathf.Pow(Mathf.Clamp01(starData.age), 20f) * 0.5) * starData.mass;

        starData.temperature = (float)(Math.Pow((double)f, 0.56 + 0.14 / (Math.Log10((double)f + 4.0) / Math.Log10(5.0))) * 4450.0 + 1300.0);
        double num4 = Math.Log10(((double)starData.temperature - 1300.0) / 4500.0) / Math.Log10(2.6) - 0.5;

        if (num4 < 0.0)
        {
            num4 *= 4.0;
        }
        if (num4 > 2.0)
        {
            num4 = 2.0;
        }
        else if (num4 < -4.0)
        {
            num4 = -4.0;
        }
        starData.spectr       = (ESpectrType)Mathf.RoundToInt((float)num4 + 4f);
        starData.color        = Mathf.Clamp01((float)((num4 + 3.5) * 0.200000002980232));
        starData.classFactor  = (float)num4;
        starData.luminosity   = Mathf.Pow(f, 0.7f);
        starData.radius       = (float)(Math.Pow((double)starData.mass, 0.4) * num3);
        starData.acdiskRadius = 0.0f;
        float p2 = (float)num4 + 2f;

        starData.habitableRadius    = Mathf.Pow(1.7f, p2) + 0.2f * Mathf.Min(1f, starData.orbitScaler);
        starData.lightBalanceRadius = Mathf.Pow(1.7f, p2);
        starData.orbitScaler        = Mathf.Pow(1.35f, p2);
        if ((double)starData.orbitScaler < 1.0)
        {
            starData.orbitScaler = Mathf.Lerp(starData.orbitScaler, 1f, 0.6f);
        }
        this.SetStarAge(starData, starData.age, rn, rt);
        starData.dysonRadius = starData.orbitScaler * 0.28f;
        if ((double)starData.dysonRadius * 40000.0 < (double)starData.physicsRadius * 1.5)
        {
            starData.dysonRadius = (float)((double)starData.physicsRadius * 1.5 / 40000.0);
        }
        starData.uPosition    = VectorLF3.zero;
        starData.name         = NameGen.RandomStarName(seed1, starData, galaxy);
        starData.overrideName = string.Empty;
        return(starData);
    }