package com.indignado.logicbricks.systems.sensors; import com.badlogic.ashley.core.Entity; import com.badlogic.ashley.core.EntityListener; import com.badlogic.gdx.ai.msg.MessageManager; import com.badlogic.gdx.utils.IntMap; import com.badlogic.gdx.utils.ObjectSet; import com.indignado.logicbricks.components.sensors.MessageSensorComponent; import com.indignado.logicbricks.core.MessageHandler; import com.indignado.logicbricks.core.sensors.MessageSensor; /** * @author Rubentxu */ public class MessageSensorSystem extends SensorSystem<MessageSensor, MessageSensorComponent> implements EntityListener { public MessageSensorSystem() { super(MessageSensorComponent.class); } @Override public boolean query(MessageSensor sensor, float deltaTime) { boolean isActive = false; if (sensor.message != null) { if (sensor.managedMessage) sensor.message = null; else isActive = true; } return isActive; } @Override public void entityAdded(Entity entity) { MessageSensorComponent messageSensors = entity.getComponent(MessageSensorComponent.class); if (messageSensors != null) { IntMap.Values<ObjectSet<MessageSensor>> values = messageSensors.sensors.values(); while (values.hasNext()) { for (MessageSensor sensor : values.next()) { if (sensor.autoRegister) MessageManager.getInstance().addListener(sensor, MessageHandler.getMessageKey(sensor.subject)); } } } } @Override public void entityRemoved(Entity entity) { MessageSensorComponent messageSensors = entity.getComponent(MessageSensorComponent.class); if (messageSensors != null) { IntMap.Values<ObjectSet<MessageSensor>> values = messageSensors.sensors.values(); while (values.hasNext()) { for (MessageSensor sensor : values.next()) { MessageManager.getInstance().removeListener(sensor, MessageHandler.getMessageKey(sensor.subject)); } } } } }