From 470dfee01ddf2660a5cbd035434d52801988c774 Mon Sep 17 00:00:00 2001
From: Allanis <allanis.saracraft.studios@gmail.com>
Date: Mon, 4 Dec 2017 21:34:08 +0000
Subject: [PATCH] [Change] AccreteDisc - float => int

---
 src/star_system.cpp | 23 ++++++++++++++---------
 1 file changed, 14 insertions(+), 9 deletions(-)

diff --git a/src/star_system.cpp b/src/star_system.cpp
index 55f17eb..d7f4357 100644
--- a/src/star_system.cpp
+++ b/src/star_system.cpp
@@ -173,16 +173,21 @@ vector3d StarSystem::Orbit::CartesianPosAtTime(double t) {
   return pos;
 }
 
-static std::vector<float>* AccreteDisc(int size, float density, MTRand& rand) {
-  std::vector<float>* disc = new std::vector<float>();
+static std::vector<int>* AccreteDisc(int size, int bandSize, int density, MTRand& rand) {
+  printf("Size %d\n", size);
+  std::vector<int>* disc = new std::vector<int>(size);
 
+  int bandDensity = 0;
   for(int i = 0; i < size; i++) {
-    disc->push_back(density*rand.Double(1.0));
+    if(!(i%bandSize)) bandDensity = rand.Int32(density);
+    (*disc)[i] = bandDensity * rand.Int32(density);
   }
 
   for(int iter = 0; iter < 20; iter++) {
     for(int i = 0; i < (signed)disc->size(); i++) {
-      for(int d = ceil(sqrtf((*disc)[i])+(i/5)); d > 0; d--) {
+      int d=1+(i/3);
+
+      for(; d > 0; d--) {
         if((i+d < (signed)disc->size()) && ((*disc)[i] > (*disc)[i+d])) {
           (*disc)[i] += (*disc)[i+d];
           (*disc)[i+d] = 0;
@@ -260,9 +265,9 @@ StarSystem::StarSystem(int sector_x, int sector_y, int system_idx) {
   int disc_size = rand.Int32(6, 100) + rand.Int32(60,140)*primary->type*primary->type;
   //printf("disc_size %.1fAU\n", disc_size/10.0);
 
-  std::vector<float>* disc = AccreteDisc(disc_size, 0.1+rand.Double(1.5), rand);
+  std::vector<int>* disc = AccreteDisc(disc_size, 10, rand.Int32(10,400), rand);
   for(unsigned int i = 0; i < disc->size(); i++) {
-    float mass = (*disc)[i];
+    float mass = (*disc)[i]/65536.0;
     if(mass == 0) continue;
 
     SBody* planet = new SBody;
@@ -398,10 +403,10 @@ void StarSystem::SBody::PickPlanetType(SBody* star, double distToPrimary, MTRand
   }
   radius = EARTH_RADIUS*bodyTypeInfo[type].radius;
   /* Generate moons. */
-  if(genMoons) {
-    std::vector<float>* disc = AccreteDisc(2*sqrt(emass), 0.001, rand);
+  if((genMoons) && (emass > 0.5)) {
+    std::vector<int>* disc = AccreteDisc(2*sqrt(emass), 10, rand.Int32(1, 40), rand);
     for(unsigned int i = 0; i < disc->size(); i++) {
-      float mass = (*disc)[i];
+      float mass = (*disc)[i]/65536.0;
       if(mass == 0) continue;
 
       SBody* moon     = new SBody;