package com.mediamonks.googleflip.pages.game.physics.control;
import com.badlogic.gdx.physics.box2d.Contact;
import com.badlogic.gdx.physics.box2d.ContactListener;
import com.mediamonks.googleflip.R;
import com.mediamonks.googleflip.pages.game.physics.levels.GameLevel;
import com.mediamonks.googleflip.pages.game.physics.util.ContactListenerAdapter;
import com.mediamonks.googleflip.util.SoundManager;
import org.andengine.engine.Engine;
import org.andengine.entity.sprite.Sprite;
import org.andengine.extension.physics.box2d.PhysicsWorld;
/**
* Base class for level control
*/
public abstract class BaseLevelController implements LevelController {
protected GameLevelStateListener _gameLevelStateListener;
protected GameLevel _gameLevel;
protected PhysicsWorld _physicsWorld;
protected Engine _engine;
protected Sprite _ballSprite;
protected boolean _isLevelComplete;
protected boolean _runChecks = true;
protected ContactListener _contactListener;
@Override
public void init(GameLevel gameLevel, PhysicsWorld physicsWorld, Engine engine) {
_gameLevel = gameLevel;
_physicsWorld = physicsWorld;
_engine = engine;
_contactListener = new ContactListenerAdapter() {
@Override
public void beginContact(Contact contact) {
checkCollision(contact);
}
};
_physicsWorld.setContactListener(_contactListener);
}
protected abstract void checkCollision(Contact contact);
@Override
public void setGameLevelStateListener(GameLevelStateListener handler) {
_gameLevelStateListener = handler;
}
@Override
public void reset() {
_runChecks = true;
}
protected void setBallOut() {
// game over, make sure we skip running checks
_runChecks = false;
SoundManager.getInstance().play(R.raw.fall_off);
if (_gameLevelStateListener != null) {
_gameLevelStateListener.onBallOut();
}
}
protected void setLevelComplete() {
// game over, make sure we skip running checks
_runChecks = false;
_isLevelComplete = true;
SoundManager.getInstance().play(R.raw.into_portal);
if (_gameLevelStateListener != null) {
_gameLevelStateListener.onLevelComplete();
}
}
@Override
public void setBallSprite(Sprite ballSprite) {
_ballSprite = ballSprite;
}
@Override
public void start() {
}
@Override
public void dispose() {
_gameLevel = null;
_physicsWorld = null;
_engine = null;
_ballSprite = null;
_gameLevelStateListener = null;
}
}