<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Recent changes to Pipelines</title><link>https://sourceforge.net/p/androidgameng/wiki/Pipelines/</link><description>Recent changes to Pipelines</description><atom:link href="https://sourceforge.net/p/androidgameng/wiki/Pipelines/feed" rel="self"/><language>en</language><lastBuildDate>Wed, 09 Apr 2014 11:07:05 -0000</lastBuildDate><atom:link href="https://sourceforge.net/p/androidgameng/wiki/Pipelines/feed" rel="self" type="application/rss+xml"/><item><title>Pipelines modified by g-dollar</title><link>https://sourceforge.net/p/androidgameng/wiki/Pipelines/</link><description>&lt;div class="markdown_content"&gt;&lt;pre&gt;--- v20
+++ v21
@@ -18,7 +18,7 @@

 [TOC]

-#Installer
+#Pipelines
 This interface is the entry point to all pipelines.

 Even though the pipeline requests are asynchronous, they are not **multi-threaded**, meaning none of the requests are executed until after the current method completes.  Because of the apartment model, request ordering is preserved, and top-level contexts ensure synchronization for atomic model updates.
@@ -70,6 +70,8 @@
 #Uninstall Pipeline
 The uninstall pipeline reverses the operations of the install pipeline, but does not execute anything in the Resource Loader thread.  Use the same **route** from the **install()** call.

+Note that **uninstall()** is done *by name* and not by GO reference.  To participate in the Uninstall pipeline the GO must be in the **Locator**, or no callbacks are invoked.
+
 This is a top-level context with the **update lock** held.

 ##Unloaded Callback
&lt;/pre&gt;
&lt;/div&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">g-dollar</dc:creator><pubDate>Wed, 09 Apr 2014 11:07:05 -0000</pubDate><guid>https://sourceforge.netd68beb0b533e0f8c0ab4f5a5234cb1120fc6ada6</guid></item><item><title>Pipelines modified by g-dollar</title><link>https://sourceforge.net/p/androidgameng/wiki/Pipelines/</link><description>&lt;div class="markdown_content"&gt;&lt;pre&gt;--- v19
+++ v20
@@ -62,7 +62,7 @@
 * (Resource Loader) If **RequireResourceLoader** is implemented, invokes the **GO.load()** method, passing **ResourceLoader** and **Resources** interfaces.  If not implemented, no action is taken; this is done to maintain the order of **install** calls with their callbacks.  When complete, the load request is passed to the reply-to target (Game Cycle).
 * (Game Cycle) Obtain the **update lock** for the remainder of the steps.
 * (Game Cycle) call the **objectLoaded()** method, passing the GO and error status.  This is a good place to trigger additional installs that depend on a GO being completely installed before certain methods can be called successfully.
-* (Game Cycle) if **GO.locatable** flag is set, register with the **Locator** service.
+* (Game Cycle) if **GO.locatable** flag is set, register with **Locator**.
 * (Game Cycle) if **RequireLocatable** is implemented, register mappings with **Locator**.
 * (Game Cycle) if **RequireTimer** or **TimerCallback** are implemented, register with **TimerService**.  The **RequireTimer** takes priority here, so a GO implementing both interfaces must put itself in **RequireTimer**.
 * (Game Cycle) if the request contains a **route**, obtain each GO from the **Locator** and pass installed GO to its **LoadedCallback** (if implemented).
@@ -81,8 +81,8 @@
 * (Game Cycle) call the **objectUnloaded()** method, passing the GO and error status.
 * (Game Cycle) if **RequireTimer** or **TimerCallback** are implemented, unregister with **TimerService**.  The **RequireTimer** takes priority here, so a GO implementing both interfaces must put itself in **RequireTimer**.
 * (Game Cycle) if **RequireLocatable** is implemented, remove mappings from **Locator**.
-* (Game Cycle) if **GO.locatable** flag is set, remove from the **Locator** service.
-* (Game Cycle) if the uninstall request contains a **route**, obtain each GO from the **Locator** and pass installed GO to its **UnloadedCallback** (if implemented).
+* (Game Cycle) if **GO.locatable** flag is set, remove from **Locator**.
+* (Game Cycle) if the request contains a **route**, obtain each GO from the **Locator** and pass installed GO to its **UnloadedCallback** (if implemented).

 #Event Pipeline
 This pipeline is for making asynchronous requests for additional code to execute.  This makes it convenient to schedule something to happen after the current method completes, and keeps the model in a consistent state, by not mutating it at that time.
