import bge # Bibliothèque Blender Game Engine (UPBGE) import aud # Sounds ############################################################################### # rp_doc.py # @title: Documentation du Robot Ropy # @project: Ropy (Blender-EduTech) # @lang: fr # @authors: Philippe Roy # @copyright: Copyright (C) 2020-2022 Philippe Roy # @license: GNU GPL # # Ropy est destiné à la découverte de la programmation procédurale et du language Python. # A travers plusieurs challenges, donc de manière graduée, les élèves vont apprendre à manipuler les structures algorithmiques de base et à les coder en Python. # # ############################################################################### scene = bge.logic.getCurrentScene() # Colors # color_doc_chap = (0.153, 0.116, 0.105, 1) # WoodDark # color_doc_fct = (0.326, 0.101, 0.0592, 1) # BrownDark # color_doc_fct = (0.577, 0.233, 0.115, 1) # Brown # color_doc_hl = (0.799, 0.617, 0.021, 1) # Yellow # color_doc_hl = (0.13, 0.254, 0.407, 1) # BlueDark color_doc_chap = (0, 1, 0.857,1) # Turquoise color_doc_fct = (0, 1, 0.857,1) # Turquoise color_doc_hl = (0.799, 0.617, 0.021, 1) # Jaune color_doc_activate = (0.936, 0.033, 1, 1) # Rose # color_doc_activate = (1, 0.099, 0.981, 1) # Rose # scene.objects['Doc_icon_'+name_chap+'-text'].color = color_doc_activate # Sounds # audiodev = aud.Device() # snd_book_open = aud.Sound('asset/sounds/book_open.ogg') # sndbuff_book_open = aud.Sound.cache(snd_book_open) # snd_book_close = aud.Sound('asset/sounds/book_close.ogg') # sndbuff_book_close = aud.Sound.cache(snd_book_close) # snd_book_flip = aud.Sound('asset/sounds/book_flip.ogg') # sndbuff_book_flip = aud.Sound.cache(snd_book_flip) # UPBGE constants JUST_ACTIVATED = bge.logic.KX_INPUT_JUST_ACTIVATED JUST_RELEASED = bge.logic.KX_INPUT_JUST_RELEASED ACTIVATE = bge.logic.KX_INPUT_ACTIVE # JUST_DEACTIVATED = bge.logic.KX_SENSOR_JUST_DEACTIVATED # Cards description card_description ={} ############################################################################### # Missions ############################################################################### missions_card=["mission_1-card", "mission_2-card", "mission_3-card", "mission_4-card", "mission_5-card", "mission_6-card", "mission_7-card", "mission_8-card"] # Mission 1 rp_mission_1_title="Mission 1\n Premiers pas" rp_mission_1_text="\n \n aa" card_description.update({"mission_1-card" : [rp_mission_1_title, rp_mission_1_text]}) # ct_build_text = ct_build_text +" \v- category (string) : \n \v \v- \"Archer tower\" (default value)\n \v \v- \"Mage tower\"\n" # ct_build_text = ct_build_text +" \v- name (string)\n \v- color (RGB tuple, default=purple)\n" # ct_build_text = ct_build_text +" \v- style (string) : \n \v \v- \"square\" (default value) or \"round\"\n \v \v- version : A (default value), B or C\n \v \v- exemple : 'round-B' \n" # ct_build_text = ct_build_text +" \v- Return boolean flag (builded -> True)\n\n" # ct_build_text = ct_build_text +"Predefined colors : blue, green, magenta,\n orange, purple, red, turquoise, yellow.\n\n" # ct_build_text = ct_build_text +"Exemple : ct_build (1, 1, \"Archer tower\", \n \"Tower #1\", yellow, \"round-A\")\n" # Mission 2 rp_mission_2_title="Mission 2\n FIXME" rp_mission_2_text="\n \n FIXME" card_description.update({"mission_2-card" : [rp_mission_2_title, rp_mission_2_text]}) # Mission 3 rp_mission_3_title="Mission 3\n FIXME" rp_mission_3_text="\n \n FIXME" card_description.update({"mission_3-card" : [rp_mission_3_title, rp_mission_3_text]}) # Mission 4 rp_mission_4_title="Mission 4\n FIXME" rp_mission_4_text="\n \n FIXME" card_description.update({"mission_4-card" : [rp_mission_4_title, rp_mission_4_text]}) # Mission 5 rp_mission_5_title="Mission 5\n FIXME" rp_mission_5_text="\n \n FIXME" card_description.update({"mission_5-card" : [rp_mission_5_title, rp_mission_5_text]}) # Mission 6 rp_mission_6_title="Mission 6\n FIXME" rp_mission_6_text="\n \n FIXME" card_description.update({"mission_6-card" : [rp_mission_6_title, rp_mission_6_text]}) # Mission 7 rp_mission_7_title="Mission 7\n FIXME" rp_mission_7_text="\n \n FIXME" card_description.update({"mission_7-card" : [rp_mission_7_title, rp_mission_7_text]}) # Mission 8 rp_mission_8_title="Mission 8\n FIXME" rp_mission_8_text="\n \n FIXME" card_description.update({"mission_8-card" : [rp_mission_8_title, rp_mission_8_text]}) ############################################################################### # Rover ############################################################################### rover_card=["avancer-card", "tourner-card", "baliser-card", "prendre-card", "detecter-card", "radar-card"] # Avancer rp_avancer_title="Avancer" rp_avancer_text="FIXME" card_description.update({"avancer-card" : [rp_avancer_title, rp_avancer_text]}) # Tourner rp_tourner_title="Tourner" rp_tourner_text="FIXME" card_description.update({"tourner-card" : [rp_tourner_title, rp_tourner_text]}) # Baliser rp_baliser_title="Baliser" rp_baliser_text="FIXME" card_description.update({"baliser-card" : [rp_baliser_title, rp_baliser_text]}) # Prendre rp_prendre_title="Prendre" rp_prendre_text="FIXME" card_description.update({"prendre-card" : [rp_prendre_title, rp_prendre_text]}) # Détecter rp_detecter_title="Détecter" rp_detecter_text="FIXME" card_description.update({"detecter-card" : [rp_detecter_title, rp_detecter_text]}) # Radar rp_radar_title="Radar" rp_radar_text="FIXME" card_description.update({"radar-card" : [rp_radar_title, rp_radar_text]}) ############################################################################### # Python ############################################################################### python_card=["fonction-card", "alternative-card", "boucle-card", "liste-card", "dict-card", "poo-card"] # Fonction rp_fonction_title="Fonction" rp_fonction_text="FIXME" card_description.update({"fonction-card" : [rp_fonction_title, rp_fonction_text]}) # Alternative rp_alternative_title="Alternative" rp_alternative_text="FIXME" card_description.update({"alternative-card" : [rp_alternative_title, rp_alternative_text]}) # Boucle rp_boucle_title="Boucle" rp_boucle_text="FIXME" card_description.update({"boucle-card" : [rp_boucle_title, rp_boucle_text]}) # Liste rp_liste_title="Liste" rp_liste_text="FIXME" card_description.update({"liste-card" : [rp_liste_title, rp_liste_text]}) # Dictionnaire rp_dict_title="Dictionnaire" rp_dict_text="FIXME" card_description.update({"dict-card" : [rp_dict_title, rp_dict_text]}) # Objet (POO) rp_poo_title="Programmation\norientée objet (POO)" rp_poo_text="\nFIXME" card_description.update({"poo-card" : [rp_poo_title, rp_poo_text]}) ############################################################################### # Interface ############################################################################### ## # Initialisation de la tablette ## def init(): # Mettre les couleurs par défaut sur les icones (chapitres et cartes) chap=("general", "missions", "rover", "python") for page in chap: scene.objects["Doc-"+page].color = color_doc_chap scene.objects["Doc-"+page+"-text"].color = color_doc_chap for i in range(len(missions_card)): scene.objects[missions_card[i]].color = color_doc_fct scene.objects[missions_card[i]+"-icon"].color = color_doc_fct scene.objects[missions_card[i]+"-text"].color = color_doc_fct for i in range(len(rover_card)): scene.objects[rover_card[i]].color = color_doc_fct scene.objects[rover_card[i]+"-icon"].color = color_doc_fct scene.objects[rover_card[i]+"-text"].color = color_doc_fct for i in range(len(python_card)): scene.objects[python_card[i]].color = color_doc_fct scene.objects[python_card[i]+"-icon"].color = color_doc_fct scene.objects[python_card[i]+"-text"].color = color_doc_fct # Mémorisation de la position des pages chap=("general", "missions", "rover", "python") for page in chap: scene.objects["Doc_chap-"+page]['init_lx']=scene.objects["Doc_chap-"+page].worldPosition.x scene.objects["Doc_chap-"+page]['init_ly']=scene.objects["Doc_chap-"+page].worldPosition.y scene.objects["Doc_chap-"+page]['init_lz']=scene.objects["Doc_chap-"+page].worldPosition.z # Placer la tablette # scene.objects['Doc'].worldPosition = [0, -21, 15.75] scene.objects['Doc'].worldPosition = [0, -21, 15.8] scene.objects['Doc_close'].color = color_doc_chap scene.objects['Doc'].setVisible(True,True) scene.objects['Doc_title'].setVisible(False,True) scene.objects['Doc_text'].setVisible(False,True) # sound_play (sndbuff_book_open) # Placer la page Généralité (page par défaut) scene.objects['Doc_chap-general'].worldPosition = scene.objects['Doc'].worldPosition scene.objects['Doc_chap-general'].setVisible(True,True) scene.objects['Doc']['page_chap'] = "general" scene.objects['Doc']['page_fct'] = "" scene.objects['Doc-general'].color = color_doc_activate scene.objects['Doc-general-text'].color = color_doc_activate ## # Fermeture du livre ## def close(): # sound_play (sndbuff_book_close) chap=("general", "missions", "rover", "python") for page in chap: scene.objects["Doc_chap-"+page].setVisible(False,True) scene.objects["Doc_chap-"+page].worldPosition.x = scene.objects["Doc_chap-"+page]['init_lx'] scene.objects["Doc_chap-"+page].worldPosition.y = scene.objects["Doc_chap-"+page]['init_ly'] scene.objects["Doc_chap-"+page].worldPosition.z = scene.objects["Doc_chap-"+page]['init_lz'] scene.objects['Doc'].setVisible(False,True) scene.objects['Doc'].worldPosition = [35, -2, 2] ## # Highlight du livre ## def hl (cont): # Activation if cont.sensors['MO'].status == JUST_ACTIVATED : obj = cont.owner name=obj.name[:-7] name_text=name+"-text" name_icon=name+"-icon" # Close if name == "Doc_close" : scene.objects[name].color = color_doc_hl else: if "Doc-" in name : # Chapitre if name[4:] == scene.objects['Doc']['page_chap']: scene.objects[name].color = color_doc_activate scene.objects[name_text].color = color_doc_activate else: scene.objects[name].color = color_doc_hl scene.objects[name_text].color = color_doc_hl else: # Carte if name == scene.objects['Doc']['page_fct'] : scene.objects[name].color = color_doc_activate scene.objects[name_text].color = color_doc_activate scene.objects[name_icon].color = color_doc_activate else: scene.objects[name].color = color_doc_hl scene.objects[name_text].color = color_doc_hl scene.objects[name_icon].color = color_doc_hl # Désactivation if cont.sensors['MO'].status == JUST_RELEASED : obj = cont.owner name=obj.name[:-7] name_text=obj.name[:-7]+"-text" name_icon=obj.name[:-7]+"-icon" # Close if name == "Doc_close" : scene.objects[name].color = color_doc_fct else: if "Doc-" in name : # Chapitre if name[4:] == scene.objects['Doc']['page_chap']: scene.objects[name].color = color_doc_activate scene.objects[name_text].color = color_doc_activate else: scene.objects[name].color = color_doc_fct scene.objects[name_text].color = color_doc_fct else: # Carte if name == scene.objects['Doc']['page_fct'] : scene.objects[name].color = color_doc_activate scene.objects[name_text].color = color_doc_activate scene.objects[name_icon].color = color_doc_activate else: scene.objects[name].color = color_doc_fct scene.objects[name_text].color = color_doc_fct scene.objects[name_icon].color = color_doc_fct ## # Afficher le chapitre ## def chapter(cont): if cont.sensors['Click'].status == JUST_ACTIVATED and cont.sensors['MO'].positive and cont.sensors['Click'].positive: # sound_play (sndbuff_book_flip) obj = cont.owner # Enlever l'ancien chapitre scene.objects['Doc-'+scene.objects['Doc']['page_chap']].color = color_doc_chap scene.objects['Doc-'+scene.objects['Doc']['page_chap']+'-text'].color = color_doc_chap scene.objects["Doc_chap-"+scene.objects['Doc']['page_chap']].worldPosition.x = scene.objects["Doc_chap-"+scene.objects['Doc']['page_chap']]['init_lx'] scene.objects["Doc_chap-"+scene.objects['Doc']['page_chap']].worldPosition.y = scene.objects["Doc_chap-"+scene.objects['Doc']['page_chap']]['init_ly'] scene.objects["Doc_chap-"+scene.objects['Doc']['page_chap']].worldPosition.z = scene.objects["Doc_chap-"+scene.objects['Doc']['page_chap']]['init_lz'] # Placer le nouveau chapitre name_chap= obj.name[4:-7] scene.objects['Doc-'+name_chap].color = color_doc_activate scene.objects['Doc-'+name_chap+'-text'].color = color_doc_activate scene.objects['Doc']['page_chap'] = name_chap scene.objects['Doc_chap-'+name_chap].worldPosition = scene.objects['Doc'].worldPosition scene.objects['Doc_chap-'+name_chap].setVisible(True,True) scene.objects['Doc_title'].setVisible(False,True) scene.objects['Doc_text'].setVisible(False,True) ## # Afficher les details de la fonction à partir d'une carte ## def card (cont): if cont.sensors['Click'].status == JUST_ACTIVATED and cont.sensors['MO'].positive : # sound_play (sndbuff_book_flip) obj = cont.owner name_fct= obj.name[:-7] # Enlever l'ancienne carte if scene.objects['Doc']['page_fct'] != "": scene.objects[scene.objects['Doc']['page_fct']].color = color_doc_fct scene.objects[scene.objects['Doc']['page_fct']+'-text'].color = color_doc_fct scene.objects[scene.objects['Doc']['page_fct']+'-icon'].color = color_doc_fct # Afficher le texte de la carte scene.objects['Doc']['page_fct']= name_fct scene.objects[name_fct].color = color_doc_activate scene.objects[name_fct+'-icon'].color = color_doc_activate scene.objects[name_fct+'-text'].color = color_doc_activate scene.objects['Doc_title']['Text'] = card_description[name_fct][0] scene.objects['Doc_text']['Text'] = card_description[name_fct][1] scene.objects['Doc_title'].setVisible(True, False) scene.objects['Doc_text'].setVisible(True, False) ## # Sounds ## def sound_play (sound): pass # FIXME # if scene.objects['Commands']['sound']: # audiodev.play(sound)