2021-05-01 19:40:36 +00:00
|
|
|
package uulm.teamname.marvelous.gamelibrary.gamelogic;
|
|
|
|
|
2021-05-01 22:03:03 +00:00
|
|
|
import uulm.teamname.marvelous.gamelibrary.IntVector2;
|
2021-05-01 19:40:36 +00:00
|
|
|
import uulm.teamname.marvelous.gamelibrary.entities.Entity;
|
2021-05-01 22:03:03 +00:00
|
|
|
import uulm.teamname.marvelous.gamelibrary.entities.EntityID;
|
2021-04-30 18:54:34 +00:00
|
|
|
|
2021-05-01 22:03:03 +00:00
|
|
|
import java.util.ArrayList;
|
2021-04-30 18:54:34 +00:00
|
|
|
import java.util.Arrays;
|
|
|
|
import java.util.HashSet;
|
|
|
|
import java.util.Iterator;
|
|
|
|
|
2021-05-01 17:47:19 +00:00
|
|
|
/** Represents a managed list of {@link Entity}s. */
|
|
|
|
public class EntityManager {
|
2021-04-30 18:54:34 +00:00
|
|
|
/** The internal collection of {@link Entity}s */
|
|
|
|
private final HashSet<Entity> entities = new HashSet<>();
|
|
|
|
|
2021-05-01 17:47:19 +00:00
|
|
|
/**
|
|
|
|
* Takes over all the entities from a different {@link EntityManager}.
|
|
|
|
* @param other The entity list to take the data from
|
|
|
|
*/
|
|
|
|
public void cloneFrom(EntityManager other) {
|
|
|
|
entities.clear();
|
|
|
|
for(Entity entity: other.entities) {
|
|
|
|
entities.add(entity.clone());
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2021-04-30 18:54:34 +00:00
|
|
|
/**
|
|
|
|
* Clears the list of entities.
|
|
|
|
*/
|
|
|
|
public void clear() {
|
|
|
|
entities.clear();
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Adds an entity to the list.
|
|
|
|
* @param entity The {@link Entity} to add
|
|
|
|
*/
|
|
|
|
public void addEntity(Entity entity) {
|
|
|
|
entities.add(entity);
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Adds multiple entities to the list.
|
|
|
|
* @param entities The entities to add
|
|
|
|
*/
|
|
|
|
public void addEntities(Entity... entities) {
|
|
|
|
this.entities.addAll(Arrays.asList(entities));
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Removes an entity from the list.
|
|
|
|
* @param entity The {@link Entity} to remove
|
|
|
|
*/
|
|
|
|
public boolean removeEntity(Entity entity) {
|
|
|
|
return entities.remove(entity);
|
|
|
|
}
|
|
|
|
|
2021-05-01 22:03:03 +00:00
|
|
|
/**
|
|
|
|
* Finds an entity with an {@link EntityID}.
|
|
|
|
* @param id The id to search for
|
|
|
|
* @return The found {@link Entity} or null if none found
|
|
|
|
*/
|
|
|
|
public Entity findEntity(EntityID id) {
|
|
|
|
for(Entity entity: entities) {
|
|
|
|
if(entity.id == id) {
|
|
|
|
return entity;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
return null;
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Finds all entities with a position.
|
|
|
|
* @param pos The position to check on
|
|
|
|
* @return The found {@link Entity}s matching the position
|
|
|
|
*/
|
|
|
|
public ArrayList<Entity> findByPosition(IntVector2 pos) {
|
|
|
|
ArrayList<Entity> found = new ArrayList<>();
|
|
|
|
for(Entity entity: entities) {
|
|
|
|
if(entity.getPosition() == pos) {
|
|
|
|
found.add(entity);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
return found;
|
|
|
|
}
|
|
|
|
|
2021-05-02 13:34:42 +00:00
|
|
|
/**
|
|
|
|
* Checks if any entity on a position blocks vision.
|
|
|
|
* @param pos The position to check on
|
|
|
|
* @return Whether or not anything on the position blocks vision
|
|
|
|
*/
|
|
|
|
public boolean blocksVision(IntVector2 pos) {
|
|
|
|
for(Entity entity: entities) {
|
|
|
|
if(entity.getPosition() == pos && entity.blocksVision()) {
|
|
|
|
return true;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
return false;
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Checks if any entity on a position blocks movement.
|
|
|
|
* @param pos The position to check on
|
|
|
|
* @return Whether or not anything on the position blocks movement
|
|
|
|
*/
|
|
|
|
public boolean blocksMovement(IntVector2 pos) {
|
|
|
|
for(Entity entity: entities) {
|
|
|
|
if(entity.getPosition() == pos && entity.blocksMovement()) {
|
|
|
|
return true;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
return false;
|
|
|
|
}
|
|
|
|
|
2021-04-30 18:54:34 +00:00
|
|
|
/**
|
|
|
|
* Iterates over all entities inside the list.
|
|
|
|
* @return An iterator over every {@link Entity}
|
|
|
|
*/
|
|
|
|
public Iterator<Entity> getEntities() {
|
|
|
|
return entities.iterator();
|
|
|
|
}
|
|
|
|
}
|