&lt;/pre&gt;
&lt;/div&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">g-dollar</dc:creator><pubDate>Fri, 17 May 2013 10:43:08 -0000</pubDate><guid>https://sourceforge.net64d68c038d673a5fb55afbd5ffdf54072dc8b5b7</guid></item><item><title>Pipelines modified by g-dollar</title><link>https://sourceforge.net/p/androidgameng/wiki/Pipelines/</link><description>&lt;div class="markdown_content"&gt;&lt;pre&gt;--- v18
+++ v19
@@ -4,7 +4,7 @@

 AGE has these pipelines:

-* Install: for loading data and connecting to GOs.
+* Install: for loading data, connecting to AGE and other GOs.
 * Uninstall: for reversing the effect of Install.
 * Event: for inter-GO communication.

@@ -18,8 +18,14 @@

 [TOC]

+#Installer
+This interface is the entry point to all pipelines.
+
+Even though the pipeline requests are asynchronous, they are not **multi-threaded**, meaning none of the requests are executed until after the current method completes.  Because of the apartment model, request ordering is preserved, and top-level contexts ensure synchronization for atomic model updates.
+
 #Marker Interfaces
-These indicate which services the GO requires.
+Game objects (hereafter **GO**) opt-in for AGE services by implementing the *marker interface* of each required service.  These interfaces follow the naming pattern **RequireXXX** where **XXX** represents the service.
+
 ##RequireResourceLoader
 Indicates requirement for asynchronous resource loading.
 ##RequireTimer
@@ -27,17 +33,17 @@
 ##TimerCallback
 Indicates the GO itself is a timer to be registered.
 ##RequireLocatable
-Indicates requirement for registering multiple name/GO mappings in the Locator.
+Indicates requirement for registering multiple name/GO mappings in the **Locator**.
+
+Individual components can use additional marker interfaces as necessary, e.g. to conditionally accept a routed GO on its **LoadedCallback**.

 #Install Pipeline
-The Install pipeline is asynchronous; it is started by calling the *install()* method, and passing the GO to install.  The GO should be minimally initialized at this point, because the Pipeline will take over the actual "work" of initializing.
+The Install pipeline is started by calling the *install()* method, and passing the GO to install.  The GO should be minimally initialized at this point, because the Pipeline will take over the actual "work" of initializing.

-Game objects (hereafter **GO**) opt-in for system services by implementing the *marker interface* of each required service.  These interfaces follow the naming pattern **RequireXXX** where **XXX** represents the service.
-
-The first stop on the Install Pipeline is a dedicated Resource Loader thread for the time-consuming work of initializing a GO from resources, e.g. texture bitmaps, object models, etc.
+The first stop on the Install Pipeline is the Resource Loader task, for the time-consuming work of initializing a GO from resources, e.g. texture bitmaps, object models, etc.

 ##Load Request
-The **LoadObject** message contains the information used by the threads in the Install Pipeline:
+The **LoadObject** message contains the information used by the tasks in the Install Pipeline:

 * the GO to target.
 * a reply-to **TaskChannel** to notify when complete.
@@ -52,22 +58,22 @@
 ##Default Behavior
 The install pipeline proceeds as follows (the thread executing is in parentheses):

