Ajout de la liste des taches

This commit is contained in:
Philippe Roy 2022-10-02 01:36:40 +02:00
parent 39d2183fd3
commit 8de01c53ac
8 changed files with 342 additions and 56 deletions

BIN
ropy-22.blend Normal file

Binary file not shown.

195
rp.py
View File

@ -76,6 +76,11 @@ ACTIVATE = bge.logic.KX_INPUT_ACTIVE
# User interface : texte info et compteurs # User interface : texte info et compteurs
############################################################################### ###############################################################################
color_text = (0, 0, 0, 1) # Noir
color_text_red = (0.799, 0.031, 0.038, 1)
color_text_orange = (0.799, 0.176, 0.054, 1)
color_text_yellow = (0.799, 0.617, 0.021, 1)
## ##
# Mise à jour de l'affichage des compteurs # Mise à jour de l'affichage des compteurs
## ##
@ -85,6 +90,19 @@ def points_maj (cont):
# Step # Step
if scene.objects['Points-Step-text']['Text']!= str(scene.objects['Points']['step']): if scene.objects['Points-Step-text']['Text']!= str(scene.objects['Points']['step']):
scene.objects['Points-Step-text']['Text']=str(scene.objects['Points']['step']) scene.objects['Points-Step-text']['Text']=str(scene.objects['Points']['step'])
if scene.objects['Points']['upgrade_battery']:
scene.objects['Points']['battery'] = round(100*(1 - (scene.objects['Points']['step']/200)))
else:
scene.objects['Points']['battery'] = round(100*(1 - (scene.objects['Points']['step']/20)))
if scene.objects['Points']['battery'] <=10:
scene.objects['Points-Battery'].color = color_text_red
scene.objects['Points-Battery-text'].color = color_text_red
if scene.objects['Points']['battery'] <=0:
scene.objects['Points-Battery-text']['Text']="0%"
print ("Plus de batterie !")
scene.objects['Rover']['stop'] = True
else:
scene.objects['Points-Battery-text']['Text']=str(scene.objects['Points']['battery'])+"%"
# Level # Level
if scene.objects['Points-Level-text']['Text']!=str(scene.objects['Points']['level']): if scene.objects['Points-Level-text']['Text']!=str(scene.objects['Points']['level']):
@ -103,7 +121,7 @@ def points_maj (cont):
# Position du Rover # Position du Rover
obj=scene.objects['Rover'] obj=scene.objects['Rover']
obj['position']=str(obj.worldPosition.x)+","+str(obj.worldPosition.y)+","+str(obj.worldPosition.z) obj['position']=str(round(obj.worldPosition.x,3))+","+str(round(obj.worldPosition.y,3))+","+str(round(obj.worldPosition.z,3))
############################################################################### ###############################################################################
# Terrain # Terrain
@ -180,7 +198,7 @@ def terrain_run ():
scene.objects['Pause'].setVisible(False,False) scene.objects['Pause'].setVisible(False,False)
scene.objects['Pause'].suspendPhysics() scene.objects['Pause'].suspendPhysics()
scene.objects['Pause-Hl'].setVisible(False,False) scene.objects['Pause-Hl'].setVisible(False,False)
scene.objects['Run']. restorePhysics() scene.objects['Run'].restorePhysics()
scene.objects['Run-Hl'].setVisible(True,False) scene.objects['Run-Hl'].setVisible(True,False)
# Run # Run
@ -234,7 +252,7 @@ def terrain_end (cont):
scene.objects['Pause'].suspendPhysics() scene.objects['Pause'].suspendPhysics()
scene.objects['Pause-Hl'].setVisible(False,False) scene.objects['Pause-Hl'].setVisible(False,False)
scene.objects['Run'].setVisible(True,False) scene.objects['Run'].setVisible(True,False)
scene.objects['Run']. restorePhysics() scene.objects['Run'].restorePhysics()
## ##
# Vitesse du jeu # Vitesse du jeu
@ -305,7 +323,7 @@ def sound_set ():
scene.objects['NoSound-cmd'].suspendPhysics() scene.objects['NoSound-cmd'].suspendPhysics()
scene.objects['NoSound-cmd'].setVisible(False,False) scene.objects['NoSound-cmd'].setVisible(False,False)
scene.objects['NoSound-cmd-Hl'].setVisible(False,False) scene.objects['NoSound-cmd-Hl'].setVisible(False,False)
scene.objects['Sound-cmd']. restorePhysics() scene.objects['Sound-cmd'].restorePhysics()
scene.objects['Sound-cmd-Hl'].setVisible(True,False) scene.objects['Sound-cmd-Hl'].setVisible(True,False)
scene.objects['Commands']['sound']=True scene.objects['Commands']['sound']=True
# scene.objects['Cmd-text']['Text']= "Mute" # scene.objects['Cmd-text']['Text']= "Mute"
@ -322,7 +340,7 @@ def sound_unset ():
scene.objects['Sound-cmd'].suspendPhysics() scene.objects['Sound-cmd'].suspendPhysics()
scene.objects['Sound-cmd'].setVisible(False,False) scene.objects['Sound-cmd'].setVisible(False,False)
scene.objects['Sound-cmd-Hl'].setVisible(False,False) scene.objects['Sound-cmd-Hl'].setVisible(False,False)
scene.objects['NoSound-cmd']. restorePhysics() scene.objects['NoSound-cmd'].restorePhysics()
scene.objects['NoSound-cmd-Hl'].setVisible(True,False) scene.objects['NoSound-cmd-Hl'].setVisible(True,False)
scene.objects['Commands']['sound']=False scene.objects['Commands']['sound']=False
# scene.objects['Cmd-text']['Text']= "Unmute" # scene.objects['Cmd-text']['Text']= "Unmute"
@ -356,6 +374,10 @@ def cmd_init():
scene.objects['Stop-Hl'].setVisible(False,False) scene.objects['Stop-Hl'].setVisible(False,False)
scene.objects['Aim-cmd-Hl'].setVisible(False,False) scene.objects['Aim-cmd-Hl'].setVisible(False,False)
scene.objects['Doc-cmd-Hl'].setVisible(False,False) scene.objects['Doc-cmd-Hl'].setVisible(False,False)
scene.objects['Task-cmd-Hl'].setVisible(False,False)
scene.objects['Task_close-cmd'].setVisible(False,False)
scene.objects['Task_close-cmd'].suspendPhysics()
scene.objects['Task_close-cmd-Hl'].setVisible(False,False)
scene.objects['Store-cmd-Hl'].setVisible(False,False) scene.objects['Store-cmd-Hl'].setVisible(False,False)
scene.objects['ResetView-Hl'].setVisible(False,False) scene.objects['ResetView-Hl'].setVisible(False,False)
scene.objects['About-cmd-Hl'].setVisible(False,False) scene.objects['About-cmd-Hl'].setVisible(False,False)
@ -420,11 +442,12 @@ def cmd_init():
upgrade_maj() upgrade_maj()
# Windows # Windows
windows=("Doc", "Doc_chap-general", "Doc_chap-missions", "Doc_chap-rover", "Doc_chap-python", "About") windows=("Doc", "Doc_chap-general", "Doc_chap-missions", "Doc_chap-rover", "Doc_chap-python", "About", "Task")
for window in windows: for window in windows:
scene.objects[window].setVisible(False,True) scene.objects[window].setVisible(False,True)
rp_doc.init() rp_doc.init()
rp_store.init() rp_store.init()
scene.objects['Task'].worldPosition = [42.6047, -2.09252, 2.99685] # Panel task
## ##
# Highlight des commandes # Highlight des commandes
@ -461,6 +484,8 @@ def cmd_hl(cont):
"Aim-cmd":"Afficher/cacher l'objectif", "Aim-cmd":"Afficher/cacher l'objectif",
"Doc-cmd":"Documentation", "Doc-cmd":"Documentation",
"Store-cmd":"Magasin", "Store-cmd":"Magasin",
"Task-cmd":"Liste des tâches",
"Task_close-cmd":"Fermer la liste des tâches",
"ResetView": "Reset de la vue (Touche Début)", "ResetView": "Reset de la vue (Touche Début)",
"About-cmd": "A propos", "About-cmd": "A propos",
"Speed_down": "Moins vite (-)", "Speed_down": "Moins vite (-)",
@ -485,7 +510,7 @@ def cmd_hl(cont):
if cont.sensors['MO'].status == JUST_RELEASED and (scene.objects['Terrain']['manip_mode']==0 or scene.objects['Terrain']['manip_mode']==9): if cont.sensors['MO'].status == JUST_RELEASED and (scene.objects['Terrain']['manip_mode']==0 or scene.objects['Terrain']['manip_mode']==9):
scene.objects['Cmd-text']['Text']= "" scene.objects['Cmd-text']['Text']= ""
scene.objects['Cmd-text'].setVisible(False,False) scene.objects['Cmd-text'].setVisible(False,False)
if obj.name!="Run" and obj.name!="Pause" and obj.name!="Stop" and obj.name!="Sound-cmd" and obj.name!="NoSound-cmd" : if obj.name!="Run" and obj.name!="Pause" and obj.name!="Stop" and obj.name!="Sound-cmd" and obj.name!="NoSound-cmd" and obj.name!="Task-cmd" and obj.name!="Task_close-cmd" :
scene.objects[obj.name+'-Hl'].setVisible(False,True) scene.objects[obj.name+'-Hl'].setVisible(False,True)
obj.setVisible(True,True) obj.setVisible(True,True)
@ -512,6 +537,20 @@ def cmd_hl(cont):
scene.objects['Sound-cmd-Hl'].setVisible(False,False) scene.objects['Sound-cmd-Hl'].setVisible(False,False)
scene.objects['Sound-cmd'].setVisible(True,False) scene.objects['Sound-cmd'].setVisible(True,False)
# Task panel
if obj.name=="Task-cmd":
scene.objects['Task-cmd-Hl'].setVisible(False,True)
if scene.objects['Commands']['task']:
scene.objects['Task-cmd'].setVisible(False,True)
else:
scene.objects['Task-cmd'].setVisible(True,False)
if obj.name=="Task_close-cmd":
scene.objects['Task_close-cmd-Hl'].setVisible(False,True)
if scene.objects['Commands']['task']==False:
scene.objects['Task_close-cmd'].setVisible(False,True)
else:
scene.objects['Task_close-cmd'].setVisible(True,False)
## ##
# Click sur les commandes # Click sur les commandes
## ##
@ -554,7 +593,11 @@ def cmd_click (cont):
if obj.name=="Store-cmd": if obj.name=="Store-cmd":
sound_play (snd_open) sound_play (snd_open)
store_open () store_open ()
if obj.name=="Task-cmd":
sound_play (snd_open)
task_open ()
if obj.name=="Task_close-cmd":
task_close ()
############################################################################### ###############################################################################
# Gestion du clavier # Gestion du clavier
@ -576,11 +619,19 @@ def mode(cont):
# Touche ESC # Touche ESC
if JUST_ACTIVATED in keyboard.inputs[bge.events.ESCKEY].queue: if JUST_ACTIVATED in keyboard.inputs[bge.events.ESCKEY].queue:
# Fenêtres modales # Fenêtres modales
if scene.objects['Terrain']['manip_mode']==9: if scene.objects['Terrain']['manip_mode']==9: # About
if scene.objects['About'].visible: if scene.objects['About'].visible:
about_close() about_close()
return return
elif scene.objects['Terrain']['manip_mode']==8: # Doc et store
if scene.objects['Doc'].visible:
tablet_close()
return
if scene.objects['Store'].visible:
store_close()
return
else: # Sortir du jeu else: # Sortir du jeu
terrain_stop () terrain_stop ()
@ -944,6 +995,22 @@ def tablet_close ():
scene.objects['Speed_down-Hl'].setVisible(False,False) scene.objects['Speed_down-Hl'].setVisible(False,False)
scene.objects['Cmd-text'].setVisible(False,False) scene.objects['Cmd-text'].setVisible(False,False)
# Task panel
if scene.objects['Commands']['task']:
scene.objects['Task-cmd'].setVisible(False,True)
scene.objects['Task-cmd'].suspendPhysics()
scene.objects['Task-cmd-Hl'].setVisible(False,True)
scene.objects['Task_close-cmd'].setVisible(True,True)
scene.objects['Task_close-cmd'].restorePhysics()
scene.objects['Task_close-cmd-Hl'].setVisible(False,True)
else:
scene.objects['Task_close-cmd'].setVisible(False,True)
scene.objects['Task_close-cmd'].suspendPhysics()
scene.objects['Task_close-cmd-Hl'].setVisible(False,True)
scene.objects['Task-cmd'].setVisible(True,True)
scene.objects['Task-cmd'].restorePhysics()
scene.objects['Task-cmd-Hl'].setVisible(False,True)
# Camera # Camera
scene.objects['Camera'].worldPosition.x = scene.objects['Camera']['current_lx'] scene.objects['Camera'].worldPosition.x = scene.objects['Camera']['current_lx']
scene.objects['Camera'].worldPosition.y = scene.objects['Camera']['current_ly'] scene.objects['Camera'].worldPosition.y = scene.objects['Camera']['current_ly']
@ -952,6 +1019,7 @@ def tablet_close ():
# Reset si changement de mission # Reset si changement de mission
if scene.objects['Points']['mission_init']!= scene.objects['Points']['mission']: if scene.objects['Points']['mission_init']!= scene.objects['Points']['mission']:
terrain_stop () terrain_stop ()
rp_map.task()
if scene.objects['Grid-u'].visible: if scene.objects['Grid-u'].visible:
rp_map.aim_show() rp_map.aim_show()
scene.objects['Points']['mission_init'] = scene.objects['Points']['mission'] scene.objects['Points']['mission_init'] = scene.objects['Points']['mission']
@ -965,6 +1033,96 @@ def tablet_close_click(cont):
sound_play (snd_close) sound_play (snd_close)
tablet_close() tablet_close()
###############################################################################
# Liste des tâches
###############################################################################
##
# Allumer la tablette des tâches
##
def task_open ():
scene.objects['Commands']['task']=True
scene.objects['Task-cmd'].setVisible(False,True)
scene.objects['Task-cmd'].suspendPhysics()
scene.objects['Task-cmd-Hl'].setVisible(False,True)
scene.objects['Task'].setVisible(True,True)
scene.objects['Task']['timer'] = 0
scene.objects['Task']['anim_open'] = True
rp_map.task()
def task_open_anim():
x0_cam=0.005783
y0_cam=-26.4403
z0_cam=20.2232
x_cam=scene.objects['Camera'].worldPosition.x
y_cam=scene.objects['Camera'].worldPosition.y
z_cam=scene.objects['Camera'].worldPosition.z
resol=50
x0=0.291678-x0_cam+x_cam
y0 =-25.9416-y0_cam+y_cam
z0 = 19.793-z0_cam+z_cam
x1 = 0.201271-x0_cam+x_cam
y1 =-25.9416-y0_cam+y_cam
z1 = 19.793-z0_cam+z_cam
xi = x0+((x1-x0)/resol)*scene.objects['Task']['timer']
yi = y0+((y1-y0)/resol)*scene.objects['Task']['timer']
zi = z0+((z1-z0)/resol)*scene.objects['Task']['timer']
scene.objects['Task'].worldPosition = [xi, yi, zi]
scene.objects['Task']['timer']+=1
if scene.objects['Task']['timer']== resol:
scene.objects['Task']['anim_open'] = False
scene.objects['Task_close-cmd'].setVisible(True,True)
scene.objects['Task_close-cmd-Hl'].setVisible(False,True)
scene.objects['Task_close-cmd'].restorePhysics()
##
# Allumer la tablette des tâches
##
def task_close ():
scene.objects['Commands']['task']=False
scene.objects['Task_close-cmd'].setVisible(False,True)
scene.objects['Task_close-cmd'].suspendPhysics()
scene.objects['Task_close-cmd-Hl'].setVisible(False,True)
scene.objects['Task']['timer'] = 0
scene.objects['Task']['anim_close'] = True
def task_close_anim():
x0_cam=0.005783
y0_cam=-26.4403
z0_cam=20.2232
x_cam=scene.objects['Camera'].worldPosition.x
y_cam=scene.objects['Camera'].worldPosition.y
z_cam=scene.objects['Camera'].worldPosition.z
resol=50
x0 = 0.201271-x0_cam+x_cam
y0 =-25.9416-y0_cam+y_cam
z0 = 19.793-z0_cam+z_cam
x1=0.291678-x0_cam+x_cam
y1 =-25.9416-y0_cam+y_cam
z1 = 19.793-z0_cam+z_cam
xi = x0+((x1-x0)/resol)*scene.objects['Task']['timer']
yi = y0+((y1-y0)/resol)*scene.objects['Task']['timer']
zi = z0+((z1-z0)/resol)*scene.objects['Task']['timer']
scene.objects['Task'].worldPosition = [xi, yi, zi]
scene.objects['Task']['timer']+=1
if scene.objects['Task']['timer']== resol:
scene.objects['Task']['anim_close'] = False
scene.objects['Task'].setVisible(False,True)
scene.objects['Task-cmd'].setVisible(True,True)
scene.objects['Task-cmd-Hl'].setVisible(False,True)
scene.objects['Task-cmd'].restorePhysics()
##
# Clic pour fermer la tablette des tâches
##
def task_close_click(cont):
if cont.sensors['Click'].status == JUST_ACTIVATED and cont.sensors['MO'].positive :
sound_play (snd_close)
task_close()
############################################################################### ###############################################################################
# Store # Store
############################################################################### ###############################################################################
@ -1028,8 +1186,6 @@ def store_open ():
terrain_grid() terrain_grid()
else: else:
scene.objects['Store']['Grid_visible'] = False scene.objects['Store']['Grid_visible'] = False
rp_store.open() rp_store.open()
## ##
@ -1074,6 +1230,23 @@ def store_close():
scene.objects['Speed_down-Hl'].setVisible(False,False) scene.objects['Speed_down-Hl'].setVisible(False,False)
scene.objects['Cmd-text'].setVisible(False,False) scene.objects['Cmd-text'].setVisible(False,False)
# Task panel
if scene.objects['Commands']['task']:
scene.objects['Task-cmd'].setVisible(False,True)
scene.objects['Task-cmd'].suspendPhysics()
scene.objects['Task-cmd-Hl'].setVisible(False,True)
scene.objects['Task_close-cmd'].setVisible(True,True)
scene.objects['Task_close-cmd'].restorePhysics()
scene.objects['Task_close-cmd-Hl'].setVisible(False,True)
else:
scene.objects['Task_close-cmd'].setVisible(False,True)
scene.objects['Task_close-cmd'].suspendPhysics()
scene.objects['Task_close-cmd-Hl'].setVisible(False,True)
scene.objects['Task-cmd'].setVisible(True,True)
scene.objects['Task-cmd'].restorePhysics()
scene.objects['Task-cmd-Hl'].setVisible(False,True)
# Maj de l'interface # Maj de l'interface
upgrade_maj() upgrade_maj()

