85 lines
2.1 KiB
Java
85 lines
2.1 KiB
Java
package electrosphere.entity.state.movement;
|
|
|
|
import electrosphere.engine.Main;
|
|
import electrosphere.entity.Entity;
|
|
import electrosphere.entity.btree.BehaviorTree;
|
|
import electrosphere.entity.state.movement.groundmove.GroundMovementTree;
|
|
import electrosphere.entity.state.movement.groundmove.GroundMovementTree.MovementTreeState;
|
|
|
|
/**
|
|
*
|
|
* @author amaterasu
|
|
*/
|
|
public class SprintTree implements BehaviorTree {
|
|
|
|
public static enum SprintTreeState {
|
|
SPRINTING,
|
|
NOT_SPRINTING,
|
|
}
|
|
|
|
SprintTreeState state;
|
|
|
|
GroundMovementTree groundMovementTree;
|
|
|
|
Entity parent;
|
|
|
|
int staminaCurrent = 0;
|
|
int staminaMax = 1;
|
|
|
|
float maxVelocity;
|
|
|
|
public SprintTree(Entity e, float maxVelocity, int staminaMax){
|
|
state = SprintTreeState.NOT_SPRINTING;
|
|
parent = e;
|
|
this.maxVelocity = maxVelocity;
|
|
this.staminaMax = staminaMax;
|
|
}
|
|
|
|
public SprintTreeState getState(){
|
|
return state;
|
|
}
|
|
|
|
public void start(){
|
|
if(staminaCurrent > 0){
|
|
// System.out.println("Starting sprinting");
|
|
state = SprintTreeState.SPRINTING;
|
|
}
|
|
}
|
|
|
|
public void stop(){
|
|
state = SprintTreeState.NOT_SPRINTING;
|
|
}
|
|
|
|
@Override
|
|
public void simulate(float deltaTime){
|
|
switch(state){
|
|
case SPRINTING:
|
|
if(groundMovementTree != null && groundMovementTree.getState() != MovementTreeState.IDLE){
|
|
staminaCurrent--;
|
|
if(staminaCurrent < 1){
|
|
state = SprintTreeState.NOT_SPRINTING;
|
|
}
|
|
}
|
|
break;
|
|
case NOT_SPRINTING:
|
|
staminaCurrent++;
|
|
if(staminaCurrent > staminaMax){
|
|
staminaCurrent = staminaMax;
|
|
}
|
|
break;
|
|
}
|
|
}
|
|
|
|
public void setGroundMovementTree(GroundMovementTree groundMovementTree){
|
|
this.groundMovementTree = groundMovementTree;
|
|
}
|
|
|
|
//get max velocity
|
|
public float getMaxVelocity() {
|
|
return maxVelocity;
|
|
}
|
|
|
|
|
|
|
|
}
|