-1. (Caller) Call the **install()** method, which sends a message to the Resource Loader thread and returns.  the reply-to target is the Game Cycle, and the **LoadedCallback** is the remainder of the steps from step 3.  **Do not access the GO** after this point, until **objectLoaded()** is called (step 4).
+1. (Caller) Call the **install()** method, which sends a message to the Resource Loader task and returns.  the reply-to target is the Game Cycle, and the **LoadedCallback** is the remainder of the steps from step 3.  **Do not access the GO** after this point, until **objectLoaded()** (step 4) or a routed **LoadedCallback** is called (step 8).
 * (Resource Loader) If **RequireResourceLoader** is implemented, invokes the **GO.load()** method, passing **ResourceLoader** and **Resources** interfaces.  If not implemented, no action is taken; this is done to maintain the order of **install** calls with their callbacks.  When complete, the load request is passed to the reply-to target (Game Cycle).
 * (Game Cycle) Obtain the **update lock** for the remainder of the steps.
 * (Game Cycle) call the **objectLoaded()** method, passing the GO and error status.  This is a good place to trigger additional installs that depend on a GO being completely installed before certain methods can be called successfully.
 * (Game Cycle) if **GO.locatable** flag is set, register with the **Locator** service.
 * (Game Cycle) if **RequireLocatable** is implemented, register mappings with **Locator**.
 * (Game Cycle) if **RequireTimer** or **TimerCallback** are implemented, register with **TimerService**.  The **RequireTimer** takes priority here, so a GO implementing both interfaces must put itself in **RequireTimer**.
-* (Game Cycle) if the install request contains a **route**, obtain each GO from the **Locator** and pass installed GO to its **LoadedCallback** (if implemented).
+* (Game Cycle) if the request contains a **route**, obtain each GO from the **Locator** and pass installed GO to its **LoadedCallback** (if implemented).

 #Uninstall Pipeline
-The uninstall pipeline reverses the operations of the install pipeline, but does not execute anything in the Resource Loader thread.
+The uninstall pipeline reverses the operations of the install pipeline, but does not execute anything in the Resource Loader thread.  Use the same **route** from the **install()** call.

 This is a top-level context with the **update lock** held.

 ##Unloaded Callback
-The dual of the **Loaded** callback is the **Unloaded** callback.  This is meant to undo whatever the effect of **Loaded** was.
+The dual of **LoadedCallback** is **UnloadedCallback**.  This is meant to undo whatever the effect of **LoadedCallback** was.

 ##Default Behavior

&lt;/pre&gt;
&lt;/div&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">g-dollar</dc:creator><pubDate>Fri, 17 May 2013 10:37:28 -0000</pubDate><guid>https://sourceforge.net2ac0c90a54bd7c31581f490fce2f3a9f29e19fb9</guid></item><item><title>Pipelines modified by g-dollar</title><link>https://sourceforge.net/p/androidgameng/wiki/Pipelines/</link><description>&lt;div class="markdown_content"&gt;&lt;pre&gt;&lt;/pre&gt;
&lt;/div&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">g-dollar</dc:creator><pubDate>Tue, 14 May 2013 10:21:45 -0000</pubDate><guid>https://sourceforge.netf037f7d99854ea9cc138d797dbe4b0a871389fa0</guid></item><item><title>Install Pipeline modified by g-dollar</title><link>https://sourceforge.net/p/androidgameng/wiki/Install%2520Pipeline/</link><description>&lt;div class="markdown_content"&gt;&lt;pre&gt;--- v16
+++ v17
@@ -58,7 +58,7 @@
 * (Game Cycle) call the **objectLoaded()** method, passing the GO and error status.  This is a good place to trigger additional installs that depend on a GO being completely installed before certain methods can be called successfully.
 * (Game Cycle) if **GO.locatable** flag is set, register with the **Locator** service.
 * (Game Cycle) if **RequireLocatable** is implemented, register mappings with **Locator**.
-* (Game Cycle) if **RequireTimer** or **TimerCallback** are implemented, register with **TimerService**.  The **RequireTimer** takes priority here, so a GO implementing both interfaces must register itself in **RequireTimer**.
+* (Game Cycle) if **RequireTimer** or **TimerCallback** are implemented, register with **TimerService**.  The **RequireTimer** takes priority here, so a GO implementing both interfaces must put itself in **RequireTimer**.
 * (Game Cycle) if the install request contains a **route**, obtain each GO from the **Locator** and pass installed GO to its **LoadedCallback** (if implemented).

 #Uninstall Pipeline
@@ -68,6 +68,15 @@

 ##Unloaded Callback
 The dual of the **Loaded** callback is the **Unloaded** callback.  This is meant to undo whatever the effect of **Loaded** was.
