public boolean attack(Spinner self, Spinner target) {
            if (!newSp.contains(target) || !newSp.contains(self)) {
                return false;    //crappy way of handling concurrency issues
            }

            float targetEnergy = target.getEnergy();
            float selfEnergy = self.getEnergy();
            float energyWager = Math.min(self.getEnergy(), target.getEnergy());
            boolean allTargetEnergy = selfEnergy >= targetEnergy;
            self.setEnergy(selfEnergy + energyWager);
            target.setEnergy(targetEnergy - energyWager);
            self.setEnergy(self.getEnergy() * (1f - attackEnergyScale));
            globalProperties.addEnergy(attackEnergyScale * self.getEnergy());
            if (allTargetEnergy) {
                newSp.remove(target);
                return true;
            } else {
                return false;
            }
        }