import bge # Bibliothèque Blender Game Engine (UPBGE) import bpy # Blender import math ############################################################################### # fop.py # @title: module principale du jeu Frankie on Platform # @project: Frankie on Platform # @lang: fr # @authors: Philippe Roy # @copyright: Copyright (C) 2023 Philippe Roy # @license: GNU GPL ############################################################################### # UPBGE scene scene = bge.logic.getCurrentScene() eevee = bpy.context.scene.eevee # print("Objets de la scene : ", scene.objects) # Lister les objets de la scène # Constantes JUST_ACTIVATED = bge.logic.KX_INPUT_JUST_ACTIVATED JUST_RELEASED = bge.logic.KX_INPUT_JUST_RELEASED ACTIVATE = bge.logic.KX_INPUT_ACTIVE ############################################################################### # Mouvements ############################################################################### ### # Flèches pour avancer, reculer et tourner ### def clavier(cont): obj = cont.owner obj_cam = scene.objects['Camera'] keyboard = bge.logic.keyboard pas_lineaire = 0.1 pas_courrir = 0.2 pas_angulaire = 0.05 pas_angulaire_fps = 0.025 force_saut = 300 recul_camera = 40 # Avancer : Flèche haut - Up arrow if keyboard.inputs[bge.events.UPARROWKEY].status[0] == ACTIVATE: if obj['courrir']<20: obj.applyMovement((0,-pas_lineaire,0), True) obj['courrir']+=1 else: obj.applyMovement((0,-pas_courrir,0), True) if keyboard.inputs[bge.events.UPARROWKEY].status[0] != ACTIVATE and obj['courrir']>0: obj['courrir']=0 # Reculer : Flèche bas - Down arrow if keyboard.inputs[bge.events.DOWNARROWKEY].status[0] == ACTIVATE: obj.applyMovement((0,pas_lineaire,0), True) # Tourner gauche : Flèche gauche - Left arrow if keyboard.inputs[bge.events.LEFTARROWKEY].status[0] == ACTIVATE: if obj_cam['fps']: obj.applyRotation((0, 0,pas_angulaire_fps), True) else: obj.applyRotation((0, 0,pas_angulaire), True) # Tourner droite : Flèche droit - Right arrow if keyboard.inputs[bge.events.RIGHTARROWKEY].status[0] == ACTIVATE: if obj_cam['fps']: obj.applyRotation((0, 0,-pas_angulaire_fps), True) else: obj.applyRotation((0, 0,-pas_angulaire), True) # Saut if keyboard.inputs[bge.events.SPACEKEY].status[0] == ACTIVATE: objs_sol=('Terrain', 'Platforme', 'Pont 1', 'Pont 2') for obj_sol in objs_sol: if obj.collide(scene.objects[obj_sol])[0]: if len(obj.collide(scene.objects[obj_sol])[1])>0: obj.applyForce((0, 0,force_saut), True) break # Caméra FPS if JUST_ACTIVATED in keyboard.inputs[bge.events.FKEY].queue: if obj_cam['fps']==False: scene.active_camera = scene.objects["Camera_fps"] obj_cam['fps'] = True else: scene.active_camera = scene.objects["Camera"] obj_cam['fps'] = False # Recul caméra if keyboard.inputs[bge.events.EKEY].status[0] == ACTIVATE and obj_cam['macro']==False: obj_cam.applyMovement((0,0,recul_camera), True) obj_cam['macro'] = True if keyboard.inputs[bge.events.EKEY].status[0] != ACTIVATE and obj_cam['macro']==True: obj_cam.applyMovement((0,0,-recul_camera), True) obj_cam['macro'] = False # Saut sur les téléporte (mode debug) : avancer if JUST_ACTIVATED in keyboard.inputs[bge.events.ZKEY].queue and obj['spawn']<8: obj['spawn'] +=1 obj_spawn = scene.objects['Spawn '+str(obj['spawn'])] print (obj_spawn['sens']) obj.worldPosition = obj_spawn.worldPosition obj.applyRotation((0, 0, -obj.worldOrientation.to_euler().z+obj_spawn['sens']), False) # Saut sur les téléportes(mode debug) : reculer if JUST_ACTIVATED in keyboard.inputs[bge.events.AKEY].queue and obj['spawn']>0: obj['spawn'] -=1 obj_spawn = scene.objects['Spawn '+str(obj['spawn'])] print (obj_spawn['sens']) obj.worldPosition = obj_spawn.worldPosition obj.applyRotation((0, 0, -obj.worldOrientation.to_euler().z+obj_spawn['sens']), False) ### # Suivi par la caméra ### def camera_track (cont): cont.owner.worldPosition = scene.objects['Frankie'].worldPosition ############################################################################### # Cycle ############################################################################### # Initialisation de la scène def init(cont): obj = cont.owner # Init EEVEE eevee.use_taa_reprojection = True eevee.use_ssr = True # Screen space reflection eevee.use_ssr_refraction = True # Screen space refractions eevee.use_ssr_halfres = True eevee.use_gtao = False eevee.taa_render_samples = 64 eevee.taa_samples = 16 eevee.use_volumetric_lights = True eevee.use_volumetric_shadows = False eevee.shadow_cascade_size='1024' eevee.shadow_cube_size='512' # Pancartes scene.objects['Frankie']['spawn']=0 for i in range (1, 7): scene.objects['Pancarte '+str(i)].setVisible(False,True) # Animation plateforme start = 1 end = 200 mode = bge.logic.KX_ACTION_MODE_LOOP speed = 0.5 scene.objects['Platforme'].playAction('Platforme-action', start, end, 0, 1, 1.0, mode, 0.0, 0, speed) # Chute def chute(cont): obj = cont.owner if obj.worldPosition.z<=-9 : obj_spawn = scene.objects['Spawn '+str(obj['spawn'])] obj.worldPosition = obj_spawn.worldPosition obj.applyRotation((0, 0, -obj.worldOrientation.to_euler().z+math.pi), False) # Checkpoint def checkpoint(cont): obj = cont.owner obj_i=int(obj.name[6:-7]) obj_frankie = scene.objects['Frankie'] if obj_i > obj_frankie['spawn']: obj_frankie['spawn']=obj_i scene.objects['Pancarte '+str(obj_i)].setVisible(True,True) # Ressort def ressort(cont): obj = cont.owner sensor = obj.sensors['Collision'] force_saut = 1000 obj_ressort=scene.objects[obj.name[:-7]] obj_frankie = scene.objects['Frankie'] if sensor.positive: start = 1, end = 16, mode = bge.logic.KX_ACTION_MODE_PLAY, speed = 0.5 obj_ressort.playAction(obj_ressort.name+'-action', start, end, 0, 1, 1.0, mode, 0.0, 0, speed) obj_frankie.applyForce((0, 0,force_saut), True) ############################################################################### # Gestion du Joystick (Joystick USB) ############################################################################### # def joystick(cont): # obj = cont.owner # joystickIndex = 0 #int from 0 to 6 # joy = bge.logic.joysticks[joystickIndex] # events = joy.activeButtons # axis = joy.axisValues[0:4] # resolution = 0.01 # leftStick_x = axis[0]; leftStick_y = axis[1] # rightStick_x = axis[2]; rightStick_y = axis[3] # #if any button is pressed # # if events: # # print(events) #spit out integer index of pressed buttons # # if 0 in events: # # doSomething() # # Up # if leftStick_y <-0.1 : # obj.applyRotation((-resolution,0,0), False) # # Down # if leftStick_y >0.1 : # obj.applyRotation((resolution,0,0), False) # # Left # if leftStick_x <-0.1 : # obj.applyRotation((0, -resolution,0), False) # # Right # if leftStick_x >0.1 : # obj.applyRotation((0, resolution,0), False)