+
+##Default Behavior
+
+1. (Game Cycle) Obtain the **update lock** for the remainder of the steps.
+* (Game Cycle) call the **objectUnloaded()** method, passing the GO and error status.
+* (Game Cycle) if **RequireTimer** or **TimerCallback** are implemented, unregister with **TimerService**.  The **RequireTimer** takes priority here, so a GO implementing both interfaces must put itself in **RequireTimer**.
+* (Game Cycle) if **RequireLocatable** is implemented, remove mappings from **Locator**.
+* (Game Cycle) if **GO.locatable** flag is set, remove from the **Locator** service.
+* (Game Cycle) if the uninstall request contains a **route**, obtain each GO from the **Locator** and pass installed GO to its **UnloadedCallback** (if implemented).

 #Event Pipeline
 This pipeline is for making asynchronous requests for additional code to execute.  This makes it convenient to schedule something to happen after the current method completes, and keeps the model in a consistent state, by not mutating it at that time.
&lt;/pre&gt;
&lt;/div&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">g-dollar</dc:creator><pubDate>Mon, 13 May 2013 10:49:16 -0000</pubDate><guid>https://sourceforge.net48c2d186714a5743972cbcbf81b8cc60fa0deda6</guid></item><item><title>Install Pipeline modified by g-dollar</title><link>https://sourceforge.net/p/androidgameng/wiki/Install%2520Pipeline/</link><description>&lt;div class="markdown_content"&gt;&lt;pre&gt;--- v15
+++ v16
@@ -83,3 +83,10 @@

 ##Event Callback
 This callback gets the GO that was sent as the event.  This is an excellent place to put game logic.
+
+##Default Behavior
+This is how the Game Cycle thread handles Event Requests:
+
+1. (Game Cycle) Obtain the **update lock** for the remainder of the steps.
+* (Game Cycle) call the **objectEvent()** method, passing the GO.  This is a good place to trigger additional installs/uninstalls/events that are **unrouted** or you want to process it before any **route** targets do.
+* (Game Cycle) if the event request contains a **route**, obtain each GO from the **Locator** and pass event GO to its **EventCallback** (if implemented).
&lt;/pre&gt;
&lt;/div&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">g-dollar</dc:creator><pubDate>Mon, 13 May 2013 10:41:39 -0000</pubDate><guid>https://sourceforge.netc0f67c2e82868f3feea4f0b56b0f4a8ca7aaa3c4</guid></item><item><title>Install Pipeline modified by g-dollar</title><link>https://sourceforge.net/p/androidgameng/wiki/Install%2520Pipeline/</link><description>&lt;div class="markdown_content"&gt;&lt;pre&gt;--- v14
+++ v15
@@ -1,12 +1,20 @@
-Game objects (hereafter **GO**) opt-in for system services by implementing the *marker interface* of each required service.  These interfaces follow the naming pattern **RequireXXX** where **XXX** represents the service.
+A **Pipeline** is a fancy name for an asynchronous send/receive model, where the receive side uses **marker interfaces** to determine what to call on the received object.

-The goals of the Install Pipeline:
+To encourage indirect coupling, you specify the names of target components via a **route**, so the call-site determines which other components "see" the pipeline GO on "the other end".
+
+AGE has these pipelines:
+
+* Install: for loading data and connecting to GOs.
+* Uninstall: for reversing the effect of Install.
+* Event: for inter-GO communication.
+
+The goals of the Pipelines:

 * Asynchronous design acknowledges the task of resource acquisition and offloads that work to a different thread.
-* Easy to add/remove a GO at the call site.  A call to **install()** does it all!
-* Require minimum information "in hand"; just the GO to install, and the **Installer** interface.
-* Standard way for everything to be initialized and "enter" the system.
-* Uniform "context" (threading, locking, interfaces) to perform these actions.
+* Easy to target a GO at the call site.  A call to **install/uninstall/event()** does it all!
+* Require minimum information "in hand"; just the GO to operate on, and the **Installer** interface.
+* Standard way for everything to be initialized and enter/exit the system.
+* Uniform "top-level context" (threading, locking, interfaces) to perform these actions.

 [TOC]

@@ -22,7 +30,11 @@
 Indicates requirement for registering multiple name/GO mappings in the Locator.

 #Install Pipeline
