ropy/rp_about.py

196 lines
8.7 KiB
Python
Raw Normal View History

import bge # Bibliothèque Blender Game Engine (UPBGE)
import webbrowser
###############################################################################
# rp_about.py
# @title: A propos pour Ropy
# @project: Ropy (Blender-EduTech)
# @lang: fr
# @authors: Philippe Roy <philippe.roy@ac-grenoble.fr>
# @copyright: Copyright (C) 2022 Philippe Roy
# @license: GNU GPL
###############################################################################
scene = bge.logic.getCurrentScene()
# Colors
color_link = (0, 1, 0.857,1) # Turquoise
color_link_hl = (0.799, 0.617, 0.021, 1) # Jaune
# 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
2023-02-05 18:17:16 +01:00
###############################################################################
# Crédits
###############################################################################
credits_description = {
'Blender' : ["Blender","Plateforme de modélisation et d'animation 3D","https://blender.org", "GNU GPL"],
'UPBGE' : ["UPBGE","Moteur de jeu 3D","https://upbge.org", "GNU GPL"],
'Python' : ["Python","Langage de programmation","https://python.org", "PSFL"],
'Pylint' : ["Pylint","Bibliothèque de vérification d'un code Python","https://pylint.pycqa.org", "GNU GPL"],
'pySerial' : ["pySerial","Bibliothèque de communication série","https://pyserial.readthedocs.io", "BSD-3-Clause"],
'wxWidgets' : ["wxWidgets","Bibliothèque GUI","https://www.wxwidgets.org", "wxWindows Library Licence"],
'wxPython' : ["wxPython","API Python de wxWidgets","https://www.wxpython.org", "GNU GPL"],
'Qt5' : ["Qt5","Bibliothèque GUI","https://www.qt.io", "GNU LGPL-3"],
'PyQt' : ["PyQt","API Python de Qt5","https://www.riverbankcomputing.com/software/pyqt","GNU GPL"],
'Polygonrunway' : ["Roman Klčo","Modèles 3D","https://www.patreon.com/polygonrunway/",""],
'KayKit' : ["Kay Lousberg","Modèles 3D","www.kaylousberg.com","CC0 1.0"],
'Kenney' : ["Kenney","Modèles 3D, icônes et sons","https://www.kenney.nl","CC0 1.0"],
'Game-icons.net' : ["Game-icons.net","Icônes","https://game-icons.net","CC BY 3.0"],
'Mainframe' : ["Mainframe","Police de caractères","https://www.dafont.com/fr/mainframe.font", "CC BY 4.0"]}
###############################################################################
# Page About
###############################################################################
##
# Ouverture
##
def open():
scene.objects['About_close'].color= color_link
2023-02-05 18:17:16 +01:00
scene.objects['About_credits'].color= color_link
# Configuration
scene.objects['About_screen-up'].color= color_link
scene.objects['About_screen-down'].color= color_link
scene.objects['About_screen']['Text']= "SCREEN SIZE : "+str(bge.render.getWindowWidth()) +" x "+str(bge.render.getWindowHeight())
2023-02-05 18:17:16 +01:00
scene.objects['About_quality-up'].color= color_link
scene.objects['About_quality-down'].color= color_link
# scene.objects['About_screen']['Text']= "SCREEN SIZE : "+str(bge.render.getWindowWidth()) +" x "+str(bge.render.getWindowHeight())
2023-02-05 18:17:16 +01:00
# Liens
scene.objects['About_link-git'].color= color_link
scene.objects['About_link-gpl'].color= color_link
scene.objects['About_link-upbge'].color= color_link
2023-02-05 18:17:16 +01:00
# Animation
scene.objects['About'].setVisible(True,True)
scene.objects['About'].worldPosition = [0, 1.53623, -1.8] # old [0, 1.53623, -0.892838]
scene.objects['About']['timer'] = 0
scene.objects['About']['anim'] = True
# Boutons < et > ("640x360", "960x540", "1280x720", "1920x1080")
if bge.render.getWindowWidth() <=640:
scene.objects['About_screen-down'].setVisible(False,True)
scene.objects['About_screen-down-colbox'].suspendPhysics (True)
else:
scene.objects['About_screen-down'].setVisible(True,True)
scene.objects['About_screen-down-colbox'].restorePhysics()
if bge.render.getWindowWidth() >= 1920:
scene.objects['About_screen-up'].setVisible(False,True)
scene.objects['About_screen-up-colbox'].suspendPhysics (True)
else:
scene.objects['About_screen-up'].setVisible(True,True)
scene.objects['About_screen-up-colbox'].restorePhysics()
##
# Animation de l'ouverture
##
def open_anim():
resol=0.5
scene.objects['About'].localPosition.y -= 1.09*resol
scene.objects['About'].localPosition.z += 0.85*resol
scene.objects['About']['timer']+=1
if scene.objects['About']['timer']== 40:
scene.objects['About']['anim'] = False
##
# Highlight
##
def hl(cont):
if cont.sensors['MO'].status == JUST_ACTIVATED:
obj = cont.owner
name=obj.name[:-7]
scene.objects[name].color = color_link_hl
if cont.sensors['MO'].status == JUST_RELEASED:
obj = cont.owner
name=obj.name[:-7]
scene.objects[name].color = color_link
##
# Liens
##
def link(cont):
if cont.sensors['Click'].status == JUST_ACTIVATED and cont.sensors['MO'].positive :
obj = cont.owner
name=obj.name[:-7]
link={
'About_link-git' : 'https://gitlab.com/blender-edutech/ropy',
'About_link-gpl' : 'https://www.gnu.org/licenses/gpl-3.0.html',
2023-02-05 18:17:16 +01:00
'About_link-upbge' : 'https://www.upbge.org'}
webbrowser.open(link [name])
def link_hl(cont):
decal = 15
if cont.sensors['MO'].status == JUST_ACTIVATED :
obj = cont.owner
name=obj.name[:-7]
scene.objects[name].color = color_link_hl
if cont.sensors['MO'].status == JUST_RELEASED :
obj = cont.owner
name=obj.name[:-7]
scene.objects[name].color = color_link
2023-02-05 18:17:16 +01:00
###############################################################################
# Page Crédits
###############################################################################
def credits(cont):
if cont.sensors['Click'].status == JUST_ACTIVATED and cont.sensors['MO'].positive :
# Mémorisation de la position des pages avant changement
scene.objects["About"]['init_lx']=scene.objects["About"].worldPosition.x
scene.objects["About"]['init_ly']=scene.objects["About"].worldPosition.y
scene.objects["About"]['init_lz']=scene.objects["About"].worldPosition.z
scene.objects["Credits"]['init_lx']=scene.objects["Credits"].worldPosition.x
scene.objects["Credits"]['init_ly']=scene.objects["Credits"].worldPosition.y
scene.objects["Credits"]['init_lz']=scene.objects["Credits"].worldPosition.z
# Afficher la page Crédits
scene.objects["Credits"].worldPosition.x = scene.objects["About"]['init_lx']
scene.objects["Credits"].worldPosition.y = scene.objects["About"]['init_ly']
scene.objects["Credits"].worldPosition.z = scene.objects["About"]['init_lz']
scene.objects["About"].worldPosition.x = scene.objects["Credits"]['init_lx']
scene.objects["About"].worldPosition.y = scene.objects["Credits"]['init_ly']
scene.objects["About"].worldPosition.z = scene.objects["Credits"]['init_lz']
scene.objects['Credits_close'].color= color_link
scene.objects['About'].setVisible(False,True)
scene.objects['Credits'].setVisible(True,True)
# Afficher les descriptions
credits_description_list=list (credits_description)
for i in range(len(credits_description_list)):
scene.objects["Credits_url-"+str(i+1)]['Text']= credits_description[credits_description_list[i]][0]
scene.objects["Credits_url-"+str(i+1)].color= color_link
scene.objects["Credits_text-"+str(i+1)]['Text']= credits_description[credits_description_list[i]][1]
scene.objects["Credits_license-"+str(i+1)]['Text']= credits_description[credits_description_list[i]][3]
def credits_close(cont):
if cont.sensors['Click'].status == JUST_ACTIVATED and cont.sensors['MO'].positive :
# Revenir à la page About
scene.objects["Credits"].worldPosition.x = scene.objects["Credits"]['init_lx']
scene.objects["Credits"].worldPosition.y = scene.objects["Credits"]['init_ly']
scene.objects["Credits"].worldPosition.z = scene.objects["Credits"]['init_lz']
scene.objects["About"].worldPosition.x = scene.objects["About"]['init_lx']
scene.objects["About"].worldPosition.y = scene.objects["About"]['init_ly']
scene.objects["About"].worldPosition.z = scene.objects["About"]['init_lz']
scene.objects['Credits'].setVisible(False,True)
scene.objects['About'].setVisible(True,True)
def credits_link(cont):
if cont.sensors['Click'].status == JUST_ACTIVATED and cont.sensors['MO'].positive :
obj = cont.owner
idx=int(obj.name[12:-7])
webbrowser.open(credits_description[list(credits_description)[idx-1]][2])