com.dongbat.game.util.factory.EntityFactory.java Source code

Java tutorial

Introduction

Here is the source code for com.dongbat.game.util.factory.EntityFactory.java

Source

/*
 * 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.game.util.factory;

import com.artemis.Entity;
import com.artemis.World;
import com.badlogic.gdx.math.Vector2;
import com.dongbat.game.component.AbilityComponent;
import com.dongbat.game.component.BuffComponent;
import com.dongbat.game.component.CollisionComponent;
import com.dongbat.game.component.Detection;
import com.dongbat.game.component.Display;
import com.dongbat.game.component.Food;
import com.dongbat.game.component.Physics;
import com.dongbat.game.component.Player;
import com.dongbat.game.component.Stats;
import com.dongbat.game.component.UnitMovement;
import com.dongbat.game.component.UnitType;
import com.dongbat.game.registry.UnitRegistry;
import com.dongbat.game.unit.UnitInfo;
import com.dongbat.game.util.AbilityUtil;
import com.dongbat.game.util.AnimationUtil;
import com.dongbat.game.util.BuffUtil;
import com.dongbat.game.util.EntityUtil;
import com.dongbat.game.util.PhysicsUtil;
import com.dongbat.game.util.UuidUtil;
import static com.dongbat.game.util.localUtil.Constants.PHYSICS.FOOD_RADIUS;
import java.util.UUID;

/**
 * @author Admin
 */
public class EntityFactory {

    /**
     * Create player unit and add to world
     *
     * @param world artemis world
     * @param type
     * @param position spawn position
     * @return Player entity that was just created
     */
    public static Entity createPlayer(World world, Vector2 position, String type) {
        Entity e = world.createEntity(UUID.randomUUID());
        CollisionComponent collision = new CollisionComponent();

        UnitType unitType = new UnitType(type);
        UnitInfo info = UnitRegistry.get(type);

        String abilities = info.getAbilities();

        AbilityComponent abilityComponent = new AbilityComponent();
        AbilityUtil.abilityComponentFilled(abilities, abilityComponent);

        Stats stats = new Stats();
        stats.setBaseRateSpeed(info.getBaseSpeedRate());

        Physics physics = new Physics();
        physics.setBody(PhysicsUtil.createBody(PhysicsUtil.getPhysicsWorld(world), position, info.getRadius(), e));
        physics.getBody().setUserData(UuidUtil.getUuid(e));

        UnitMovement movement = new UnitMovement();
        movement.setDirectionVelocity(new Vector2());
        movement.setDisabled(false);

        Player player = new Player();

        Display display = new Display();

        e.edit().add(abilityComponent).add(unitType).add(new BuffComponent()).add(physics).add(stats).add(player)
                .add(movement).add(new Detection()).add(collision).add(display);

        display.setPosition(PhysicsUtil.getPosition(world, e));
        display.setRadius(PhysicsUtil.getRadius(world, e));
        display.setRotation(EntityUtil.getComponent(world, e, UnitMovement.class).getDirectionVelocity().angle());
        //        TextureAtlas move = AssetUtil.getUnitAtlas().get("move");
        //        Animation animation = new Animation(0.1f, move.getRegions());
        //    animation.setPlayMode(Animation.PlayMode.LOOP);
        //    display.setDefaultAnimation(new AnimatedSprite(animation));
        display.setDefaultAnimation(AnimationUtil.getUnitAnimation());
        return e;
    }

    /**
     * Create Food with box2d Steering behavior
     *
     * @param world artemis world
     * @param position spawn position
     * @return Food entity that was just created
     */
    public static Entity createFood(World world, Vector2 position, UUID parent) {
        Entity e = world.createEntity(UUID.randomUUID());
        Physics physics = new Physics();
        physics.setBody(PhysicsUtil.createBody(PhysicsUtil.getPhysicsWorld(world), position, FOOD_RADIUS, e));
        physics.getBody().setUserData(UuidUtil.getUuid(e));

        Stats s = new Stats();
        s.setConsumable(true);
        s.setAllowComsumming(false);
        s.setParent(parent);

        UnitMovement movement = new UnitMovement();
        movement.setDirectionVelocity(new Vector2());

        Display display = new Display();

        e.edit().add(new CollisionComponent()).add(physics).add(s).add(new Food()).add(movement)
                .add(new Detection()).add(new BuffComponent()).add(display);

        display.setPosition(PhysicsUtil.getPosition(world, e));
        display.setRadius(PhysicsUtil.getRadius(world, e));
        display.setRotation(EntityUtil.getComponent(world, e, UnitMovement.class).getDirectionVelocity().angle());
        display.setDefaultAnimation(AnimationUtil.getHotFood());
        return e;
    }

    public static Entity createAbsorbableFood(World world, Vector2 position, float radius) {
        Entity e = world.createEntity(UUID.randomUUID());
        Physics physics = new Physics();
        physics.setBody(PhysicsUtil.createBody(PhysicsUtil.getPhysicsWorld(world), position, radius, e));
        physics.getBody().setUserData(UuidUtil.getUuid(e));
        //    Food food = new Food();
        Stats stats = new Stats();
        stats.setAllowComsumming(false);
        stats.setConsumable(false);

        e.edit().add(new CollisionComponent()).add(physics).add(new BuffComponent()).add(stats)
                .add(new UnitMovement()).add(new Detection()).add(new BuffComponent());

        BuffUtil.addBuff(world, e, e, "Feed", -1, 1, "feedPerSecond", 0.5f);

        return e;
    }

}