bcp de characters

This commit is contained in:
E250429F
2026-09-03 09:43:13 +02:00
parent a061aff066
commit 025a866eef
1175 changed files with 85837 additions and 286 deletions
+89
View File
@@ -0,0 +1,89 @@
extends CharacterBody3D
@export var player: Node3D
@export var follow_speed: float = 4.0
@export var right_offset: float = 2.5
@export var forward_offset: float = 1
@export var car_cinematic : bool = false
@onready var anim_player: AnimationPlayer = $frog/AnimationPlayer
var size : float = 0.5
@onready var arms: MeshInstance3D = $frog/Armature/Skeleton3D/arms
@onready var body: MeshInstance3D = $frog/Armature/Skeleton3D/body
@onready var eyes: MeshInstance3D = $frog/Armature/Skeleton3D/eyes
@onready var feet: MeshInstance3D = $frog/Armature/Skeleton3D/feet
@onready var hands: MeshInstance3D = $frog/Armature/Skeleton3D/hands
@onready var legs: MeshInstance3D = $frog/Armature/Skeleton3D/legs
@onready var mesh = [ arms, body, eyes, feet, hands, legs ]
# Variables pour la gravité
var gravity = ProjectSettings.get_setting("physics/3d/default_gravity")
func _ready() -> void:
if !car_cinematic:
scale = Vector3( size, size, size )
func _process(delta: float) -> void:
if car_cinematic:
if anim_player.current_animation != "idle":
anim_player.play("idle")
else:
scale_frog()
# transparent blue color
var dist = global_transform.origin.distance_to(player.camera.global_transform.origin)
for m in mesh:
for i in m.get_surface_override_material_count():
var mat = m.get_active_material(i)
if mat:
mat.set_shader_parameter("object_dist_to_camera", dist)
func _physics_process(delta):
if not player or car_cinematic:
return
# Appliquer la gravité
if not is_on_floor():
velocity.y -= gravity * delta
var target_position = player.global_position + (player.global_transform.basis.x * right_offset) + (-player.global_transform.basis.z * forward_offset)
global_position.y = target_position.y
var direction = global_position.direction_to(target_position)
var distance = global_position.distance_to(target_position)
if distance > 15: # tp
target_position = player.global_position + (player.global_transform.basis.x * right_offset) + (-player.global_transform.basis.z * (-forward_offset*4) )
global_position = target_position
velocity.x = 0
velocity.z = 0
elif distance > 0.5: # walk
velocity.x = direction.x * follow_speed
velocity.z = direction.z * follow_speed
else: # idle
velocity.x = 0
velocity.z = 0
var look_target = player.global_position
look_target.y = global_position.y
look_at(look_target, Vector3.UP)
var real_speed = Vector2(get_real_velocity().x, get_real_velocity().z).length()
# Si frog n'est pas bloquée par un mur
if real_speed > 0.1:
size += 0.0
if anim_player.current_animation != "walk":
anim_player.play("walk", 0.2)
else:
if anim_player.current_animation != "idle":
anim_player.play("idle", 0.2)
move_and_slide()
func scale_frog():
var tween = create_tween()
var final_scale = Vector3(size, size, size)
tween.tween_property(self, "scale", final_scale, 2)