package com.uwsoft.editor.renderer.data;
import com.badlogic.ashley.core.ComponentMapper;
import com.badlogic.ashley.core.Entity;
import com.uwsoft.editor.renderer.components.LayerMapComponent;
import com.uwsoft.editor.renderer.components.MainItemComponent;
import com.uwsoft.editor.renderer.components.NodeComponent;
import com.uwsoft.editor.renderer.factory.EntityFactory;
import com.uwsoft.editor.renderer.resources.FontSizePair;
import java.util.ArrayList;
import java.util.Collections;
import java.util.HashSet;
public class CompositeVO {
public ArrayList<SimpleImageVO> sImages = new ArrayList<SimpleImageVO>(1);
public ArrayList<Image9patchVO> sImage9patchs = new ArrayList<Image9patchVO>(1);
public ArrayList<TextBoxVO> sTextBox = new ArrayList<TextBoxVO>(1);
public ArrayList<LabelVO> sLabels = new ArrayList<LabelVO>(1);
public ArrayList<CompositeItemVO> sComposites = new ArrayList<CompositeItemVO>(1);
public ArrayList<SelectBoxVO> sSelectBoxes = new ArrayList<SelectBoxVO>(1);
public ArrayList<ParticleEffectVO> sParticleEffects = new ArrayList<ParticleEffectVO>(1);
public ArrayList<LightVO> sLights = new ArrayList<LightVO>(1);
public ArrayList<SpineVO> sSpineAnimations = new ArrayList<SpineVO>(1);
public ArrayList<SpriteAnimationVO> sSpriteAnimations = new ArrayList<SpriteAnimationVO>(1);
public ArrayList<SpriterVO> sSpriterAnimations = new ArrayList<SpriterVO>(1);
public ArrayList<ColorPrimitiveVO> sColorPrimitives = new ArrayList<ColorPrimitiveVO>(1);
public ArrayList<LayerItemVO> layers = new ArrayList<LayerItemVO>();
public CompositeVO() {
}
public CompositeVO(CompositeVO vo) {
if (vo == null) return;
update(vo);
}
public void update(CompositeVO vo) {
clear();
for (int i = 0; i < vo.sImages.size(); i++) {
sImages.add(new SimpleImageVO(vo.sImages.get(i)));
}
for (int i = 0; i < vo.sImage9patchs.size(); i++) {
sImage9patchs.add(new Image9patchVO(vo.sImage9patchs.get(i)));
}
for (int i = 0; i < vo.sTextBox.size(); i++) {
sTextBox.add(new TextBoxVO(vo.sTextBox.get(i)));
}
for (int i = 0; i < vo.sLabels.size(); i++) {
sLabels.add(new LabelVO(vo.sLabels.get(i)));
}
for (int i = 0; i < vo.sComposites.size(); i++) {
sComposites.add(new CompositeItemVO(vo.sComposites.get(i)));
}
for (int i = 0; i < vo.sSelectBoxes.size(); i++) {
sSelectBoxes.add(new SelectBoxVO(vo.sSelectBoxes.get(i)));
}
for (int i = 0; i < vo.sParticleEffects.size(); i++) {
sParticleEffects.add(new ParticleEffectVO(vo.sParticleEffects.get(i)));
}
for (int i = 0; i < vo.sLights.size(); i++) {
sLights.add(new LightVO(vo.sLights.get(i)));
}
for (int i = 0; i < vo.sSpineAnimations.size(); i++) {
sSpineAnimations.add(new SpineVO(vo.sSpineAnimations.get(i)));
}
for (int i = 0; i < vo.sSpriteAnimations.size(); i++) {
sSpriteAnimations.add(new SpriteAnimationVO(vo.sSpriteAnimations.get(i)));
}
for (int i = 0; i < vo.sSpriterAnimations.size(); i++) {
sSpriterAnimations.add(new SpriterVO(vo.sSpriterAnimations.get(i)));
}
for (int i = 0; i < vo.sColorPrimitives.size(); i++) {
sColorPrimitives.add(new ColorPrimitiveVO(vo.sColorPrimitives.get(i)));
}
layers.clear();
for (int i = 0; i < vo.layers.size(); i++) {
layers.add(new LayerItemVO(vo.layers.get(i)));
}
}
public void addItem(MainItemVO vo) {
String className = vo.getClass().getSimpleName();
if (className.equals("SimpleImageVO")) {
sImages.add((SimpleImageVO) vo);
}
if (className.equals("Image9patchVO")) {
sImage9patchs.add((Image9patchVO) vo);
}
if (className.equals("TextBoxVO")) {
sTextBox.add((TextBoxVO) vo);
}
if (className.equals("LabelVO")) {
sLabels.add((LabelVO) vo);
}
if (className.equals("CompositeItemVO")) {
sComposites.add((CompositeItemVO) vo);
}
if (className.equals("SelectBoxVO")) {
sSelectBoxes.add((SelectBoxVO) vo);
}
if (className.equals("ParticleEffectVO")) {
sParticleEffects.add((ParticleEffectVO) vo);
}
if (className.equals("LightVO")) {
sLights.add((LightVO) vo);
}
if (className.equals("SpineVO")) {
sSpineAnimations.add((SpineVO) vo);
}
if (className.equals("SpriterVO")) {
sSpriterAnimations.add((SpriterVO) vo);
}
if (className.equals("SpriteAnimationVO")) {
sSpriteAnimations.add((SpriteAnimationVO) vo);
}
if(className.equals("ColorPrimitiveVO")) {
sColorPrimitives.add((ColorPrimitiveVO) vo);
}
}
public void removeItem(MainItemVO vo) {
String className = vo.getClass().getSimpleName();
if (className.equals("SimpleImageVO")) {
sImages.remove((SimpleImageVO) vo);
}
if (className.equals("Image9patchVO")) {
sImage9patchs.remove((Image9patchVO) vo);
}
if (className.equals("TextBoxVO")) {
sTextBox.remove((TextBoxVO) vo);
}
if (className.equals("LabelVO")) {
sLabels.remove((LabelVO) vo);
}
if (className.equals("CompositeItemVO")) {
sComposites.remove((CompositeItemVO) vo);
}
if (className.equals("SelectBoxVO")) {
sSelectBoxes.remove((SelectBoxVO) vo);
}
if (className.equals("ParticleEffectVO")) {
sParticleEffects.remove((ParticleEffectVO) vo);
}
if (className.equals("LightVO")) {
sLights.remove((LightVO) vo);
}
if (className.equals("SpineVO")) {
sSpineAnimations.remove((SpineVO) vo);
}
if (className.equals("SpriteAnimationVO")) {
sSpriteAnimations.remove((SpriteAnimationVO) vo);
}
if (className.equals("SpriterVO")) {
sSpriterAnimations.remove((SpriterVO) vo);
}
if(className.equals("ColorPrimitiveVO")) {
sColorPrimitives.remove((ColorPrimitiveVO) vo);
}
}
public void clear() {
sImages.clear();
sTextBox.clear();
sLabels.clear();
sComposites.clear();
sSelectBoxes.clear();
sParticleEffects.clear();
sLights.clear();
sSpineAnimations.clear();
sSpriteAnimations.clear();
sSpriterAnimations.clear();
sColorPrimitives.clear();
}
public boolean isEmpty() {
return sComposites.isEmpty() &&
sImage9patchs.isEmpty() &&
sImages.isEmpty() &&
sSpriteAnimations.isEmpty() &&
sLabels.isEmpty() &&
sLights.isEmpty() &&
sParticleEffects.isEmpty() &&
sSpriteAnimations.isEmpty() &&
sSpriterAnimations.isEmpty() &&
sSpineAnimations.isEmpty() &&
sSelectBoxes.isEmpty() &&
sTextBox.isEmpty() &&
sColorPrimitives.isEmpty();
}
public String[] getRecursiveParticleEffectsList() {
HashSet<String> list = new HashSet<String>();
for (ParticleEffectVO sParticleEffect : sParticleEffects) {
list.add(sParticleEffect.particleName);
}
for (CompositeItemVO sComposite : sComposites) {
String[] additionalList = sComposite.composite.getRecursiveParticleEffectsList();
Collections.addAll(list, additionalList);
}
String[] finalList = new String[list.size()];
list.toArray(finalList);
return finalList;
}
public String[] getRecursiveSpineAnimationList() {
HashSet<String> list = new HashSet<String>();
for (SpineVO sSpineAnimation : sSpineAnimations) {
list.add(sSpineAnimation.animationName);
}
for (CompositeItemVO sComposite : sComposites) {
String[] additionalList = sComposite.composite.getRecursiveSpineAnimationList();
Collections.addAll(list, additionalList);
}
String[] finalList = new String[list.size()];
list.toArray(finalList);
return finalList;
}
public String[] getRecursiveSpriteAnimationList() {
HashSet<String> list = new HashSet<String>();
for (SpriteAnimationVO sSpriteAnimation : sSpriteAnimations) {
list.add(sSpriteAnimation.animationName);
}
for (CompositeItemVO sComposite : sComposites) {
String[] additionalList = sComposite.composite.getRecursiveSpriteAnimationList();
Collections.addAll(list, additionalList);
}
String[] finalList = new String[list.size()];
list.toArray(finalList);
return finalList;
}
public String[] getRecursiveSpriterAnimationList() {
HashSet<String> list = new HashSet<String>();
for (SpriterVO sSpriterAnimation : sSpriterAnimations) {
list.add(sSpriterAnimation.animationName);
}
for (CompositeItemVO sComposite : sComposites) {
String[] additionalList = sComposite.composite.getRecursiveSpriterAnimationList();
Collections.addAll(list, additionalList);
}
String[] finalList = new String[list.size()];
list.toArray(finalList);
return finalList;
}
public FontSizePair[] getRecursiveFontList() {
HashSet<FontSizePair> list = new HashSet<FontSizePair>();
for (LabelVO sLabel : sLabels) {
list.add(new FontSizePair(sLabel.style.isEmpty() ? "arial" : sLabel.style, sLabel.size == 0 ? 12 : sLabel.size));
}
for (CompositeItemVO sComposite : sComposites) {
FontSizePair[] additionalList = sComposite.composite.getRecursiveFontList();
Collections.addAll(list, additionalList);
}
FontSizePair[] finalList = new FontSizePair[list.size()];
list.toArray(finalList);
return finalList;
}
public String[] getRecursiveShaderList() {
HashSet<String> list = new HashSet<String>();
for (MainItemVO item : getAllItems()) {
if(item.shaderName != null && !item.shaderName.isEmpty()){
list.add(item.shaderName);
}
}
String[] finalList = new String[list.size()];
list.toArray(finalList);
return finalList;
}
public ArrayList<MainItemVO> getAllItems() {
ArrayList<MainItemVO> itemsList = new ArrayList<MainItemVO>();
itemsList = getAllItemsRecursive(itemsList, this);
return itemsList;
}
private ArrayList<MainItemVO> getAllItemsRecursive(ArrayList<MainItemVO> itemsList, CompositeVO compositeVo) {
for(MainItemVO vo: compositeVo.sImage9patchs) {
itemsList.add(vo);
}
for(MainItemVO vo: compositeVo.sImages) {
itemsList.add(vo);
}
for(MainItemVO vo: compositeVo.sLabels) {
itemsList.add(vo);
}
for(MainItemVO vo: compositeVo.sLights) {
itemsList.add(vo);
}
for(MainItemVO vo: compositeVo.sParticleEffects) {
itemsList.add(vo);
}
for(MainItemVO vo: compositeVo.sSelectBoxes) {
itemsList.add(vo);
}
for(MainItemVO vo: compositeVo.sSpineAnimations) {
itemsList.add(vo);
}
for(MainItemVO vo: compositeVo.sSpriteAnimations) {
itemsList.add(vo);
}
for(MainItemVO vo: compositeVo.sSpriterAnimations) {
itemsList.add(vo);
}
for(MainItemVO vo: compositeVo.sTextBox) {
itemsList.add(vo);
}
for(MainItemVO vo: compositeVo.sColorPrimitives) {
itemsList.add(vo);
}
for(CompositeItemVO vo: compositeVo.sComposites) {
itemsList = getAllItemsRecursive(itemsList,vo.composite);
itemsList.add(vo);
}
return itemsList;
}
public void loadFromEntity(Entity compositeEntity) {
NodeComponent nodeComponent = compositeEntity.getComponent(NodeComponent.class);
ComponentMapper<MainItemComponent> mainItemComponentMapper = ComponentMapper.getFor(MainItemComponent.class);
ComponentMapper<LayerMapComponent> layerMainItemComponentComponentMapper = ComponentMapper.getFor(LayerMapComponent.class);
if(nodeComponent == null) return;
for(Entity entity: nodeComponent.children) {
int entityType = mainItemComponentMapper.get(entity).entityType;
if(entityType == EntityFactory.COMPOSITE_TYPE) {
CompositeItemVO vo = new CompositeItemVO();
vo.loadFromEntity(entity);
sComposites.add(vo);
}
if(entityType == EntityFactory.IMAGE_TYPE) {
SimpleImageVO vo = new SimpleImageVO();
vo.loadFromEntity(entity);
sImages.add(vo);
}
if(entityType == EntityFactory.NINE_PATCH) {
Image9patchVO vo = new Image9patchVO();
vo.loadFromEntity(entity);
sImage9patchs.add(vo);
}
if(entityType == EntityFactory.LABEL_TYPE) {
LabelVO vo = new LabelVO();
vo.loadFromEntity(entity);
sLabels.add(vo);
}
if(entityType == EntityFactory.PARTICLE_TYPE) {
ParticleEffectVO vo = new ParticleEffectVO();
vo.loadFromEntity(entity);
sParticleEffects.add(vo);
}
if(entityType == EntityFactory.SPRITE_TYPE) {
SpriteAnimationVO vo = new SpriteAnimationVO();
vo.loadFromEntity(entity);
sSpriteAnimations.add(vo);
}
if(entityType == EntityFactory.SPRITER_TYPE) {
SpriterVO vo = new SpriterVO();
vo.loadFromEntity(entity);
sSpriterAnimations.add(vo);
}
if(entityType == EntityFactory.SPINE_TYPE) {
SpineVO vo = new SpineVO();
vo.loadFromEntity(entity);
sSpineAnimations.add(vo);
}
if(entityType == EntityFactory.LIGHT_TYPE) {
LightVO vo = new LightVO();
vo.loadFromEntity(entity);
sLights.add(vo);
}
if(entityType == EntityFactory.COLOR_PRIMITIVE) {
ColorPrimitiveVO vo = new ColorPrimitiveVO();
vo.loadFromEntity(entity);
sColorPrimitives.add(vo);
}
}
LayerMapComponent layerMapComponent = layerMainItemComponentComponentMapper.get(compositeEntity);
layers = layerMapComponent.getLayers();
}
}