View File

@ -25,6 +25,8 @@ def mrp_avancer():
if rp_detect()==False: if rp_detect()==False:
rp_avancer() rp_avancer()
rp_marquer() rp_marquer()
print ("Nb de balises posées : ", str(rp_balise()))
print ("Niveau batterie : ", str(rp_batterie()))
def mrp_avancer_nbpas(pas): def mrp_avancer_nbpas(pas):
for i in range (pas): for i in range (pas):
@ -45,12 +47,10 @@ def commandes():
# mrp_avancer_mur() # mrp_avancer_mur()
# rp_gauche() # rp_gauche()
# mrp_avancer() # rp_vitesse (8)
# rp_gauche()
# mrp_avancer()
mrp_avancer_mur() mrp_avancer_mur()
rp_gauche() rp_gauche()
# rp_vitesse (1)
mrp_avancer_mur() mrp_avancer_mur()
rp_fin() rp_fin()

View File

@ -3,9 +3,9 @@
<speed>4.0</speed> <speed>4.0</speed>
<sound>False</sound> <sound>False</sound>
<cam> <cam>
<worldPosition.x>-1.3732191324234009</worldPosition.x> <worldPosition.x>0.0057830810546875</worldPosition.x>
<worldPosition.y>-44.52867889404297</worldPosition.y> <worldPosition.y>-26.440298080444336</worldPosition.y>
<worldPosition.z>36.26533126831055</worldPosition.z> <worldPosition.z>20.22315788269043</worldPosition.z>
</cam> </cam>
</config> </config>
<mission> <mission>
@ -15,7 +15,7 @@
<upgrade> <upgrade>
<battery>True</battery> <battery>True</battery>
<beacon>True</beacon> <beacon>True</beacon>
<paint>False</paint> <paint>True</paint>
<speed>True</speed> <speed>True</speed>
</upgrade> </upgrade>
</data> </data>

