package com.igorcrevar.goingunder; import com.badlogic.gdx.graphics.g2d.Sprite; import com.igorcrevar.goingunder.statemachine.IGeneratorStateMachine; public abstract class AGameLevel { // we use public fields instead to just make population of data for every level inside of abstract copyTo method // because I need to change efficiently level data while test mechanic public float boundariesBouncingFactor; public float friction; public float velocityX; public float velocityY; public float obstacleGeneratorDistance; public float emptySpaceSizeInTheMiddle; public float emptySpaceSizeOnTheEnd; public int endOnScore; private IGeneratorStateMachine generatorStateMachine; public abstract void resolveObstacleTexture(Sprite part, GameManager gameManager); protected abstract IGeneratorStateMachine createGeneratorMachine(); public void copyTo(GameData data) { data.EmptySpaceSizeInTheMiddle = emptySpaceSizeInTheMiddle; data.EmptySpaceSizeOnTheEnd = emptySpaceSizeOnTheEnd; data.ObstacleGeneratorDistance = obstacleGeneratorDistance; data.BoundariesBouncingFactor = boundariesBouncingFactor; data.Friction = friction; data.VelocityX = velocityX; data.VelocityY = velocityY; } public IGeneratorStateMachine getGeneratorStateMachine() { if (generatorStateMachine == null) { generatorStateMachine = createGeneratorMachine(); } return generatorStateMachine; } public boolean isEndOfLevel(int score) { return score >= endOnScore && endOnScore > 0; } }