initial commit

This commit is contained in:
Quillraven
2025-05-24 16:06:38 +02:00
commit 3398b64a03
100 changed files with 1977 additions and 0 deletions

15
core/build.gradle Normal file
View 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"
}
}

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

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

View File

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

View File

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

View File

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