fr.plnech.igem.game.gut.Item.java Source code

Java tutorial

Introduction

Here is the source code for fr.plnech.igem.game.gut.Item.java

Source

/*
=======================================================================
BactMan Adventures | Scientific popularisation through mini-games
Copyright (C) 2015 IONIS iGEM Team
Distributed under the GNU GPLv3 License.
(See file LICENSE.txt or copy at https://www.gnu.org/licenses/gpl.txt)
=======================================================================
*/

package fr.plnech.igem.game.gut;

import com.badlogic.gdx.physics.box2d.BodyDef;
import com.badlogic.gdx.physics.box2d.Fixture;
import fr.plnech.igem.game.AbstractGameActivity;
import fr.plnech.igem.game.GutGame;
import fr.plnech.igem.game.model.PhysicalWorldObject;
import org.andengine.extension.physics.box2d.util.constants.PhysicsConstants;
import org.andengine.opengl.texture.region.ITiledTextureRegion;

public class Item extends PhysicalWorldObject {
    public enum Type {
        VITAMIN, PROTEIN, ANTIBIO, IMMUNO;

        public static Type random() {
            final Type[] values = Type.values();
            final int randomIndex = (int) (values.length * Math.random());
            return values[randomIndex];
        }

    }

    public enum Role {
        ONCE, /* Appears only once */
        EAT, /* Appears until eaten */
        REPEAT, /* Repeated with same type */
        RANDOM /* Repeated with random type */
    }

    public static final float SCALE_DEFAULT = 0.1f;

    private final float speedCoeff;
    private final Type type;
    private Role role;

    private final GutGame game;

    public Item(float pX, float pY, float pAngle, Type pType, Role pRole, float speedCoeff,
            ITiledTextureRegion textureRegion, GutGame game) {
        super(new PhysicalWorldObject.Builder(pX, pY, textureRegion, game.getActivity().getVBOM(),
                game.getActivity().getPhysicsWorld()).angle(pAngle).draggable(false).scaleDefault(SCALE_DEFAULT)
                        .category(GutGame.CATEGORY_ITEM).mask(GutGame.MASK_ITEM).groupIndex(GutGame.GROUP_INDEX)
                        .shouldAdd(false));
        type = pType;
        role = pRole;
        this.speedCoeff = speedCoeff;
        this.game = game;
    }

    @Override
    protected BodyDef.BodyType getBodyType() {
        return BodyDef.BodyType.DynamicBody;
    }

    @Override
    public void onAddToWorld() {
        super.onAddToWorld();
        body.setLinearVelocity(speedCoeff * GutGame.SPEED_ITEM_PPS / PhysicsConstants.PIXEL_TO_METER_RATIO_DEFAULT,
                0);
        game.addItem(this);
    }

    @Override
    public void onRemoveFromWorld() {
        super.onRemoveFromWorld();
        game.removeItem(this);
    }

    public static int chooseLayer(Type type) {
        switch (type) {
        case ANTIBIO:
        case IMMUNO:
            return AbstractGameActivity.LAYER_OVERGROUND;
        }
        return AbstractGameActivity.LAYER_FOREGROUND;
    }

    public static boolean isOne(Fixture x1) {
        return x1.getBody().getUserData() instanceof Item;
    }

    public Type getType() {
        return type;
    }

    public void setRole(Role role) {
        this.role = role;
    }

    public Role getRole() {
        return role;
    }
}