package com.ftloverdrive.event.handler;
import com.badlogic.gdx.utils.Pools;
import com.ftloverdrive.core.OverdriveContext;
import com.ftloverdrive.event.OVDEvent;
import com.ftloverdrive.event.OVDEventHandler;
import com.ftloverdrive.event.game.GamePlayerShipChangeEvent;
import com.ftloverdrive.event.game.GamePlayerShipChangeListener;
import com.ftloverdrive.model.GameModel;
import com.ftloverdrive.model.ship.ShipModel;
public class GameEventHandler implements OVDEventHandler {
private Class[] eventClasses;
private Class[] listenerClasses;
public GameEventHandler() {
eventClasses = new Class[] { GamePlayerShipChangeEvent.class };
listenerClasses = new Class[] { GamePlayerShipChangeListener.class };
}
@Override
public Class[] getEventClasses() {
return eventClasses;
}
@Override
public Class[] getListenerClasses() {
return listenerClasses;
}
@SuppressWarnings("unchecked")
@Override
public void handle( OverdriveContext context, OVDEvent e, Object[] listeners ) {
if ( e instanceof GamePlayerShipChangeEvent ) {
GamePlayerShipChangeEvent event = (GamePlayerShipChangeEvent)e;
int gameRefId = event.getGameRefId();
int shipRefId = event.getShipRefId();
GameModel gameModel = context.getReferenceManager().getObject( gameRefId, GameModel.class );
ShipModel shipModel = context.getReferenceManager().getObject( shipRefId, ShipModel.class );
if ( shipModel != null ) {
gameModel.setPlayerShip( shipRefId );
}
for ( int i = listeners.length-2; i >= 0; i-=2 ) {
if ( listeners[i] == GamePlayerShipChangeListener.class ) {
((GamePlayerShipChangeListener)listeners[i+1]).gamePlayerShipChanged( context, event );
}
}
}
}
@SuppressWarnings("unchecked")
@Override
public void disposeEvent( OVDEvent e ) {
if ( e.getClass() == GamePlayerShipChangeEvent.class ) {
Pools.get( GamePlayerShipChangeEvent.class ).free( (GamePlayerShipChangeEvent)e );
}
}
}