package com.siondream.core.entity.factory; import ashley.core.Component; import com.badlogic.gdx.graphics.Color; import com.badlogic.gdx.graphics.Texture; import com.badlogic.gdx.graphics.g2d.BitmapFont; import com.badlogic.gdx.graphics.g2d.TextureAtlas; import com.badlogic.gdx.graphics.g2d.TextureRegion; import com.badlogic.gdx.maps.tiled.TiledMap; import com.badlogic.gdx.utils.Json; import com.badlogic.gdx.utils.JsonValue; import com.esotericsoftware.spine.AnimationState; import com.esotericsoftware.spine.AnimationStateData; import com.esotericsoftware.spine.Skeleton; import com.siondream.core.Env; import com.siondream.core.animation.SpriteAnimationData; import com.siondream.core.entity.components.ColorComponent; import com.siondream.core.entity.components.FontComponent; import com.siondream.core.entity.components.MapComponent; import com.siondream.core.entity.components.OverridePhysicsComponent; import com.siondream.core.entity.components.ParticleComponent; import com.siondream.core.entity.components.PhysicsComponent; import com.siondream.core.entity.components.ShaderComponent; import com.siondream.core.entity.components.SpineComponent; import com.siondream.core.entity.components.SpriteComponent; import com.siondream.core.entity.components.StateComponent; import com.siondream.core.entity.components.TextureComponent; import com.siondream.core.entity.components.TransformComponent; import com.siondream.core.entity.factory.EntityFactory.ComponentReader; import com.siondream.core.physics.PhysicsData; public class ComponentReaders { public static class ColorComponentReader implements ComponentReader { private Json json = new Json(); @Override public Class<? extends Component> getComponentClass() { return ColorComponent.class; } @Override public Component read(JsonValue value) { ColorComponent component = new ColorComponent(); component.color = json.fromJson(Color.class, value.asString()); return component; } } public static class FontComponentReader implements ComponentReader { @Override public Class<? extends Component> getComponentClass() { return FontComponent.class; } @Override public Component read(JsonValue value) { FontComponent component = new FontComponent(); component.font = Env.game.getAssets().get(value.getString("name"), BitmapFont.class); return component; } } public static class MapComponentReader implements ComponentReader { @Override public Class<? extends Component> getComponentClass() { return MapComponent.class; } @Override public Component read(JsonValue value) { MapComponent component = new MapComponent(); component.map = Env.game.getAssets().get(value.getString("name"), TiledMap.class); return component; } } public static class OverridePhysicsComponentReader implements ComponentReader { @Override public Class<? extends Component> getComponentClass() { return OverridePhysicsComponent.class; } @Override public Component read(JsonValue value) { OverridePhysicsComponent component = new OverridePhysicsComponent(); component.enable = value.getBoolean("enable", true); return component; } } public static class ParticleComponentReader implements ComponentReader { @Override public Class<? extends Component> getComponentClass() { return ParticleComponent.class; } @Override public Component read(JsonValue value) { ParticleComponent component = new ParticleComponent(); component.name = value.getString("name"); return component; } } public static class PhysicsComponentReader implements ComponentReader { @Override public Class<? extends Component> getComponentClass() { return PhysicsComponent.class; } @Override public Component read(JsonValue value) { PhysicsComponent component = new PhysicsComponent(); component.data = Env.game.getAssets().get(value.getString("name"), PhysicsData.class); return component; } } public static class ShaderComponentReader implements ComponentReader { @Override public Class<? extends Component> getComponentClass() { return ShaderComponent.class; } @Override public Component read(JsonValue value) { ShaderComponent component = new ShaderComponent(); component.shader = Env.game.getShaderManager().get(value.getString("name")); return component; } } public static class SpineComponentReader implements ComponentReader { @Override public Class<? extends Component> getComponentClass() { return SpineComponent.class; } @Override public Component read(JsonValue value) { SpineComponent component = new SpineComponent(); component.state = new AnimationState(Env.game.getAssets().get(value.getString("name"), AnimationStateData.class)); component.skeleton = new Skeleton(component.state.getData().getSkeletonData()); return component; } } public static class SpriteComponentReader implements ComponentReader { @Override public Class<? extends Component> getComponentClass() { return SpriteComponent.class; } @Override public Component read(JsonValue value) { SpriteComponent component = new SpriteComponent(); component.data = Env.game.getAssets().get(value.getString("name"), SpriteAnimationData.class); return component; } } public static class StateComponentReader implements ComponentReader { @Override public Class<? extends Component> getComponentClass() { return StateComponent.class; } @Override public Component read(JsonValue value) { StateComponent component = new StateComponent(); component.id = StateComponent.getID(value.getString("name", "idle")); return component; } } public static class TextureComponentReader implements ComponentReader { @Override public Class<? extends Component> getComponentClass() { return TextureComponent.class; } @Override public Component read(JsonValue value) { TextureComponent component = new TextureComponent(); if (value.has("atlas") && value.has("region")) { TextureAtlas atlas = Env.game.getAssets().get(value.getString("atlas"), TextureAtlas.class); component.region = atlas.findRegion(value.getString("region")); } else if (value.has("texture")) { component.region = new TextureRegion(Env.game.getAssets().get(value.getString("texture"), Texture.class)); } return component; } } public static class TransformComponentReader implements ComponentReader { @Override public Class<? extends Component> getComponentClass() { return TransformComponent.class; } @Override public Component read(JsonValue value) { TransformComponent component = new TransformComponent(); component.position.x = value.getFloat("x", 0.0f); component.position.y = value.getFloat("y", 0.0f); component.position.z = value.getFloat("z", 0.0f); component.scale = value.getFloat("scale", 1.0f); component.angle = value.getFloat("angle", 0.0f); return component; } } }