ropy/rp_map1.py

191 lines
7.1 KiB
Python
Raw Normal View History

2022-08-14 08:03:07 +02:00
import bge # Bibliothèque Blender Game Engine (UPBGE)
import bpy # Blender
from rp_lib import * # Bibliothèque Ropy
2022-08-14 08:03:07 +02:00
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
2022-08-14 08:03:07 +02:00
###############################################################################
# Map
###############################################################################
# Initialization
def map_init():
2022-08-26 01:58:49 +02:00
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']= []
2022-08-14 08:03:07 +02:00
# 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
2022-08-14 08:03:07 +02:00
def map_reset():
scene.objects['Points']['step']=0
scene.objects['Points']['nbligne']=0
2022-08-26 01:58:49 +02:00
# Mission
if scene.objects['Terrain']['mission_current']==1:
mission_init= mission_1_init
mission_aim= mission_1_aim
2022-08-26 01:58:49 +02:00
# 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)