package net.mostlyoriginal.game; import com.artemis.World; import com.artemis.managers.GroupManager; import com.artemis.managers.TagManager; import com.artemis.managers.UuidEntityManager; import com.badlogic.gdx.Gdx; import com.badlogic.gdx.Screen; import com.badlogic.gdx.graphics.GL20; import com.badlogic.gdx.math.MathUtils; import net.mostlyoriginal.api.event.common.EventManager; import net.mostlyoriginal.api.system.camera.CameraShakeSystem; import net.mostlyoriginal.api.system.camera.CameraSystem; import net.mostlyoriginal.api.system.camera.EntityCameraSystem; import net.mostlyoriginal.api.system.graphics.ColorAnimationSystem; import net.mostlyoriginal.api.system.graphics.RenderBatchingSystem; import net.mostlyoriginal.api.system.mouse.MouseCursorSystem; import net.mostlyoriginal.api.system.physics.*; import net.mostlyoriginal.api.system.render.AnimRenderSystem; import net.mostlyoriginal.api.system.script.EntitySpawnerSystem; import net.mostlyoriginal.api.system.script.SchedulerSystem; import net.mostlyoriginal.game.manager.AssetSystem; import net.mostlyoriginal.game.manager.EntityFactorySystem; import net.mostlyoriginal.game.manager.FontManager; import net.mostlyoriginal.game.system.render.BarRenderSystem; import net.mostlyoriginal.game.system.render.LabelRenderSystem; import net.mostlyoriginal.game.system.ship.*; import net.mostlyoriginal.game.system.tutorial.TutorialSystem; import net.mostlyoriginal.game.system.ui.*; /** * @author Daan van Yperen */ public class MainScreen implements Screen { public static final int CAMERA_ZOOM_FACTOR = 4; private final World world; public MainScreen() { world = new World(); /** UTILITY - MANAGERS */ world.setManager(new GroupManager()); world.setManager(new TagManager()); world.setManager(new UuidEntityManager()); world.setManager(new FontManager()); world.setManager(new EventManager()); /** UTILITY - PASSIVE */ //world.setSystem(new CollisionSystem()); world.setSystem(new InventorySystem()); world.setSystem(new EntityFactorySystem()); world.setSystem(new ConstructionSystem()); world.setSystem(new ShipComponentSystem()); world.setSystem(new HullSystem()); //world.setSystem(new TiledMapSystem("level1.tmx")); world.setSystem(new AssetSystem()); world.setSystem(new CameraSystem(CAMERA_ZOOM_FACTOR)); /** CONTROL */ world.setSystem(new RouteSystem()); world.setSystem(new TravelSimulationSystem()); /* */ world.setSystem(new LifesupportSimulationSystem(),true); /* */ world.setSystem(new ProductionSimulationSystem(),true); world.setSystem(new DilemmaSystem()); world.setSystem(new CrewSystem()); // control systems. /** Agency Systems (Control and Interact) */ //world.setSystem(new PlayerControlSystem()); //world.setSystem(new SlumbererSystem()); /** Acting Systems (Control and Interact) */ //world.setSystem(new PluckableSystem()); world.setSystem(new SchedulerSystem()); world.setSystem(new EntitySpawnerSystem()); world.setSystem(new MouseCursorSystem()); world.setSystem(new MouseClickSystem()); world.setSystem(new ButtonSystem()); world.setSystem(new TutorialSystem()); /** SIMULATE */ /** Physics systems that apply a vector on an entity */ world.setSystem(new HomingSystem()); world.setSystem(new GravitySystem()); /** Physics systems that constrain the movement*/ world.setSystem(new CollisionSystem()); //world.setSystem(new ClampedSystem()); /** Physics systems that move the entity to an absolute location. */ world.setSystem(new AttachmentSystem()); world.setSystem(new InbetweenSystem()); world.setSystem(new GateSystem()); /** apply velocity */ world.setSystem(new PhysicsSystem()); /** Post Physics Simulations */ //world.setSystem(new AimSystem()); //world.setSystem(new MapWallSensorSystem()); /** PRE-RENDER */ world.setSystem(new ColorAnimationSystem()); world.setSystem(new AccelerationEffectSystem()); world.setSystem(new EngineEffectSystem()); /** RENDER */ /** Camera */ world.setSystem(new EntityCameraSystem()); world.setSystem(new CameraShakeSystem()); /** Rendering */ final RenderBatchingSystem renderBatchingSystem = new RenderBatchingSystem(); world.setSystem(renderBatchingSystem); world.setSystem(new AnimRenderSystem(renderBatchingSystem), true); world.setSystem(new LabelRenderSystem(renderBatchingSystem), true); world.setSystem(new BarRenderSystem(renderBatchingSystem), true); world.initialize(); } @Override public void render(float delta) { Gdx.gl.glClearColor(0, 0, 0, 1); Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT); // limit world delta to prevent clipping through walls. world.setDelta(MathUtils.clamp(delta, 0, 1 / 15f)); world.process(); } @Override public void resize(int width, int height) { } @Override public void show() { } @Override public void hide() { } @Override public void pause() { } @Override public void resume() { } @Override public void dispose() { } }