package com.deftwun.zombiecopter.systems;
import com.badlogic.ashley.core.Engine;
import com.badlogic.ashley.core.Entity;
import com.badlogic.ashley.core.EntitySystem;
import com.badlogic.ashley.core.Family;
import com.badlogic.gdx.utils.Array;
import com.deftwun.zombiecopter.ComponentMappers;
import com.deftwun.zombiecopter.DropOffPoint;
import com.deftwun.zombiecopter.App;
import com.deftwun.zombiecopter.GameEngine;
import com.deftwun.zombiecopter.components.Collector;
import com.deftwun.zombiecopter.components.PhysicsComponent;
//Drop off points are areas that an entity with a 'collector' component can drop off civilians when within range.
//TODO: Could be made to include different types of collectables ..
public class CivilianDropOffSystem extends EntitySystem {
private Array<DropOffPoint> points = new Array<DropOffPoint>();
private int totalCivsReturned = 0;
public int getTotalCiviliansDroppedOff(){
return totalCivsReturned;
}
public void add(DropOffPoint point){
points.add(point);
}
@Override
public void removedFromEngine(Engine engine) {
points.clear();
}
@SuppressWarnings("unchecked")
@Override
public void update(float deltaTime) {
GameEngine engine = App.engine;
ComponentMappers maps = engine.mappers;
for (DropOffPoint point : points){
for (Entity e : engine.getEntitiesFor(Family.all(Collector.class).get())){
Collector c = maps.collector.get(e);
PhysicsComponent phys = maps.physics.get(e);
if (phys.getPosition().dst(point.position) < point.range){
totalCivsReturned += c.civilians;
c.civilians = 0;
}
}
}
}
}