-The install pipeline is asynchronous; it is started by calling the *install()* method, and passing the GO to install.  The object should be minimally initialized at this point, because the Resource Loader thread will take over the actual "work" of initializing.
+The Install pipeline is asynchronous; it is started by calling the *install()* method, and passing the GO to install.  The GO should be minimally initialized at this point, because the Pipeline will take over the actual "work" of initializing.
+
+Game objects (hereafter **GO**) opt-in for system services by implementing the *marker interface* of each required service.  These interfaces follow the naming pattern **RequireXXX** where **XXX** represents the service.
+
+The first stop on the Install Pipeline is a dedicated Resource Loader thread for the time-consuming work of initializing a GO from resources, e.g. texture bitmaps, object models, etc.

 ##Load Request
 The **LoadObject** message contains the information used by the threads in the Install Pipeline:
@@ -30,10 +42,12 @@
 * the GO to target.
 * a reply-to **TaskChannel** to notify when complete.
 * a **LoadedCallback** to execute in that context when it receives this message.  The Game Cycle uses a **LoadedCallback** that's outlined below.
-* an optional list of **bind targets** to have their **LoadedCallback** invoked.
+* an optional list of **bind targets**, called a **route**, to have their **LoadedCallback** invoked.

 ##Loaded Callback
 This is called for every GO that completes the install pipeline.  It is called on the Game Cycle's thread, so thread-safety is necessary if interacting with the UI (or other) thread of the application.
+
+This is a top-level context with the **update lock** held.

 ##Default Behavior
 The install pipeline proceeds as follows (the thread executing is in parentheses):
@@ -45,7 +59,27 @@
 * (Game Cycle) if **GO.locatable** flag is set, register with the **Locator** service.
 * (Game Cycle) if **RequireLocatable** is implemented, register mappings with **Locator**.
 * (Game Cycle) if **RequireTimer** or **TimerCallback** are implemented, register with **TimerService**.  The **RequireTimer** takes priority here, so a GO implementing both interfaces must register itself in **RequireTimer**.
-* (Game Cycle) if the install request contains **bind targets**, obtain each GO from the **Locator** and pass installed GO to its **LoadedCallback** (if implemented).
+* (Game Cycle) if the install request contains a **route**, obtain each GO from the **Locator** and pass installed GO to its **LoadedCallback** (if implemented).

 #Uninstall Pipeline
 The uninstall pipeline reverses the operations of the install pipeline, but does not execute anything in the Resource Loader thread.
+
+This is a top-level context with the **update lock** held.
+
+##Unloaded Callback
+The dual of the **Loaded** callback is the **Unloaded** callback.  This is meant to undo whatever the effect of **Loaded** was.
+
+#Event Pipeline
+This pipeline is for making asynchronous requests for additional code to execute.  This makes it convenient to schedule something to happen after the current method completes, and keeps the model in a consistent state, by not mutating it at that time.
+
+The **GameObject** class is reused here to represent an event.
+
+To participate in the Event pipeline, a target GO must be in the **Locator** and implement the **EventCallback** interface.  The Event pipeline does not check for any other marker interfaces.
+
+This is a top-level context with the **update lock** held.
+
+##Event Request
+This is analogous to the **LoadObject** request.  The most-important part of this is the **route**.
+
+##Event Callback
+This callback gets the GO that was sent as the event.  This is an excellent place to put game logic.
&lt;/pre&gt;
&lt;/div&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">g-dollar</dc:creator><pubDate>Mon, 13 May 2013 10:32:49 -0000</pubDate><guid>https://sourceforge.net0cf77b7fad7c4178474d3f2aa717a47c3791a60c</guid></item><item><title>Install Pipeline modified by g-dollar</title><link>https://sourceforge.net/p/androidgameng/wiki/Install%2520Pipeline/</link><description>&lt;div class="markdown_content"&gt;&lt;pre&gt;--- v13
+++ v14
@@ -39,7 +39,7 @@
 The install pipeline proceeds as follows (the thread executing is in parentheses):

 1. (Caller) Call the **install()** method, which sends a message to the Resource Loader thread and returns.  the reply-to target is the Game Cycle, and the **LoadedCallback** is the remainder of the steps from step 3.  **Do not access the GO** after this point, until **objectLoaded()** is called (step 4).
