Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- GameServer.prototype.splitMass = function(mass, count) {
- // min throw size (vanilla 44)
- var throwSize = this.config.playerMinSize + 12;
- var throwMass = throwSize * throwSize / 100;
- // check maxCount
- var maxCount = count;
- var curMass = mass;
- while (maxCount > 1 && curMass / (maxCount - 1) < throwMass) {
- maxCount = maxCount / 2 >>> 0;
- }
- if (maxCount < 2) {
- return [mass];
- }
- // calculate mass
- var minMass = this.config.playerMinSize * this.config.playerMinSize / 100;
- var splitMass = curMass / maxCount;
- if (splitMass < minMass) {
- return [mass];
- }
- var masses = [];
- if (maxCount < 3 || maxCount < count || curMass / throwMass <= 30) {
- // Monotone blow up
- for (var i = 0; i < maxCount; i++) {
- masses.push(splitMass);
- }
- } else {
- // Diverse blow up
- // Barbosik: draft version
- var restCount = maxCount;
- while (restCount > 2) {
- var splitMass = curMass / 2;
- if (splitMass <= throwMass) {
- break;
- }
- var max = curMass - throwMass * (restCount - 1);
- if (max <= throwMass || splitMass >= max) {
- break;
- }
- masses.push(splitMass);
- curMass -= splitMass;
- restCount--;
- }
- var splitMass = curMass / 4;
- if (splitMass > throwMass) {
- while (restCount > 2) {
- var max = curMass - throwMass * (restCount - 1);
- if (max <= throwMass || splitMass >= max) {
- break;
- }
- masses.push(splitMass);
- curMass -= splitMass;
- restCount--;
- }
- }
- var splitMass = curMass / 8;
- if (splitMass > throwMass) {
- while (restCount > 2) {
- var max = curMass - throwMass * (restCount - 1);
- if (max <= throwMass || splitMass >= max) {
- break;
- }
- masses.push(splitMass);
- curMass -= splitMass;
- restCount--;
- }
- }
- if (restCount > 1) {
- splitMass = curMass - throwMass * (restCount - 1);
- if (splitMass > throwMass) {
- masses.push(splitMass);
- curMass -= splitMass;
- restCount--;
- }
- }
- if (restCount > 0) {
- splitMass = curMass / restCount;
- if (splitMass < throwMass - 0.001) {
- Logger.warn("GameServer.splitMass: throwMass-splitMass = " + (throwMass - splitMass).toFixed(3) + " (" + mass.toFixed(4) + ", " + count + ")");
- }
- while (restCount > 0) {
- masses.push(splitMass);
- restCount--;
- }
- }
- }
- return masses;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement