Package org.spoutcraft.client.spoutworth

Source Code of org.spoutcraft.client.spoutworth.SpoutWorth

/*
* This file is part of Spoutcraft.
*
* Copyright (c) 2011 SpoutcraftDev <http://spoutcraft.org/>
* Spoutcraft is licensed under the GNU Lesser General Public License.
*
* Spoutcraft is free software: you can redistribute it and/or modify
* it under the terms of the GNU Lesser General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* Spoutcraft is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
* GNU Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public License
* along with this program.  If not, see <http://www.gnu.org/licenses/>.
*/
package org.spoutcraft.client.spoutworth;

import gnu.trove.iterator.TLongIterator;
import gnu.trove.list.linked.TLongLinkedList;

import net.minecraft.src.Minecraft;

import org.spoutcraft.client.config.Configuration;

public class SpoutWorth {
  private static SpoutWorth instance = null;
  public static SpoutWorth getInstance() {
    if (instance == null) {
      instance = new SpoutWorth();
    }
    return instance;
  }

  private static final int MAX_FPS_TRACKED = 1000;
  private static final int IDEAL_FPS = 60;

  TLongLinkedList fpsList = new TLongLinkedList();
  long avgFPS = -1;
  long appearanceCooldown = 0;
  long currentFPS = IDEAL_FPS;
  String debug;
  boolean belowIdeal = false;

  public void updateFPS(long fps) {
    fpsList.add(fps);
    if (fpsList.size() > MAX_FPS_TRACKED) {
      fpsList.removeAt(0);
    }
    avgFPS = -1;
    currentFPS = fps;
    doTick();
  }

  public long getAverageFPS() {
    if (avgFPS != -1) {
      return avgFPS;
    }
    if (fpsList.size() == 0) {
      return IDEAL_FPS;
    }
    long total = 0;
    TLongIterator i = fpsList.iterator();
    while (i.hasNext()) {
      total += i.next();
    }
    avgFPS = Math.max(1, total / fpsList.size());
    return avgFPS;
  }

  public long getIdealFPS() {
    return Math.min(getAverageFPS() + 10, IDEAL_FPS);
  }

  public void doTick() {
    Configuration.setSignDistance(Math.max(8, Configuration.getSignDistance()));
    if (!Configuration.isAutomatePerformance()) {
      return;
    }

    Configuration.setPerformance(0);
    Configuration.setFarView(false);

    long idealFPS = getIdealFPS();
    // Calculate how close we are to acheiving ideal FPS
    long percent = getAverageFPS() * 100 / idealFPS;
    long percentCur = currentFPS * 100 / idealFPS;

    // Increase our ideal standards if we are looking for best performance
    if (Configuration.getAutomateMode() == 0) {
      percent -= 10;
      percentCur -= 10;
    } else if (Configuration.getAutomateMode() == 1) { // Decrease our ideal standards if we are looking for balanced performance
      percent += 15;
      percentCur += 15;
    } else if (Configuration.getAutomateMode() == 2) { // Decrease our ideal standards if we are looking for best appearance
      percent += 40;
      percentCur += 40;
    }

    boolean improving = percentCur > percent;

    belowIdeal = percent < 75;
    debug = "Ideal Percent: " + percent + " Current Percent: " + percentCur + " Improving: " + improving;

    if (percent > 200) {
      if (--appearanceCooldown <= 0) {
        appearanceCooldown = 600;
        increaseAppearance();
        increaseAppearance();
      }
    } else if (percent > 150 || (percent > 125 && improving)) {
      if (--appearanceCooldown <= 0) {
        appearanceCooldown = 600;
        increaseAppearance();
      }
    } else if (percent < 40) {
      decreaseAppearance(true, improving ? 10 : 0);
      appearanceCooldown = 120;
    } else if (percent < 66) {
      if (--appearanceCooldown <= 0) {
        decreaseAppearance(improving, 0);
        appearanceCooldown = 240;
      }
    } else if (percent < 85) {
      if (--appearanceCooldown <= 0) {
        decreaseAppearance();
        appearanceCooldown = 480;
      }
    }
  }

  public boolean isFullyLoaded() {
    return fpsList.size() == SpoutWorth.MAX_FPS_TRACKED;
  }

  public boolean isBelowIdeal() {
    return belowIdeal && Configuration.isAutomatePerformance();
  }

  public String getDebugText() {
    return debug;
  }

