using Godot;
using System;

public partial class vision : CharacterBody3D
{
	// --- Variables de la souris et du regard ---
	float lookAngle = 90.0f;
	[Export]
	float mouseSensitivity = 0.2f;

	Vector2 mouseDelta = Vector2.Zero;
	Camera3D camera;

	// --- Variables du clavier ---
	[Export]
	float moveSpeed = 4.0f;
	[Export]
	float gravity = 10.0f;
	[Export]
	float jumpForce = 8.0f;
    [Export]
    float stamina=10.0f;
    int sprint=2f;

    // --- Fonctions de Godot ---
	public override void _Ready()
	{
		base._Ready();
		camera = GetNode<Camera3D>("Camera3D");
		Input.MouseMode = Input.MouseModeEnum.Captured;
	}

    // Gestion des entrées souris
	public override void _Input(InputEvent ev)
	{
		if (ev is InputEventMouseMotion eventMouse)
		{
			mouseDelta += eventMouse.Relative;
		}
	}

    // Rotations de la caméra
	public override void _Process(double delta)
	{
		camera.RotationDegrees -= new Vector3(mouseDelta.Y, 0, 0) * mouseSensitivity;
		camera.RotationDegrees = new Vector3(Mathf.Clamp(camera.RotationDegrees.X, -lookAngle, lookAngle),
			camera.RotationDegrees.Y,
			camera.RotationDegrees.Z
		);

		RotationDegrees -= new Vector3(0, mouseDelta.X, 0) * mouseSensitivity;
		mouseDelta = Vector2.Zero;
	}
    // Déplacements et physique
	public override void _PhysicsProcess(double delta)
	{
		Vector3 velocity = Velocity;

		// 1. Gravité
		if (!IsOnFloor())
		{
			velocity.Y -= gravity * (float)delta;
		}

		// 2. Saut (avec votre action "ui_up")
		if (Input.IsActionJustPressed("ui_accept") && IsOnFloor())
		{
   		 velocity.Y = jumpForce;
		}

		// 3. Direction (touches ZQSD ou flèches)
		Vector2 direction = Vector2.Zero;
		if (Input.IsActionPressed("forward") && IsOnFloor()) direction.Y -= 1;
		if (Input.IsActionPressed("back") && IsOnFloor()) direction.Y += 1;
		if (Input.IsActionPressed("left") && IsOnFloor()) direction.X -= 1;
		if (Input.IsActionPressed("right") && IsOnFloor()) direction.X += 1;
		direction = direction.Normalized();

		// 4. Orientation
		Vector3 forward = GlobalTransform.Basis.Z;
		Vector3 right = GlobalTransform.Basis.X;
		Vector3 moveDirection = (forward * direction.Y + right * direction.X).Normalized();

		velocity.X = moveDirection.X * moveSpeed;
		velocity.Z = moveDirection.Z * moveSpeed;

        //sprint 
        if (Input.IsActionPressed("run") )
        {
            velocity.Z = moveDirection.X * moveSpeed*sprint
            stamina-=(float)delta;
        }
        


		// 5. Application et mouvement
		Velocity = velocity;
		MoveAndSlide(); 
	}
}

Embed on website

To embed this project on your website, copy the following code and paste it into your website's HTML: