com.laex.cg2d.render.impl.BackgroundManager.java Source code

Java tutorial

Introduction

Here is the source code for com.laex.cg2d.render.impl.BackgroundManager.java

Source

/*
 * 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.render.impl;

import java.util.LinkedList;
import java.util.Queue;

import com.badlogic.gdx.Gdx;
import com.badlogic.gdx.files.FileHandle;
import com.badlogic.gdx.graphics.Texture;
import com.badlogic.gdx.graphics.Texture.TextureFilter;
import com.badlogic.gdx.graphics.Texture.TextureWrap;
import com.badlogic.gdx.graphics.g2d.Sprite;
import com.badlogic.gdx.graphics.g2d.SpriteBatch;
import com.badlogic.gdx.math.Vector2;
import com.laex.cg2d.model.ScreenModel.CGEditorShapeType;
import com.laex.cg2d.model.ScreenModel.CGLayer;
import com.laex.cg2d.model.ScreenModel.CGShape;
import com.laex.cg2d.render.ScreenScaffold;
import com.laex.cg2d.render.util.ScreenToWorld;

/**
 * The Class BackgroundManager.
 */
public class BackgroundManager implements ScreenScaffold {

    /** The batch. */
    private SpriteBatch batch;

    /** The background textures. */
    private Queue<Sprite> backgroundTextures;

    /** The manipulator. */
    private ScreenManagerImpl manipulator;

    /**
     * Instantiates a new background manager.
     * 
     * @param manipulator
     *          the manipulator
     * @param batch
     *          the batch
     */
    public BackgroundManager(ScreenManagerImpl manipulator, SpriteBatch batch) {
        this.manipulator = manipulator;
        this.batch = batch;
    }

    /*
     * (non-Javadoc)
     * 
     * @see com.laex.cg2d.render.IGameComponentManager#create()
     */
    @Override
    public void create() {
        backgroundTextures = new LinkedList<Sprite>();
        for (CGLayer layer : manipulator.model().getLayersList()) {
            for (CGShape shape : layer.getShapeList()) {

                if (!(shape.getEditorShapeType() == CGEditorShapeType.BACKGROUND_SHAPE)) {
                    continue;
                }

                FileHandle handle = Gdx.files.absolute(shape.getBackgroundResourceFile().getResourceFileAbsolute());

                Texture tex = new Texture(handle);
                tex.setFilter(TextureFilter.Linear, TextureFilter.Linear);
                /* for clamping edge of background textures */
                tex.setWrap(TextureWrap.Repeat, TextureWrap.Repeat);

                Sprite sprite = new Sprite(tex);

                float x = shape.getBounds().getX();
                float y = shape.getBounds().getY();
                float width = shape.getBounds().getWidth();
                float height = shape.getBounds().getHeight();

                Vector2 scrPos = new Vector2(x, y);
                Vector2 worldPos = ScreenToWorld.inst(manipulator.model()).screenToWorldFlipped(scrPos, height);
                sprite.setPosition(worldPos.x, worldPos.y);

                float w = (width / manipulator.ptmRatio());
                float h = (height / manipulator.ptmRatio());

                sprite.setSize(w, h);

                backgroundTextures.add(sprite);
            }
        }
    }

    /*
     * (non-Javadoc)
     * 
     * @see com.laex.cg2d.render.IGameComponentManager#render()
     */
    @Override
    public void render() {
        batch.begin();
        for (Sprite spr : backgroundTextures) {
            spr.draw(batch);
        }
        batch.end();
    }

    /*
     * (non-Javadoc)
     * 
     * @see com.laex.cg2d.render.IGameComponentManager#dispose()
     */
    @Override
    public void dispose() {
        for (Sprite spr : backgroundTextures) {
            spr.getTexture().dispose();
        }
    }

}