Java tutorial
/* * To change this license header, choose License Headers in Project Properties. * To change this template file, choose Tools | Templates * and open the template in the editor. */ package com.dongbat.invasion.registry; import com.artemis.Entity; import com.artemis.managers.GroupManager; import com.badlogic.gdx.Gdx; import com.badlogic.gdx.files.FileHandle; import com.badlogic.gdx.math.Vector2; import com.badlogic.gdx.physics.box2d.Body; import com.badlogic.gdx.physics.box2d.MassData; import com.badlogic.gdx.utils.ObjectMap; import com.dongbat.invasion.ability.AbilityInfo; import com.dongbat.invasion.component.Ability; import com.dongbat.invasion.component.Ads; import com.dongbat.invasion.component.Buff; import com.dongbat.invasion.component.Collision; import com.dongbat.invasion.component.Delay; import com.dongbat.invasion.component.DisplayPosition; import com.dongbat.invasion.component.Enemy; import com.dongbat.invasion.component.EnemyMovement; import com.dongbat.invasion.component.Physics; import com.dongbat.invasion.component.Health; import com.dongbat.invasion.component.Spine; import com.dongbat.invasion.enemy.EnemyInfo; import com.dongbat.invasion.enemy.EnemyType; import com.dongbat.invasion.util.Constants; import com.dongbat.invasion.util.ECSUtil; import com.dongbat.invasion.util.PhysicsUtil; /** * * @author password */ public class EnemyRegistry { private static final ObjectMap<String, EnemyInfo> enemyRegistry = new ObjectMap<String, EnemyInfo>(); public static void load() { FileHandle internal = Gdx.files.internal("./enemy"); for (FileHandle file : internal.list()) { if (file.isDirectory()) { continue; } String content = file.readString(); EnemyInfo enemyInfo = getEnemyInfo(content); if (enemyInfo != null) { enemyRegistry.put(file.nameWithoutExtension(), enemyInfo); } } } public static EnemyInfo get(String name) { return enemyRegistry.get(name); } public static Entity createEnemy(String enemyType) { return createEnemy(enemyType, null); } public static Entity createEnemy(String enemyType, Float positionX) { EnemyInfo enemyInfo = get(enemyType); EnemyType enemyTypeAI = createEnemyType(enemyInfo); Enemy enemyComponent = new Enemy(); enemyComponent.setType(enemyTypeAI); enemyComponent.setAirUnit(enemyInfo.isAirUnit()); enemyComponent.setBoss(enemyInfo.isBoss()); enemyComponent.setInfinitePickup(enemyInfo.isInfinitePickup()); enemyComponent.setCanPickAds(enemyInfo.canPickAds()); enemyComponent.setAdsPickingDelay(enemyInfo.getAdsPickingDelay()); enemyComponent.setTributeDelay(enemyInfo.getTributeDelay()); enemyComponent.setBounty(enemyInfo.getBounty()); Vector2 position; if (enemyInfo.isAirUnit()) { position = new Vector2(Constants.ENEMY.AIR_START_X, Constants.ENEMY.AIR_START_Y); } else { float startY = Constants.PHYSICS.GROUND_Y + enemyInfo.getRadius(); position = new Vector2(Constants.ENEMY.GROUND_START_X, startY); } if (positionX != null) { position.x = positionX; } Body body = PhysicsUtil.createBody(position, enemyInfo.getRadius()); body.setGravityScale(0); MassData massData = new MassData(); massData.mass = 1; body.setMassData(massData); Physics physicsComponent = new Physics(); physicsComponent.setBody(body); physicsComponent.setMaxSpeed(enemyInfo.getMaxSpeed()); physicsComponent.setRadius(enemyInfo.getRadius()); Health healthComponent = new Health(enemyInfo.getMaxHealth(), enemyInfo.getMaxHealth()); Collision collision = new Collision(); Buff buffComponent = new Buff(); Delay delayComponent = new Delay(); Ability abilityComponent = new Ability(); String abilities = enemyInfo.getAbilities(); if (abilities != null && !abilities.isEmpty()) { String[] names = enemyInfo.getAbilities().split(","); for (String name : names) { AbilityInfo ability = AbilityRegistry.getAbility(name); abilityComponent.addAbility(name, ability); } } EnemyMovement movementComponent = new EnemyMovement(); DisplayPosition displayPosition = new DisplayPosition(position); Ads ads = new Ads(); ads.setOffline(true); ads.setPosition(new Vector2(Constants.ADS.DEFAULT_OFFSET_X, Constants.ADS.DEFAULT_OFFSET_Y)); Spine spineComponent = new Spine(enemyInfo.getSpineName()); Entity enemy = ECSUtil.getWorld().createEntity().edit().add(enemyComponent).add(physicsComponent) .add(healthComponent).add(collision).add(buffComponent).add(abilityComponent).add(movementComponent) .add(ads).add(displayPosition).add(spineComponent).add(delayComponent).getEntity(); physicsComponent.getBody().setUserData(enemy); // Add enemy to a group ECSUtil.getWorld().getManager(GroupManager.class).add(enemy, Constants.ENEMY.GROUP_NAME); return enemy; } private static EnemyType createEnemyType(EnemyInfo enemyInfo) { return (EnemyType) ReflectionUtil.createObject(enemyInfo.getClassName(), enemyInfo.getData()); } private static EnemyInfo getEnemyInfo(String info) { return (EnemyInfo) ReflectionUtil.parseData(EnemyInfo.class, info); } }