diff --git a/project.godot b/project.godot index c4f8e6a..6afb492 100644 --- a/project.godot +++ b/project.godot @@ -13,7 +13,7 @@ config_version=5 config/name="SkyPrincess" config/description="a prototype game, for testing, frenzy mechanics, music, NPCs, and player controller" config/version="25.2" -run/main_scene="uid://dg1b5q643boy5" +run/main_scene="uid://c3r8fger66hy0" config/features=PackedStringArray("4.5", "Forward Plus") run/max_fps=60 diff --git a/scenes/characters/player.tscn b/scenes/characters/player.tscn new file mode 100644 index 0000000..d4bea09 --- /dev/null +++ b/scenes/characters/player.tscn @@ -0,0 +1,25 @@ +[gd_scene load_steps=4 format=3 uid="uid://player_scene"] + +[ext_resource type="Script" path="res://scripts/player.gd" id="1_player"] + +[sub_resource type="CapsuleMesh" id="CapsuleMesh_player"] +height = 2.0 +radial_segments = 8 +rings = 4 + +[sub_resource type="CapsuleShape3D" id="CapsuleShape3D_player"] +height = 2.0 +radius = 0.5 + +[node name="Player" type="CharacterBody3D"] +script = ExtResource("1_player") + +[node name="MeshInstance3D" type="MeshInstance3D" parent="."] +mesh = SubResource("CapsuleMesh_player") + +[node name="CollisionShape3D" type="CollisionShape3D" parent="."] +shape = SubResource("CapsuleShape3D_player") + +[node name="Camera3D" type="Camera3D" parent="."] +transform = Transform3D(1, 0, 0, 0, 0.866025, 0.5, 0, -0.5, 0.866025, 0, 2, 5) +current = true \ No newline at end of file diff --git a/scenes/characters/player_character.tscn b/scenes/characters/player_character.tscn deleted file mode 100644 index 2489a39..0000000 --- a/scenes/characters/player_character.tscn +++ /dev/null @@ -1,26 +0,0 @@ -[gd_scene load_steps=5 format=3 uid="uid://dpco4vo8rwkq0"] - -[ext_resource type="Script" uid="uid://cyqtabd2e7m8d" path="res://scripts/player_controller.gd" id="1"] - -[sub_resource type="StandardMaterial3D" id="StandardMaterial3D_tfo3t"] -albedo_color = Color(0.11764706, 0.4, 0.9607843, 1) - -[sub_resource type="CapsuleMesh" id="CapsuleMesh_tfo3t"] -material = SubResource("StandardMaterial3D_tfo3t") - -[sub_resource type="CapsuleShape3D" id="CapsuleShape3D_tfo3t"] - -[node name="playerCharacter" type="Node3D"] - -[node name="CharacterBody3D" type="CharacterBody3D" parent="."] -script = ExtResource("1") - -[node name="MeshInstance3D" type="MeshInstance3D" parent="CharacterBody3D"] -mesh = SubResource("CapsuleMesh_tfo3t") -skeleton = NodePath("../..") - -[node name="CollisionShape3D" type="CollisionShape3D" parent="CharacterBody3D"] -shape = SubResource("CapsuleShape3D_tfo3t") - -[node name="Camera3D" type="Camera3D" parent="CharacterBody3D"] -transform = Transform3D(1, 0, 0, 0, 0.9659258, 0.25881904, 0, -0.25881904, 0.9659258, 0, 1.3567054, 2) diff --git a/scenes/levels/test_room.tscn b/scenes/levels/main_level.tscn similarity index 97% rename from scenes/levels/test_room.tscn rename to scenes/levels/main_level.tscn index 43fcb40..612ad95 100644 --- a/scenes/levels/test_room.tscn +++ b/scenes/levels/main_level.tscn @@ -1,11 +1,11 @@ -[gd_scene load_steps=13 format=3 uid="uid://dg1b5q643boy5"] +[gd_scene load_steps=13 format=3 uid="uid://c3r8fger66hy0"] -[ext_resource type="PackedScene" uid="uid://dpco4vo8rwkq0" path="res://scenes/characters/player_character.tscn" id="1_aiegb"] -[ext_resource type="PackedScene" uid="uid://d01yomyxft4qt" path="res://scenes/ui/ui.tscn" id="1_ju58f"] -[ext_resource type="Material" uid="uid://dkulsdbn03prr" path="res://materials/grass.tres" id="2_bd7ek"] -[ext_resource type="PackedScene" uid="uid://dsgxat46qwqbn" path="res://scenes/props/table.tscn" id="2_oqbmf"] -[ext_resource type="PackedScene" uid="uid://b5ah32wouh61i" path="res://scenes/props/chest.tscn" id="3_arrdh"] -[ext_resource type="PackedScene" uid="uid://cn81uqcg16q4b" path="res://scenes/levels/sky_princess.tscn" id="5_sqxie"] +[ext_resource type="PackedScene" uid="uid://d01yomyxft4qt" path="res://scenes/ui/ui.tscn" id="1_geiq8"] +[ext_resource type="Material" uid="uid://dkulsdbn03prr" path="res://materials/grass.tres" id="2_tkkka"] +[ext_resource type="PackedScene" uid="uid://dsgxat46qwqbn" path="res://scenes/props/table.tscn" id="3_8lk3y"] +[ext_resource type="PackedScene" uid="uid://b5ah32wouh61i" path="res://scenes/props/chest.tscn" id="4_h35hl"] +[ext_resource type="PackedScene" uid="uid://cn81uqcg16q4b" path="res://scenes/props/sky_princess.tscn" id="5_kwk8y"] +[ext_resource type="PackedScene" path="res://scenes/characters/player.tscn" id="6_player"] [sub_resource type="ProceduralSkyMaterial" id="ProceduralSkyMaterial_oqbmf"] sky_horizon_color = Color(0.66224277, 0.6717428, 0.6867428, 1) @@ -35,7 +35,7 @@ points = PackedVector3Array(-0.5, -0.5, 0, -0.49765074, -0.5, -0.049040705, -0.4 [node name="testRoom" type="Node3D"] -[node name="ui" parent="." instance=ExtResource("1_ju58f")] +[node name="ui" parent="." instance=ExtResource("1_geiq8")] [node name="WorldEnvironment" type="WorldEnvironment" parent="."] environment = SubResource("Environment_ju58f") @@ -47,21 +47,18 @@ shadow_enabled = true [node name="ground" type="CSGBox3D" parent="."] use_collision = true size = Vector3(48, 0.1, 48) -material = ExtResource("2_bd7ek") +material = ExtResource("2_tkkka") [node name="CSGBox3D" type="CSGBox3D" parent="ground"] transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -10, 0.5499997, -13) size = Vector3(3, 1, 5) -material = ExtResource("2_bd7ek") +material = ExtResource("2_tkkka") [node name="CSGBox3D2" type="CSGBox3D" parent="ground"] transform = Transform3D(1, 0, 0, 0, -0.8660254, 0.49999988, 0, -0.49999988, -0.8660254, -10, 0.98301244, -11.122906) operation = 2 size = Vector3(3, 1, 2) -material = ExtResource("2_bd7ek") - -[node name="playerCharacter" parent="." instance=ExtResource("1_aiegb")] -transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 1.3605117, 1.05, 1.5436046) +material = ExtResource("2_tkkka") [node name="redCharacter" type="MeshInstance3D" parent="."] transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -0.29388237, 1.05, -2.020051) @@ -78,11 +75,14 @@ transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1.227469, 0) billboard = 1 text = "Red NPC" -[node name="table" parent="." instance=ExtResource("2_oqbmf")] +[node name="table" parent="." instance=ExtResource("3_8lk3y")] transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -0.38244724, 0.5513308, -0.3205235) -[node name="chest" parent="." instance=ExtResource("3_arrdh")] +[node name="chest" parent="." instance=ExtResource("4_h35hl")] transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 5, 0.54999995, -11) -[node name="skyPrincess" parent="." instance=ExtResource("5_sqxie")] +[node name="skyPrincess" parent="." instance=ExtResource("5_kwk8y")] transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -10, 115, -220) + +[node name="Player" parent="." instance=ExtResource("6_player")] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1, 4) diff --git a/scenes/levels/sky_princess.tscn b/scenes/props/sky_princess.tscn similarity index 100% rename from scenes/levels/sky_princess.tscn rename to scenes/props/sky_princess.tscn diff --git a/scripts/player.gd b/scripts/player.gd new file mode 100644 index 0000000..c086b24 --- /dev/null +++ b/scripts/player.gd @@ -0,0 +1,30 @@ +extends CharacterBody3D + +@export var speed = 5.0 +@export var jump_velocity = 4.5 + +var gravity = ProjectSettings.get_setting("physics/3d/default_gravity") + +func _physics_process(delta): + # Add gravity + if not is_on_floor(): + velocity.y -= gravity * delta + + # Handle jump + if Input.is_action_just_pressed("ui_accept") and is_on_floor(): + velocity.y = jump_velocity + + # Get input direction + var input_dir = Input.get_vector("ui_left", "ui_right", "ui_up", "ui_down") + var direction = (transform.basis * Vector3(input_dir.x, 0, input_dir.y)).normalized() + + if direction: + # Rotate to face movement direction + look_at(position + direction, Vector3.UP) + 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() \ No newline at end of file diff --git a/scripts/player.gd.uid b/scripts/player.gd.uid new file mode 100644 index 0000000..b0e04fa --- /dev/null +++ b/scripts/player.gd.uid @@ -0,0 +1 @@ +uid://c2oh06p4hqbjv diff --git a/scripts/player_controller.gd b/scripts/player_controller.gd deleted file mode 100644 index fa1ff03..0000000 --- a/scripts/player_controller.gd +++ /dev/null @@ -1,51 +0,0 @@ -extends CharacterBody3D - -@export var speed = 5.0 -@export var sprint_speed = 10.0 -@export var crouch_speed = 2.0 -@export var jump_velocity = 4.5 -@export var mouse_sensitivity = 0.002 -@export var turn_speed = 10.0 - -@onready var camera = $Camera3D - -var gravity = ProjectSettings.get_setting("physics/3d/default_gravity") - -func _ready(): - Input.mouse_mode = Input.MOUSE_MODE_CAPTURED - -func _input(event): - if event is InputEventMouseMotion: - rotate_y(-event.relative.x * mouse_sensitivity) - camera.rotate_x(-event.relative.y * mouse_sensitivity) - camera.rotation.x = clamp(camera.rotation.x, -PI/2, PI/2) - -func _physics_process(delta): - if not is_on_floor(): - velocity.y -= gravity * delta - - if Input.is_action_just_pressed("jump") and is_on_floor(): - velocity.y = jump_velocity - - var input_dir = Input.get_vector("slideLeft", "slideRight", "backward", "forward") - input_dir = -input_dir - var direction = (camera.transform.basis * Vector3(input_dir.x, 0, input_dir.y)).normalized() - - if direction: - var current_speed = speed - if Input.is_action_pressed("sprint"): - current_speed = sprint_speed - elif Input.is_action_pressed("crouch"): - current_speed = crouch_speed - velocity.x = direction.x * current_speed - velocity.z = direction.z * current_speed - - # Smoothly rotate player to face movement direction only if moving forward/backward - if input_dir.y != 0: - var target_angle = atan2(direction.x, direction.z) - rotation.y = lerp_angle(rotation.y, target_angle, delta * turn_speed) - else: - velocity.x = move_toward(velocity.x, 0, speed) - velocity.z = move_toward(velocity.z, 0, speed) - - move_and_slide() diff --git a/scripts/player_controller.gd.uid b/scripts/player_controller.gd.uid deleted file mode 100644 index 299d96c..0000000 --- a/scripts/player_controller.gd.uid +++ /dev/null @@ -1 +0,0 @@ -uid://cyqtabd2e7m8d