package com.deftwun.zombiecopter.components; import com.badlogic.ashley.core.Component; import com.badlogic.gdx.graphics.Texture; import com.badlogic.gdx.graphics.g2d.Sprite; import com.badlogic.gdx.graphics.glutils.FileTextureData; import com.badlogic.gdx.utils.Json; import com.badlogic.gdx.utils.Json.Serializable; import com.badlogic.gdx.utils.JsonValue; import com.badlogic.gdx.utils.ObjectMap; import com.badlogic.gdx.utils.Pool.Poolable; import com.deftwun.zombiecopter.App; import com.deftwun.zombiecopter.SpriteLayer; public class SpriteComponent extends Component implements Poolable,Serializable{ private static class Model{ void fromSpriteComponent(SpriteComponent component){ layer = component.layer; for (ObjectMap.Entry<String,Sprite> entry : component.spriteMap.entries()){ FileTextureData data = (FileTextureData) entry.value.getTexture().getTextureData(); spriteMap.put(entry.key,data.getFileHandle().name()); } } ObjectMap<String,String> spriteMap = new ObjectMap<String,String>(); SpriteLayer layer; } //TODO Each sprite should have its own layer public ObjectMap<String,Sprite> spriteMap = new ObjectMap<String,Sprite>(); public SpriteLayer layer = SpriteLayer.Back; /* public boolean flipX = false, flipY = false; */ @Override public void reset() { spriteMap.clear(); layer = SpriteLayer.Back; /* flipX = false; flipY = false; */ } private void fromModel(Model model){ layer = model.layer; for (ObjectMap.Entry<String,String> entry : model.spriteMap.entries()){ Texture t = App.assets.getTexture(entry.value); if (t != null){ Sprite sprite = new Sprite(t); sprite.setOriginCenter(); spriteMap.put(entry.key, sprite); } } } @Override public void write(Json json) { Model model = new Model(); model.fromSpriteComponent(this); json.writeFields(model); } @Override public void read(Json json, JsonValue jsonData) { Model model = json.fromJson(Model.class, jsonData.toString()); this.fromModel(model); } }