// Use this for initialization public static Dictionary <string, AssessementAction> getActionsFromNode(JSONNode node) { if (node != null) { Dictionary <string, AssessementAction> AsAction = new Dictionary <string, AssessementAction> (); foreach (JSONNode x in node["Actions"].AsArray) { AssessementAction aa = new AssessementAction(); aa.label = x ["Label"]; aa.address = x ["Address"]; aa.indicators = Indicator.getIndicatorsFromNode(x); aa.bloquant = x ["Bloquant"]; AsAction.Add(aa.address, aa); } return(AsAction); } else { return(null); } }
//debut du parsing du json node public void getActions() { //si le fichier est chargé if (fileLoaded) { //si les action ne sont pas chargées if (!actionsLoaded) { actions = AssessementAction.getActionsFromNode(node); actionsLoaded = true; } } else { loadJSON(); if (!actionsLoaded) { actions = AssessementAction.getActionsFromNode(node); actionsLoaded = true; } } }
//call Assessement utilisé par les colliders pour calculer les nouveau valeurs des indicateur à partir du base des actions //string address : id unique d'une action //string cause : cause de changement du valeur de l'indicateur public void callAssessement(string address, string cause) { //si les action ne sont pas chargées on les charge au debut if (!actionsLoaded) { getActions(); } AssessementAction aa = new AssessementAction(); //recupération de l'action à partir du dictionnaire avec le param Address passer par le collider actions.TryGetValue(address, out aa); //Debug.Log ("getting action "+address+" label : "+aa.label); //parcour des indicateur pour trouver la situation -> consequence convenant foreach (Indicator idctr in aa.indicators) { //matches sere à identifier si les valeur en cours sont présent à une des situation d'une action bool matches = true; //Debug.Log ("checking facts"); //parcours des fact (situation initial) foreach (Fact fct in idctr.facts) { //Debug.Log ("Fact Value : "+fct.value+" ::::: Current Value : "+Indicators.GetComponent<IndicateursMainHCL> ().getIndicatorValue (fct.label)); /* format d'un fact "Label":"un label" * "Value":"100" c'est une egalité : le valeur en cours doit etre egale au fact pour satisfaire la situation * ">100" le valeur en cours doit etre Supérieur au fact * "<100" le valeur en cours doit etre Inférieur au fact * si on trouve pas un "Match" dans les situation "Fact" avec les valeur en cours, on passe au situation suivant "Fact", * */ if (fct.action == Fact.actions.Above) { if (fct.value < Indicators.GetComponent <IndicateursMainHCL> ().getIndicatorValue(fct.label)) { matches = false; //Debug.Log ("******************** Indicators : No Matche Case Found in DataBase"); break; } } if (fct.action == Fact.actions.Below) { if (fct.value > Indicators.GetComponent <IndicateursMainHCL> ().getIndicatorValue(fct.label)) { matches = false; //Debug.Log ("******************** Indicators : No Matche Case Found in DataBase"); break; } } if (fct.action == Fact.actions.Equal) { if (fct.value != Indicators.GetComponent <IndicateursMainHCL> ().getIndicatorValue(fct.label)) { matches = false; //Debug.Log ("******************** Indicators : No Matche Case Found in DataBase"); break; } } } /* si "Maches", alors on a trouvez un situation egal aux valeur en cours * on applique les consequence * Value:100 : remplacé * Value:+100 Incrementation d'indicateur * Value:-100 Decrementation d'indicateur * * * */ if (matches) { //Debug.Log ("checking consequences"); foreach (Consequence csqce in idctr.consequences) { if (csqce.action == Consequence.actions.Replace) { float value = csqce.value; Indicators.GetComponent <IndicateursMainHCL> ().setIndicator(csqce.label, value, cause); //Debug.Log ("Setting "+csqce.label+" To "+value+" (Was : "+Indicators.GetComponent<IndicateursMainHCL> ().getIndicatorValue (csqce.label)+")"); } if (csqce.action == Consequence.actions.Increment) { float value = Indicators.GetComponent <IndicateursMainHCL> ().getIndicatorValue(csqce.label) + csqce.value; if (value > 1) { value = 1; } Indicators.GetComponent <IndicateursMainHCL> ().setIndicator(csqce.label, value, cause); //Debug.Log ("Setting "+csqce.label+" To "+value+" (Was : "+Indicators.GetComponent<IndicateursMainHCL> ().getIndicatorValue (csqce.label)+")"); } if (csqce.action == Consequence.actions.Decrement) { float value = Indicators.GetComponent <IndicateursMainHCL> ().getIndicatorValue(csqce.label) - csqce.value; if (value < 0) { value = 0; } Indicators.GetComponent <IndicateursMainHCL> ().setIndicator(csqce.label, value, cause); //Debug.Log ("Setting "+csqce.label+" To "+value+" (Was : "+Indicators.GetComponent<IndicateursMainHCL> ().getIndicatorValue (csqce.label)+")"); } } break; } } }