cocos2d.layers_scenes_transitions_nodes.CCLayerColor.java Source code

Java tutorial

Introduction

Here is the source code for cocos2d.layers_scenes_transitions_nodes.CCLayerColor.java

Source

/******************************************************************************
 * Copyright (c) 2014 cocos2d-java.org
 * 
 *   http://www.cocos2d-java.org
 *   
 *   The MIT License (MIT)
 *      
 *Permission is hereby granted, free of charge, to any person obtaining a copy
 *of this software and associated documentation files (the "Software"), to deal
 *in the Software without restriction, including without limitation the rights
 *to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
 *copies of the Software, and to permit persons to whom the Software is
 *furnished to do so, subject to the following conditions:
    
 *The above copyright notice and this permission notice shall be included in
 *all copies or substantial portions of the Software.
    
 *THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
 *IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
 *FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
 *AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
 *LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
 *OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
 *THE SOFTWARE.
 *******************************************************************************/

package cocos2d.layers_scenes_transitions_nodes;

import com.badlogic.gdx.Gdx;
import com.badlogic.gdx.graphics.GL20;
import com.badlogic.gdx.graphics.glutils.ShapeRenderer.ShapeType;

import cocos2d.CCDirector;
import cocos2d.cocoa.CCSize;
import cocos2d.platform.CCDrawManager;
import cocos2d.predefine.CCColor3B;
import cocos2d.predefine.CCColor4B;
import cocos2d.predefine.CCBlendFunc;
import cocos2d.predefine.ICCBlendProtocol;

/// <summary>
/// CCLayerColor is a subclass of CCLayer that implements the CCRGBAProtocol protocol
/// All features from CCLayer are valid, plus the following new features:
/// - opacity
/// - RGB colors
/// </summary>
public class CCLayerColor extends CCLayerRGBA implements ICCBlendProtocol {
    //protected VertexPositionColor[] m_pSquareVertices = new VertexPositionColor[4];
    protected CCBlendFunc m_tBlendFunc;

    public CCLayerColor() {
        init();
    }

    /// <summary>
    /// creates a CCLayer with color, width and height in Points
    /// </summary>
    public CCLayerColor(CCColor4B color, float width, float height) {
        this();
        initWithColor(color, width, height);
    }

    /// <summary>
    /// creates a CCLayer with color. Width and height are the window size. 
    /// </summary>
    public CCLayerColor(CCColor4B color) {
        this();
        initWithColor(color);
    }

    /// <summary>
    /// override contentSize
    /// </summary>

    @Override
    public CCSize getContentSize() {
        return super.getContentSize();
    }

    @Override
    public void setContentSize(CCSize value) {
        //1, 2, 3, 3
        //            m_pSquareVertices[1].Position.X = value.Width;
        //            m_pSquareVertices[2].Position.Y = value.Height;
        //            m_pSquareVertices[3].Position.X = value.Width;
        //            m_pSquareVertices[3].Position.Y = value.Height;

        //m_pSquareVertices[1].Position.X = value.Height;
        //m_pSquareVertices[2].Position.Y = value.Width;
        //m_pSquareVertices[3].Position.X = value.Width;
        //m_pSquareVertices[3].Position.Y = value.Height;

        super.setContentSize(value);

    }

    @Override
    public boolean init() {
        CCSize s = CCDirector.sharedDirector().getWinSize();
        return initWithColor(new CCColor4B(0, 0, 0, 0), s.width, s.height);
    }

    /// <summary>
    /// initializes a CCLayer with color
    /// </summary>
    public boolean initWithColor(CCColor4B color) {
        CCSize s = CCDirector.sharedDirector().getWinSize();
        return initWithColor(color, s.width, s.height);
    }

    /// <summary>
    /// initializes a CCLayer with color, width and height in Points
    /// </summary>
    public boolean initWithColor(CCColor4B color, float width, float height) {
        super.init();

        // default blend function
        m_tBlendFunc = CCBlendFunc.NonPremultiplied;

        _displayedColor.R = _realColor.R = color.R;
        _displayedColor.G = _realColor.G = color.G;
        _displayedColor.B = _realColor.B = color.B;
        _displayedOpacity = _realOpacity = color.A;

        //        for (int i = 0; i < m_pSquareVertices.length; i++)
        //        {
        //            m_pSquareVertices[i].Position.X = 0.0f;
        //            m_pSquareVertices[i].Position.Y = 0.0f;
        //        }

        updateColor();
        setContentSize(new CCSize(width, height));

        return true;
    }

    /// <summary>
    /// change width in Points
    /// </summary>
    /// <param name="w"></param>
    public void changeWidth(float w) {
        setContentSize(new CCSize(w, m_obContentSize.height));
    }

    /// <summary>
    /// change height in Points
    /// </summary>
    /// <param name="h"></param>
    public void changeHeight(float h) {
        setContentSize(new CCSize(m_obContentSize.width, h));
    }

    /// <summary>
    ///  change width and height in Points
    ///  @since v0.8
    /// </summary>
    /// <param name="w"></param>
    /// <param name="h"></param>
    public void changeWidthAndHeight(float w, float h) {
        setContentSize(new CCSize(w, h));
    }

    /// <summary>
    /// BlendFunction. Conforms to CCBlendProtocol protocol 
    /// </summary>
    public CCBlendFunc getBlendFunc() {
        return m_tBlendFunc;
    }

    public void setBlendFunc(CCBlendFunc value) {
        m_tBlendFunc = new CCBlendFunc(value);
    }

    @Override
    public CCColor3B getColor() {
        return super.getColor();
    }

    @Override
    public void setColor(CCColor3B value) {
        super.setColor(value);
        updateColor();
    }

    @Override
    public int getOpacity() {
        return super.getOpacity();
    }

    @Override
    public void setOpacity(int value) {
        super.setOpacity(value);
        updateColor();
    }

    @Override
    public void draw() {
        CCDrawManager.SPRITE_BATCH.end();

        Gdx.gl.glEnable(GL20.GL_BLEND);
        Gdx.gl.glBlendFunc(GL20.GL_SRC_ALPHA, GL20.GL_ONE_MINUS_SRC_ALPHA);

        CCDrawManager.SHAPE_RENDERER.setProjectionMatrix(CCDrawManager.SPRITE_BATCH.getProjectionMatrix());
        CCDrawManager.SHAPE_RENDERER.setTransformMatrix(CCDrawManager.SPRITE_BATCH.getTransformMatrix());
        CCDrawManager.SHAPE_RENDERER.setColor(_displayedColor.R / 255.0f, _displayedColor.G / 255.0f,
                _displayedColor.B / 255.0f, _displayedOpacity / 255.0f);
        CCDrawManager.SHAPE_RENDERER.begin(ShapeType.Filled);
        CCDrawManager.SHAPE_RENDERER.rect(0, 0, m_obContentSize.width, m_obContentSize.height);
        CCDrawManager.SHAPE_RENDERER.end();

        Gdx.gl.glDisable(GL20.GL_BLEND);

        CCDrawManager.SPRITE_BATCH.begin();
    }

    protected void updateColor() {
        //        var color = new Color(_displayedColor.R / 255.0f, _displayedColor.G / 255.0f, _displayedColor.B / 255.0f, _displayedOpacity / 255.0f);
        //
        //        m_pSquareVertices[0].Color = color;
        //        m_pSquareVertices[1].Color = color;
        //        m_pSquareVertices[2].Color = color;
        //        m_pSquareVertices[3].Color = color;
    }
}