  public void increaseAppearance() {
    if (!Configuration.isSky()) {
      Configuration.setSky(true);
      Configuration.write();
      return;
    }
    if (!Configuration.isStars()) {
      Configuration.setStars(true);
      Configuration.write();
      return;
    }
    if (!Configuration.isFancyWater()) {
      Configuration.setFancyWater(true);
      Configuration.write();
      return;
    }
    if (!Configuration.isFancyParticles()) {
      Configuration.setFancyParticles(true);
      Configuration.write();
      return;
    }
    if (!Configuration.isFancyFog()) {
      Configuration.setFancyFog(true);
      Configuration.write();
      return;
    }
    if (!Configuration.isFancyGrass()) {
      Configuration.setFancyGrass(true);
      Configuration.write();
      return;
    }
    if (!Configuration.isFancyBiomeColors()) {
      Configuration.setFancyBiomeColors(true);
      Configuration.write();
      return;
    }
    if (!Configuration.isFancyLight()) {
      Configuration.setFancyLight(true);
      Configuration.write();
      return;
    }
    if (!Configuration.isFancyLight()) {
      Configuration.setFancyLight(true);
      Configuration.write();
      return;
    }
    if (!Configuration.isFancyClouds()) {
      Configuration.setFancyClouds(true);
      Configuration.write();
      return;
    }
    if (!Configuration.isFancyTrees()) {
      Configuration.setFancyTrees(true);
      Configuration.write();
      return;
    }
    if (!Configuration.isFancyWeather()) {
      Configuration.setFancyWeather(true);
      Configuration.write();
      return;
    }
    if (Configuration.getBetterGrass() == 1) {
      Configuration.setBetterGrass(2);
      Configuration.write();
      return;
    }
    if (Configuration.getRenderDistance() != 0) {
      Configuration.setRenderDistance(Configuration.getRenderDistance() - 1);
      Minecraft.getMinecraft().gameSettings.renderDistance = Configuration.getRenderDistance();
      Configuration.write();
      return;
    }
    if (Configuration.getAdvancedOpenGL() != 0) {
      Configuration.setAdvancedOpenGL(0);
      Minecraft.getMinecraft().gameSettings.advancedOpengl = false;
      Configuration.write();
      return;
    }
    if (Configuration.getSignDistance() != Integer.MAX_VALUE) {
      Configuration.setSignDistance(Configuration.getSignDistance() * 2);
      if (Configuration.getSignDistance() >= 128) {
        Configuration.setSignDistance(Integer.MAX_VALUE);
      }
      Configuration.write();
      return;
    }
    if (!Configuration.isAmbientOcclusion()) {
      Configuration.setAmbientOcclusion(true);
      Configuration.write();
      return;
    }
  }

  public void decreaseAppearance() {
    decreaseAppearance(false, 0);
  }

  public void decreaseAppearance(boolean drastic, long haltRenderingCount) {
    int downgrade = drastic ? 2 : 1;

    if (Configuration.isSky()) {
      Configuration.setSky(false);
      if (--downgrade == 0) {
        Configuration.write();
        return;
      }
    }
    if (Configuration.getChunkRenderPasses() > 1) {
      Configuration.setChunkRenderPasses(1);
      if (--downgrade == 0) {
        Configuration.write();
        return;
      }
    }
    if (Configuration.getRenderDistance() < 2) {
      Configuration.setRenderDistance(Configuration.getRenderDistance() + 1);
      Minecraft.getMinecraft().gameSettings.renderDistance = Configuration.getRenderDistance();
      if (--downgrade == 0) {
        Configuration.write();
        return;
      }
    }
    if (Configuration.getAdvancedOpenGL() == 2 || Configuration.getAdvancedOpenGL() == 0) {
      Configuration.setAdvancedOpenGL(1);
      Minecraft.getMinecraft().gameSettings.advancedOpengl = true;
      if (--downgrade == 0) {
        Configuration.write();
        return;
      }
    }
    if (Configuration.getSignDistance() > 8) {
      Configuration.setSignDistance(Configuration.getSignDistance() / 2);
      if (--downgrade == 0) {
        Configuration.write();
        return;
      }
    }

    if (Configuration.isFancyParticles()) {
      Configuration.setFancyParticles(false);
      if (--downgrade == 0) {
        Configuration.write();
        return;
      }
    }
    if (Configuration.isFancyFog()) {
      Configuration.setFancyFog(false);
      Configuration.write();
      if (--downgrade == 0) {
        return;
      }
    }
    if (Configuration.isFancyGrass()) {
      Configuration.setFancyGrass(false);
      if (--downgrade == 0) {
        Configuration.write();
        return;
      }
    }
    if (Configuration.isFancyBiomeColors()) {
      Configuration.setFancyBiomeColors(false);
      if (--downgrade == 0) {
        Configuration.write();
        return;
      }
    }
    if (Configuration.isStars()) {
      Configuration.setStars(false);
      if (--downgrade == 0) {
        Configuration.write();
        return;
      }
    }
    if (Configuration.isFancyLight()) {
      Configuration.setFancyLight(false);
      if (--downgrade == 0) {
        Configuration.write();
        return;
      }
    }
    if (Configuration.isFancyLight()) {
      Configuration.setFancyLight(false);
      if (--downgrade == 0) {
        Configuration.write();
        return;
      }
    }
    if (Configuration.isFancyClouds()) {
      Configuration.setFancyClouds(false);
      if (--downgrade == 0) {
        Configuration.write();
        return;
      }
    }
    if (Configuration.isFancyTrees()) {
      Configuration.setFancyTrees(false);
      if (--downgrade == 0) {
        Configuration.write();
        return;
      }
    }
    if (Configuration.isFancyWeather()) {
      Configuration.setFancyWeather(false);
      if (--downgrade == 0) {
        Configuration.write();
        return;
      }
    }
    if (Configuration.getBetterGrass() == 2) {
      Configuration.setBetterGrass(1);
      if (--downgrade == 0) {
        Configuration.write();
        return;
      }
    }
    if (Configuration.isFancyWater()) {
      Configuration.setFancyWater(false);
      if (--downgrade == 0) {
        Configuration.write();
        return;
      }
    }
    if (Configuration.isAmbientOcclusion()) {
      Configuration.setAmbientOcclusion(false);
      if (--downgrade == 0) {
        Configuration.write();
        return;
      }
    }
  }
}
TOP

Related Classes of org.spoutcraft.client.spoutworth.SpoutWorth

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.