View File

@ -43,7 +43,7 @@ missions_card=rp_map1.get_missions_card()
################################################################################ ################################################################################
rover_card=["avancer-card", "tourner-card", "baliser-card", "detecter-card", "radar-card"] rover_card=["avancer-card", "tourner-card", "baliser-card", "detecter-card", "radar-card"]
rover_card=rover_card+["vitesse-card", "peinture-card", "batterie-card", "balise-card"] rover_card=rover_card+["speed-card", "paint-card", "battery-card", "beacon-card"]
# Avancer # Avancer
rp_avancer_title="Avancer" rp_avancer_title="Avancer"
@ -76,29 +76,29 @@ rp_radar_text="FIXME"
rp_radar_type="standard" rp_radar_type="standard"
card_description.update({"radar-card" : [rp_radar_title, rp_radar_text, rp_radar_type]}) card_description.update({"radar-card" : [rp_radar_title, rp_radar_text, rp_radar_type]})
# Vitesse # Speed - Vitesse
rp_vitesse_title="Vitesse" rp_speed_title="Vitesse"
rp_vitesse_text="FIXME" rp_speed_text="FIXME"
rp_vitesse_type="upgrade" rp_speed_type="upgrade"
card_description.update({"vitesse-card" : [rp_vitesse_title, rp_vitesse_text, rp_vitesse_type]}) card_description.update({"speed-card" : [rp_speed_title, rp_speed_text, rp_speed_type]})
# Peinture # Paint - Peinture
rp_peinture_title="Peinture" rp_paint_title="Peinture"
rp_peinture_text="FIXME" rp_paint_text="FIXME"
rp_peinture_type="upgrade" rp_paint_type="upgrade"
card_description.update({"peinture-card" : [rp_peinture_title, rp_peinture_text, rp_peinture_type]}) card_description.update({"paint-card" : [rp_paint_title, rp_paint_text, rp_paint_type]})
# Batterie + # Battery + - Batterie +
rp_batterie_title="Batterie +" rp_battery_title="Batterie +"
rp_batterie_text="FIXME" rp_battery_text="FIXME"
rp_batterie_type="upgrade" rp_battery_type="upgrade"
card_description.update({"batterie-card" : [rp_batterie_title, rp_batterie_text, rp_batterie_type]}) card_description.update({"battery-card" : [rp_battery_title, rp_battery_text, rp_battery_type]})
# Balise + # Beacon + - Balise +
rp_balise_title="Balise +" rp_beacon_title="Balise +"
rp_balise_text="FIXME" rp_beacon_text="FIXME"
rp_balise_type="upgrade" rp_beacon_type="upgrade"
card_description.update({"balise-card" : [rp_balise_title, rp_balise_text, rp_balise_type]}) card_description.update({"beacon-card" : [rp_beacon_title, rp_beacon_text, rp_beacon_type]})
############################################################################### ###############################################################################
# Documentation Python # Documentation Python
@ -111,7 +111,7 @@ python_card=["fonction-card", "alternative-card", "boucle-card"]
rp_fonction_title="Fonction" rp_fonction_title="Fonction"
rp_fonction_text=" La définition d'une fonction se fait \n avec \"def\". La fonction peut \n renvoyer une valeur avec \"return\". \n \n" rp_fonction_text=" La définition d'une fonction se fait \n avec \"def\". La fonction peut \n renvoyer une valeur avec \"return\". \n \n"
rp_fonction_text=rp_fonction_text + " def fonction_1 (arguments) : \n instruction_1 \n instruction_2 \n ....\n return valeurs_renvoyées \n\n" rp_fonction_text=rp_fonction_text + " def fonction_1 (arguments) : \n instruction_1 \n instruction_2 \n ....\n return valeurs_renvoyées \n\n"
rp_fonction_text=rp_fonction_text + " Les arguments sont des données \n transmisent à la fonction." rp_fonction_text=rp_fonction_text + " Les arguments sont des données \n transmises à la fonction."
card_description.update({"fonction-card" : [rp_fonction_title, rp_fonction_text]}) card_description.update({"fonction-card" : [rp_fonction_title, rp_fonction_text]})
# Alternative # Alternative
@ -223,6 +223,17 @@ def open():
else: else:
scene.objects['Book_level_button'].setVisible(False,True) scene.objects['Book_level_button'].setVisible(False,True)
# Upgrade
if name_chap == "rover":
upgrade_card=("battery", "beacon", "paint", "speed")
for i in range(len(upgrade_card)):
if scene.objects['Points']['upgrade_'+upgrade_card[i]]==True:
scene.objects[upgrade_card[i]+'-card'].setVisible(True,True)
scene.objects[upgrade_card[i]+'-card_colbox'].restorePhysics()
else:
scene.objects[upgrade_card[i]+'-card'].setVisible(False,True)
scene.objects[upgrade_card[i]+'-card_colbox'].suspendPhysics()
# Afficher le texte de la carte active # Afficher le texte de la carte active
if name_chap != "general": if name_chap != "general":
if scene.objects['Doc_chap-'+name_chap]['page_fct'] !="": if scene.objects['Doc_chap-'+name_chap]['page_fct'] !="":
@ -361,6 +372,17 @@ def chapter(cont):
else: else:
scene.objects['Book_level_button'].setVisible(False,True) scene.objects['Book_level_button'].setVisible(False,True)
# Upgrade
if name_chap == "rover":
upgrade_card=("battery", "beacon", "paint", "speed")
for i in range(len(upgrade_card)):
if scene.objects['Points']['upgrade_'+upgrade_card[i]]==True:
scene.objects[upgrade_card[i]+'-card'].setVisible(True,True)
scene.objects[upgrade_card[i]+'-card-colbox'].restorePhysics()
else:
scene.objects[upgrade_card[i]+'-card'].setVisible(False,True)
scene.objects[upgrade_card[i]+'-card-colbox'].suspendPhysics()
# Afficher le texte de la carte active # Afficher le texte de la carte active
if name_chap != "general": if name_chap != "general":
if scene.objects['Doc_chap-'+name_chap]['page_fct'] !="": if scene.objects['Doc_chap-'+name_chap]['page_fct'] !="":
@ -435,7 +457,6 @@ def level_button (cont):
scene.objects["mission_"+str(scene.objects['Points']['mission'])+"-card"].color = color_doc_fct scene.objects["mission_"+str(scene.objects['Points']['mission'])+"-card"].color = color_doc_fct
scene.objects["mission_"+str(scene.objects['Points']['mission'])+"-card-icon"].color = color_doc_fct scene.objects["mission_"+str(scene.objects['Points']['mission'])+"-card-icon"].color = color_doc_fct
scene.objects["mission_"+str(scene.objects['Points']['mission'])+"-card-text"].color = color_doc_fct scene.objects["mission_"+str(scene.objects['Points']['mission'])+"-card-text"].color = color_doc_fct
print ("Sélectionner le niveau :", str(mission_select))
scene.objects['Points']['mission'] = mission_select scene.objects['Points']['mission'] = mission_select
scene.objects['Points-Map-text']['Text']="Mission "+str(scene.objects['Points']['mission']) scene.objects['Points-Map-text']['Text']="Mission "+str(scene.objects['Points']['mission'])
scene.objects['Book_mission']['Text'] = "Mission en cours : "+str(scene.objects['Points']['mission']) scene.objects['Book_mission']['Text'] = "Mission en cours : "+str(scene.objects['Points']['mission'])

