- Home /
Best practice for assigning class reference at runtime?
I keep trying different methods, but they all have their own problems, so I'd like to know what you guys are doing to assign new class references at runtime?
Let's say I have a gameObject with a BoostTank class attached to it, and that class relies on another class - InputListener (which gets created at runtime) - to know when to start depleting the tank, what's the best way to assign a reference to InputListener in BoostTank?
Here's what I came up with:
// I have a main "Managers" class which keeps track of all other managers, I'll only use 1 to keep this short
public class Managers : Monobehavior
{
private static InputListener _inputListener;
public static InputListener InputListener
{
get{ return _inputListener; }
set{ _inputListener = value; }
}
}
// Then the InputListener class (separate script)
public class InputListener : Monobehavior
{
// bunch of variables and code...
void OnEnable()
{
// Assign reference by using Managers...
Managers.InputListener = this;
// Or assign reference with events
Messenger<InputListener>.Broadcast( "InputListenerLoaded", this );
}
}
// Finally in my BoostTank class (separate script)
public class BoostTank : Monobehavior
{
private InputListener _inputs;
void OnEnable()
{
// When using the event system
Messenger<InputListener>.AddListener( "InputListenerLoaded", AssignInputs );
}
void OnDisable()
{
// When using the event system
Messenger<InputListener>.RemoveListener( "InputListenerLoaded", AssignInputs );
}
// When using the event system
void AssignInputs( InputListener iListener )
{
_inputs = iListener;
}
void Start()
{
// When NOT using the event system
_inputs = Managers.InputListener;
}
void Update()
{
// When NOT using the event system
_inputs = ( _inputs != null ) ? inputs : Managers.InputListener;
// Do stuff with _inputs...
if( _inputs.jumpON ) Jump();
if( _inputs.runON ) Run();
// ect...
}
}
In both methods above, I have InputListener "register" itself when created, but I'm not sure I'm using the right approach...
If you guys have any tips on doing this better, my ears are wide open! Thanks for your time in advance :)
Stephane
Comment