package net.mostlyoriginal.game.system;
import com.artemis.Aspect;
import com.artemis.ComponentMapper;
import com.artemis.Entity;
import com.artemis.annotations.Wire;
import com.artemis.systems.EntityProcessingSystem;
import net.mostlyoriginal.api.component.graphics.Anim;
import net.mostlyoriginal.game.component.Level;
/**
* Applies castle level to servants.
*
* @author Daan van Yperen
*/
@Wire
public class CastleLevelSystem extends EntityProcessingSystem {
ComponentMapper<Level> lm;
ComponentMapper<Anim> am;
CastleSystem castleSystem;
public CastleLevelSystem() {
super(Aspect.getAspectForAll(Level.class));
}
@Override
protected void process(Entity e) {
Level level = lm.get(e);
switch ( level.type )
{
case "queen": updateLevel(e, castleSystem.queenLevel); break;
case "knight": updateLevel(e, castleSystem.knightLevel); break;
case "mage": updateLevel(e, castleSystem.mageLevel); break;
case "spelunker": updateLevel(e, castleSystem.spelunkerLevel); break;
default: throw new RuntimeException("No idea how to establish level for " + level.type);
}
}
private void updateLevel(Entity e, int newLevel) {
Level level = lm.get(e);
if ( level.level != newLevel )
{
level.level = newLevel;
}
// hide or unhide actor depending on level.
if ( am.has(e))
{
Anim anim = am.get(e);
anim.visible = level.level > 0;
}
}
}