com.dongbat.invasion.system.AdsDeliverySystem.java Source code

Java tutorial

Introduction

Here is the source code for com.dongbat.invasion.system.AdsDeliverySystem.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.invasion.system;

import com.artemis.Aspect;
import com.artemis.ComponentMapper;
import com.artemis.Entity;
import com.artemis.annotations.Wire;
import com.artemis.systems.EntityProcessingSystem;
import com.badlogic.gdx.graphics.Texture;
import com.badlogic.gdx.graphics.g2d.Sprite;
import com.badlogic.gdx.math.MathUtils;
import com.badlogic.gdx.math.Vector2;
import com.dongbat.invasion.component.Ads;
import com.dongbat.invasion.component.Delay;
import com.dongbat.invasion.component.Enemy;
import com.dongbat.invasion.util.AssetUtil;
import com.dongbat.invasion.util.Constants;
import com.dongbat.invasion.util.PhysicsUtil;
import com.dongbat.invasion.util.TimeUtil;

/**
 *
 * @author password
 */
@Wire
public class AdsDeliverySystem extends EntityProcessingSystem {

    private ComponentMapper<Enemy> enemyMapper;
    private ComponentMapper<Ads> adsMapper;
    private ComponentMapper<Delay> delayMapper;

    public AdsDeliverySystem() {
        super(Aspect.getAspectForAll(Enemy.class));
    }

    @Override
    protected void process(Entity entity) {
        Vector2 position = PhysicsUtil.getPosition(entity);
        Enemy enemy = enemyMapper.get(entity);

        if (!enemy.canPickAds()) {
            return;
        }

        Ads ads = adsMapper.get(entity);
        Delay delay = delayMapper.get(entity);

        if (!enemy.hasPickedUpAds() && position.x >= Constants.ENEMY.PICK_UP_POINT_X) {
            // TODO pick up ads animation
            if (delay.getDuration() == 0) {
                // set delay
                delay.setDelay(TimeUtil.getGameTime(), enemy.getAdsPickingDelay());
            } else {
                long timePassed = TimeUtil.getGameTimeSince(delay.getStartTime());
                if (timePassed >= delay.getDuration()) {
                    enemy.setPickedUpAds(true);

                    if (ads.isOffline()) {
                        String spriteName = MathUtils.random(10) + ".jpg";
                        Texture texture = AssetUtil.getTexture(spriteName);
                        Sprite sprite = new Sprite(texture);
                        ads.setSprite(sprite);
                        ads.setSize(new Vector2(texture.getWidth(), texture.getHeight()));
                    }
                }
            }
        }

        int leftLimit = enemy.isAirUnit() ? Constants.ENEMY.AIR_START_X : Constants.ENEMY.GROUND_START_X;
        if (enemy.hasPickedUpAds() && position.x <= leftLimit) {
            // TODO tribute animation
            if (delay.getDuration() == 0) {
                delay.setDelay(TimeUtil.getGameTime(), enemy.getTributeDelay());
            } else {
                long timePassed = TimeUtil.getGameTimeSince(delay.getStartTime());
                if (timePassed >= delay.getDuration()) {
                    enemy.setPickedUpAds(false);

                    if (!enemy.isInfinitePickup()) {
                        entity.deleteFromWorld();
                    }
                }
            }
        }
    }

}