2022-08-19 15:43:20 +02:00
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 <philippe.roy@ac-grenoble.fr>
# @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
2022-08-21 02:22:56 +02:00
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
2022-08-19 15:43:20 +02:00
# 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
2022-08-20 22:44:17 +02:00
# Cards description
card_description = { }
2022-08-19 15:43:20 +02:00
###############################################################################
2022-08-20 22:44:17 +02:00
# Missions
2022-08-19 15:43:20 +02:00
###############################################################################
2022-08-20 22:44:17 +02:00
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 " ]
2022-08-19 15:43:20 +02:00
2022-08-21 02:22:56 +02:00
# 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 ] } )
2022-08-20 22:44:17 +02:00
# 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"
2022-08-21 02:22:56 +02:00
# 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 ] } )
2022-08-19 15:43:20 +02:00
###############################################################################
2022-08-20 22:44:17 +02:00
# Rover
2022-08-19 15:43:20 +02:00
###############################################################################
2022-08-21 02:22:56 +02:00
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 ] } )
2022-08-19 15:43:20 +02:00
###############################################################################
2022-08-20 22:44:17 +02:00
# Python
2022-08-19 15:43:20 +02:00
###############################################################################
2022-08-21 02:22:56 +02:00
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 \n orientée objet (POO) "
rp_poo_text = " \n FIXME "
card_description . update ( { " poo-card " : [ rp_poo_title , rp_poo_text ] } )
2022-08-19 15:43:20 +02:00
###############################################################################
# Interface
###############################################################################
##
# Initialisation de la tablette
##
def init ( ) :
2022-08-21 02:22:56 +02:00
# 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
2022-08-19 15:43:20 +02:00
# 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)
2022-08-21 02:22:56 +02:00
# Placer la page Généralité (page par défaut)
2022-08-19 15:43:20 +02:00
scene . objects [ ' Doc_chap-general ' ] . worldPosition = scene . objects [ ' Doc ' ] . worldPosition
scene . objects [ ' Doc_chap-general ' ] . setVisible ( True , True )
scene . objects [ ' Doc ' ] [ ' page_chap ' ] = " general "
2022-08-20 22:44:17 +02:00
scene . objects [ ' Doc ' ] [ ' page_fct ' ] = " "
2022-08-21 02:22:56 +02:00
scene . objects [ ' Doc-general ' ] . color = color_doc_activate
scene . objects [ ' Doc-general-text ' ] . color = color_doc_activate
2022-08-19 15:43:20 +02:00
2022-08-21 02:22:56 +02:00
2022-08-19 15:43:20 +02:00
##
# Fermeture du livre
##
def close ( ) :
# sound_play (sndbuff_book_close)
2022-08-21 02:22:56 +02:00
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 ' ]
2022-08-19 15:43:20 +02:00
scene . objects [ ' Doc ' ] . setVisible ( False , True )
scene . objects [ ' Doc ' ] . worldPosition = [ 35 , - 2 , 2 ]
##
# Highlight du livre
##
def hl ( cont ) :
2022-08-21 02:22:56 +02:00
# Activation
2022-08-19 15:43:20 +02:00
if cont . sensors [ ' MO ' ] . status == JUST_ACTIVATED :
obj = cont . owner
name = obj . name [ : - 7 ]
2022-08-21 02:22:56 +02:00
name_text = name + " -text "
name_icon = name + " -icon "
# Close
if name == " Doc_close " :
2022-08-19 15:43:20 +02:00
scene . objects [ name ] . color = color_doc_hl
2022-08-21 02:22:56 +02:00
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
2022-08-19 15:43:20 +02:00
if cont . sensors [ ' MO ' ] . status == JUST_RELEASED :
obj = cont . owner
name = obj . name [ : - 7 ]
name_text = obj . name [ : - 7 ] + " -text "
2022-08-20 22:44:17 +02:00
name_icon = obj . name [ : - 7 ] + " -icon "
2022-08-21 02:22:56 +02:00
# Close
if name == " Doc_close " :
2022-08-19 15:43:20 +02:00
scene . objects [ name ] . color = color_doc_fct
2022-08-21 02:22:56 +02:00
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
2022-08-19 15:43:20 +02:00
##
# 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
2022-08-21 02:22:56 +02:00
# 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
2022-08-19 15:43:20 +02:00
scene . objects [ ' Doc_chap- ' + name_chap ] . worldPosition = scene . objects [ ' Doc ' ] . worldPosition
scene . objects [ ' Doc_chap- ' + name_chap ] . setVisible ( True , True )
2022-08-21 02:22:56 +02:00
scene . objects [ ' Doc_title ' ] . setVisible ( False , True )
scene . objects [ ' Doc_text ' ] . setVisible ( False , True )
2022-08-19 15:43:20 +02:00
##
# 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 :
2022-08-20 22:44:17 +02:00
# sound_play (sndbuff_book_flip)
2022-08-19 15:43:20 +02:00
obj = cont . owner
2022-08-21 02:22:56 +02:00
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 )
2022-08-19 15:43:20 +02:00
##
# Sounds
##
def sound_play ( sound ) :
pass # FIXME
# if scene.objects['Commands']['sound']:
# audiodev.play(sound)