Last active
November 24, 2021 14:26
-
-
Save MattUV/68e93cebf17834b22ac0dbe9e5795373 to your computer and use it in GitHub Desktop.
get_controleurs_disponibles
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
enum {J1_M, J1_A, J2_M, J2_A} | |
enum {MATIN, APREM} | |
enum {PVL, SOL, ALOC, LOC, ADEP, DEP, ITM, INI, COO, SQR, CS, CDT} | |
enum {H6, H7, H8, H9, H10, H11, H12, H13, H14, H15, H16, H17, H18} | |
const VIGIE = [PVL, SOL, ALOC, LOC] | |
const IFR = [ADEP, DEP, ITM, INI, COO, SQR, CS] | |
func get_case_as_dict() -> Dictionary: | |
var dict := { | |
"vacation" : int, | |
"heure" : int, | |
"position" : int, | |
"is_armed" : bool, | |
"is_instruction" : bool, | |
"controleur" : String, | |
"stagiaire" : String | |
} | |
return dict | |
func get_controleurs_disponibles(case : Node) -> Dictionary: | |
# Retourne les contrôleurs disponibles pour une case, | |
# en précisant si c'est pour être stagiaire ou tenir la position | |
# Un contrôleur libéré (case non armée ou marge) est considéré comme disponible | |
var disponibles := {controleurs = [], stagiaires = []} | |
var heure = case.heure | |
var vacation= case.vacation | |
var position = case.position | |
# Liste les controleurs disponibles à cette heure selon qu'ils soient de 6h/7h/10h/11h | |
var disponibles_a_cette_heure := [] | |
match vacation: | |
J1_M: | |
if heure == H6: | |
disponibles_a_cette_heure = db.controleurs_6h.duplicate() | |
elif heure == H10: | |
disponibles_a_cette_heure = db.controleurs_7h.duplicate() | |
else: | |
disponibles_a_cette_heure = db.controleurs_6h.duplicate() + db.controleurs_7h.duplicate() | |
J1_A: | |
if heure == H15: | |
disponibles_a_cette_heure = db.controleurs_7h.duplicate() | |
else: | |
disponibles_a_cette_heure = db.controleurs_6h.duplicate() + db.controleurs_7h.duplicate() | |
J2_M: | |
if heure == H10: | |
disponibles_a_cette_heure = db.controleurs_10h.duplicate() | |
else: | |
disponibles_a_cette_heure = db.controleurs_10h.duplicate() + db.controleurs_11h.duplicate() | |
J2_A: | |
if heure == H15: | |
disponibles_a_cette_heure = db.controleurs_11h.duplicate() | |
else: | |
disponibles_a_cette_heure = db.controleurs_10h.duplicate() + db.controleurs_11h.duplicate() | |
disponibles_a_cette_heure = db.sort_controleurs(disponibles_a_cette_heure, "qualif_max", "trigramme" , true) | |
# Si un trigramme est déjà dans la ligne, sur une case armée, il n'est plus disponible | |
var ligne : Array = Grille.get_ligne(heure) | |
for ca in ligne: | |
if ca.is_armed and ca.controleur != "": | |
disponibles_a_cette_heure.erase(ca.controleur) | |
if ca.is_armed and ca.stagiaire != "": | |
disponibles_a_cette_heure.erase(ca.stagiaire) | |
# Selon les qualifs et possibilités d'être instructeur : sépare en stagiaire/controleur | |
for trigramme in disponibles_a_cette_heure: | |
var controleur_dict = db.get_controleur(trigramme) | |
if case.position <= controleur_dict.qualif_max: | |
if !case.is_instruction or case.position <= controleur_dict.instructeur_max: | |
disponibles.controleurs.append(trigramme) | |
if case.position in controleur_dict.en_instruction: | |
disponibles.stagiaires.append(trigramme) | |
return disponibles | |
func ajouter_controleur(trigramme : String, team : int, demi_journee : int, qualif_max : int, instructeur_max : int, en_instruction := []) -> void: | |
var controleur_dict := { | |
trigramme = trigramme, | |
team = team, | |
demi_journee = demi_journee, | |
qualif_max = qualif_max, | |
instructeur_max = instructeur_max, | |
en_instruction = en_instruction | |
} | |
controleur_list.append(controleur_dict) |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
create grid : https://gist.github.com/MattUV/b482777ebaa6a8dc545eaffc4e247972