package net.onedaybeard.dominatrix.demo.system.spatial;
import net.onedaybeard.dominatrix.demo.component.Renderable;
import net.onedaybeard.dominatrix.demo.component.Velocity;
import com.artemis.Aspect;
import com.artemis.ComponentMapper;
import com.artemis.Entity;
import com.artemis.systems.EntityProcessingSystem;
import com.badlogic.gdx.graphics.OrthographicCamera;
import com.badlogic.gdx.graphics.g2d.Sprite;
import com.badlogic.gdx.math.Rectangle;
import com.badlogic.gdx.math.Vector2;
public final class BoundsKeeperSystem extends EntityProcessingSystem
{
private ComponentMapper<Renderable> RenderableMapper;
private ComponentMapper<Velocity> velocityMapper;
private OrthographicCamera camera;
@SuppressWarnings("unchecked")
public BoundsKeeperSystem(OrthographicCamera camera)
{
super(Aspect.getAspectForAll(Renderable.class, Velocity.class));
this.camera = camera;
}
@Override
protected void initialize()
{
RenderableMapper = world.getMapper(Renderable.class);
velocityMapper = world.getMapper(Velocity.class);
}
@Override
protected void process(Entity e)
{
Sprite sprite = RenderableMapper.get(e).getSprite();
Vector2 velocity = velocityMapper.get(e).get();
Rectangle rect = sprite.getBoundingRectangle();
if ((rect.x < 0 && velocity.x < 0)
|| ((rect.x + rect.width) > camera.viewportWidth && velocity.x > 0))
{
velocity.x *= -1;
}
if ((rect.y < 0 && velocity.y < 0)
|| ((rect.y + rect.height) > camera.viewportHeight && velocity.y > 0))
{
velocity.y *= -1;
}
}
}