package com.masseranolabs.snappyfrog; import com.badlogic.gdx.graphics.g2d.Batch; import com.badlogic.gdx.graphics.g2d.NinePatch; import com.badlogic.gdx.graphics.g2d.Sprite; import com.badlogic.gdx.scenes.scene2d.Actor; import com.badlogic.gdx.utils.Pool.Poolable; public class Obstacle extends Actor implements Poolable { private static NinePatch bottomPatch; private static NinePatch topPatch; private static Sprite plusOneTemplate; private Sprite plusOne; private float plusOneYTarget; private float openingHeight; private float bottomY; private float bottomHeight; private float topHeight; private float width; private float topY; private boolean scored; public static float WIDTH; public static float OPENINGHEIGHT; public static void loadTimeBasedResources(){ bottomPatch = Game.getTextureAtlas().createPatch(Game.getTimeBasedTextureName("gamescene/bottom-obstacle")); topPatch = Game.getTextureAtlas().createPatch(Game.getTimeBasedTextureName("gamescene/top-obstacle")); } public Obstacle(){ super(); if (bottomPatch == null){ loadTimeBasedResources(); } if (plusOneTemplate == null){ plusOneTemplate = Game.getTextureAtlas().createSprite("gamescene/+1"); } reset(); } @Override public void reset() { scored = false; width = Obstacle.WIDTH; openingHeight = Obstacle.OPENINGHEIGHT; bottomY = LevelScreen.groundHeightLine - ResHelper.LinearHeightValue(2.0f); bottomHeight = ResHelper.LinearHeightValue(20.0f) + Game.getRandomGenerator().nextInt((int)(Game.getHeight() * 0.75f - ResHelper.LinearHeightValue(20.0f) - openingHeight)); topY = (LevelScreen.groundHeightLine - ResHelper.LinearHeightValue(1)) + bottomHeight + openingHeight; topHeight = Game.getHeight() - topY + ResHelper.LinearHeightValue(4); setX(Game.getWidth()); if (plusOne == null) plusOne = new Sprite(plusOneTemplate); plusOne.setY(bottomY + bottomHeight); plusOne.setScale(ResHelper.LinearHeightValue(1.0f)); plusOneYTarget = bottomY + bottomHeight + openingHeight / 2.0f - plusOne.getHeight() / 2.0f; } public void markScored(){ scored = true; } public boolean isScored(){ return scored; } public float getLowerYBound(){ return bottomY + bottomHeight - (int)ResHelper.LinearHeightValue(1); } public float getUpperYBound(){ return topY; } @Override public float getWidth() { return width; } @Override public float getHeight() { return Game.getHeight(); } @Override public void act(float delta) { super.act(delta); } @Override public void draw(Batch batch, float parentAlpha) { super.draw(batch, parentAlpha); bottomPatch.draw(batch, getX(), bottomY, width, bottomHeight); topPatch.draw(batch, getX(), topY, width, topHeight); if (scored){ plusOne.setX(getX() + width / 2.0f - plusOne.getWidth() / 2.0f); if (plusOne.getY() < plusOneYTarget){ plusOne.setY(plusOne.getY() + 4.0f); } plusOne.draw(batch, parentAlpha); } } public void dispose() { } }