-* (Resource Loader) If **RequireResourceLoader** is implemented, invokes the **GO.load()** method, passing **Resources** interface.  When this completes, the load request is passed to the reply-to target (Game Cycle).
+* (Resource Loader) If **RequireResourceLoader** is implemented, invokes the **GO.load()** method, passing **ResourceLoader** and **Resources** interfaces.  If not implemented, no action is taken; this is done to maintain the order of **install** calls with their callbacks.  When complete, the load request is passed to the reply-to target (Game Cycle).
 * (Game Cycle) Obtain the **update lock** for the remainder of the steps.
 * (Game Cycle) call the **objectLoaded()** method, passing the GO and error status.  This is a good place to trigger additional installs that depend on a GO being completely installed before certain methods can be called successfully.
 * (Game Cycle) if **GO.locatable** flag is set, register with the **Locator** service.
&lt;/pre&gt;
&lt;/div&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">g-dollar</dc:creator><pubDate>Tue, 07 May 2013 17:05:07 -0000</pubDate><guid>https://sourceforge.netdf88c8e32c8c6ec33fa070b55a3b273829a8d175</guid></item><item><title>Install Pipeline modified by g-dollar</title><link>https://sourceforge.net/p/androidgameng/wiki/Install%2520Pipeline/</link><description>&lt;div class="markdown_content"&gt;&lt;pre&gt;--- v12
+++ v13
@@ -29,26 +29,23 @@

 * the GO to target.
 * a reply-to **TaskChannel** to notify when complete.
-* a **LoadedCallback** to execute in that context when it receives this message.
+* a **LoadedCallback** to execute in that context when it receives this message.  The Game Cycle uses a **LoadedCallback** that's outlined below.
 * an optional list of **bind targets** to have their **LoadedCallback** invoked.

 ##Loaded Callback
-This is called for every GO that completes the install pipeline.  It is called on the Game Cycle's thread, so thread-safety is necessary if interacting with the UI thread of the application.
+This is called for every GO that completes the install pipeline.  It is called on the Game Cycle's thread, so thread-safety is necessary if interacting with the UI (or other) thread of the application.

-This callback is also a good place to "sequence" installs of GO's that depend on other GO's being completely installed first, via additional calls to **install()**.
-
-The Game Cycle uses a **LoadedCallback** that's outlined below.
-
+##Default Behavior
 The install pipeline proceeds as follows (the thread executing is in parentheses):

 1. (Caller) Call the **install()** method, which sends a message to the Resource Loader thread and returns.  the reply-to target is the Game Cycle, and the **LoadedCallback** is the remainder of the steps from step 3.  **Do not access the GO** after this point, until **objectLoaded()** is called (step 4).
 * (Resource Loader) If **RequireResourceLoader** is implemented, invokes the **GO.load()** method, passing **Resources** interface.  When this completes, the load request is passed to the reply-to target (Game Cycle).
 * (Game Cycle) Obtain the **update lock** for the remainder of the steps.
-* (Game Cycle) call the **objectLoaded()** method, passing the GO and error status.
+* (Game Cycle) call the **objectLoaded()** method, passing the GO and error status.  This is a good place to trigger additional installs that depend on a GO being completely installed before certain methods can be called successfully.
 * (Game Cycle) if **GO.locatable** flag is set, register with the **Locator** service.
+* (Game Cycle) if **RequireLocatable** is implemented, register mappings with **Locator**.
 * (Game Cycle) if **RequireTimer** or **TimerCallback** are implemented, register with **TimerService**.  The **RequireTimer** takes priority here, so a GO implementing both interfaces must register itself in **RequireTimer**.
-* (Game Cycle) if **RequireLocatable** is implemented, register mappings with **Locator**.
-* (Game Cycle) if the install request contains **bind targets**, obtain each GO from the **Locator** and pass the GO to its **LoadedCallback** (if implemented).
+* (Game Cycle) if the install request contains **bind targets**, obtain each GO from the **Locator** and pass installed GO to its **LoadedCallback** (if implemented).

 #Uninstall Pipeline
 The uninstall pipeline reverses the operations of the install pipeline, but does not execute anything in the Resource Loader thread.
