diff --git a/.gitignore b/.gitignore index 50335d9..3e41ddc 100644 --- a/.gitignore +++ b/.gitignore @@ -14,3 +14,9 @@ export_credentials.cfg .mono/ data_*/ mono_crash.*.json +*.import +*.import +models/guitar.glb.import +models/horse.glb.import +models/shark.glb.import +icon.svg.import diff --git a/GlobalVariables.gd b/GlobalVariables.gd index 7016eb3..71bb57d 100644 --- a/GlobalVariables.gd +++ b/GlobalVariables.gd @@ -1,3 +1,4 @@ extends Node +var player var selectedObject diff --git a/Main.tscn b/Main.tscn index 063652e..da35cbd 100644 --- a/Main.tscn +++ b/Main.tscn @@ -1,4 +1,4 @@ -[gd_scene load_steps=10 format=3 uid="uid://bt5a8babn8gyn"] +[gd_scene load_steps=12 format=3 uid="uid://bt5a8babn8gyn"] [ext_resource type="PackedScene" uid="uid://du8lkrvnc16gl" path="res://objects/Rotatable.tscn" id="1_glv2v"] [ext_resource type="PackedScene" uid="uid://cbl4jcbilihv" path="res://objects/rotatableSphere.tscn" id="2_uu6xs"] @@ -6,6 +6,8 @@ [ext_resource type="PackedScene" uid="uid://coowoxprnd50y" path="res://objects/Guitar.tscn" id="4_cm0pq"] [ext_resource type="PackedScene" uid="uid://dxnty4qdey1la" path="res://objects/horse.tscn" id="5_fos0i"] [ext_resource type="PackedScene" uid="uid://bggp3whsy8eji" path="res://objects/shark.tscn" id="6_3dxm6"] +[ext_resource type="PackedScene" uid="uid://bqyeo1mq0f35e" path="res://locations/stage.glb" id="7_lgr22"] +[ext_resource type="PackedScene" uid="uid://c2qnrd7mneksy" path="res://UI/MainUI.tscn" id="8_trn2v"] [sub_resource type="StandardMaterial3D" id="StandardMaterial3D_glv2v"] albedo_color = Color(0.356863, 1, 1, 1) @@ -21,7 +23,7 @@ radius = 200.0 [node name="Main" type="Node3D"] [node name="Camera3D" type="Camera3D" parent="."] -transform = Transform3D(-0.000329031, -0.999888, -0.0149358, 0.0220218, -0.0149394, 0.999646, -0.999757, 1.8631e-09, 0.0220242, -0.213372, 22.4613, 0) +transform = Transform3D(-0.000329031, -0.999888, -0.0149358, 0.0220218, -0.0149394, 0.999646, -0.999757, 1.63032e-09, 0.0220243, -0.213372, 102.096, 0) [node name="RayCast3D" type="RayCast3D" parent="Camera3D"] @@ -68,4 +70,9 @@ physics_material_override = null transform = Transform3D(0.146601, 0, 0.989196, 0, 1, 0, -0.989196, 0, 0.146601, -0.288846, 0.43723, -4.17931) [node name="Horse2" parent="." instance=ExtResource("6_3dxm6")] -transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 1.81449, 3.35932, 6.69674) +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 1.81449, -0.38006, 9.13093) + +[node name="stage" parent="." instance=ExtResource("7_lgr22")] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0.0488815, -0.757728, -1.82727) + +[node name="MainUi" parent="." instance=ExtResource("8_trn2v")] diff --git a/Player/Player.gd b/Player/Player.gd new file mode 100644 index 0000000..b14b477 --- /dev/null +++ b/Player/Player.gd @@ -0,0 +1,17 @@ +extends Node3D + +var playerObject + +func _ready() -> void: + GlobalVariables.player = self + playerObject = $Horse + +func change_object(object): + var objectPosition = playerObject.position + var objectRotation = playerObject.objectRotation + remove_child(playerObject) + + add_child(object) + object.position = objectPosition + object.rotation = objectRotation + playerObject = object diff --git a/Player/Player.gd.uid b/Player/Player.gd.uid new file mode 100644 index 0000000..494a9f1 --- /dev/null +++ b/Player/Player.gd.uid @@ -0,0 +1 @@ +uid://cayn4psbfrpj1 diff --git a/Player/Player.tscn b/Player/Player.tscn new file mode 100644 index 0000000..84fbbce --- /dev/null +++ b/Player/Player.tscn @@ -0,0 +1,9 @@ +[gd_scene load_steps=3 format=3 uid="uid://bubyfj3d0t4wr"] + +[ext_resource type="Script" uid="uid://cayn4psbfrpj1" path="res://Player/Player.gd" id="1_q3lat"] +[ext_resource type="PackedScene" uid="uid://dxnty4qdey1la" path="res://objects/horse.tscn" id="2_tok1r"] + +[node name="Player" type="Node3D"] +script = ExtResource("1_q3lat") + +[node name="Horse" parent="." instance=ExtResource("2_tok1r")] diff --git a/UI/MainUI.gd b/UI/MainUI.gd new file mode 100644 index 0000000..4016cb6 --- /dev/null +++ b/UI/MainUI.gd @@ -0,0 +1,7 @@ +extends CanvasLayer + +func _ready() -> void: + $ShapeSelect.visible = false + +func _on_shape_button_pressed() -> void: + $ShapeSelect.visible = true diff --git a/UI/MainUI.gd.uid b/UI/MainUI.gd.uid new file mode 100644 index 0000000..d343cb5 --- /dev/null +++ b/UI/MainUI.gd.uid @@ -0,0 +1 @@ +uid://dhy3kcnievdpq diff --git a/UI/MainUI.tscn b/UI/MainUI.tscn new file mode 100644 index 0000000..b1a87c9 --- /dev/null +++ b/UI/MainUI.tscn @@ -0,0 +1,33 @@ +[gd_scene load_steps=3 format=3 uid="uid://c2qnrd7mneksy"] + +[ext_resource type="Script" uid="uid://dhy3kcnievdpq" path="res://UI/MainUI.gd" id="1_xv1u1"] +[ext_resource type="Script" uid="uid://14odr4cov1sm" path="res://UI/ShapeSelectUI.gd" id="2_wwh41"] + +[node name="MainUi" type="CanvasLayer"] +script = ExtResource("1_xv1u1") + +[node name="ShapeButton" type="Button" parent="."] +offset_left = 869.0 +offset_top = 533.0 +offset_right = 1101.0 +offset_bottom = 616.0 +text = "Shape" + +[node name="ShapeSelect" type="PanelContainer" parent="."] +offset_left = 169.0 +offset_top = 52.0 +offset_right = 896.0 +offset_bottom = 516.0 +script = ExtResource("2_wwh41") + +[node name="ScrollContainer" type="ScrollContainer" parent="ShapeSelect"] +layout_mode = 2 + +[node name="ShapeButtons" type="HFlowContainer" parent="ShapeSelect/ScrollContainer"] +unique_name_in_owner = true +layout_mode = 2 +size_flags_horizontal = 3 +size_flags_vertical = 3 +theme_override_constants/h_separation = 100 + +[connection signal="pressed" from="ShapeButton" to="." method="_on_shape_button_pressed"] diff --git a/UI/SelectableShape/2dViewObject.tscn b/UI/SelectableShape/2dViewObject.tscn new file mode 100644 index 0000000..d836187 --- /dev/null +++ b/UI/SelectableShape/2dViewObject.tscn @@ -0,0 +1,29 @@ +[gd_scene load_steps=3 format=3 uid="uid://b3brrwp5525q2"] + +[ext_resource type="PackedScene" uid="uid://djppmw257tqac" path="res://models/horse.glb" id="1_ercyr"] +[ext_resource type="Script" uid="uid://ck5f4x6jx82bk" path="res://UI/SelectableShape/2d_view_object.gd" id="1_t7wwi"] + +[node name="2dViewObject" type="Node3D"] +script = ExtResource("1_t7wwi") + +[node name="horse" parent="." instance=ExtResource("1_ercyr")] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 3.1146, 0) + +[node name="CharacterBody3D" type="CharacterBody3D" parent="."] + +[node name="MeshInstance3D" type="MeshInstance3D" parent="CharacterBody3D"] + +[node name="OmniLight3D" type="OmniLight3D" parent="."] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 5.0143, 0) + +[node name="OmniLight3D2" type="OmniLight3D" parent="."] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 2.7226, -1.49836) + +[node name="OmniLight3D3" type="OmniLight3D" parent="."] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 4.39693, 1.80697) + +[node name="Camera3D" type="Camera3D" parent="."] +transform = Transform3D(-0.99875, -0.0266758, 0.0422761, -0.0149347, 0.966319, 0.256915, -0.0477056, 0.255962, -0.965509, 0.0691954, 3.33261, -8.46037) +fov = 43.6717 + +[editable path="horse"] diff --git a/UI/SelectableShape/2d_view_object.gd b/UI/SelectableShape/2d_view_object.gd new file mode 100644 index 0000000..f3cb99e --- /dev/null +++ b/UI/SelectableShape/2d_view_object.gd @@ -0,0 +1,12 @@ +extends Node3D + +var object + +func _ready() -> void: + object = $horse + +func change_object(newObject): + remove_child(object) + object.queue_free() + add_child(newObject) + object = newObject diff --git a/UI/SelectableShape/2d_view_object.gd.uid b/UI/SelectableShape/2d_view_object.gd.uid new file mode 100644 index 0000000..eb6def5 --- /dev/null +++ b/UI/SelectableShape/2d_view_object.gd.uid @@ -0,0 +1 @@ +uid://ck5f4x6jx82bk diff --git a/UI/SelectableShape/ShapeButton.gd b/UI/SelectableShape/ShapeButton.gd new file mode 100644 index 0000000..065c165 --- /dev/null +++ b/UI/SelectableShape/ShapeButton.gd @@ -0,0 +1,28 @@ +extends Button + +var rotationAmount +var rotationTimer = 0 + +func _ready() -> void: + set_rotation_amount() + +func set_location_offset(offset): + %ViewObject.global_position = offset + +func change_object(object): + %ViewObject.change_object(object) + +func _process(delta): + var texture = $SubViewport.get_texture() + $TextureRect.texture = texture + + rotationTimer -= delta + if rotationTimer <= 0: + if randi_range(0, 1) == 0: + set_rotation_amount() + rotationTimer = randf_range(0, 6) + + %ViewObject.object.rotation += rotationAmount * delta + +func set_rotation_amount(): + rotationAmount = Vector3(randf_range(0, 3), randf_range(0, 3), randf_range(0, 3)) diff --git a/UI/SelectableShape/ShapeButton.gd.uid b/UI/SelectableShape/ShapeButton.gd.uid new file mode 100644 index 0000000..efe0a0a --- /dev/null +++ b/UI/SelectableShape/ShapeButton.gd.uid @@ -0,0 +1 @@ +uid://ctan4kigqf4m4 diff --git a/UI/SelectableShape/ShapeButton.tscn b/UI/SelectableShape/ShapeButton.tscn new file mode 100644 index 0000000..8ced4a7 --- /dev/null +++ b/UI/SelectableShape/ShapeButton.tscn @@ -0,0 +1,26 @@ +[gd_scene load_steps=3 format=3 uid="uid://bx2ydrg7xfp3f"] + +[ext_resource type="Script" uid="uid://ctan4kigqf4m4" path="res://UI/SelectableShape/ShapeButton.gd" id="1_itppa"] +[ext_resource type="PackedScene" uid="uid://b3brrwp5525q2" path="res://UI/SelectableShape/2dViewObject.tscn" id="1_tvnn6"] + +[node name="ShapeButton" type="Button"] +custom_minimum_size = Vector2(200, 200) +offset_left = 395.0 +offset_top = 205.0 +offset_right = 642.0 +offset_bottom = 405.0 +script = ExtResource("1_itppa") + +[node name="SubViewport" type="SubViewport" parent="."] + +[node name="ViewObject" parent="SubViewport" instance=ExtResource("1_tvnn6")] +unique_name_in_owner = true + +[node name="TextureRect" type="TextureRect" parent="."] +layout_mode = 0 +offset_right = 200.0 +offset_bottom = 200.0 +expand_mode = 1 + +[editable path="SubViewport/ViewObject"] +[editable path="SubViewport/ViewObject/horse"] diff --git a/UI/ShapeSelectUI.gd b/UI/ShapeSelectUI.gd new file mode 100644 index 0000000..bc1a00e --- /dev/null +++ b/UI/ShapeSelectUI.gd @@ -0,0 +1,22 @@ +extends PanelContainer + +var shapeButtonScene = preload("res://UI/SelectableShape/ShapeButton.tscn") + +var initialShapes = [ + preload("res://models/horse.glb"), + preload("res://models/shark.glb") +] + +var offset = Vector3(0, 10000, 10000) + +func _ready() -> void: + setup_buttons() + +func setup_buttons(): + for shape in initialShapes: + var newButton = shapeButtonScene.instantiate() + var buttonObject = shape.instantiate() + %ShapeButtons.add_child(newButton) + newButton.set_location_offset(offset) + offset += Vector3(0, 10000, 10000) + newButton.change_object(buttonObject) diff --git a/UI/ShapeSelectUI.gd.uid b/UI/ShapeSelectUI.gd.uid new file mode 100644 index 0000000..619d4be --- /dev/null +++ b/UI/ShapeSelectUI.gd.uid @@ -0,0 +1 @@ +uid://14odr4cov1sm diff --git a/locations/stage.glb b/locations/stage.glb new file mode 100644 index 0000000..e761b1a Binary files /dev/null and b/locations/stage.glb differ