# mobileCollectiveGroup.t | documentation

    #charset "us-ascii"
    #include "advlite.h"

    /*---------------------------------------------------------------------------*/
    /*
     *   MobileCollective Group Extension
     *
     *   This extension requires events.t and extras.t to be present also.
     */

    /*
     *   A MobileCollectiveGroup is a CollectiveGroup that can be used to represent
     *   a collection of portable objects, different members of which may be in
     *   scope at any given moment. A MobileCollectiveGroup is moved into the
     *   player's location if more than one of its members is visible at the start
     *   of any turn and moved into nil otherwise.
     *   [MobileCollectiveGroup EXTENSION]
     */
    class MobileCollectiveGroup: PreinitObject, CollectiveGroup
        execute()
        {
            /* Set up a daemon to execute every turn */
            myDaemon = new Daemon(self, &scopeCheck, 1);

            /*
             *   Give the daemon a high event order so that it runs after other
             *   events if possible.
             */
            myDaemon.eventOrder = 10000;

            /* Set up a prompt daemon to execute just before the first turn */
            new OneTimePromptDaemon(self, &scopeCheck);

            /* Create a new vector */
            local vec = new Vector;

            /*
             *   Populate the vector with all the Things in the game that include
             *   this MobileCollectiveGroup in their collectiveGroups property.
             */
            for(local obj = firstObj(Thing); obj != nil; obj = nextObj(obj, Thing))
            {
                if(valToList(obj.collectiveGroups).indexOf(self))
                    vec.append(obj);
            }

            /*
             *   Convert the vector to a list and store the result in the myObjs
             *   property.
             */
            myObjs = vec.toList;
        }

        /*
         *   If the player can see more than one of the objects that belong to this
         *   CollectiveGroup, move it to the player's location (so that it can stand
         *   in for those objects when required); otherwise move this
         *   CollectiveGroup out of the way. [MobileCollectiveGroup EXTENSION]
         */
        scopeCheck()
        {
            if(myObjs.countWhich({x: gPlayerChar.canSee(x)}) > 1)
                moveInto(gPlayerChar.location);
            else
                moveInto(nil);
        }

        /*
         *   The list of objects belonging to this MobileCollectiveGroup; this is
         *   created automatically at PreInit. [MobileCollectiveGroup EXTENSION]
         */
        myObjs = nil

        /*
         *   Store a reference to the Daemon used to update the location of this
         *   MobileCollectiveGroup. [MobileCollectiveGroup EXTENSION]
         */
        myDaemon = nil
    ;

Adv3Lite Library Reference Manual
Generated on 01/03/2024 from adv3Lite version 1.6.2