extends CharacterBody3D
var rotate_speed = 10.1
const SPEED = 99.09
const JUMP_VELOCITY = 22.3
var gravity = ProjectSettings.get_setting("physics/3d/default_gravity")
@export var FORWARD_JUMP_AMOUNT = -4.7
# --- NUEVAS VARIABLES PARA LANZAR LA PIEDRA ---
# ¡IMPORTANTE! Cambia esta ruta por la de tu escena de la piedra
var stone_scene = preload("res://PROTAGONISTA/BONBADEMANO.tscn")
@export var throw_strength: float = 15.0
# --- NUEVA VARIABLE para la rotación con las teclas Z y X ---
var player_mesh: MeshInstance3D
func _ready():
# --- OBTENER REFERENCIA al nodo MeshInstance3D ---
# Asegúrate de que "MeshInstance3D" es el nombre exacto de tu nodo 3D.
player_mesh = get_node("MeshInstance3D")
# --- NUEVA FUNCIÓN para detectar el clic del ratón ---
func _unhandled_input(event):
if event.is_action_pressed("mouse_left"):
throw_stone()
func _physics_process(delta):
# Aplicar gravedad
if not is_on_floor():
velocity.y -= gravity * delta
# Movimiento de Salto
if Input.is_action_just_pressed("ui_accept") and is_on_floor():
velocity.y = JUMP_VELOCITY
velocity += -transform.basis.z * FORWARD_JUMP_AMOUNT
# --- LÓGICA de rotación para la tecla 'Z' y 'X' (ahora afecta al mesh) ---
if Input.is_key_pressed(KEY_Z):
if player_mesh:
player_mesh.rotate_object_local(Vector3.FORWARD, 1.0 * delta)
if Input.is_key_pressed(KEY_X):
if player_mesh:
player_mesh.rotate_object_local(Vector3.FORWARD, -1.0 * delta)
# --- Tu lógica de movimiento y rotación original ---
if Input.is_action_pressed("GIRAIZQUIERDACONA"):
rotate_y(0.05)
if Input.is_action_pressed("GIRADERECHACOND"):
rotate_y(-0.05)
if Input.is_action_pressed("ANDAALANTECONW"):
translate(Vector3(0.0,0,0.11))
rotate_y(-0.00)
if Input.is_action_pressed("E"):
translate(Vector3(0.01,0,0.22))
rotate_y(-0.00)
if Input.is_action_pressed("ANDAATRASCONS"):
translate(Vector3(0.00,0,-0.02))
rotate_y(-0.00)
rotate_y(rotation_input.y * delta * rotate_speed)
rotate_x(rotation_input.x * delta * rotate_speed)
rotation_input = Vector2.ZERO
var input_dir = Input.get_vector("ui_right", "ui_left", "ui_down", "ui_up")
var direction = (transform.basis * Vector3(input_dir.x, 0, input_dir.y)).normalized()
if direction:
velocity.x = direction.x * SPEED
velocity.z = direction.z * SPEED
else:
velocity.x = move_toward(velocity.x, 0, SPEED)
velocity.z = move_toward(velocity.z, 0, SPEED)
move_and_slide()
var rotation_input: Vector2 = Vector2.ZERO
# --- FUNCIÓN para lanzar la piedra ---
func throw_stone():
var stone_instance = stone_scene.instantiate()
# Posicionar la piedra en la misma posición y rotación que el jugador
stone_instance.global_transform = global_transform
# Obtener la dirección "hacia adelante" del jugador
var direction = global_transform.basis.z
# Aplicar una fuerza inicial para lanzarla
stone_instance.apply_central_impulse(direction * throw_strength)
# Añadir la piedra a la escena principal
get_parent().add_child(stone_instance)
No hay comentarios:
Publicar un comentario