package se.rhel.screen;
import com.badlogic.gdx.Gdx;
import com.badlogic.gdx.math.Vector3;
import se.rhel.event.*;
import se.rhel.model.IWorldModel;
import se.rhel.model.component.DamageComponent;
import se.rhel.model.component.GameObject;
import se.rhel.view.IWorldView;
import se.rhel.view.ParticleRenderer;
import se.rhel.view.input.IInput;
import se.rhel.view.input.PlayerInput;
public class BaseGameController extends AbstactController implements ViewListener, ModelListener {
protected IInput mPlayerInput;
protected IWorldView mWorldView;
protected IWorldModel mWorldModel;
protected Events mEvents;
public BaseGameController() {
mEvents = new Events();
mPlayerInput = new PlayerInput(mEvents);
Gdx.input.setInputProcessor(mPlayerInput);
mEvents.listen(ViewEvent.class, this);
mEvents.listen(ModelEvent.class, this);
}
@Override
public void update(float delta) {
mPlayerInput.processCurrentInput(delta);
mWorldModel.getPlayer().move(mPlayerInput.getDirection());
mWorldModel.getPlayer().rotateBy(mPlayerInput.getRotation());
mWorldModel.update(delta);
mWorldView.update(delta);
}
@Override
public void draw(float delta) {}
@Override
public void modelEvent(EventType type, Object... objs) {
switch(type) {
case EXPLOSION:
mWorldView.addParticleEffect(((Vector3)objs[0]), ParticleRenderer.Particle.EXPLOSION);
break;
case DAMAGE:
mWorldModel.checkEntityStatus(((GameObject) objs[0]));
mWorldView.addParticleEffect(((GameObject) objs[0]).getPosition(), ParticleRenderer.Particle.BLOOD);
break;
}
}
@Override
public void inputEvent(EventType type) {
switch (type) {
case JUMP:
mWorldModel.getPlayer().jump();
break;
case SHOOT:
mWorldModel.getPlayer().shoot();
break;
}
}
}