package com.javamarcher.gamestate; import org.joml.Vector3f; import com.javamarcher.animation.CameraAnimationController; import com.javamarcher.configuration.GlobalConfig; import com.javamarcher.ecs.component.CameraTransform; import com.javamarcher.renderer.Renderer; import com.javamarcher.systems.Camera; import com.javamarcher.systems.CameraMovementSystem; import com.javamarcher.systems.CameraSystem; import com.javamarcher.tweening.CamTransformTweenAccessor; import com.javamarcher.tweening.FloatTweenAccessor; import com.javamarcher.tweening.Vector3fTweenAccessor; import at.fhooe.mtd.ecs.Engine; import aurelienribon.tweenengine.Tween; import aurelienribon.tweenengine.TweenManager; import aurelienribon.tweenengine.equations.Quad; /** * Basic main state for the whole execution of the JavaMarcher. * <ul> * <li>Rendering into a full screen quad</li> * <li>Camera</li> * <li>Shader handling</li> * </ul> */ public class MainState implements GameState { // The quad is a non entity system entity private final Renderer quad = new Renderer(); // ECS **************************************************************** private final Engine engine = new Engine(); private final CameraSystem cameraSystem = new CameraSystem(true); private final CameraMovementSystem cameraMovementSystem = new CameraMovementSystem(); // ******************************************************************** // Hack to stop animations :/ public static final TweenManager tweenManager = new TweenManager(); private CameraAnimationController camAnimController; @Override public void start() { // Register tween accessor Tween.registerAccessor(CameraTransform.class, new CamTransformTweenAccessor()); Tween.registerAccessor(Vector3f.class, new Vector3fTweenAccessor()); Tween.registerAccessor(Float.class, new FloatTweenAccessor()); engine.addSystem(cameraSystem); Camera defaultCamera = cameraSystem.getDefaultCamera(); defaultCamera.getTransform().translate(new Vector3f(0, 1f, -2f)); quad.setCameraSystem(cameraSystem); engine.addSystem(cameraMovementSystem); camAnimController = new CameraAnimationController(defaultCamera.getTransform(), 0.15f, -25f, 1.5f, tweenManager); camAnimController.start(); quad.start(); // Sun tweening if(GlobalConfig.IS_ANIMATION_CONTROLLED) { Tween.to(GlobalConfig.SUN_DIRECTION, Vector3fTweenAccessor.POSITION_Y, 42f) .target(GlobalConfig.SUN_DIRECTION.y + 0.8f) .repeatYoyo(Tween.INFINITY, 0f).ease(Quad.INOUT).start(tweenManager); } } @Override public void update(double deltaTime) { tweenManager.update((float) deltaTime); camAnimController.update(deltaTime); engine.update(deltaTime); quad.update(deltaTime); } @Override public void destroy() { engine.dispose(); quad.destroy(); camAnimController.destroy(); } }