Advertisement
Guest User

Untitled

a guest
Mar 25th, 2017
90
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. GameServer.prototype.splitMass = function(mass, count) {
  2.        // min throw size (vanilla 44)
  3.     var throwSize = this.config.playerMinSize + 12;
  4.     var throwMass = throwSize * throwSize / 100;
  5.    
  6.     // check maxCount
  7.     var maxCount = count;
  8.     var curMass = mass;
  9.     while (maxCount > 1 && curMass / (maxCount - 1) < throwMass) {
  10.         maxCount = maxCount / 2 >>> 0;
  11.     }
  12.     if (maxCount < 2) {
  13.         return [mass];
  14.     }
  15.    
  16.     // calculate mass
  17.     var minMass = this.config.playerMinSize * this.config.playerMinSize / 100;
  18.     var splitMass = curMass / maxCount;
  19.     if (splitMass < minMass) {
  20.         return [mass];
  21.     }
  22.     var masses = [];
  23.     if (maxCount < 3 || maxCount < count || curMass / throwMass <= 30) {
  24.         // Monotone blow up
  25.         for (var i = 0; i < maxCount; i++) {
  26.             masses.push(splitMass);
  27.         }
  28.     } else {
  29.         // Diverse blow up
  30.         // Barbosik: draft version
  31.         var restCount = maxCount;
  32.         while (restCount > 2) {
  33.             var splitMass = curMass / 2;
  34.             if (splitMass <= throwMass) {
  35.                 break;
  36.             }
  37.             var max = curMass - throwMass * (restCount - 1);
  38.             if (max <= throwMass || splitMass >= max) {
  39.                 break;
  40.             }
  41.             masses.push(splitMass);
  42.             curMass -= splitMass;
  43.             restCount--;
  44.         }
  45.         var splitMass = curMass / 4;
  46.         if (splitMass > throwMass) {
  47.             while (restCount > 2) {
  48.                 var max = curMass - throwMass * (restCount - 1);
  49.                 if (max <= throwMass || splitMass >= max) {
  50.                     break;
  51.                 }
  52.                 masses.push(splitMass);
  53.                 curMass -= splitMass;
  54.                 restCount--;
  55.             }
  56.         }
  57.         var splitMass = curMass / 8;
  58.         if (splitMass > throwMass) {
  59.             while (restCount > 2) {
  60.                 var max = curMass - throwMass * (restCount - 1);
  61.                 if (max <= throwMass || splitMass >= max) {
  62.                     break;
  63.                 }
  64.                 masses.push(splitMass);
  65.                 curMass -= splitMass;
  66.                 restCount--;
  67.             }
  68.         }
  69.         if (restCount > 1) {
  70.             splitMass = curMass - throwMass * (restCount - 1);
  71.             if (splitMass > throwMass) {
  72.                 masses.push(splitMass);
  73.                 curMass -= splitMass;
  74.                 restCount--;
  75.             }
  76.         }
  77.         if (restCount > 0) {
  78.             splitMass = curMass / restCount;
  79.             if (splitMass < throwMass - 0.001) {
  80.                 Logger.warn("GameServer.splitMass: throwMass-splitMass = " + (throwMass - splitMass).toFixed(3) + " (" + mass.toFixed(4) + ", " + count + ")");
  81.             }
  82.             while (restCount > 0) {
  83.                 masses.push(splitMass);
  84.                 restCount--;
  85.             }
  86.         }
  87.     }
  88.     return masses;
  89. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement