Skip to content

Instantly share code, notes, and snippets.

@MattUV
Last active November 24, 2021 14:26
Show Gist options
  • Save MattUV/68e93cebf17834b22ac0dbe9e5795373 to your computer and use it in GitHub Desktop.
Save MattUV/68e93cebf17834b22ac0dbe9e5795373 to your computer and use it in GitHub Desktop.
get_controleurs_disponibles
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)
@MattUV
Copy link
Author

MattUV commented Nov 24, 2021

@MattUV
Copy link
Author

MattUV commented Nov 24, 2021

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment