From 4d27d00b73fa928031115a627d9bb8e75d42a952 Mon Sep 17 00:00:00 2001 From: Derek Dziedzic Date: Mon, 23 Jun 2025 21:29:10 -0500 Subject: [PATCH] working on player character --- Prefabs/PlayerCamera.tscn | 8 ++++ Prefabs/player.tscn | 81 +++++++++++++++++++++++++++++++++++ Scenes/TestScene1.tscn | 82 ++++++++++++------------------------ Scripts/mouse_pos.gd | 61 +++++++++++++++++++++++++++ Scripts/mouse_pos.gd.uid | 1 + Scripts/player.gd | 34 +++++++++++++++ Scripts/player.gd.uid | 1 + Scripts/player_camera.gd | 16 +++++++ Scripts/player_camera.gd.uid | 1 + project.godot | 36 ++++++++++++++++ 10 files changed, 265 insertions(+), 56 deletions(-) create mode 100644 Prefabs/PlayerCamera.tscn create mode 100644 Prefabs/player.tscn create mode 100644 Scripts/mouse_pos.gd create mode 100644 Scripts/mouse_pos.gd.uid create mode 100644 Scripts/player.gd create mode 100644 Scripts/player.gd.uid create mode 100644 Scripts/player_camera.gd create mode 100644 Scripts/player_camera.gd.uid diff --git a/Prefabs/PlayerCamera.tscn b/Prefabs/PlayerCamera.tscn new file mode 100644 index 0000000..91d344f --- /dev/null +++ b/Prefabs/PlayerCamera.tscn @@ -0,0 +1,8 @@ +[gd_scene load_steps=2 format=3 uid="uid://hmyrn2pbbhpm"] + +[ext_resource type="Script" uid="uid://bici4k5vkuoos" path="res://Scripts/player_camera.gd" id="1_ocbkm"] + +[node name="Camera3D" type="Camera3D"] +transform = Transform3D(1, 0, 0, 0, 0.25038, 0.968148, 0, -0.968148, 0.25038, 0, 0, 0) +fov = 80.0 +script = ExtResource("1_ocbkm") diff --git a/Prefabs/player.tscn b/Prefabs/player.tscn new file mode 100644 index 0000000..62527c0 --- /dev/null +++ b/Prefabs/player.tscn @@ -0,0 +1,81 @@ +[gd_scene load_steps=8 format=4 uid="uid://bacgd5lmvaxea"] + +[ext_resource type="Script" uid="uid://bcgt64gerg8pv" path="res://Scripts/player.gd" id="1_5wxv7"] +[ext_resource type="Material" uid="uid://b4rpp31c0dx2m" path="res://Assets/Materials/BasicMat.tres" id="1_y6xdh"] + +[sub_resource type="StandardMaterial3D" id="StandardMaterial3D_i3sml"] +resource_name = "Material" +cull_mode = 2 +albedo_color = Color(0.90741, 0.668233, 0.565457, 1) +roughness = 0.5 +metadata/extras = { +"paint_system": {}, +"poliigon_props": {} +} + +[sub_resource type="ArrayMesh" id="ArrayMesh_7d2fd"] +_surfaces = [{ +"aabb": AABB(-0.5, -0.5, -0.5, 1, 1, 1), +"format": 34896613377, +"index_count": 132, +"index_data": PackedByteArray("DgAPAAIACAACAA8ACAAQAAIACAAPAAEAAgAQABEAAgARAA4AEgAQAAgAEgAIAAEAEwARABAAEgAUABAAEwAQABQAAAAOABEAAAARABMADAAOAAAADAAEAA4ADgAEAA8ACwAMAAAAAAATAAMACwAAAAMAAwATAAkAFAAJABMAAwAKAAsAAwAJAAoAFAAFAAkACgAJAAUAEgAFABQACwANAAwADAANAAQACwAKABUACwAVAA0ACgAFABYAFgAVAAoABwAFABIABwAWAAUAEgABAAcAFgAGABUABwAGABYADQAVAAYAAQAGAAcADQAGABcAAQAXAAYABAANABcADwAXAAEABAAXAA8A"), +"lods": [0.100898, PackedByteArray("AAABAAIACAACAAEABQACAAgABQAIAAEACQAAAAIACQACAAUAAAAJAAMACgAJAAUAAwAJAAoACwAAAAMAAwAKAAsACwAMAAAADAAEAAAAAAAEAAEACwANAAwADAANAAQACwAKAA0ABAANAAEADQAKAAYADQAGAAEACgAFAAYABQABAAcAAQAGAAcABwAGAAUA"), 0.588343, PackedByteArray("AAABAAIAAwAAAAIABAAAAAMAAAAEAAEAAwACAAUABAADAAUABQACAAEABAAGAAEABAAFAAYABQABAAcAAQAGAAcABwAGAAUA")], +"name": "Material", +"primitive": 3, +"uv_scale": Vector4(0, 0, 0, 0), +"vertex_count": 24, +"vertex_data": PackedByteArray("ZeYAAGXmAACZGf//ZeYAAGXmZeb//wAAZeYAAJkZAACZGZkZ//8AAGXmZeYAAAAAAABl5pkZAACZGf//mRkAAGXm//9l5gAAZeaZGQAAAACZGZkZAAAAAJkZAACZGQAAmRkAAGXmAAAAAJkZZeYAAGXmmRn//wAAmRll5v//AAD//2XmZeYAAP//mRll5gAAZeb//5kZAAD//5kZmRkAAP//ZeaZGQAAAACZGZkZAACZGWXmAAAAAAAAZeZl5gAA") +}] +blend_shape_mode = 0 + +[sub_resource type="ArrayMesh" id="ArrayMesh_5wxv7"] +resource_name = "Test1_Cube" +_surfaces = [{ +"aabb": AABB(-0.5, -0.5, -0.5, 1, 1, 1), +"attribute_data": PackedByteArray("mVlmRv+fZgaZmZk5ZmZmBplZmXlmJv8/mZllhpjZZkaY2Zl5ZWb//5mZZcb/n5i5/5+Y+f+fZcb/n5k5ZmZlhmWmZkZmZpi5ZmaY+ZlZ/39mJv9/ZiaZef8fZkZmJmZGZmaZOZmZZgZmZpl5mZlmRpmZmXlmZmZGZaaZeWZmmPmZmWXGmZmY+WZmZcaZmZi5ZiZmRmYm/z+Zmf//mZmY+WYmmXlmJv9//x+ZeZmZ/7+ZWWZGmVn/P/9fZkb/n5k5mZn/P5mZmTmZWZl5/1+ZeZlZ/3//n2WGmZllhpmZ/39mJpl5/x9mRmYmZkb/H5l5mZmY+ZmZ////n5j5mZllxv+fZcaZmZj5mZmYuWZmZcZmZpi5mZllxpmZZYb/n2WGmZmYuZmZmXlmZmWGZmaZeZmZZYaZWWZGZmaZeZlZmXlmZmZGZaaZeZmZZkZlpmZGmZmZeZmZmTlmZmZGZmaZOZmZZkaZWf8/mZlmBpmZmTlmJpl5mVlmRplZmXlmJmZG"), +"format": 34896613399, +"index_count": 132, +"index_data": PackedByteArray("GAAZAAIAGAADABkAGgAbABwAGgAdABsAHgAHAAgAHgAQAAcAHwAgACEAHwAiACAAEQAGACMAEQAPAAYAJAAWACUAJgAnAAwAKAApACoADQAKACsALAAtAC4ALwAwADEAMgAzADQANQA2ADcAOAA5ADoAOAA7ADkACQA8AD0ACQASADwAPgA/AEAAPgBBAD8AQgBDAEQAQgBFAEMABAAUABUABAATABQACwBGAEcACwBIAEYASQBKAEsASQBMAEoATQBOAE8ATQBQAE4AUQBSAFMAUQBUAFIAVQBWAFcAVQBYAFYAFwBZAAAAFwAFAFkADgBaAAEADgBbAFoAXABdAF4AXABfAF0A"), +"lods": [0.100898, PackedByteArray("AAABAAIADgACAAEAAAADAAEADwAAAAIADwACAAYABgACABAAAAAPAAQABgAQAAcABgAHAAgAEQAPAAYAEQAGAAoACwAKAAYAEgARAAoAEgAKAAwADAAKAA0ACQASAAwABAATABQABAAUABUAFQAAAAQAFQAUABYAFQAXAAAAFQAWABcAFwAFAAAAFwAWAAUA"), 0.588343, PackedByteArray("AAABAAIAAAADAAEABAAAAAIABQAAAAQABAACAAYABgACAAcABgAHAAgACQAEAAYACQAGAAoACwAKAAYACQAKAAwADAAKAA0A")], +"material": SubResource("StandardMaterial3D_i3sml"), +"name": "Material", +"primitive": 3, +"uv_scale": Vector4(0, 0, 0, 0), +"vertex_count": 96, +"vertex_data": PackedByteArray("ZeYAAGXm/5+ZGf//Zeb8xWXmZeb///+/mRmZGf///79l5gAAmRn/35kZmRn///+fZeZl5gAA//+ZGf//Zeb//5kZ//+ZGf//mRmZGf///MUAAGXmmRlA3JkZ//+ZGarpmRn//2XmlrGZGf//mRlA3GXm//9l5vzFZeaZGQAA//9l5v//Zeb//5kZmRkAAP//AACZGWXm/MVl5pkZAAD/35kZmRkAAP/fmRkAAJkZ/98AAJkZZeaWsZkZAABl5v+fZeaZGf///7+ZGWXm////v///mRmZGVTV//9l5mXmVNX//2XmmRlU1f//mRll5lTVZeb//5kZ//8AAJkZZeZU1QAAZeaZGVTVAABl5mXmVNUAAJkZmRlU1ZkZZeYAAP//mRkAAGXmlrGZGZkZ//+WsZkZZeb//5axAABl5mXmlrGZGQAAmRlA3JkZmRkAAEDcAACZGZkZQNyZGWXmAABA3GXmAABl5paxZeaZGf//lrH//5kZZeaWsWXm//9l5krA//9l5mXmSsBl5mXm//9KwGXmAACZGUDc//+ZGZkZQNxl5pkZAABA3GXm//+ZGRr7ZeZl5gAAGvv//2XmmRka+5kZAACZGfzFAACZGWXm/MWZGQAAZeb8xQAAmRmZGfzFAABl5mXm/MWZGWXm///8xZkZ//9l5vzFAABl5pkZ/MWZGf//mRn8xQAAZeZl5vzFmRll5gAAqukAAJkZmRmq6ZkZmRkAAKrpAABl5pkZqull5mXmAACq6WXm//+ZGarpmRll5gAAqun//2XmmRmq6WXmmRkAAKrp//+ZGZkZqull5mXmAACq6WXmAABl5vzF//+ZGZkZ/MVl5gAAmRn8xf//mRll5vzFZeb//5kZqun//2XmZeaq6WXm//9l5qrp//9l5pkZqull5mXm///8xf//mRll5vzFZeaZGf///MX//2XmZeb8xWXmmRn///+fmRll5v///MVl5mXm///8xZkZAACZGf+/ZeYAAGXm/79l5gAAmRn/v5kZAABl5v+/AAD/f//i/xz//////////wAA/38AAP9//7//v/9//7//f/+//+L/4nHfZ7EEtQS1DegxxnHfZ7H/4v8c/7//v/9//7//v/+//+L/4gAA/38AAP9/AAD/fzJG8JcAAP9///////////+qKqoqqiqqKqoqqiqqKqoq/3//v1TVVNVU1VTVVNVU1VTVVNX/v/+/MkbwlzJG8JcN6DHGDegxxmcxjaBnMY2gZzGNoHHfZ7HxF8058RfNOfEXzTnFyEUHxchFB8XIRQeNIJdOjSCXTo0gl04Eta6oBLWuqAS1rqj+Of6c/jn+nP45/pz+Of6c/+L/4v/i/+L/4v25/+L9uf/i/bn/4v25+sr6yvrK+sr6yvrK+sr6ygS1BLUEtQS1BLUEtQQ1BDUENQQ1BDUENQQ1BDX/HAFG/xwBRv8cAUb/HAFGBDX2FQQ19hUENfYVBDX2Ff8c/xz/HP8c/xz/HP8c/xwAAP9//+L/HP/i/xwAAP9/AAD/fwAA/38AAP9/") +}] +blend_shape_mode = 0 +shadow_mesh = SubResource("ArrayMesh_7d2fd") + +[sub_resource type="BoxMesh" id="BoxMesh_5wxv7"] +size = Vector3(1.59, 0.4, 0.375) + +[sub_resource type="CapsuleShape3D" id="CapsuleShape3D_y5hcb"] +radius = 0.501894 +height = 1.30188 + +[node name="Player" type="CharacterBody3D"] +script = ExtResource("1_5wxv7") + +[node name="Body" type="MeshInstance3D" parent="."] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.5, 0) +material_override = ExtResource("1_y6xdh") +mesh = SubResource("ArrayMesh_5wxv7") +skeleton = NodePath("") +metadata/extras = { +"poliigon_props": {}, +"rr_curve_obj": {} +} + +[node name="OmniLight3D" type="OmniLight3D" parent="Body"] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1.37607, 0) +light_energy = 0.1 + +[node name="MeshInstance3D" type="MeshInstance3D" parent="Body"] +transform = Transform3D(-0.487982, 0, -0.872854, 0, 1, 0, 0.872854, 0, -0.487982, 0.351417, 0.11253, -0.601462) +mesh = SubResource("BoxMesh_5wxv7") +skeleton = NodePath("../..") + +[node name="CollisionShape3D" type="CollisionShape3D" parent="."] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.5, 0) +shape = SubResource("CapsuleShape3D_y5hcb") diff --git a/Scenes/TestScene1.tscn b/Scenes/TestScene1.tscn index c360179..70a2a29 100644 --- a/Scenes/TestScene1.tscn +++ b/Scenes/TestScene1.tscn @@ -1,7 +1,9 @@ -[gd_scene load_steps=24 format=4 uid="uid://dbqyyunvx6fdj"] +[gd_scene load_steps=25 format=4 uid="uid://dbqyyunvx6fdj"] [ext_resource type="Material" uid="uid://b4rpp31c0dx2m" path="res://Assets/Materials/BasicMat.tres" id="1_8lor2"] +[ext_resource type="PackedScene" uid="uid://hmyrn2pbbhpm" path="res://Prefabs/PlayerCamera.tscn" id="2_qq11w"] [ext_resource type="PackedScene" uid="uid://bj1y0fbjtul4a" path="res://Assets/post_processing.tscn" id="2_vab8d"] +[ext_resource type="PackedScene" uid="uid://bacgd5lmvaxea" path="res://Prefabs/player.tscn" id="3_hfnh2"] [sub_resource type="ProceduralSkyMaterial" id="ProceduralSkyMaterial_31lxn"] sky_top_color = Color(0.1, 0.1, 0.1, 1) @@ -25,49 +27,8 @@ fog_light_color = Color(0.117, 0.14115, 0.18, 1) fog_light_energy = 1.65 fog_density = 1.0 -[sub_resource type="StandardMaterial3D" id="StandardMaterial3D_i3sml"] -resource_name = "Material" -cull_mode = 2 -albedo_color = Color(0.90741, 0.668233, 0.565457, 1) -roughness = 0.5 -metadata/extras = { -"paint_system": {}, -"poliigon_props": {} -} - -[sub_resource type="ArrayMesh" id="ArrayMesh_7d2fd"] -_surfaces = [{ -"aabb": AABB(-0.5, -0.5, -0.5, 1, 1, 1), -"format": 34896613377, -"index_count": 132, -"index_data": PackedByteArray("DgAPAAIACAACAA8ACAAQAAIACAAPAAEAAgAQABEAAgARAA4AEgAQAAgAEgAIAAEAEwARABAAEgAUABAAEwAQABQAAAAOABEAAAARABMADAAOAAAADAAEAA4ADgAEAA8ACwAMAAAAAAATAAMACwAAAAMAAwATAAkAFAAJABMAAwAKAAsAAwAJAAoAFAAFAAkACgAJAAUAEgAFABQACwANAAwADAANAAQACwAKABUACwAVAA0ACgAFABYAFgAVAAoABwAFABIABwAWAAUAEgABAAcAFgAGABUABwAGABYADQAVAAYAAQAGAAcADQAGABcAAQAXAAYABAANABcADwAXAAEABAAXAA8A"), -"lods": [0.100898, PackedByteArray("AAABAAIACAACAAEABQACAAgABQAIAAEACQAAAAIACQACAAUAAAAJAAMACgAJAAUAAwAJAAoACwAAAAMAAwAKAAsACwAMAAAADAAEAAAAAAAEAAEACwANAAwADAANAAQACwAKAA0ABAANAAEADQAKAAYADQAGAAEACgAFAAYABQABAAcAAQAGAAcABwAGAAUA"), 0.588343, PackedByteArray("AAABAAIAAwAAAAIABAAAAAMAAAAEAAEAAwACAAUABAADAAUABQACAAEABAAGAAEABAAFAAYABQABAAcAAQAGAAcABwAGAAUA")], -"name": "Material", -"primitive": 3, -"uv_scale": Vector4(0, 0, 0, 0), -"vertex_count": 24, -"vertex_data": PackedByteArray("ZeYAAGXmAACZGf//ZeYAAGXmZeb//wAAZeYAAJkZAACZGZkZ//8AAGXmZeYAAAAAAABl5pkZAACZGf//mRkAAGXm//9l5gAAZeaZGQAAAACZGZkZAAAAAJkZAACZGQAAmRkAAGXmAAAAAJkZZeYAAGXmmRn//wAAmRll5v//AAD//2XmZeYAAP//mRll5gAAZeb//5kZAAD//5kZmRkAAP//ZeaZGQAAAACZGZkZAACZGWXmAAAAAAAAZeZl5gAA") -}] -blend_shape_mode = 0 - -[sub_resource type="ArrayMesh" id="ArrayMesh_ipilw"] -resource_name = "Test1_Cube" -_surfaces = [{ -"aabb": AABB(-0.5, -0.5, -0.5, 1, 1, 1), -"attribute_data": PackedByteArray("mVlmRv+fZgaZmZk5ZmZmBplZmXlmJv8/mZllhpjZZkaY2Zl5ZWb//5mZZcb/n5i5/5+Y+f+fZcb/n5k5ZmZlhmWmZkZmZpi5ZmaY+ZlZ/39mJv9/ZiaZef8fZkZmJmZGZmaZOZmZZgZmZpl5mZlmRpmZmXlmZmZGZaaZeWZmmPmZmWXGmZmY+WZmZcaZmZi5ZiZmRmYm/z+Zmf//mZmY+WYmmXlmJv9//x+ZeZmZ/7+ZWWZGmVn/P/9fZkb/n5k5mZn/P5mZmTmZWZl5/1+ZeZlZ/3//n2WGmZllhpmZ/39mJpl5/x9mRmYmZkb/H5l5mZmY+ZmZ////n5j5mZllxv+fZcaZmZj5mZmYuWZmZcZmZpi5mZllxpmZZYb/n2WGmZmYuZmZmXlmZmWGZmaZeZmZZYaZWWZGZmaZeZlZmXlmZmZGZaaZeZmZZkZlpmZGmZmZeZmZmTlmZmZGZmaZOZmZZkaZWf8/mZlmBpmZmTlmJpl5mVlmRplZmXlmJmZG"), -"format": 34896613399, -"index_count": 132, -"index_data": PackedByteArray("GAAZAAIAGAADABkAGgAbABwAGgAdABsAHgAHAAgAHgAQAAcAHwAgACEAHwAiACAAEQAGACMAEQAPAAYAJAAWACUAJgAnAAwAKAApACoADQAKACsALAAtAC4ALwAwADEAMgAzADQANQA2ADcAOAA5ADoAOAA7ADkACQA8AD0ACQASADwAPgA/AEAAPgBBAD8AQgBDAEQAQgBFAEMABAAUABUABAATABQACwBGAEcACwBIAEYASQBKAEsASQBMAEoATQBOAE8ATQBQAE4AUQBSAFMAUQBUAFIAVQBWAFcAVQBYAFYAFwBZAAAAFwAFAFkADgBaAAEADgBbAFoAXABdAF4AXABfAF0A"), -"lods": [0.100898, PackedByteArray("AAABAAIADgACAAEAAAADAAEADwAAAAIADwACAAYABgACABAAAAAPAAQABgAQAAcABgAHAAgAEQAPAAYAEQAGAAoACwAKAAYAEgARAAoAEgAKAAwADAAKAA0ACQASAAwABAATABQABAAUABUAFQAAAAQAFQAUABYAFQAXAAAAFQAWABcAFwAFAAAAFwAWAAUA"), 0.588343, PackedByteArray("AAABAAIAAAADAAEABAAAAAIABQAAAAQABAACAAYABgACAAcABgAHAAgACQAEAAYACQAGAAoACwAKAAYACQAKAAwADAAKAA0A")], -"material": SubResource("StandardMaterial3D_i3sml"), -"name": "Material", -"primitive": 3, -"uv_scale": Vector4(0, 0, 0, 0), -"vertex_count": 96, -"vertex_data": PackedByteArray("ZeYAAGXm/5+ZGf//Zeb8xWXmZeb///+/mRmZGf///79l5gAAmRn/35kZmRn///+fZeZl5gAA//+ZGf//Zeb//5kZ//+ZGf//mRmZGf///MUAAGXmmRlA3JkZ//+ZGarpmRn//2XmlrGZGf//mRlA3GXm//9l5vzFZeaZGQAA//9l5v//Zeb//5kZmRkAAP//AACZGWXm/MVl5pkZAAD/35kZmRkAAP/fmRkAAJkZ/98AAJkZZeaWsZkZAABl5v+fZeaZGf///7+ZGWXm////v///mRmZGVTV//9l5mXmVNX//2XmmRlU1f//mRll5lTVZeb//5kZ//8AAJkZZeZU1QAAZeaZGVTVAABl5mXmVNUAAJkZmRlU1ZkZZeYAAP//mRkAAGXmlrGZGZkZ//+WsZkZZeb//5axAABl5mXmlrGZGQAAmRlA3JkZmRkAAEDcAACZGZkZQNyZGWXmAABA3GXmAABl5paxZeaZGf//lrH//5kZZeaWsWXm//9l5krA//9l5mXmSsBl5mXm//9KwGXmAACZGUDc//+ZGZkZQNxl5pkZAABA3GXm//+ZGRr7ZeZl5gAAGvv//2XmmRka+5kZAACZGfzFAACZGWXm/MWZGQAAZeb8xQAAmRmZGfzFAABl5mXm/MWZGWXm///8xZkZ//9l5vzFAABl5pkZ/MWZGf//mRn8xQAAZeZl5vzFmRll5gAAqukAAJkZmRmq6ZkZmRkAAKrpAABl5pkZqull5mXmAACq6WXm//+ZGarpmRll5gAAqun//2XmmRmq6WXmmRkAAKrp//+ZGZkZqull5mXmAACq6WXmAABl5vzF//+ZGZkZ/MVl5gAAmRn8xf//mRll5vzFZeb//5kZqun//2XmZeaq6WXm//9l5qrp//9l5pkZqull5mXm///8xf//mRll5vzFZeaZGf///MX//2XmZeb8xWXmmRn///+fmRll5v///MVl5mXm///8xZkZAACZGf+/ZeYAAGXm/79l5gAAmRn/v5kZAABl5v+/AAD/f//i/xz//////////wAA/38AAP9//7//v/9//7//f/+//+L/4nHfZ7EEtQS1DegxxnHfZ7H/4v8c/7//v/9//7//v/+//+L/4gAA/38AAP9/AAD/fzJG8JcAAP9///////////+qKqoqqiqqKqoqqiqqKqoq/3//v1TVVNVU1VTVVNVU1VTVVNX/v/+/MkbwlzJG8JcN6DHGDegxxmcxjaBnMY2gZzGNoHHfZ7HxF8058RfNOfEXzTnFyEUHxchFB8XIRQeNIJdOjSCXTo0gl04Eta6oBLWuqAS1rqj+Of6c/jn+nP45/pz+Of6c/+L/4v/i/+L/4v25/+L9uf/i/bn/4v25+sr6yvrK+sr6yvrK+sr6ygS1BLUEtQS1BLUEtQQ1BDUENQQ1BDUENQQ1BDX/HAFG/xwBRv8cAUb/HAFGBDX2FQQ19hUENfYVBDX2Ff8c/xz/HP8c/xz/HP8c/xwAAP9//+L/HP/i/xwAAP9/AAD/fwAA/38AAP9/") -}] -blend_shape_mode = 0 -shadow_mesh = SubResource("ArrayMesh_7d2fd") +[sub_resource type="BoxShape3D" id="BoxShape3D_qq11w"] +size = Vector3(100, 1, 100) [sub_resource type="StandardMaterial3D" id="StandardMaterial3D_cre2v"] @@ -101,6 +62,9 @@ _surfaces = [{ blend_shape_mode = 0 shadow_mesh = SubResource("ArrayMesh_eow34") +[sub_resource type="ConcavePolygonShape3D" id="ConcavePolygonShape3D_qq11w"] +data = PackedVector3Array(-1, -1, 1, -1, 1, -1, -1, 1, 1, -1, -1, 1, -1, -1, -1, -1, 1, -1, -1, -1, -1, 1, 1, -1, -1, 1, -1, -1, -1, -1, 1, -1, -1, 1, 1, -1, 1, -1, -1, 1, 1, 1, 1, 1, -1, 1, -1, -1, 1, -1, 1, 1, 1, 1, 1, -1, 1, -1, 1, 1, 1, 1, 1, 1, -1, 1, -1, -1, 1, -1, 1, 1, -1, -1, -1, 1, -1, 1, 1, -1, -1, -1, -1, -1, -1, -1, 1, 1, -1, 1, 1, 1, -1, -1, 1, 1, -1, 1, -1, 1, 1, -1, 1, 1, 1, -1, 1, 1) + [sub_resource type="StandardMaterial3D" id="StandardMaterial3D_mfp1l"] [sub_resource type="ArrayMesh" id="ArrayMesh_rwltu"] @@ -242,17 +206,15 @@ shadow_mesh = SubResource("ArrayMesh_ib0jm") [node name="WorldEnvironment" type="WorldEnvironment" parent="."] environment = SubResource("Environment_vab8d") -[node name="Test1" type="Node3D" parent="."] +[node name="StaticBody3D" type="StaticBody3D" parent="."] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0.196, 7.041, 1.942) +collision_layer = 128 +collision_mask = 128 -[node name="Cube" type="MeshInstance3D" parent="Test1"] -transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.5, 0) -material_override = ExtResource("1_8lor2") -mesh = SubResource("ArrayMesh_ipilw") -skeleton = NodePath("") -metadata/extras = { -"poliigon_props": {}, -"rr_curve_obj": {} -} +[node name="CollisionShape3D" type="CollisionShape3D" parent="StaticBody3D"] +shape = SubResource("BoxShape3D_qq11w") + +[node name="Test1" type="Node3D" parent="."] [node name="Cube_001" type="MeshInstance3D" parent="Test1"] transform = Transform3D(5, 0, 0, 0, 50, 0, 0, 0, 5, 0, -50, 0) @@ -264,6 +226,11 @@ metadata/extras = { "rr_curve_obj": {} } +[node name="StaticBody3D" type="StaticBody3D" parent="Test1/Cube_001"] + +[node name="CollisionShape3D" type="CollisionShape3D" parent="Test1/Cube_001/StaticBody3D"] +shape = SubResource("ConcavePolygonShape3D_qq11w") + [node name="Cube_002" type="MeshInstance3D" parent="Test1"] transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -4.85093, 0.0576663, 4.81909) material_override = ExtResource("1_8lor2") @@ -304,9 +271,9 @@ metadata/extras = { "rr_curve_obj": {} } -[node name="Camera3D" type="Camera3D" parent="."] +[node name="Camera3D" parent="." node_paths=PackedStringArray("player") instance=ExtResource("2_qq11w")] transform = Transform3D(1, 0, 0, 0, 0.25038, 0.968148, 0, -0.968148, 0.25038, 0.196, 7.041, 1.942) -fov = 80.0 +player = NodePath("../Player") [node name="OmniLight3D" type="OmniLight3D" parent="."] transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -3.66639, 0.974749, -3.73532) @@ -325,3 +292,6 @@ transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -3.26995, 0.974748, 4.40131) light_color = Color(0.833261, 0.5957, 0.32611, 1) [node name="PostProcessing" parent="." instance=ExtResource("2_vab8d")] + +[node name="Player" parent="." instance=ExtResource("3_hfnh2")] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -0.0717504, 0.311536, 0.0210209) diff --git a/Scripts/mouse_pos.gd b/Scripts/mouse_pos.gd new file mode 100644 index 0000000..baf70b1 --- /dev/null +++ b/Scripts/mouse_pos.gd @@ -0,0 +1,61 @@ +# GLOBAL SCRIPT. ACCESS via RaycastSystem.foo() +# Raycast queries are defined here. All other modules can use it. + +extends Node3D + +const RAY_LENGTH := 1000 + +""" +Uses default collision_mask. But can be overrided for custom collision +mask/layers. +Output format: +output_dict = { + "collider": None, # The colliding object (if any) + "collider_id": None, # The colliding object's ID (if any) + "normal": [0, 0, 0], # The surface normal at the intersection point + "position": [0, 0, 0], # The intersection point + "face_index": -1, # The face index at the intersection point + "rid": None, # The intersecting object's RID + "shape": None # The shape index of the colliding shape +} +""" +# Returns raycast result after it hits an object in the world. +# @return Dictionary or null +func _do_raycast_on_mouse_position(collision_mask: int = 0b00000000_00000000_00000000_00000001): + # Raycast related code + var space_state = get_world_3d().direct_space_state + var cam = get_viewport().get_camera_3d() + var mousepos = get_viewport().get_mouse_position() + + var origin = cam.project_ray_origin(mousepos) + var end = origin + cam.project_ray_normal(mousepos) * RAY_LENGTH + var query = PhysicsRayQueryParameters3D.create(origin, end) + query.collide_with_areas = true + query.collision_mask = collision_mask + + var result = space_state.intersect_ray(query) # raycast result + return result + + + +# # # # # # # # # # # # # # # # # # +# # # # # # # # # # # # # # # # # # +# API below: + + +# Gets ray-cast hit position from camera to world. +# @return Vector3 or null +func get_mouse_world_position(collision_mask: int = 0b00000000_00000000_00000000_00000001): + var raycast_result = _do_raycast_on_mouse_position(collision_mask) + if raycast_result: + return raycast_result.position + return null + + +# Gets ray-cast hit object from camera to world. +# @return Object or null +func get_raycast_hit_object(collision_mask: int = 0b00000000_00000000_00000000_00000001): + var raycast_result = _do_raycast_on_mouse_position(collision_mask) + if raycast_result: + return raycast_result.collider + return null diff --git a/Scripts/mouse_pos.gd.uid b/Scripts/mouse_pos.gd.uid new file mode 100644 index 0000000..280d674 --- /dev/null +++ b/Scripts/mouse_pos.gd.uid @@ -0,0 +1 @@ +uid://jinjgqiuwyt7 diff --git a/Scripts/player.gd b/Scripts/player.gd new file mode 100644 index 0000000..eea9775 --- /dev/null +++ b/Scripts/player.gd @@ -0,0 +1,34 @@ +extends CharacterBody3D +class_name Player + +var input_dir + +@onready var body: MeshInstance3D = $Body + + +const MOVE_SPEED = 10.0 +const MOVE_TRANSITION_SPEED = 7.0 + +func _physics_process(delta: float) -> void: + if is_on_floor(): + standard_movement(delta) + + body_look_at_mouse() + apply_gravity(delta) + move_and_slide() + +func body_look_at_mouse(): + var mouse_raycast = MousePos.get_mouse_world_position() + if mouse_raycast != null: + body.look_at(Vector3(mouse_raycast.x,body.global_position.y,mouse_raycast.y),Vector3.UP) + +func apply_gravity(delta): + if !is_on_floor(): + velocity.y -= 9.8 * delta + +func standard_movement(delta): + input_dir = Input.get_vector("move_left", "move_right", "move_forward", "move_backward") + + if input_dir != null: + velocity.x = lerp(velocity.x, input_dir.x * MOVE_SPEED,delta * MOVE_TRANSITION_SPEED) + velocity.z = lerp(velocity.z, input_dir.y * MOVE_SPEED,delta * MOVE_TRANSITION_SPEED) diff --git a/Scripts/player.gd.uid b/Scripts/player.gd.uid new file mode 100644 index 0000000..fe2380e --- /dev/null +++ b/Scripts/player.gd.uid @@ -0,0 +1 @@ +uid://bcgt64gerg8pv diff --git a/Scripts/player_camera.gd b/Scripts/player_camera.gd new file mode 100644 index 0000000..aec2b53 --- /dev/null +++ b/Scripts/player_camera.gd @@ -0,0 +1,16 @@ +extends Camera3D +class_name PlayerCamera + +@export var player : Player + +const CAM_MOVE_SPEED = 5 + +func _physics_process(delta: float) -> void: + follow_player(delta) + + +func follow_player(delta): + var player_pos = player.global_position + + global_position.x = lerp(global_position.x,player_pos.x,delta * CAM_MOVE_SPEED) + global_position.z = lerp(global_position.z,player_pos.z,delta * CAM_MOVE_SPEED) diff --git a/Scripts/player_camera.gd.uid b/Scripts/player_camera.gd.uid new file mode 100644 index 0000000..1804eec --- /dev/null +++ b/Scripts/player_camera.gd.uid @@ -0,0 +1 @@ +uid://bici4k5vkuoos diff --git a/project.godot b/project.godot index 0550205..e01fbf3 100644 --- a/project.godot +++ b/project.godot @@ -11,5 +11,41 @@ config_version=5 [application] config/name="Daily Dungeon" +run/main_scene="uid://dbqyyunvx6fdj" config/features=PackedStringArray("4.4", "GL Compatibility") config/icon="res://icon.svg" + +[autoload] + +MousePos="*res://Scripts/mouse_pos.gd" + +[display] + +window/size/mode=3 + +[input] + +move_left={ +"deadzone": 0.2, +"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":65,"key_label":0,"unicode":97,"location":0,"echo":false,"script":null) +] +} +move_right={ +"deadzone": 0.2, +"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) +] +} +move_forward={ +"deadzone": 0.2, +"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":87,"key_label":0,"unicode":119,"location":0,"echo":false,"script":null) +] +} +move_backward={ +"deadzone": 0.2, +"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) +] +} + +[layer_names] + +3d_physics/layer_8="MouseTable"