private void tick() {
		if (network.hasUnreadDTOs())
			synchronizeEntities(network.getUnreadDTOs());

		if (network.hasClientDisconnected())
			removeDisconnectedClientEntities(network.getClientDisconnectedId());

		List<Long> deletedEntities = new ArrayList<>();
		for (Entity e : entityMap.values()) {
			e.tick(this);
			if (e.isDeleted())
				deletedEntities.add(e.getEntityID());
		}
		entityMap.keySet().removeAll(deletedEntities);
		entityFactory.putAllNewEntities(entityMap);


		// add new asteroid from time to time
		if (timerAddAsteroids.isTimeleft()) {
			AsteroidEntity entity = entityFactory.createAsteroid(
					new Vector2d(Constants.WIDTH / 2, Constants.HEIGHT / 2), new Vector2d(), AsteroidEntity.INIT_SIZE,
					Constants.SERVER_ID);
			addEntity(entity);
		}

		logger.debug("Entitycount: " + entityMap.size());


		if (timerSend.isTimeleft()) {
			network.sendDTO(new ServerInfoDTO(StringFormatter.format(cpuWorkload)));
			for (Entry<Long, Entity> e : entityMap.entrySet()) {
				network.sendDTO(e.getValue().toDTO());
			}
			network.sendNow();
		}
	}