@Override
    /**
     * Add an actor to the ActorSet, assigning it an ActorId if one isn't already set
     */
    public boolean add(Actor a) {
        if (playerId != 0) { // Restrictive actor creation on network client
            if (a instanceof actor.ship.PlayerShip && a.id == null && ((actor.ship.PlayerShip)a).isAlive()) {
                // Permit respawning for new live player ships
            } else if (a.getParentId() != null && actors.get(a.getParentId()) instanceof actor.ship.PlayerShip) {
                // Permit projectiles from our local player
            } else
                return false;
        }
        
        if (a.id == null)
            a.id = new ActorId(playerId);

        if (actors.containsKey(a.id))
            return false;
        
        // Set a back reference to this ActorSet for actor.add() and actor.delete()
        a.actors = this;
        
        actors.put(a.id, a);
        adjustStat(a,1);

        for(Queue<Actor> q: addNotifyees)
            q.offer(a);

        return true;
    }