26-03-2011, 12:44 PM
ah ben je dois être à plus de 1000 lignes (en comptant du commentaire) mais je pense être factorisé, certainement trop (probablement mal) car j'arrive à une usine à gaz mais bon pour donner un exemple :
la classe qui gère les compétences :
grosso modo, j'ai une classe classAction qui porte l'algorithme global :
contrôle des participants, calcul de la réussite, réalisation et consommation (énergie, etc..)
cette classe possède 1 à plusieurs "modules" (genre compétence) fonction de l'action. Pour les étapes contrôle et consommation précédemment citées, elle boucle sur les modules et consolide les résultats
chaque module hérite de modRootAction qui est commun à tous les modules et porte 60% à 80% du code "efficace" du module (genre pour compétence, la seule chose non factorisée est la récupération de la compétence, et l'impact de l'attitude du personnage sur la compétence : un personnage "pressé" à un malus par rapport à un personnage "soigneux")
tout allait très bien jusqu'à ce que je traite les modules environnement et outil. En effet contrairement à une compétence, le contrôle sur un outil se fait à plusieurs niveaux :
est ce que l'outil est présent (facile)
est ce que l'outil est utilisable, a t il assez d'énergie/carburant (facile)
est ce que le personnage sait utiliser l'outil, et avec quelle difficulté (plus difficile, ça veut dire, vu que j'ai factorisé ^^, faire appel à un autre module)
je m'en sors pas trop mal mais ça nécessite un peu de charge
à noter, ma nomenclature à moi : les mots clés en anglais (get,by, mod, root...) , les mots "métier" en français (je voulais tout faire en anglais au début, c'est plus court à écrire, mais mon niveau n'est pas suffisant pour comprendre rien qu'à la lecture ce que font mes méthodes au bout de deux mois ^^
la classe qui gère les compétences :
include_once('action/ModRootAction.php');
include_once(REP_PARAMS.'ParamAction.php');
/* modCompetence permet de
**
** - connaitre les compétences nécessaires
** - modifier les compétences en fonction de l'attitude
**
*/
class modActionCompetence extends modRootAction
{
public function getCompetences()
{
return $this->_contraintes;
}
public function ControleCondition($acteur, $conso, $idComp, $valeur)
{
/**
* Calcule les pénalités (ou bonus) d'une condition.
* @author Lionel SORBIER
* @param acteur = un participant à l'action
* @param conso = le type de consommation
* @param idComp = l'id de la competence
* @param valeur = la valeur de référence
* @since 1.0
* @return le bonus/malus calculé
*/
if ($conso !=PRESENCEINDIVIDUELLE)
return array('malus' => 0,'raisons' => 0);
$modif = 1.0;
/* impact des attitudes */
$att = $acteur->getModule('Attitude');
if (!($atts = $att->getAttitudes()))
$atts = array();
foreach($atts as $attitude)
$modif *= paramAction::$_compModif[$attitude];
$comps = $acteur->getModule('Competence')->getValeurs();
return array( 'malus' => paramAction::$_compBase + $valeur - $comps[$idComp]*$modif, 'raisons' => 0);
}
}
sauf que j'ai pas encore modifier le retour via un objet ^^grosso modo, j'ai une classe classAction qui porte l'algorithme global :
contrôle des participants, calcul de la réussite, réalisation et consommation (énergie, etc..)
cette classe possède 1 à plusieurs "modules" (genre compétence) fonction de l'action. Pour les étapes contrôle et consommation précédemment citées, elle boucle sur les modules et consolide les résultats
chaque module hérite de modRootAction qui est commun à tous les modules et porte 60% à 80% du code "efficace" du module (genre pour compétence, la seule chose non factorisée est la récupération de la compétence, et l'impact de l'attitude du personnage sur la compétence : un personnage "pressé" à un malus par rapport à un personnage "soigneux")
tout allait très bien jusqu'à ce que je traite les modules environnement et outil. En effet contrairement à une compétence, le contrôle sur un outil se fait à plusieurs niveaux :
est ce que l'outil est présent (facile)
est ce que l'outil est utilisable, a t il assez d'énergie/carburant (facile)
est ce que le personnage sait utiliser l'outil, et avec quelle difficulté (plus difficile, ça veut dire, vu que j'ai factorisé ^^, faire appel à un autre module)
je m'en sors pas trop mal mais ça nécessite un peu de charge
à noter, ma nomenclature à moi : les mots clés en anglais (get,by, mod, root...) , les mots "métier" en français (je voulais tout faire en anglais au début, c'est plus court à écrire, mais mon niveau n'est pas suffisant pour comprendre rien qu'à la lecture ce que font mes méthodes au bout de deux mois ^^