View File

@ -202,7 +202,7 @@ def rp_avancer ():
scene.objects['Points']['step'] +=1 scene.objects['Points']['step'] +=1
# Animation rapide # Animation rapide
if scene.objects['Commands']['speed'] == 10 and scene.objects['Points']['step']> 2: # A tendance à planter sur les premiers mouvements en rapide + balisage if scene.objects['Commands']['speed'] >= 10 and scene.objects['Points']['step']> 2: # A tendance à planter sur les premiers mouvements en rapide + balisage
x0 = obj.worldPosition.x x0 = obj.worldPosition.x
y0 = obj.worldPosition.y y0 = obj.worldPosition.y
z0 = obj.worldPosition.z z0 = obj.worldPosition.z
@ -234,7 +234,7 @@ def rp_avancer ():
# rp_tempo (0.1*step) # rp_tempo (0.1*step)
# Animation # Animation
if scene.objects['Commands']['speed'] != 10: if scene.objects['Commands']['speed'] < 10:
start = 1 start = 1
end = 100 end = 100
layer = 0 layer = 0
@ -290,7 +290,7 @@ def rp_gauche ():
step=math.pi/2 # Pas angulaire step=math.pi/2 # Pas angulaire
# Animation rapide # Animation rapide
if scene.objects['Commands']['speed'] == 10: if scene.objects['Commands']['speed'] >= 10:
obj.applyRotation((0, 0, step), True) obj.applyRotation((0, 0, step), True)
rp_tempo (0.1) rp_tempo (0.1)
return True return True
@ -336,7 +336,7 @@ def rp_droite ():
step=math.pi/2 # Pas angulaire step=math.pi/2 # Pas angulaire
# Rapide # Rapide
if scene.objects['Commands']['speed'] == 10: if scene.objects['Commands']['speed'] >= 10:
obj.applyRotation((0, 0, -step), True) obj.applyRotation((0, 0, -step), True)
rp_tempo (0.1) rp_tempo (0.1)
return True return True
@ -491,6 +491,56 @@ def rp_radar ():
print ("rp_radar") print ("rp_radar")
# FIXME # FIXME
###############################################################################
# Rover fonction avancées (upgrade) élèves
###############################################################################
##
# Peindre : station, rover, balise
##
# FIXME tout à définir
def rp_couleur (element, new_color):
if scene.objects['Points']['upgrade_paint']:
if (debug_mvt):
print ("Nouvelle couleur :", str(new_color),"->", element)
print ("Nouvelle couleur :", str(new_color),"->", element)
##
# Changer la vitesse
##
def rp_vitesse (new_speed):
if scene.objects['Points']['upgrade_speed']:
if new_speed is not None:
if (debug_mvt):
print ("Nouvelle vitesse :", new_speed)
scene.objects['Text_speed']['Text']=str(new_speed)
scene.objects['Commands']['speed']=new_speed
return scene.objects['Commands']['speed']
##
# Connaitre le nombre de balise posées
##
def rp_balise ():
if scene.objects['Points']['upgrade_beacon']:
for i in range (200):
if scene.objects["Beacon-"+str(i)]['activated']==False:
break
if (debug_mvt):
print ("Nombre de balises posées :", i)
return i
##
# Connaitre la charge de la batterie
##
def rp_batterie ():
if scene.objects['Points']['upgrade_battery']:
if (debug_mvt):
print ("Charge de la batterie :", scene.objects['Points']['battery'])
return scene.objects['Points']['battery']
############################################################################### ###############################################################################
# Colision # Colision

