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); } }