&lt;/pre&gt;
&lt;/div&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">g-dollar</dc:creator><pubDate>Fri, 03 May 2013 14:28:32 -0000</pubDate><guid>https://sourceforge.net9709e1d6e8b199c25290ad43e38ed863f2dff13b</guid></item><item><title>Install Pipeline modified by g-dollar</title><link>https://sourceforge.net/p/androidgameng/wiki/Install%2520Pipeline/</link><description>&lt;div class="markdown_content"&gt;&lt;pre&gt;--- v11
+++ v12
@@ -21,17 +21,23 @@
 ##RequireLocatable
 Indicates requirement for registering multiple name/GO mappings in the Locator.

-#Load Request
+#Install Pipeline
+The install pipeline is asynchronous; it is started by calling the *install()* method, and passing the GO to install.  The object should be minimally initialized at this point, because the Resource Loader thread will take over the actual "work" of initializing.
+
+##Load Request
 The **LoadObject** message contains the information used by the threads in the Install Pipeline:

-* the GO to target
-* a reply-to **TaskChannel** to notify when complete
-* a **LoadedCallback** to execute in that context when it receives this message
+* the GO to target.
+* a reply-to **TaskChannel** to notify when complete.
+* a **LoadedCallback** to execute in that context when it receives this message.
+* an optional list of **bind targets** to have their **LoadedCallback** invoked.
+
+##Loaded Callback
+This is called for every GO that completes the install pipeline.  It is called on the Game Cycle's thread, so thread-safety is necessary if interacting with the UI thread of the application.
+
+This callback is also a good place to "sequence" installs of GO's that depend on other GO's being completely installed first, via additional calls to **install()**.

 The Game Cycle uses a **LoadedCallback** that's outlined below.
-
-#Install Pipeline
-The install pipeline is asynchronous; it is started by calling the *install()* method, and passing the GO to install.  The object should be minimally initialized at this point, because the Resource Loader thread will take over the actual "work" of initializing.

 The install pipeline proceeds as follows (the thread executing is in parentheses):

@@ -39,16 +45,10 @@
 * (Resource Loader) If **RequireResourceLoader** is implemented, invokes the **GO.load()** method, passing **Resources** interface.  When this completes, the load request is passed to the reply-to target (Game Cycle).
 * (Game Cycle) Obtain the **update lock** for the remainder of the steps.
 * (Game Cycle) call the **objectLoaded()** method, passing the GO and error status.
-* (Game Cycle) register with the **Locator** service.
+* (Game Cycle) if **GO.locatable** flag is set, register with the **Locator** service.
 * (Game Cycle) if **RequireTimer** or **TimerCallback** are implemented, register with **TimerService**.  The **RequireTimer** takes priority here, so a GO implementing both interfaces must register itself in **RequireTimer**.
 * (Game Cycle) if **RequireLocatable** is implemented, register mappings with **Locator**.
-* (Game Cycle) if the GO is an instance of **Scene**, register it with **RenderService**.  Otherwise, if there is no **bind-to namelist** obtain the current **Scene** and pass the GO to its **LoadedCallback**.
-* (Game Cycle) if the install request contains a **bind-to namelist**, obtain each GO from the **Locator** and pass the GO to its **LoadedCallback** (if implemented).
-
-##Loaded Callback
-This is called for every GO that completes the install pipeline.  It is called on the Game Cycle's thread, so thread-safety is necessary if interacting with the UI thread of the application.
-
-This callback is also a good place to "sequence" installs of GO's that depend on other GO's being completely installed first, via additional calls to **install()**.
+* (Game Cycle) if the install request contains **bind targets**, obtain each GO from the **Locator** and pass the GO to its **LoadedCallback** (if implemented).

 #Uninstall Pipeline
 The uninstall pipeline reverses the operations of the install pipeline, but does not execute anything in the Resource Loader thread.
&lt;/pre&gt;
&lt;/div&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">g-dollar</dc:creator><pubDate>Fri, 03 May 2013 14:13:37 -0000</pubDate><guid>https://sourceforge.netd620f18742fabb86f4beb31400d3c4d268686e11</guid></item></channel></rss>