initial commit
This commit is contained in:
15
core/build.gradle
Normal file
15
core/build.gradle
Normal file
@@ -0,0 +1,15 @@
|
||||
[compileJava, compileTestJava]*.options*.encoding = 'UTF-8'
|
||||
eclipse.project.name = appName + '-core'
|
||||
|
||||
dependencies {
|
||||
api "com.badlogicgames.ashley:ashley:$ashleyVersion"
|
||||
api "com.badlogicgames.box2dlights:box2dlights:$box2dlightsVersion"
|
||||
api "com.badlogicgames.gdx:gdx-ai:$aiVersion"
|
||||
api "com.badlogicgames.gdx:gdx-box2d:$gdxVersion"
|
||||
api "com.badlogicgames.gdx:gdx-freetype:$gdxVersion"
|
||||
api "com.badlogicgames.gdx:gdx:$gdxVersion"
|
||||
|
||||
if(enableGraalNative == 'true') {
|
||||
implementation "io.github.berstanio:gdx-svmhelper-annotations:$graalHelperVersion"
|
||||
}
|
||||
}
|
||||
40
core/src/main/java/io/github/com/quillraven/GameScreen.java
Normal file
40
core/src/main/java/io/github/com/quillraven/GameScreen.java
Normal file
@@ -0,0 +1,40 @@
|
||||
package io.github.com.quillraven;
|
||||
|
||||
import com.badlogic.ashley.core.Engine;
|
||||
import com.badlogic.gdx.ScreenAdapter;
|
||||
import com.badlogic.gdx.assets.AssetManager;
|
||||
import com.badlogic.gdx.graphics.OrthographicCamera;
|
||||
import com.badlogic.gdx.graphics.g2d.SpriteBatch;
|
||||
import com.badlogic.gdx.utils.viewport.Viewport;
|
||||
import io.github.com.quillraven.system.RenderSystem;
|
||||
|
||||
public class GameScreen extends ScreenAdapter {
|
||||
private final GdxGame game;
|
||||
|
||||
private final SpriteBatch batch;
|
||||
private final AssetManager assetManager;
|
||||
private final Viewport viewport;
|
||||
private final OrthographicCamera camera;
|
||||
|
||||
private Engine engine;
|
||||
|
||||
public GameScreen(GdxGame game) {
|
||||
this.game = game;
|
||||
this.batch = game.getBatch();
|
||||
this.assetManager = game.getAssetManager();
|
||||
this.viewport = game.getViewport();
|
||||
this.camera = game.getCamera();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void show() {
|
||||
engine = new Engine();
|
||||
engine.addSystem(new RenderSystem(batch, viewport, camera, assetManager));
|
||||
}
|
||||
|
||||
@Override
|
||||
public void render(float delta) {
|
||||
delta = Math.min(1 / 30f, delta);
|
||||
engine.update(delta);
|
||||
}
|
||||
}
|
||||
69
core/src/main/java/io/github/com/quillraven/GdxGame.java
Normal file
69
core/src/main/java/io/github/com/quillraven/GdxGame.java
Normal file
@@ -0,0 +1,69 @@
|
||||
package io.github.com.quillraven;
|
||||
|
||||
import com.badlogic.gdx.Game;
|
||||
import com.badlogic.gdx.Gdx;
|
||||
import com.badlogic.gdx.assets.AssetManager;
|
||||
import com.badlogic.gdx.graphics.GL20;
|
||||
import com.badlogic.gdx.graphics.OrthographicCamera;
|
||||
import com.badlogic.gdx.graphics.g2d.SpriteBatch;
|
||||
import com.badlogic.gdx.utils.viewport.FitViewport;
|
||||
import com.badlogic.gdx.utils.viewport.Viewport;
|
||||
|
||||
public class GdxGame extends Game {
|
||||
public static final float WORLD_HEIGHT = 11f;
|
||||
public static final float WORLD_WIDTH = 6f;
|
||||
|
||||
private SpriteBatch batch;
|
||||
private AssetManager assetManager;
|
||||
private OrthographicCamera camera;
|
||||
private Viewport viewport;
|
||||
|
||||
@Override
|
||||
public void create() {
|
||||
batch = new SpriteBatch();
|
||||
assetManager = new AssetManager();
|
||||
camera = new OrthographicCamera();
|
||||
viewport = new FitViewport(WORLD_WIDTH, WORLD_HEIGHT, camera);
|
||||
|
||||
setScreen(new GameScreen(this));
|
||||
}
|
||||
|
||||
@Override
|
||||
public void render() {
|
||||
Gdx.gl.glClearColor(0, 0, 0, 1);
|
||||
Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT);
|
||||
|
||||
super.render();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void resize(int width, int height) {
|
||||
viewport.update(width, height, true);
|
||||
super.resize(width, height);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void dispose() {
|
||||
if (screen != null) {
|
||||
screen.dispose();
|
||||
}
|
||||
batch.dispose();
|
||||
assetManager.dispose();
|
||||
}
|
||||
|
||||
public SpriteBatch getBatch() {
|
||||
return batch;
|
||||
}
|
||||
|
||||
public AssetManager getAssetManager() {
|
||||
return assetManager;
|
||||
}
|
||||
|
||||
public OrthographicCamera getCamera() {
|
||||
return camera;
|
||||
}
|
||||
|
||||
public Viewport getViewport() {
|
||||
return viewport;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,17 @@
|
||||
package io.github.com.quillraven.component;
|
||||
|
||||
import com.badlogic.ashley.core.Component;
|
||||
import com.badlogic.ashley.core.ComponentMapper;
|
||||
import com.badlogic.gdx.graphics.Color;
|
||||
import com.badlogic.gdx.graphics.g2d.TextureRegion;
|
||||
|
||||
/**
|
||||
* Component that stores the visual representation of an entity.
|
||||
* Contains a texture region and a color for tinting.
|
||||
*/
|
||||
public class Graphic implements Component {
|
||||
public static final ComponentMapper<Graphic> MAPPER = ComponentMapper.getFor(Graphic.class);
|
||||
|
||||
public TextureRegion region;
|
||||
public final Color color = new Color(Color.WHITE);
|
||||
}
|
||||
@@ -0,0 +1,28 @@
|
||||
package io.github.com.quillraven.component;
|
||||
|
||||
import com.badlogic.ashley.core.Component;
|
||||
import com.badlogic.ashley.core.ComponentMapper;
|
||||
import com.badlogic.gdx.math.Vector2;
|
||||
|
||||
/**
|
||||
* Component that stores the position, z-index, and size of an entity.
|
||||
* Implements Comparable to allow sorting entities by z-index and position.
|
||||
*/
|
||||
public class Transform implements Component, Comparable<Transform> {
|
||||
public static final ComponentMapper<Transform> MAPPER = ComponentMapper.getFor(Transform.class);
|
||||
|
||||
public final Vector2 position = new Vector2();
|
||||
public int z = 0;
|
||||
public final Vector2 size = new Vector2(1f, 1f);
|
||||
|
||||
@Override
|
||||
public int compareTo(Transform other) {
|
||||
if (this.z != other.z) {
|
||||
return Float.compare(this.z, other.z);
|
||||
}
|
||||
if (this.position.y != other.position.y) {
|
||||
return Float.compare(other.position.y, this.position.y);
|
||||
}
|
||||
return Float.compare(this.position.x, other.position.x);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,98 @@
|
||||
package io.github.com.quillraven.system;
|
||||
|
||||
import com.badlogic.ashley.core.Entity;
|
||||
import com.badlogic.ashley.core.Family;
|
||||
import com.badlogic.ashley.systems.SortedIteratingSystem;
|
||||
import com.badlogic.gdx.assets.AssetManager;
|
||||
import com.badlogic.gdx.graphics.OrthographicCamera;
|
||||
import com.badlogic.gdx.graphics.g2d.SpriteBatch;
|
||||
import com.badlogic.gdx.maps.tiled.TiledMap;
|
||||
import com.badlogic.gdx.maps.tiled.TiledMapRenderer;
|
||||
import com.badlogic.gdx.maps.tiled.TmxMapLoader;
|
||||
import com.badlogic.gdx.maps.tiled.renderers.OrthogonalTiledMapRenderer;
|
||||
import com.badlogic.gdx.utils.Disposable;
|
||||
import com.badlogic.gdx.utils.viewport.Viewport;
|
||||
import io.github.com.quillraven.component.Graphic;
|
||||
import io.github.com.quillraven.component.Transform;
|
||||
|
||||
/**
|
||||
* System responsible for rendering entities with Transform and Graphic components.
|
||||
* Also handles rendering the tiled map.
|
||||
*/
|
||||
public class RenderSystem extends SortedIteratingSystem implements Disposable {
|
||||
private static final String MAP_PATH = "maps/mainmap.tmx";
|
||||
|
||||
private final SpriteBatch batch;
|
||||
private final OrthographicCamera camera;
|
||||
private final Viewport viewport;
|
||||
private final AssetManager assetManager;
|
||||
|
||||
private TiledMapRenderer mapRenderer;
|
||||
private TiledMap map;
|
||||
|
||||
public RenderSystem(SpriteBatch batch, Viewport viewport, OrthographicCamera camera, AssetManager assetManager) {
|
||||
super(
|
||||
Family.all(Transform.class, Graphic.class).get(),
|
||||
(entity1, entity2) -> {
|
||||
Transform transform1 = Transform.MAPPER.get(entity1);
|
||||
Transform transform2 = Transform.MAPPER.get(entity2);
|
||||
return transform1.compareTo(transform2);
|
||||
}
|
||||
);
|
||||
|
||||
this.batch = batch;
|
||||
this.viewport = viewport;
|
||||
this.camera = camera;
|
||||
this.assetManager = assetManager;
|
||||
|
||||
loadMap();
|
||||
}
|
||||
|
||||
private void loadMap() {
|
||||
if (!assetManager.isLoaded(MAP_PATH)) {
|
||||
assetManager.setLoader(TiledMap.class, new TmxMapLoader());
|
||||
assetManager.load(MAP_PATH, TiledMap.class);
|
||||
assetManager.finishLoading(); // Block until loaded
|
||||
}
|
||||
|
||||
map = assetManager.get(MAP_PATH, TiledMap.class);
|
||||
mapRenderer = new OrthogonalTiledMapRenderer(map, 1f / 32f, batch);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void update(float deltaTime) {
|
||||
viewport.apply();
|
||||
mapRenderer.setView(camera);
|
||||
mapRenderer.render();
|
||||
|
||||
batch.begin();
|
||||
super.update(deltaTime);
|
||||
batch.end();
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void processEntity(Entity entity, float deltaTime) {
|
||||
Transform transform = Transform.MAPPER.get(entity);
|
||||
Graphic graphic = Graphic.MAPPER.get(entity);
|
||||
if (graphic.region == null) {
|
||||
return;
|
||||
}
|
||||
|
||||
batch.setColor(graphic.color);
|
||||
batch.draw(
|
||||
graphic.region,
|
||||
transform.position.x, transform.position.y,
|
||||
transform.size.x / 2, transform.size.y / 2,
|
||||
transform.size.x, transform.size.y,
|
||||
1, 1,
|
||||
0
|
||||
);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void dispose() {
|
||||
if (map != null) {
|
||||
map.dispose();
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user