/* * Copyright (c) 2012, 2013 Hemanta Sapkota. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Hemanta Sapkota (laex.pearl@gmail.com) */ package com.laex.cg2d.model.adapter; import java.util.ArrayList; import org.eclipse.core.runtime.IPath; import org.eclipse.swt.graphics.Image; import com.badlogic.gdx.math.Vector2; import com.laex.cg2d.model.ScreenModel.CGEntity; import com.laex.cg2d.model.ScreenModel.CGEntityAnimation; import com.laex.cg2d.model.ScreenModel.CGEntityCollisionType; import com.laex.cg2d.model.ScreenModel.CGEntitySpritesheetItem; import com.laex.cg2d.model.ScreenModel.CGVector2; import com.laex.cg2d.model.model.Entity; import com.laex.cg2d.model.model.EntityAnimation; import com.laex.cg2d.model.model.EntityCollisionType; import com.laex.cg2d.model.model.EntitySpritesheetItem; import com.laex.cg2d.model.resources.ResourceManager; import com.laex.cg2d.model.util.EntitiesUtil; /* * Bi-directional adapter between Entity & CGEntity */ /** * The Class EntityAdapter. */ public class EntityAdapter { /** * To cg entity collision type. * * @param et * the et * @return the cG entity collision type */ public static CGEntityCollisionType toCGEntityCollisionType(EntityCollisionType et) { switch (et) { case BOX: return CGEntityCollisionType.BOX; case CIRCLE: return CGEntityCollisionType.CIRCLE; case CUSTOM: return CGEntityCollisionType.CUSTOM; case NONE: return CGEntityCollisionType.NONE; } return CGEntityCollisionType.NONE; } /** * To entity collision type. * * @param cgt * the cgt * @return the entity collision type */ public static EntityCollisionType toEntityCollisionType(CGEntityCollisionType cgt) { switch (cgt) { case BOX: return EntityCollisionType.BOX; case CIRCLE: return EntityCollisionType.CIRCLE; case CUSTOM: return EntityCollisionType.CUSTOM; case NONE: return EntityCollisionType.NONE; default: break; } return EntityCollisionType.NONE; } /** * New default entity. * * @param path the path * @return the entity */ public static Entity newDefaultEntity(IPath path) { Entity entityModel = new Entity(); EntityAnimation ea = new EntityAnimation(); ea.setAnimationName("Animation 1"); ea.setDefaultAnimation(true); ea.setVertices(new ArrayList<Vector2>()); ea.setShapeType(EntityCollisionType.NONE); entityModel.addEntityAnimation(ea); return entityModel; } /** * As cg entity. * * @param e * the e * @return the cG entity */ public static CGEntity asCGEntity(Entity e) { CGEntity.Builder entityBuilder = CGEntity.newBuilder(); for (EntityAnimation ea : e.getAnimationList()) { CGEntityAnimation.Builder eaBuilder = CGEntityAnimation.newBuilder() .setAnimationDuration(ea.getAnimationDuration()).setAnimationName(ea.getAnimationName()) .setCollisionType(toCGEntityCollisionType(ea.getShapeType())).setDefaultAnimation(ea.isDefaultAnimation()) .setFixtureFile(ResourceFileAdapter.asCGResourceFile(ea.getFixtureResourceFile())) .setSpritesheetFile(ResourceFileAdapter.asCGResourceFile(ea.getSpritesheetFile())); /* Add vertices */ for (Vector2 v : ea.getVertices()) { eaBuilder = eaBuilder.addVertices(Vector2Adapter.asCGVector2(v)); } /* Ad entity spritesheet items */ eaBuilder.setSpritesheetJsonFile(ResourceFileAdapter.asCGResourceFile(ea.getSpritesheetMapperFile())); for (EntitySpritesheetItem esi : ea.getSpritesheetItems()) { CGEntitySpritesheetItem.Builder cgesiBuilder = CGEntitySpritesheetItem.newBuilder(); CGEntitySpritesheetItem entSpritesheetItem = cgesiBuilder.setFrameIndex(esi.getFrameIndex()) .setExtractBounds(RectAdapter.cgBounds(esi.getExtractBounds())).build(); eaBuilder.addSpritesheetItems(entSpritesheetItem); } CGEntityAnimation cgEa = eaBuilder.build(); entityBuilder = entityBuilder.addAnimations(cgEa); } return entityBuilder.build(); } /** * As entity. * * @param cge * the cge * @return the entity */ public static Entity asEntity(CGEntity cge) { Entity entityModel = new Entity(); for (CGEntityAnimation cgEa : cge.getAnimationsList()) { EntityAnimation ea = new EntityAnimation(); ea.setAnimationDuration(cgEa.getAnimationDuration()); ea.setAnimationName(cgEa.getAnimationName()); ea.setDefaultAnimation(cgEa.getDefaultAnimation()); ea.setFixtureResourceFile(ResourceFileAdapter.asResourceFile(cgEa.getFixtureFile())); ea.setSpritesheetFile(ResourceFileAdapter.asResourceFile(cgEa.getSpritesheetFile())); ea.setShapeType(toEntityCollisionType(cgEa.getCollisionType())); for (CGVector2 cv : cgEa.getVerticesList()) { ea.getVertices().add(new Vector2(cv.getX(), cv.getY())); } ea.setSpritesheetMapperFile(ResourceFileAdapter.asResourceFile(cgEa.getSpritesheetJsonFile())); for (CGEntitySpritesheetItem cesi : cgEa.getSpritesheetItemsList()) { EntitySpritesheetItem esi = new EntitySpritesheetItem(); esi.setExtractBounds(RectAdapter.gdxRect(cesi.getExtractBounds())); esi.setFrameIndex(cesi.getFrameIndex()); ea.getSpritesheetItems().add(esi); } entityModel.addEntityAnimation(ea); } Image defaultFrame = EntitiesUtil.getDefaultFrame(entityModel, 1); entityModel.setDefaultFrame(defaultFrame); return entityModel; } }