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

Java tutorial

Introduction

Here is the source code for com.dongbat.invasion.system.AdsRenderSystem.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.graphics.g2d.SpriteBatch;
import com.badlogic.gdx.math.MathUtils;
import com.badlogic.gdx.math.Vector2;
import com.dongbat.invasion.component.Ads;
import com.dongbat.invasion.component.DisplayPosition;
import com.dongbat.invasion.component.Enemy;
import com.dongbat.invasion.util.AdsUtil;
import com.dongbat.invasion.util.AssetUtil;
import com.dongbat.invasion.util.EntityUtil;
import com.dongbat.invasion.util.RenderCameraUtil;

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

    private ComponentMapper<Ads> adsMapper;
    private ComponentMapper<DisplayPosition> dp;
    private SpriteBatch spriteBatch;

    public AdsRenderSystem() {
        super(Aspect.getAspectForAll(Ads.class));
        spriteBatch = new SpriteBatch();
    }

    @Override
    protected void process(Entity e) {
        // TODO render offline ads
        Ads ads = adsMapper.get(e);
        DisplayPosition displayPosition = dp.get(e);
        Texture texture = ads.getSprite().getTexture();
        Enemy enemy = EntityUtil.getComponent(e, Enemy.class);
        if (enemy.hasPickedUpAds()) {
            if (enemy.isAirUnit()) {
                spriteBatch.draw(texture, displayPosition.getX() + ads.getPosition().x - texture.getWidth() / 2,
                        displayPosition.getY() + ads.getPosition().y - texture.getHeight());
            } else {
                spriteBatch.draw(texture, displayPosition.getX() + ads.getPosition().x - texture.getWidth() / 2,
                        displayPosition.getY() + ads.getPosition().y);
            }
            spriteBatch.setProjectionMatrix(RenderCameraUtil.getCamera().combined);
        }
    }

    @Override
    protected void removed(Entity e) {
        Ads ads = adsMapper.get(e);
        if (!ads.isOffline()) {
            AdsUtil.remove(ads.getId());
        }
    }

    @Override
    protected void inserted(Entity e) {
        Ads ads = adsMapper.get(e);
        Vector2 position = ads.getPosition();
        if (ads.isOffline()) {
            //set sprite
            String spriteName = MathUtils.random(10) + ".jpg";
            Texture texture = AssetUtil.getTexture(spriteName);
            Sprite sprite = new Sprite(texture);
            ads.setSprite(sprite);
            //set size by texture width, height
            ads.setSize(new Vector2(texture.getWidth(), texture.getHeight()));
        }
        Vector2 size = ads.getSize();
        if (size == null) {
            size = new Vector2(0, 0);
        }
        int id = AdsUtil.add(position.x, position.y, size.x, size.y);
        if (!ads.isOffline()) {
            ads.setId(id);
        }
    }

    @Override
    protected void end() {
        spriteBatch.end();
    }

    @Override
    protected void begin() {
        spriteBatch.begin();
    }

    @Override
    protected void dispose() {
        spriteBatch.dispose();
    }

}