mirror of
https://forge.apps.education.fr/blender-edutech/ropy.git
synced 2024-01-27 08:23:20 +01:00
191 lines
7.1 KiB
Python
191 lines
7.1 KiB
Python
import bge # Bibliothèque Blender Game Engine (UPBGE)
|
||
import bpy # Blender
|
||
from rp_lib import * # Bibliothèque Ropy
|
||
import os
|
||
|
||
###############################################################################
|
||
# rp_map1.py
|
||
# @title: Carte 1 pour 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
|
||
#
|
||
###############################################################################
|
||
|
||
scene = bge.logic.getCurrentScene()
|
||
|
||
###############################################################################
|
||
# Missions
|
||
###############################################################################
|
||
|
||
missions_card_description ={}
|
||
missions_conf ={}
|
||
|
||
###############################################################################
|
||
# Initialisation du niveau :
|
||
# Niveau 0 : Vide
|
||
# Niveau 1 : Les premiers pas de Ropy
|
||
# Niveau 2 : Sécuriser Ropy
|
||
# Niveau 3 : Partir au bout du monde
|
||
# Niveau 4 : Faire face à l'inconnu
|
||
# Niveau 5 : Se rendre utile
|
||
###############################################################################
|
||
|
||
# rp_niveau (1) # Saisir le niveau (de 0 à 5)
|
||
# ropy_init.main() # Initialisation de la scène 3D
|
||
|
||
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
|
||
mission_1_title="Mission 1\n Premiers pas"
|
||
mission_1_text="\n \n aa"
|
||
missions_card_description.update({"mission_1-card" : [mission_1_title, mission_1_text]})
|
||
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)
|
||
missions_conf.update({"1" : [mission_1_init, mission_1_aim]})
|
||
|
||
# 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
|
||
mission_2_title="Mission 2\n FIXME"
|
||
mission_2_text="\n \n FIXME"
|
||
missions_card_description.update({"mission_2-card" : [mission_2_title, mission_2_text]})
|
||
|
||
# Mission 3
|
||
mission_3_title="Mission 3\n FIXME"
|
||
mission_3_text="\n \n FIXME"
|
||
missions_card_description.update({"mission_3-card" : [mission_3_title, mission_3_text]})
|
||
|
||
# Mission 4
|
||
mission_4_title="Mission 4\n FIXME"
|
||
mission_4_text="\n \n FIXME"
|
||
missions_card_description.update({"mission_4-card" : [mission_4_title, mission_4_text]})
|
||
|
||
# Mission 5
|
||
mission_5_title="Mission 5\n FIXME"
|
||
mission_5_text="\n \n FIXME"
|
||
missions_card_description.update({"mission_5-card" : [mission_5_title, mission_5_text]})
|
||
|
||
# Mission 6
|
||
mission_6_title="Mission 6\n FIXME"
|
||
mission_6_text="\n \n FIXME"
|
||
missions_card_description.update({"mission_6-card" : [mission_6_title, mission_6_text]})
|
||
|
||
# Mission 7
|
||
mission_7_title="Mission 7\n FIXME"
|
||
mission_7_text="\n \n FIXME"
|
||
missions_card_description.update({"mission_7-card" : [mission_7_title, mission_7_text]})
|
||
|
||
# Mission 8
|
||
mission_8_title="Mission 8\n FIXME"
|
||
mission_8_text="\n \n FIXME"
|
||
missions_card_description.update({"mission_8-card" : [mission_8_title, mission_8_text]})
|
||
|
||
# Description des cartes missions
|
||
|
||
def get_missions_card():
|
||
return missions_card
|
||
|
||
def get_card_description():
|
||
return missions_card_description
|
||
|
||
###############################################################################
|
||
# Map
|
||
###############################################################################
|
||
|
||
# Initialization
|
||
def map_init():
|
||
scene.objects['Terrain']['map_tile_montain']= [[-6,11],[-6,10],[-7,10],[-8,10],[-9,10],[-10,10],[-11,10],[-12,10]]
|
||
scene.objects['Terrain']['map_tile_colony']= []
|
||
|
||
# Landscape
|
||
# file_path = 'asset/map/map1-landscape.blend'
|
||
# inner_path = 'Object'
|
||
# object_name = 'Landscape'
|
||
# bpy.ops.wm.append(
|
||
# filepath=os.path.join(file_path, inner_path, object_name),
|
||
# directory=os.path.join(file_path, inner_path),
|
||
# filename=object_name)
|
||
|
||
# Reset de la map
|
||
def map_reset():
|
||
scene.objects['Points']['step']=0
|
||
scene.objects['Points']['nbligne']=0
|
||
|
||
# Mission
|
||
if scene.objects['Terrain']['mission_current']==1:
|
||
mission_init= mission_1_init
|
||
mission_aim= mission_1_aim
|
||
|
||
# Cacher les balises
|
||
for i in range (100):
|
||
beacon = scene.objects["Beacon-"+str(i)]
|
||
beacon.worldPosition=[29,1+i,0.2]
|
||
beacon.setVisible(False,True)
|
||
beacon['activated']=False
|
||
scene.objects['Terrain']['map_tile_beacon']= []
|
||
|
||
# Initialisation du rover
|
||
obj = scene.objects['Rover']
|
||
obj.worldPosition.x = mission_init[0]
|
||
obj.worldPosition.y = mission_init[1]
|
||
obj.worldPosition.z = 0.25
|
||
applyRotationTo(obj, 0, 0, 0, True)
|
||
if mission_init[2] == "n":
|
||
obj.applyRotation((0, 0, math.pi), True)
|
||
if mission_init[2] == "e":
|
||
obj.applyRotation((0, 0, math.pi/2), True)
|
||
if mission_init[2] == "w":
|
||
obj.applyRotation((0, 0, -math.pi/2), True)
|
||
|
||
# Initialisation des objectifs
|
||
obj_aim = scene.objects['Map_aim']
|
||
obj_aim.worldPosition.x = mission_aim[0]
|
||
obj_aim.worldPosition.y = mission_aim[1]
|
||
obj_aim.worldPosition.z = 0.5
|
||
|
||
###############################################################################
|
||
# Fonction bas niveau
|
||
###############################################################################
|
||
|
||
##
|
||
# Atteindre une orientation
|
||
##
|
||
|
||
def applyRotationTo(obj, rx=None, ry=None, rz=None, Local=True):
|
||
rres=0.001 # resolution rotation
|
||
|
||
# x
|
||
if rx is not None:
|
||
while (abs(rx-obj.worldOrientation.to_euler().x) > rres) :
|
||
if obj.worldOrientation.to_euler().x-rx > rres:
|
||
obj.applyRotation((-rres, 0, 0), Local)
|
||
if rx-obj.worldOrientation.to_euler().x > rres:
|
||
obj.applyRotation((rres, 0, 0), Local)
|
||
# print ("delta x ",rx-obj.worldOrientation.to_euler().x)
|
||
|
||
# y
|
||
if ry is not None:
|
||
while (abs(ry-obj.worldOrientation.to_euler().y) > rres) :
|
||
if obj.worldOrientation.to_euler().y-ry > rres:
|
||
obj.applyRotation((0, -rres, 0), Local)
|
||
if ry-obj.worldOrientation.to_euler().y > rres:
|
||
obj.applyRotation((0, rres, 0), Local)
|
||
# print ("delta y ",ry-obj.worldOrientation.to_euler().y)
|
||
|
||
# z
|
||
if rz is not None:
|
||
while (abs(rz-obj.worldOrientation.to_euler().z) > rres) :
|
||
if obj.worldOrientation.to_euler().z-rz > rres:
|
||
obj.applyRotation((0, 0, -rres), Local)
|
||
if rz-obj.worldOrientation.to_euler().z > rres:
|
||
obj.applyRotation((0, 0, rres), Local)
|
||
# print ("delta z ",rz-obj.worldOrientation.to_euler().z)
|