La première classe que nous allons implémenter est la classe Initialization, elle a pour responsabilité de contenir toutes les références d'objets de cas d'utilisation (soit déposées et déplacées à travers l'éditeur Unity, soit obtenues par des références internes) pour les blocs Controller et Presenter.
Tout le travail est fait dans la fonction Awake de MonoBehaviour.
Ici, nous devons lier ensemble les blocs fonctionnels des cas d'utilisation et fournir un certain schéma de validation pour garantir que chaque référence est correctement configurée.
On définit la classe ObjectivesInitialization suivante:
// MARK: Controller Initialization
// MARK: MonoBehaviour
void Awake() {
this.init();
}
#if UNITY_EDITOR || UNITY_REMOTE
if (this.controller == null)
Debug.LogError("ObjectivesController not set properly !"); if (this.presenter == null)
Debug.LogError("ObjectivesPresenter not set properly !");
if (this.objectivesView == null)
Debug.LogError("objectivesView not set properly !");
#endif
this.initController();
}
int currentIndex = index;
objectivesView[currentIndex].claimButton.onClick.AddListener(delegate { controller.claimReward(currentIndex); } );
}
}
using UnityEngine;
using UnityEngine.UI;
public class ObjectivesInitialization : MonoBehaviour {
[SerializeField]
private ObjectivesController controller = null;
// MARK: Presenter Initialization
[SerializeField]
private ObjectivesPresenter presenter = null;
[SerializeField]
public Text gameObjectivesTitle;
[SerializeField]
public Objectives.ObjectivesViewModel[] objectivesView;
[SerializeField]
public Sprite starOn;
[SerializeField]
public Sprite starOff;
// MARK: Initialization
public void init () {
private void initController() {
//map claim buttons actions to corresponding use case
for (int index = 0; index < objectivesView.Length; index++)
{
}
Nous avons également choisi d'ajouter manuellement la fonction cible des boutons de réclamation pour réduire la durée du processus d'intégration du module. L'utilisateur n'a qu'à fournir les références de la vue des objectifs via l'inspecteur, l'événement onClick des boutons Unity UI sera associé aux délégués correspondants via le code de configuration pour permettre plus de flexibilité.
Remarque : Étant donné que les titres et les étoiles des objectifs de jeu peuvent être considérés comme facultatifs selon les besoins de votre projet,
nous ne les ajoutons pas à la liste de validation (nous aurions également pu les ajouter en tant que journaux d'avertissement).
Remarque : Si vous implémentez la méthode Awake() de MonoBehaviour à la fois dans les classes d'Initialisation et de Contrôleur, assurez-vous que l'appel de réveil de l'Initialisation est effectué avant celui du Contrôleur afin que toutes les variables soient correctement initialisées. Vous pouvez le faire en lui donnant une priorité d'exécution plus élevée dans Edit\Project Settings\Script Execution Order.