Func instance io proxy

==Entity description==
It is used to forward entity I/O between instances and the rest of the world.
Place one copy of this entity inside of an instance. Sending messages to entities inside the instance from the Proxy's OnProxyRelay output will allow you to trigger these entities from outside the instance by sending messages to the . Send the ProxyRelay message from entities inside the instance to the proxy and you will be able to use these events to send messages to other entities outside the instance from the .
==KeyValues==
==Inputs==
==Outputs==
== Usage ==
=== Creating Outputs ===
The most valuable use of func_io_proxy is to map outputs from entities inside an instance so that they become configurable outputs of the func_instance entity itself. Without this function, any interactions with the outside world would need to be carefully planned and predicted, thus greatly reducing the ability for the instance to do anything interesting.
To route an output, you'll need to go into your source entity and send an output to the proxy with a ProxyRelay input such as:
:
	My Output > 	Target Entity	Target Input	Parameter	Delay	Only Once
	OnStartTouch	door_proxy 	ProxyRelay 	  	0.00 	No
: 
func_instance entities will now be able use this output as if it were one of their own.
If you go to the outputs tab for the func_instance and click add you'll see that you can now select and configure outputs like:
:
	My Output > 	Target Entity	Target Input	Parameter	Delay	Only Once
	instance:detect_stuff_trigger;OnStartTouch	zap_sound 	playsound 	  	0.00 	No
	instance:detect_stuff_trigger;OnStartTouch	!activator 	kill 	  	2.00 	No
: 
You can add as many outputs to the proxy as you would like (presumably), wiith as many entities as you'd like. This essentially turns the func_instance into a wildcard entity that borrows outputs from pre-configured entities, and lets the mapper choose how to use them.
=== Handling Inputs ===
The instance proxy can predefine important inputs when desired. This is useful for hinting to mappers what they can or should do with the instance, or by segmenting what can or can not be touched from outside the instance in order to avoid logical or behavioral errors.
To add a predefined input to the instance, go to the proxy's outputs tab and use the OnProxyRelay output to target one of the inputs of an entity inside your instance. It will look like this:
:
	My Output > 	Target Entity 	Target Input	Parameter	Delay	Only Once
	OnProxyRelay	detect_stuff_trigger	disable 	  	0.00 	No
: 
Once the proxy has the input specified, you'll be able to call it from enties outside the instance by targeting the func_instance...
:
	My Output > 	Target Entity 	Target Input	Parameter	Delay	Only Once
	elevator_shaft_instance	instance:detect_stuff_trigger;Disable	 	  	0.00 	No
: 
The first thing you'll notice is that there's no need to fill in the target input field. You may also notice that Hammer didn't show this connection as working, but don't worry about it, for some reason Hammer still doesn't checklist these connections (it doesn't always use helpers, either).
You should refrain from predefining large numbers of inputs in the instance, and instead only do so for the standard functions of the instance. In other cases, you can still send messages to the instance entities directly by using their real name (e.g. elevator_shaft-detect_stuff_test). This is the method you would use for things that wouldn't be duplicated very often, or could be used to manipulate behavior in a more direct or abnormal way. In some cases you may need to use this method for calls that are too numerous or too basic to justify configuring the proxy. e.g. sections of a map being duplicated or rotated.
==See also==
*func_instance
*func_instance_parms - Entity to control parameters within instances.
*func_instance_origin - Helper entity that defines the center point of an instance.
io proxy