package coffee.liz.abstractionengine; import coffee.liz.abstractionengine.grid.component.GridInputState; import coffee.liz.abstractionengine.grid.system.GridCollisionPropagatationSystem; import coffee.liz.abstractionengine.grid.system.GridIndexSystem; import coffee.liz.abstractionengine.grid.system.GridMovementSystem; import coffee.liz.abstractionengine.grid.system.GridPhysicsSystem; import coffee.liz.ecs.DAGWorld; import coffee.liz.ecs.math.Vec2; import lombok.extern.log4j.Log4j2; import java.time.Duration; import java.util.Map; /** Grid world implementation for the abstraction engine. */ @Log4j2 public class AbstractionEngineGridWorld extends DAGWorld { /** Initialize world with systems and player. */ public AbstractionEngineGridWorld(final Vec2 gridDimensions) { super(Map.of(GridMovementSystem.class, new GridMovementSystem(), GridPhysicsSystem.class, new GridPhysicsSystem(), GridIndexSystem.class, new GridIndexSystem(gridDimensions), GridCollisionPropagatationSystem.class, new GridCollisionPropagatationSystem())); } /** * Update world with input state. For now our grid world is a "step function", * so we shouldn't (yet) care about the amount of time between steps. * * @param state * the {@link GridInputState} */ public void update(final GridInputState state) { update(state, Duration.ZERO); } }