JSFiddle - React, Tailwind, and code Playground

by Daedalus

JavaScript

let inits = [{
  state: 'alive',
  name: 'test1',
  roll: 5,
  next: false
}, {
  state: 'alive',
  name: 'test2',
  roll: 10,
  next: false
}, {
  state: 'ko',
  name: 'test3',
  roll: 55,
  next: false
}, {
  state: 'alive',
  name: 'test4',
  roll: 15,
  next: false
}, {
  state: 'alive',
  name: 'test5',
  roll: 5,
  next: false
}];

inits.sort((a, b) => b.roll - a.roll);
console.clear();
console.log(inits);

function next() {
  let nextInits = inits.filter(init => init.state === 'alive').filter(init => init.next);
  let nextInit;
  if (nextInits.length === 1) {
    nextInit = nextInits[0];
  } else if (nextInits.length === 0) {
    nextInit = inits[0];
  } else {
    nextInit = inits[0];
  }
  let index = inits.indexOf(nextInit);
  if (typeof inits[index] !== 'undefined') {
    inits[index].next = false;
    if (typeof inits[index + 1] === 'undefined') {
      if (typeof inits[0] !== 'undefined') {
        inits[0].next = true;
        console.log('starting from top, new round');
      }
    } else {
      if (inits[index + 1].state !== 'alive') {
      	next();
      } else {
    		inits[index + 1].next = true;
      }
    }
    
    console.log(inits[index].name, inits[index].roll);
  }
}

next();
next();
next();
next();
/*console.log('test6 pushed');
inits.push({
  state: 'alive',
  name: 'test6',
  roll: 60,
  next: false
});
inits.sort((a, b) => b.roll - a.roll);*/
next();
next();
next();
next();
next();
next();