From 324144cac84227aecd582e51288173e7fa0b9bda Mon Sep 17 00:00:00 2001 From: Clifton Palmer Date: Sun, 15 Dec 2024 12:04:00 +0200 Subject: [PATCH] Initial project --- .gitattributes | 2 ++ .gitignore | 5 +++++ icon.svg | 1 + map/world.gd | 6 ++++++ map/world.tscn | 41 +++++++++++++++++++++++++++++++++++++ player/player.gd | 22 ++++++++++++++++++++ player/player.tscn | 23 +++++++++++++++++++++ project.godot | 44 ++++++++++++++++++++++++++++++++++++++++ skins/bike/bike.glb | Bin 0 -> 15852 bytes skins/bike/bike.tscn | 8 ++++++++ textures/untextured.png | Bin 0 -> 6276 bytes 11 files changed, 152 insertions(+) create mode 100644 .gitattributes create mode 100644 .gitignore create mode 100644 icon.svg create mode 100644 map/world.gd create mode 100644 map/world.tscn create mode 100644 player/player.gd create mode 100644 player/player.tscn create mode 100644 project.godot create mode 100644 skins/bike/bike.glb create mode 100644 skins/bike/bike.tscn create mode 100644 textures/untextured.png diff --git a/.gitattributes b/.gitattributes new file mode 100644 index 0000000..8ad74f7 --- /dev/null +++ b/.gitattributes @@ -0,0 +1,2 @@ +# Normalize EOL for all files that Git considers text files. +* text=auto eol=lf diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..ae14545 --- /dev/null +++ b/.gitignore @@ -0,0 +1,5 @@ +# Godot 4+ specific ignores +.godot/ +/android/ +*.import +*swp diff --git a/icon.svg b/icon.svg new file mode 100644 index 0000000..9d8b7fa --- /dev/null +++ b/icon.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/map/world.gd b/map/world.gd new file mode 100644 index 0000000..d1979f7 --- /dev/null +++ b/map/world.gd @@ -0,0 +1,6 @@ +extends Node3D + + +func _input(event: InputEvent) -> void: + if event.is_action_pressed("ui_cancel"): + get_tree().quit() diff --git a/map/world.tscn b/map/world.tscn new file mode 100644 index 0000000..a3f6d32 --- /dev/null +++ b/map/world.tscn @@ -0,0 +1,41 @@ +[gd_scene load_steps=7 format=3 uid="uid://6tmryoxhs3yq"] + +[ext_resource type="PackedScene" uid="uid://dysxftv7xniv0" path="res://player/player.tscn" id="1_3tqxd"] +[ext_resource type="Script" path="res://map/world.gd" id="1_mjcfj"] +[ext_resource type="Texture2D" uid="uid://cp8pv6wya3ep2" path="res://textures/untextured.png" id="2_sxhh7"] + +[sub_resource type="StandardMaterial3D" id="StandardMaterial3D_ul8mq"] +albedo_color = Color(0.199732, 0.199732, 0.199732, 1) +albedo_texture = ExtResource("2_sxhh7") +uv1_scale = Vector3(20, 20, 20) +texture_filter = 0 + +[sub_resource type="PlaneMesh" id="PlaneMesh_43sel"] +material = SubResource("StandardMaterial3D_ul8mq") +size = Vector2(50, 50) + +[sub_resource type="ConcavePolygonShape3D" id="ConcavePolygonShape3D_mhr6o"] +data = PackedVector3Array(25, 0, 25, -25, 0, 25, 25, 0, -25, -25, 0, 25, -25, 0, -25, 25, 0, -25) + +[node name="World" type="Node3D"] +script = ExtResource("1_mjcfj") + +[node name="map" type="Node3D" parent="."] + +[node name="DirectionalLight3D" type="DirectionalLight3D" parent="map"] +transform = Transform3D(-0.866025, -0.433013, 0.25, 0, 0.5, 0.866025, -0.5, 0.75, -0.433013, 0, 10, 0) +shadow_enabled = true + +[node name="MeshInstance3D" type="MeshInstance3D" parent="map"] +mesh = SubResource("PlaneMesh_43sel") +skeleton = NodePath("../..") + +[node name="StaticBody3D" type="StaticBody3D" parent="map/MeshInstance3D"] + +[node name="CollisionShape3D" type="CollisionShape3D" parent="map/MeshInstance3D/StaticBody3D"] +shape = SubResource("ConcavePolygonShape3D_mhr6o") + +[node name="player" parent="." instance=ExtResource("1_3tqxd")] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, -16) +speed = 5.0 +distance = 3.0 diff --git a/player/player.gd b/player/player.gd new file mode 100644 index 0000000..27754a4 --- /dev/null +++ b/player/player.gd @@ -0,0 +1,22 @@ +extends CharacterBody3D + +@export_category("Movement") +@export var speed = 5.0 + +@export_category("Camera") +@export var distance = 3.0 + +@onready var _springArm = $SpringArm3D +@onready var _skin = %skin + + + +func _input(event: InputEvent) -> void: + if event.is_action_pressed("player_left"): + global_rotate(Vector3.UP, PI/2) + elif event.is_action_pressed("player_right"): + global_rotate(Vector3.UP, -PI/2) + +func _physics_process(delta: float) -> void: + velocity = global_transform.basis.z * speed + move_and_slide() diff --git a/player/player.tscn b/player/player.tscn new file mode 100644 index 0000000..e52446e --- /dev/null +++ b/player/player.tscn @@ -0,0 +1,23 @@ +[gd_scene load_steps=4 format=3 uid="uid://dysxftv7xniv0"] + +[ext_resource type="Script" path="res://player/player.gd" id="1_kh0vu"] +[ext_resource type="PackedScene" uid="uid://d13jnq5vpvhl0" path="res://skins/bike/bike.tscn" id="1_m3abw"] + +[sub_resource type="BoxShape3D" id="BoxShape3D_vtbkq"] +size = Vector3(0.25116, 0.472717, 0.987427) + +[node name="Player" type="CharacterBody3D"] +script = ExtResource("1_kh0vu") + +[node name="skin" parent="." instance=ExtResource("1_m3abw")] +unique_name_in_owner = true + +[node name="CollisionShape3D" type="CollisionShape3D" parent="."] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0.00430298, 0.24234, 0.0166626) +shape = SubResource("BoxShape3D_vtbkq") + +[node name="SpringArm3D" type="SpringArm3D" parent="."] +transform = Transform3D(-1, 0, -8.74228e-08, -2.26267e-08, 0.965926, 0.258819, 8.44439e-08, 0.258819, -0.965926, 0, 0.453074, 0) +spring_length = 5.0 + +[node name="Camera3D" type="Camera3D" parent="SpringArm3D"] diff --git a/project.godot b/project.godot new file mode 100644 index 0000000..c16c1f2 --- /dev/null +++ b/project.godot @@ -0,0 +1,44 @@ +; Engine configuration file. +; It's best edited using the editor UI and not directly, +; since the parameters that go here are not all obvious. +; +; Format: +; [section] ; section goes between [] +; param=value ; assign values to parameters + +config_version=5 + +[application] + +config/name="Lightcycles" +run/main_scene="res://map/world.tscn" +config/features=PackedStringArray("4.3", "Forward Plus") +config/icon="res://icon.svg" + +[display] + +window/size/viewport_width=2304 +window/size/viewport_height=1296 + +[input] + +player_left={ +"deadzone": 0.5, +"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":83,"key_label":0,"unicode":115,"location":0,"echo":false,"script":null) +] +} +player_right={ +"deadzone": 0.5, +"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":70,"key_label":0,"unicode":102,"location":0,"echo":false,"script":null) +] +} +player_forward={ +"deadzone": 0.5, +"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":69,"key_label":0,"unicode":101,"location":0,"echo":false,"script":null) +] +} +player_backward={ +"deadzone": 0.5, +"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":68,"key_label":0,"unicode":100,"location":0,"echo":false,"script":null) +] +} diff --git a/skins/bike/bike.glb b/skins/bike/bike.glb new file mode 100644 index 0000000000000000000000000000000000000000..b8bd984b4f8247af0e32f90e41770e8998b8b18d GIT binary patch literal 15852 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 bRnTe7oQ|Ez>8=fZjE3?x zI*hiLMjMI4x@BDaMW!o8{#u2p%1*mAAG17)Y9k(Bo$%z>hGVN0Pkv484R@aO`mogc zHkIq`rg6NU>-e+xNKG2mFd9muNn