View File

@ -17,12 +17,19 @@ import os
scene = bge.logic.getCurrentScene() scene = bge.logic.getCurrentScene()
color_text = (0, 0, 0, 1) # Noir
color_text_red = (0.799, 0.031, 0.038, 1)
color_text_orange = (0.799, 0.176, 0.054, 1)
color_text_yellow = (0.799, 0.617, 0.021, 1)
color_text_white = (1, 1, 1, 1)
############################################################################### ###############################################################################
# Missions # Missions
############################################################################### ###############################################################################
missions_card_description ={} missions_card_description ={}
missions_conf ={} missions_conf ={}
missions_task ={}
############################################################################### ###############################################################################
# Initialisation du niveau : # Initialisation du niveau :
@ -44,37 +51,46 @@ mission_1_text= mission_1_text +" -> Voir onglet Rover, page \"Avancer\" \n"
mission_1_text= mission_1_text +" -> Voir onglet Rover, page \"Tourner \" \n\n" mission_1_text= mission_1_text +" -> Voir onglet Rover, page \"Tourner \" \n\n"
mission_1_text= mission_1_text +"Afin de visualiser le trajet, il faudra \n marquer les cases. \n" mission_1_text= mission_1_text +"Afin de visualiser le trajet, il faudra \n marquer les cases. \n"
mission_1_text= mission_1_text +" -> Voir onglet Rover, page \"Baliser\" \n" mission_1_text= mission_1_text +" -> Voir onglet Rover, page \"Baliser\" \n"
mission_1_task = "- Atteindre l'objectif \n\n- Poser 6 balises \n minimum"
mission_1_init=[-11.0,3.0, "e"] # Rover init position (x,y), orientation ("n|s|e|w") mission_1_init=[-11.0,3.0, "e"] # Rover init position (x,y), orientation ("n|s|e|w")
mission_1_aim=[-7.0,2.0] # Aim position (x,y) mission_1_aim=[-7.0,2.0] # Aim position (x,y)
missions_card_description.update({"mission_1-card" : [mission_1_title, mission_1_text]}) missions_card_description.update({"mission_1-card" : [mission_1_title, mission_1_text]})
missions_conf.update({"1" : [mission_1_init, mission_1_aim]}) missions_conf.update({"1" : [mission_1_init, mission_1_aim]})
missions_task.update({"1" : [mission_1_task]})
# Mission 2 # Mission 2
mission_2_title="Mission 2\n Ma première fonction" mission_2_title="Mission 2\n Ma première fonction"
mission_2_text="\n \n La case à atteindre est toujours la \n même (à l'est de la station). \n \n" mission_2_text="\n \n La case à atteindre est toujours la \n même (à l'est de la station). \n \n"
mission_2_text= mission_2_text + " Pour faciliter le codage, vous devez \n créer et utiliser la fonction \n \"mrp_avancer()\" regroupant avancer \n et marquer. \n -> Voir onglet Python, page \"Fonction\". \n\n\n\n\n" mission_2_text= mission_2_text + " Pour faciliter le codage, vous devez \n créer et utiliser la fonction \n \"mrp_avancer()\" regroupant avancer \n et marquer. \n -> Voir onglet Python, page \"Fonction\". \n\n\n\n\n"
mission_2_task = "- Atteindre l'objectif \n\n- Poser 6 balises \n minimum\n\n- 40 lignes de code \n maximum\n\n- Définition de la \n fonction \n \"mrp_avancer()\""
mission_2_init=[-11.0,3.0, "e"] mission_2_init=[-11.0,3.0, "e"]
mission_2_aim=[-7.0,2.0] mission_2_aim=[-7.0,2.0]
missions_card_description.update({"mission_2-card" : [mission_2_title, mission_2_text]}) missions_card_description.update({"mission_2-card" : [mission_2_title, mission_2_text]})
missions_conf.update({"2" : [mission_2_init, mission_2_aim]}) missions_conf.update({"2" : [mission_2_init, mission_2_aim]})
missions_task.update({"2" : [mission_2_task]})
# Mission 3 # Mission 3
mission_3_title="Mission 3\n Apprendre le danger" mission_3_title="Mission 3\n Apprendre le danger"
mission_3_text="\n \n Tout d'abords, il faut provoquer une \n collision avec un obstacle (pente \n ou station) et observer ce qui se \n passe.\n \n" mission_3_text="\n \n Tout d'abords, il faut provoquer une \n collision avec un obstacle (pente \n ou station) et observer ce qui se \n passe.\n \n"
mission_3_text= mission_3_text + " Il faut donc sécuriser Ropy en \n utilisant une structure alternative. \n -> Voir onglet Python, page \"Si alors\" \n -> Voir onglet Rover, page \"Détecter\" \n \n" mission_3_text= mission_3_text + " Il faut donc sécuriser Ropy en \n utilisant une structure alternative. \n -> Voir onglet Python, page \"Si alors\" \n -> Voir onglet Rover, page \"Détecter\" \n \n"
mission_3_task = "- Utilisation de \n \"rp_detect()\" dans \n une structure \n alternative \"if\"."
mission_3_init=[-11.0,3.0, "e"] # Rover init position (x,y), orientation ("n|s|e|w") mission_3_init=[-11.0,3.0, "e"] # Rover init position (x,y), orientation ("n|s|e|w")
mission_3_aim=[100.0,100.0] # Aim caché -> pas de de position objectif mission_3_aim=[100.0,100.0] # Aim caché -> pas de de position objectif
missions_card_description.update({"mission_3-card" : [mission_3_title, mission_3_text]}) missions_card_description.update({"mission_3-card" : [mission_3_title, mission_3_text]})
missions_conf.update({"3" : [mission_3_init, mission_3_aim]}) missions_conf.update({"3" : [mission_3_init, mission_3_aim]})
missions_task.update({"3" : [mission_3_task]})
# Mission 4 # Mission 4
mission_4_title="Mission 4\n Partir au bout du monde" mission_4_title="Mission 4\n Partir au bout du monde"
mission_4_text="\n \n Ropy est maintenant prêt pour \n l'aventure soit atteindre la case \n du nouvel objectif (loin, très loin ...). \n \n Pour un tel voyage, l'utilisation \n d'une boucle du type \"for\" s'impose. \n" mission_4_text="\n \n Ropy est maintenant prêt pour \n l'aventure soit atteindre la case \n du nouvel objectif (loin, très loin ...). \n \n Pour un tel voyage, l'utilisation \n d'une boucle du type \"for\" s'impose. \n"
mission_4_text= mission_4_text +" -> Voir onglet Python, page \"Boucle\" \n \n \n \n \n" mission_4_text= mission_4_text +" -> Voir onglet Python, page \"Boucle\" \n \n"
mission_4_text= mission_4_text + " Dans un deuxième temps, il faut créer \n la fonction \"mrp_avancer_nbpas(pas)\"\n afin d'avancer d'un nombre de pas."
mission_4_task = "- Atteindre l'objectif \n\n- 40 lignes de code \n maximum\n\n- Utilisation de \n boucle \"for\" \n\n- En bonus : création \n de la fonction \"mrp_\n avancer_nbpas(pas)\""
mission_4_init=[-7.0,4.0, "e"] mission_4_init=[-7.0,4.0, "e"]
mission_4_aim=[12.0,9.0] mission_4_aim=[12.0,9.0]
missions_card_description.update({"mission_4-card" : [mission_4_title, mission_4_text]}) missions_card_description.update({"mission_4-card" : [mission_4_title, mission_4_text]})
missions_conf.update({"4" : [mission_4_init, mission_4_aim]}) missions_conf.update({"4" : [mission_4_init, mission_4_aim]})
missions_task.update({"4" : [mission_4_task]})
# Mission 5 # Mission 5
mission_5_title="Mission 5\n Faire face à l'inconnu" mission_5_title="Mission 5\n Faire face à l'inconnu"
@ -82,30 +98,38 @@ mission_5_text="\n \n La case à atteindre est toujours la \n même, mais le lie
mission_5_text= mission_5_text +" Pour pallier à l\'aléatoire, vous \n utiliserez les pentes comme obstacle. \n" mission_5_text= mission_5_text +" Pour pallier à l\'aléatoire, vous \n utiliserez les pentes comme obstacle. \n"
mission_5_text= mission_5_text +" Il faut alors créer une fonction \n avec une boucle \"while\" (tant que) \n qui permet d'avancer jusqu'à un \n obstacle :" mission_5_text= mission_5_text +" Il faut alors créer une fonction \n avec une boucle \"while\" (tant que) \n qui permet d'avancer jusqu'à un \n obstacle :"
mission_5_text= mission_5_text +" \"mrp_avancer_mur()\". \n \n \n" mission_5_text= mission_5_text +" \"mrp_avancer_mur()\". \n \n \n"
mission_5_task = "- Atteindre l'objectif \n\n- 40 lignes de code \n maximum\n\n- Utilisation de \n boucle \"while\" \n\n- En bonus : création \n de la fonction \"mrp_\n avancer_mur()\""
mission_5_init=[0.0,0.0, "e"] # Position aléatoire tourné vers l'est -> défini dans le reset mission_5_init=[0.0,0.0, "e"] # Position aléatoire tourné vers l'est -> défini dans le reset
mission_5_aim=[12.0,9.0] mission_5_aim=[12.0,9.0]
missions_card_description.update({"mission_5-card" : [mission_5_title, mission_5_text]}) missions_card_description.update({"mission_5-card" : [mission_5_title, mission_5_text]})
missions_conf.update({"5" : [mission_5_init, mission_5_aim]}) missions_conf.update({"5" : [mission_5_init, mission_5_aim]})
missions_task.update({"5" : [mission_5_task]})
# Mission 6 # Mission 6
mission_6_title="Mission 6\n Se rendre utile" mission_6_title="Mission 6\n Se rendre utile"
mission_6_text="\n \n Une zone précise du terrain présente \n des pierres à analyser. \n \n Elles apparaissent de manière \n aléatoire (encore !), pour les \n ramasser, Ropy doit passer sur \n toutes les cases de la zone. \n \n \n \n \n \n \n" mission_6_text="\n \n Une zone précise du terrain présente \n des carottages afin d'analyser la \n roche. \n \n Les lieux de forage sont définis de \n manière aléatoire (encore !), pour les \n réaliser, Ropy doit donc passer sur \n toutes les cases de la zone. \n \n \n \n \n \n \n"
mission_6_task = "- Passer sur les 10 \n lieux de forage"
mission_6_init=[0.0,0.0, "e"] # Position aléatoire tourné vers l'est -> défini dans le reset mission_6_init=[0.0,0.0, "e"] # Position aléatoire tourné vers l'est -> défini dans le reset
mission_6_aim=[100.0,100.0] # Aim caché -> rammassage de pierre mission_6_aim=[100.0,100.0] # Aim caché -> rammassage de pierre
missions_card_description.update({"mission_6-card" : [mission_6_title, mission_6_text]}) missions_card_description.update({"mission_6-card" : [mission_6_title, mission_6_text]})
missions_conf.update({"6" : [mission_6_init, mission_6_aim]}) missions_conf.update({"6" : [mission_6_init, mission_6_aim]})
missions_task.update({"6" : [mission_6_task]})
# Mission 7 # Mission 7
# mission_7_title="Mission 7\n FIXME" # mission_7_title="Mission 7\n FIXME"
# mission_7_text="\n \n FIXME" # mission_7_text="\n \n FIXME"
# mission_7_task = "FIXME"
# missions_card_description.update({"mission_7-card" : [mission_7_title, mission_7_text]}) # missions_card_description.update({"mission_7-card" : [mission_7_title, mission_7_text]})
# missions_conf.update({"7" : [mission_7_init, mission_7_aim]}) # missions_conf.update({"7" : [mission_7_init, mission_7_aim]})
# missions_task.update({"7" : [mission_7_task]})
# Mission 8 # Mission 8
# mission_8_title="Mission 8\n FIXME" # mission_8_title="Mission 8\n FIXME"
# mission_8_text="\n \n FIXME" # mission_8_text="\n \n FIXME"
# mission_8_task = "FIXME"
# missions_card_description.update({"mission_8-card" : [mission_8_title, mission_8_text]}) # missions_card_description.update({"mission_8-card" : [mission_8_title, mission_8_text]})
# missions_conf.update({"8" : [mission_8_init, mission_8_aim]}) # missions_conf.update({"8" : [mission_8_init, mission_8_aim]})
# missions_task.update({"8" : [mission_8_task]})
# Description des cartes missions # Description des cartes missions
@ -160,6 +184,9 @@ def map_init():
def map_reset(): def map_reset():
scene.objects['Points']['step']=0 scene.objects['Points']['step']=0
scene.objects['Points']['nbligne']=0 scene.objects['Points']['nbligne']=0
scene.objects['Points']['battery']=100
scene.objects['Points-Battery'].color = color_text_white
scene.objects['Points-Battery-text'].color = color_text
mission_init = missions_conf[str(scene.objects['Points']['mission'])][0] mission_init = missions_conf[str(scene.objects['Points']['mission'])][0]
mission_aim = missions_conf[str(scene.objects['Points']['mission'])][1] mission_aim = missions_conf[str(scene.objects['Points']['mission'])][1]
@ -245,6 +272,13 @@ def aim_hide():
scene.objects['Aimzone-mission-6'].setVisible(False,True) scene.objects['Aimzone-mission-6'].setVisible(False,True)
scene.objects['Initzone-mission-5'].setVisible(False,True) scene.objects['Initzone-mission-5'].setVisible(False,True)
##
# Affichage des tâches
##
def task():
scene.objects['Task_text']['Text']=missions_task[str(scene.objects['Points']['mission'])][0]
## ##
# Validation de l'objectif atteint # Validation de l'objectif atteint
## ##
@ -280,6 +314,10 @@ def objectif_control(x,y):
return True return True
else: else:
txt=["def mrp_avancer_nbpas"] # Présence de "def mrp_avancer_nbpas" txt=["def mrp_avancer_nbpas"] # Présence de "def mrp_avancer_nbpas"
if rp_cmd_txtcount(txt, 1):
txt=["for" ] # Présence de "for i in range" 1x
if rp_cmd_txtcount(txt, 1):
txt=["in range" ]
if rp_cmd_txtcount(txt, 1): if rp_cmd_txtcount(txt, 1):
return True return True
@ -292,6 +330,8 @@ def objectif_control(x,y):
return True return True
else: else:
txt=["def mrp_avancer_mur():", "def mrp_avancer_mur() :", "def mrp_avancer_mur ():", "def mrp_avancer_mur () :"] # Présence de "def mrp_avancer_mur():" txt=["def mrp_avancer_mur():", "def mrp_avancer_mur() :", "def mrp_avancer_mur ():", "def mrp_avancer_mur () :"] # Présence de "def mrp_avancer_mur():"
if rp_cmd_txtcount(txt, 1):
txt=["while" ] # Présence de "while" 1x
if rp_cmd_txtcount(txt, 1): if rp_cmd_txtcount(txt, 1):
return True return True

View File

@ -96,6 +96,10 @@ def open2 (cont):
thread_gostore_stop() thread_gostore_stop()
obj['store-anim_end']=False obj['store-anim_end']=False
# Pas arrivé au store, dommage !
if obj['stop']:
return False
# Affinage de la position # Affinage de la position
obj.worldPosition.x = -9.75 obj.worldPosition.x = -9.75
obj.worldPosition.y = -4 obj.worldPosition.y = -4
@ -153,7 +157,6 @@ def open2 (cont):
scene.objects['Store_upgrade-colbox'].suspendPhysics (True) scene.objects['Store_upgrade-colbox'].suspendPhysics (True)
scene.objects['Store_text'].setVisible(False,True) scene.objects['Store_text'].setVisible(False,True)
## ##
# Animation du store # Animation du store
## ##
@ -385,7 +388,6 @@ def rover_go_store():
# Position de départ pour le debug # Position de départ pour le debug
# obj.worldPosition.x=12 # obj.worldPosition.x=12
# obj.worldPosition.y=9 # obj.worldPosition.y=9
x0 = obj.worldPosition.x x0 = obj.worldPosition.x
y0 = obj.worldPosition.y y0 = obj.worldPosition.y
z0 = obj.worldPosition.z z0 = obj.worldPosition.z