/**
* Copyright (c) Lambda Innovation, 2013-2015
* 本作品版权由Lambda Innovation所有。
* http://www.li-dev.cn/
*
* This project is open-source, and it is distributed under
* the terms of GNU General Public License. You can modify
* and distribute freely as long as you follow the license.
* 本项目是一个开源项目,且遵循GNU通用公共授权协议。
* 在遵照该协议的情况下,您可以自由传播和修改。
* http://www.gnu.org/licenses/gpl.html
*/
package cn.weaponry.impl.generic.action;
import javax.vecmath.Vector2d;
import net.minecraft.entity.player.EntityPlayer;
import cn.liutils.util.generic.RandUtils;
import cn.weaponry.api.action.Action;
import cpw.mods.fml.relauncher.Side;
import cpw.mods.fml.relauncher.SideOnly;
/**
* Represents a single time of uplift.
* @author WeAthFolD
*/
@SideOnly(Side.CLIENT)
public class ScreenUplift extends Action {
//TODO: Open up the rad limit?
public double upliftRadius = 4; //Expected uplift radius. For better experience use RangeRandom(rad*0.8, rad*1.2).
public double upliftSpeed = 2.5; //Uplift speed, unit: deg/tick
public double recoverSpeed = 0.9; //Angle recover speed, unit: deg/tick
public double degreeFrom = 50, degreeTo = 130; //The allowed "uplift" vector scatter range, in degrees.
private Vector2d dir;
private double uplift;
private double changedAngles = 0.0;
@Override
public String getName() {
return "Uplift";
}
boolean recovering = false;
@Override
public void onStart() {
double rad = RandUtils.ranged(degreeFrom, degreeTo) * Math.PI / 180;
dir = new Vector2d(Math.sin(rad), Math.cos(rad));
uplift = RandUtils.ranged(0.8, 1.2) * upliftRadius;
EntityPlayer player = getPlayer();
//lastRecoverTime = Minecraft.getSystemTime();
}
@Override
public void onRenderTick() {
EntityPlayer player = getPlayer();
long dt = itemInfo.getDeltaTime();
if(!recovering) {
double change = upliftSpeed * dt / 50.0;
if(changedAngles + change > uplift) {
change = uplift - changedAngles;
// System.out.println("UE" + change + " " + changedAngles);
player.rotationYaw += dir.y * change;
player.rotationPitch -= dir.x * change;
changedAngles = 0;
recovering = true;
} else {
// System.out.println("U " + change + " " + changedAngles);
player.rotationYaw += dir.y * change;
player.rotationPitch -= dir.x * change;
changedAngles += change;
}
} else {
double change = recoverSpeed * dt / 50.0;
if(changedAngles + change > uplift) {
change = uplift - changedAngles;
disposed = true;
// System.out.println("RE" + change + " " + changedAngles);
}
player.rotationYaw -= dir.y * change;
player.rotationPitch += dir.x * change;
changedAngles += change;
}
}
}