Renderer/src/main/java/electrosphere/entity/state/ironsight/IronSightTree.java
2024-03-21 20:37:47 -04:00

71 lines
2.2 KiB
Java

package electrosphere.entity.state.ironsight;
import org.joml.Vector3f;
import electrosphere.engine.Globals;
import electrosphere.entity.Entity;
import electrosphere.entity.EntityDataStrings;
import electrosphere.entity.btree.BehaviorTree;
import electrosphere.entity.types.camera.CameraEntityUtils;
public class IronSightTree implements BehaviorTree {
static enum IronSightTreeState {
ACTIVE,
INACTIVE,
}
IronSightTreeState state = IronSightTreeState.INACTIVE;
boolean cameraZoomedIn = false;
float regularRadius = 1.0f;
float zoomedInRadius = 0.1f;
Vector3f offcenterOffset = new Vector3f(-0.1f,1,0);
public void start(){
state = IronSightTreeState.ACTIVE;
}
public void release(){
state = IronSightTreeState.INACTIVE;
}
@Override
public void simulate(float deltaTime) {
switch(state){
case ACTIVE:
if(!cameraZoomedIn){
cameraZoomedIn = true;
CameraEntityUtils.setOrbitalCameraDistance(Globals.playerCamera, zoomedInRadius);
Globals.cameraHandler.updateRadialOffset(new Vector3f(0,1,0.5f));
Globals.cameraHandler.updateGlobalCamera();
}
break;
case INACTIVE:
if(cameraZoomedIn){
cameraZoomedIn = false;
CameraEntityUtils.setOrbitalCameraDistance(Globals.playerCamera, regularRadius);
Globals.cameraHandler.updateRadialOffset(new Vector3f(0,1,0));
Globals.cameraHandler.updateGlobalCamera();
}
break;
}
}
public static IronSightTree getIronSightTree(Entity creature){
Object rVal;
if((rVal = creature.getData(EntityDataStrings.IRON_SIGHT_TREE)) != null && rVal instanceof IronSightTree){
return (IronSightTree) rVal;
}
return null;
}
public static void attachIronSightTree(Entity player){
IronSightTree ironSightTree = new IronSightTree();
player.putData(EntityDataStrings.IRON_SIGHT_TREE, ironSightTree);
Globals.clientSceneWrapper.getScene().registerBehaviorTree(ironSightTree);
}
}